open-ice/BILL/HHPUP.ASM

1319 lines
27 KiB
NASM

.MLIB "HHMACS.LIB"
.FILE "HHPUP.ASM"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
*
*GET THE SYSTEM STUFF
*
.INCLUDE "HH.INC"
.INCLUDE "HHSTRING.H"
.INCLUDE "IMGTBL.GLO"
.include "HHPUP.TBL"
.include "hhpup.e"
.include "hhd.g"
.include "hhplayer.g"
.include "hhpall.g"
.include "hhc.g"
.include "HHPROC.G"
.include "hhtext.g"
.include "hhsnd.g"
.include "hhgame.g"
.include "HHRAM.G"
.include "hhcmos.g"
; end of include files
.BSS SUPER_GOALIE,16 ;GOALIE IS A BAD MOTHER
.BSS TOURN_MODE,16 ;TOURNAMENT MODE
.BSS BIG_PUCK,16 ;BIG MOTHERFUCKER
.BSS BABY_SIZE,16 ;GOO-GOO PLAYERS
.BSS UNLIM_TURBO,16 ;UNLIMITED TURBO
.BSS UNLIM_CHECK,16 ;UNLIMITED CHECK
.BSS COMP_ASS_OFF,16 ;COMPUTER ASSISTANCE OFF
.TEXT
.EVEN
;FIX LOD FILE AND REMOVE THESE!
.REF TH_MESS,S_MESS,HH_MESS,G_MESS,BH_MESS,BP_MESS,TM_MESS
PL1256_LIST_TABLE
.long PLAYER_1_BLOCK
.long PLAYER_2_BLOCK
.long PLAYER_5_BLOCK
.long PLAYER_6_BLOCK
CIRCLE_CLOCKWISE
.WORD M_SW_U
.WORD M_SW_U|M_SW_R
.WORD M_SW_R
.WORD M_SW_D|M_SW_R
.WORD M_SW_D
.WORD M_SW_D|M_SW_L
.WORD M_SW_L
.WORD M_SW_U|M_SW_L
.WORD M_SW_U
CIRCLE_COUNTER_CLOCKWISE
.WORD M_SW_U
.WORD M_SW_U|M_SW_L
.WORD M_SW_L
.WORD M_SW_D|M_SW_L
.WORD M_SW_D
.WORD M_SW_D|M_SW_R
.WORD M_SW_R
.WORD M_SW_U|M_SW_R
.WORD M_SW_U
**************************************************************************
* *
* POWERUPS ON TONIGHT'S GAME SCREEN VALID FROM HELMETS TILTING *
* TIL SCREEN GOES WHITE *
* *
**************************************************************************
BIGHEAD_SEQ_TABLE
.WORD M_SW_U|M_SW_P|M_SW_T
.WORD -1
.LONG SET_BIGHEAD
HUGEHEAD_SEQ_TABLE
.WORD M_SW_U|M_SW_S|M_SW_P
.WORD M_SW_U
.WORD M_SW_U|M_SW_S|M_SW_P
.WORD M_SW_U
.WORD M_SW_U|M_SW_S|M_SW_P
.WORD M_SW_U
.WORD -1
.LONG SET_HUGEHEAD
TINYHEAD_SEQ_TABLE
.WORD M_SW_U|M_SW_S|M_SW_P|M_SW_T
.WORD M_SW_U|M_SW_T
.WORD M_SW_U|M_SW_S|M_SW_P|M_SW_T
.WORD M_SW_U|M_SW_T
.WORD M_SW_U|M_SW_S|M_SW_P|M_SW_T
.WORD M_SW_U|M_SW_T
.WORD -1
.LONG SET_TINYHEAD
NORMHEAD_SEQ_TABLE
.WORD M_SW_D|M_SW_S
.WORD -1
.LONG SET_NORMHEAD
GBIGHEAD_SEQ_TABLE
.WORD M_SW_U|M_SW_P
.WORD M_SW_U|M_SW_R|M_SW_P
.WORD M_SW_R|M_SW_P
.WORD M_SW_D|M_SW_R|M_SW_P
.WORD M_SW_D|M_SW_P
.WORD M_SW_D|M_SW_L|M_SW_P
.WORD M_SW_L|M_SW_P
.WORD M_SW_U|M_SW_L|M_SW_P
.WORD M_SW_U|M_SW_P
.WORD -1
.LONG SET_GBIGHEAD
GHUGEHEAD_SEQ_TABLE
.WORD M_SW_U|M_SW_S
.WORD M_SW_U|M_SW_R|M_SW_S
.WORD M_SW_R|M_SW_S
.WORD M_SW_D|M_SW_R|M_SW_S
.WORD M_SW_D|M_SW_S
.WORD M_SW_D|M_SW_L|M_SW_S
.WORD M_SW_L|M_SW_S
.WORD M_SW_U|M_SW_L|M_SW_S
.WORD M_SW_U|M_SW_S
.WORD M_SW_U|M_SW_R|M_SW_S
.WORD M_SW_R|M_SW_S
.WORD M_SW_D|M_SW_R|M_SW_S
.WORD M_SW_D|M_SW_S
.WORD M_SW_D|M_SW_L|M_SW_S
.WORD M_SW_L|M_SW_S
.WORD M_SW_U|M_SW_L|M_SW_S
.WORD M_SW_U|M_SW_S
.WORD -1
.LONG SET_GHUGEHEAD
GTINYHEAD_SEQ_TABLE
.WORD M_SW_R
.WORD 0
.WORD M_SW_D
.WORD 0
.WORD M_SW_R
.WORD 0
.WORD M_SW_S
.WORD -1
.LONG SET_GTINYHEAD
GNORMHEAD_SEQ_TABLE
.WORD M_SW_L
.WORD 0
.WORD M_SW_L
.WORD 0
.WORD M_SW_L
.WORD 0
.WORD M_SW_T
.WORD -1
.LONG SET_GNORMHEAD
BIGPUCK_SEQ_TABLE
.WORD M_SW_U
.WORD 0
.WORD M_SW_U
.WORD 0
.WORD M_SW_D
.WORD 0
.WORD M_SW_D
.WORD 0
.WORD M_SW_T
.WORD -1
.LONG SET_BIGPUCK
BABYSIZE_SEQ_TABLE
.WORD M_SW_P
.WORD 0
.WORD M_SW_P
.WORD 0
.WORD M_SW_T
.WORD 0
.WORD M_SW_S
.WORD 0
.WORD M_SW_P
.WORD -1
.LONG SET_BABYSIZE
FORCE_TINYHEAD_SEQ_TABLE
.WORD M_SW_L|M_SW_R
.WORD -1
.LONG SET_FORCE_TINYHEAD
**************************************************************************
* *
* POWERUPS ON GAME START VALID FROM GAME CREATION TIL POWER-UP REPORT *
* *
**************************************************************************
SUPERGOALIE_SEQ_TABLE
.WORD M_SW_L|M_SW_T
.WORD M_SW_T
.WORD M_SW_L|M_SW_T
.WORD M_SW_T
.WORD M_SW_R|M_SW_T
.WORD M_SW_T
.WORD M_SW_R|M_SW_T
.WORD -1
.LONG SET_SUPERGOALIE
TOURNMODE_SEQ_TABLE
.WORD M_SW_U|M_SW_S
.WORD M_SW_R|M_SW_S
.WORD M_SW_D|M_SW_S
.WORD M_SW_L|M_SW_S
.WORD M_SW_U|M_SW_S
.WORD -1
.LONG SET_TOURNMODE
COMP_ASS_OFF_SEQ_TABLE
.WORD M_SW_U|M_SW_T
.WORD -1
.LONG SET_COMP_ASS_OFF
UNLIM_TURBO_SEQ_TABLE
.WORD M_SW_U|M_SW_S|M_SW_P
.WORD M_SW_R|M_SW_S|M_SW_P
.WORD M_SW_D|M_SW_S|M_SW_P
.WORD M_SW_L|M_SW_S|M_SW_P
.WORD M_SW_U|M_SW_S|M_SW_P
.WORD M_SW_R|M_SW_S|M_SW_P
.WORD M_SW_D|M_SW_S|M_SW_P
.WORD M_SW_L|M_SW_S|M_SW_P
.WORD M_SW_U|M_SW_S|M_SW_P
.WORD -1
.LONG SET_UNLIM_TURBO
UNLIM_CHECK_SEQ_TABLE
.WORD M_SW_U|M_SW_P
.WORD M_SW_P
.WORD M_SW_U|M_SW_P
.WORD M_SW_P
.WORD M_SW_D|M_SW_P
.WORD M_SW_P
.WORD M_SW_D|M_SW_P
.WORD -1
.LONG SET_UNLIM_CHECK
INC_SPEED_TABLE
.WORD M_SW_U
.WORD -1
.LONG SET_INC_SPEED
INC_SHOOT_TABLE
.WORD M_SW_S
.WORD -1
.LONG SET_INC_SHOOT
INC_PASS_TABLE
.WORD M_SW_P
.WORD -1
.LONG SET_INC_PASS
INC_CHECK_TABLE
.WORD M_SW_L
.WORD -1
.LONG SET_INC_CHECK
INC_PUCK_TABLE
.WORD M_SW_R
.WORD -1
.LONG SET_INC_PUCK
FAST_TURBO_RECOVERY_TABLE
.WORD M_SW_T
.WORD -1
.LONG SET_FAST_TURBO_RECOVERY
**************************************************************************
* *
* START_POWERUP_PROC *
* *
**************************************************************************
START_TG_POWERUP_PROC
CLR A14
MOVE A14,@BIG_PUCK,W
MOVE A14,@BABY_SIZE,W
MOVE A14,@UNLIM_TURBO,W
MOVE A14,@UNLIM_CHECK,W
MOVE A14,@SUPER_GOALIE,W
MOVK ADJTOURMODE,A0
CALLA GET_ADJ ;SET TOURNAMENT MODE
NEG A0
MOVE A0,@TOURN_MODE,W
; JRN STGPP_SNAPSHOTS ;BR=SKIP SEQUENCES
JRN STGPP_DONE ;BR=SKIP SEQUENCES
MOVK 3,A9
MOVI TG_SEQ_PUP_TABLE,A10
STGPP_LUPE
CREATE PID_POWERUP,POWERUP_SEQUENCE_PROC
DEC A9
JRNN STGPP_LUPE ;BR=NOT DONE
;STGPP_SNAPSHOTS
; MOVI TG_POWERUP_PROC_TABLE,A11
; CREATE PID_POWERUP,POWERUP_SNAPSHOT_PROC
STGPP_DONE
RETS
**************************************************************************
* *
* START_FACEOFF_POWERUP_PROC *
* *
**************************************************************************
START_FACEOFF_POWERUP_PROC
PUSH A1
MOVK 3,A9
MOVI FACEOFF_SEQ_PUP_TABLE,A10
SFPP_LUPE
CREATE PID_POWERUP,POWERUP_SEQUENCE_PROC
DEC A9
JRNN SFPP_LUPE ;BR=NOT DONE
PULLQ A1
RETS
**************************************************************************
* *
* POWERUP_SEQUENCE_PROC *
* *
* PASS: *
* A9 = PLAYER NUMBER - 1 *
* A10 = SEQUENCE TABLE ADDRESS *
* *
**************************************************************************
PLAYER_SWMASK EQU M_SW_U|M_SW_D|M_SW_L|M_SW_R|M_SW_S|M_SW_P|M_SW_T
PPUP_TABLE EQU PDATA ;UHL TABLE ADDRESS
PUP_SUBR_OFFSET EQU 010H ;SUBROUTINE OFFSET
POWERUP_SEQUENCE_PROC
MOVE @PLAYER_BITS,A14,W
BTST A9,A14
JRNZ PSP_START ;BR=PLAYER NOT ACTIVE
SLEEP 1
JRUC POWERUP_SEQUENCE_PROC
PSP_START
MOVE A10,*A13(PPUP_TABLE),L
MOVE A9,A10
SLL 3,A10
NEG A10
PSP_LUPE
MOVE @HELP_WINDOW_COUNT,A14,W
JRNZ PSP_NAP ;BR=HELP WINDOWS ON SCREEN
MOVE @SWITCH,A0,L
NOT A0
SRL A10,A0
ANDI PLAYER_SWMASK,A0
JRZ PSP_NAP ;BR=NO SWITCHES
MOVE *A13(PPUP_TABLE),A1,L
PSP_SEQ_LUPE
MOVE *A1+,A8,L
JRZ PSP_NAP ;BR=PSP_NAP
MOVE *A8+,A14,W
XOR A0,A14
JRZ PSP_CHECK_SEQ ;BR=SEQUENCE START
JRUC PSP_SEQ_LUPE
PSP_NAP
SLEEP 1
JRUC PSP_LUPE
PSP_CHECK_SEQ
CREATE PID_POWERUP,PSP_SEQ
JRUC PSP_NAP
; SLEEP 1
PSP_SEQ
MOVK 15,A11
PSP_CS_LUPE
MOVE @SWITCH,A0,L
NOT A0
SRL A10,A0
ANDI PLAYER_SWMASK,A0
; JRZ PSP_CS_NAP ;BR=NO SWITCHES
MOVE *A8,A14,W
JRN PSP_POWERUP ;BR=POWERUP MOTHERFUCKER!
XOR A0,A14
JRNZ PSP_CS_NAP ;BR=NOT THE NEXT ONE
ADDK 010H,A8
MOVE *A8,A14,W
JRN PSP_POWERUP ;BR=POWERUP MOTHERFUCKER!
MOVK 16,A11 ;RESET LUPE
PSP_CS_NAP
SLEEP 1
DSJ A11,PSP_CS_LUPE
DIE
; JRUC PSP_NAP
PSP_POWERUP
MOVE *A8(PUP_SUBR_OFFSET),A14,L
CALL A14
DIE
; JRUC PSP_NAP
**************************************************************************
* *
* POWERUP SEQUENCE ROUTINES CANNOT TRASH: *
* *
* A9 = PLAYER NUMBER - 1 *
* A10 = PLAYER SWITCH RIGHT SHIFT *
* *
**************************************************************************
TG_SEQ_PUP_TABLE
.LONG BIGHEAD_SEQ_TABLE,HUGEHEAD_SEQ_TABLE
.LONG TINYHEAD_SEQ_TABLE,NORMHEAD_SEQ_TABLE
.LONG GBIGHEAD_SEQ_TABLE,GHUGEHEAD_SEQ_TABLE
.LONG GTINYHEAD_SEQ_TABLE,GNORMHEAD_SEQ_TABLE
.LONG BIGPUCK_SEQ_TABLE
.LONG BABYSIZE_SEQ_TABLE
.LONG 0
.LONG FORCE_TINYHEAD_SEQ_TABLE
.LONG 0
FACEOFF_SEQ_PUP_TABLE
.LONG 0
.LONG SUPERGOALIE_SEQ_TABLE,TOURNMODE_SEQ_TABLE
.LONG COMP_ASS_OFF_SEQ_TABLE
.LONG UNLIM_TURBO_SEQ_TABLE,UNLIM_CHECK_SEQ_TABLE
.LONG INC_SPEED_TABLE,INC_SHOOT_TABLE,INC_PASS_TABLE
.LONG INC_CHECK_TABLE,INC_PUCK_TABLE,FAST_TURBO_RECOVERY_TABLE
.LONG 0
**************************************************************************
SET_SUPERGOALIE
MOVE @TOURN_MODE,A14,W
JRNZ S_SG_DONE ;BR=TOURNAMENT MODE POWERED-UP
MOVE @SUPER_GOALIE,A14,W
JRNZ S_SG_DONE ;BR=ALREADY SET
MOVK 1,A14
MOVE A14,@SUPER_GOALIE,W
CALLR POWERUP_SOUND
S_SG_DONE
RETS
**************************************************************************
SET_TOURNMODE
MOVE @TOURN_MODE,A14,W
JRNZ S_TM_DONE ;BR=ALREADY SET
CALLR CHECK_TOURNMODE_VALID
JRZ S_TM_DONE ;BR=NOPE
MOVK 1,A14
MOVE A14,@TOURN_MODE,W
CLR A14
MOVE A14,@BABY_SIZE,W
MOVE A14,@SUPER_GOALIE,W
MOVE A14,@UNLIM_TURBO,W
MOVE A14,@UNLIM_CHECK,W
MOVK 1,A14
MOVE A14,@COMP_ASS_OFF,W
;DISABLE INDIVIDUAL PLAYER POWER-UPS IN POF_PUP_FLAGS
CALLR POWERUP_SOUND
S_TM_DONE
RETS
**************************************************************************
SET_COMP_ASS_OFF
MOVE @COMP_ASS_OFF,A14,W
JRNZ S_CAO_DONE ;BR=ALREADY SET
MOVK 1,A14
MOVE A14,@COMP_ASS_OFF,W
CALLR POWERUP_SOUND
S_CAO_DONE
RETS
**************************************************************************
SET_UNLIM_TURBO
MOVE @TOURN_MODE,A14,W
JRNZ S_UT_DONE ;BR=TOURNAMENT MODE POWERED-UP
MOVE @UNLIM_TURBO,A14,W
JRNZ S_UT_DONE ;BR=ALREADY SET
MOVK 1,A14
MOVE A14,@UNLIM_TURBO,W
CLR A14
MOVE A14,@UNLIM_CHECK,W
CALLR POWERUP_SOUND
S_UT_DONE
RETS
**************************************************************************
SET_UNLIM_CHECK
MOVE @TOURN_MODE,A14,W
JRNZ S_UC_DONE ;BR=TOURNAMENT MODE POWERED-UP
MOVE @UNLIM_CHECK,A14,W
JRNZ S_UC_DONE ;BR=ALREADY SET
MOVK 1,A14
MOVE A14,@UNLIM_CHECK,W
CLR A14
MOVE A14,@UNLIM_TURBO,W
CALLR POWERUP_SOUND
S_UC_DONE
RETS
**************************************************************************
SET_FORCE_TINYHEAD
MOVE @TOURN_MODE,A14,W
JRNZ S_FT_DONE ;BR=TOURNAMENT MODE POWERED-UP
MOVE A9,A6
SLL 5,A6
ADDI PL1256_LIST_TABLE,A6
MOVE *A6,A6,L
MOVE *A6(POF_PUP_FLAGS),A0,W
BTST B_PUP_FORCETINY,A0
JRNZ S_FT_DONE ;BR=ALREADY FUCKED 'EM OVER
ORI M_PUP_FORCETINY,A0
MOVE A0,*A6(POF_PUP_FLAGS),W
MOVK 1,A0
CMPI 1,A9
JRGT S_FT_FUCKEM ;BR=FUCK OVER THE LEFT TEAM
MOVK 5,A0
S_FT_FUCKEM
CALLR S_FT_TINYHEAD
INC A0
CALLR S_FT_TINYHEAD
ADDK 2,A0
CALLR S_FT_TINYHEAD
CALLR POWERUP_SOUND
S_FT_DONE
RETS
S_FT_TINYHEAD
GBLOCK A0,A1
MOVE *A1(POF_PUP_FLAGS),A14,W
ANDNI M_PUP_HEADS,A14
ORI M_PUP_TINYHEAD,A14
MOVE A14,*A1(POF_PUP_FLAGS),W
RETS
**************************************************************************
SET_INC_SPEED
MOVI M_PUP_SPEED,A0
JRUC SET_INC
SET_INC_SHOOT
MOVI M_PUP_SHOOT,A0
JRUC SET_INC
SET_INC_PASS
MOVI M_PUP_PASS,A0
JRUC SET_INC
SET_INC_CHECK
MOVI M_PUP_CHECK,A0
JRUC SET_INC
SET_INC_PUCK
MOVI M_PUP_PUCK,A0
JRUC SET_INC
SET_FAST_TURBO_RECOVERY
MOVI M_PUP_TURBO,A0
SET_INC
MOVE @TOURN_MODE,A14,W
JRNZ S_I_DONE ;BR=TOURNAMENT MODE POWERED-UP
MOVE A9,A6
SLL 5,A6
ADDI PL1256_LIST_TABLE,A6
MOVE *A6,A6,L
MOVE *A6(POF_PUP_FLAGS),A1,W
BTST B_PUP_FORCETINY,A1
JRNZ S_I_DONE ;BR=NOT ALLOWED
MOVE A1,A14
AND A0,A14
JRNZ S_I_DONE ;BR=ALREADY SET
ANDNI M_PUP_ATTR,A1
OR A0,A1
MOVE A1,*A6(POF_PUP_FLAGS),W
CALLR POWERUP_SOUND
S_I_DONE
RETS
**************************************************************************
SET_NORMHEAD
MOVK M_PUP_NORMHEAD,A0
JRUC HEAD_POWERUP
SET_TINYHEAD
MOVK M_PUP_TINYHEAD,A0
JRUC HEAD_POWERUP
SET_HUGEHEAD
MOVK M_PUP_HUGEHEAD,A0
JRUC HEAD_POWERUP
SET_BIGHEAD
MOVK M_PUP_BIGHEAD,A0
HEAD_POWERUP
MOVE A9,A6
SLL 5,A6
ADDI PL1256_LIST_TABLE,A6
MOVE *A6,A6,L
H_PUP_GO
MOVE *A6(POF_PUP_FLAGS),A1,W
MOVE A1,A14
AND A0,A14
JRNZ H_PUP_DONE ;BR=ALREADY SET
ANDNI M_PUP_HEADS,A1
OR A0,A1
MOVE A1,*A6(POF_PUP_FLAGS),W
CALLR POWERUP_SOUND
H_PUP_DONE
RETS
**************************************************************************
SET_GNORMHEAD
MOVK M_PUP_NORMHEAD,A0
JRUC GOALIE_HEAD_POWERUP
SET_GTINYHEAD
MOVK M_PUP_TINYHEAD,A0
JRUC GOALIE_HEAD_POWERUP
SET_GHUGEHEAD
MOVK M_PUP_HUGEHEAD,A0
JRUC GOALIE_HEAD_POWERUP
SET_GBIGHEAD
MOVK M_PUP_BIGHEAD,A0
GOALIE_HEAD_POWERUP
MOVI PLAYER_4_BLOCK,A6
KITN 4
JREQ GBP_4P ;BR=4 PLAYER KIT
CMPI 3,A9
JRNE H_PUP_GO ;BR=NOT PLAYER 2(4)
MOVI PLAYER_8_BLOCK,A6
JRUC H_PUP_GO
GBP_4P
CMPI 2,A9
JRLT H_PUP_GO ;BR=LEFT GOALIE
MOVI PLAYER_8_BLOCK,A6
JRUC H_PUP_GO
**************************************************************************
SET_BIGPUCK
MOVE @BIG_PUCK,A14,W
JRNZ SBP_PUP_DONE ;BR=ALREADY BIG
MOVK 1,A14
MOVE A14,@BIG_PUCK,W
CALLR POWERUP_SOUND
SBP_PUP_DONE
RETS
**************************************************************************
SET_BABYSIZE
MOVE @TOURN_MODE,A14,W
JRNZ SBS_PUP_DONE ;BR=DIPSWITCH ON
MOVE @BABY_SIZE,A14,W
JRNZ SBS_PUP_DONE ;BR=ALREADY BIG
MOVK 1,A14
MOVE A14,@BABY_SIZE,W
CALLR POWERUP_SOUND
SBS_PUP_DONE
RETS
**************************************************************************
* *
* POWERUP_SOUND *
* *
**************************************************************************
POWERUP_SOUND
PUSH A4
MOVI S_SIDE_TOGGLE,A4
; MOVI S_P1_POWERUP,A4
CALLA do_sound
PULLQ A4
RETS
**************************************************************************
* *
* REPORT_POWERUPS *
* *
**************************************************************************
REPORT_POWERUPS
MOVI PID_POWERUP,A0
CALLA KILLPROC_ALL
CLR A9
MOVI TEXTZVAL,A2
MOVE @PLAYER_BITS,A3,W
MOVK 3,A7
MOVI dpl_lst,A5
RP_LUPE
BTST A7,A3
JRZ RP_NEXT ;BR=PLAYER NOT ACTIVE
MOVE *A5,A6,L
MOVE *A6(POF_PUP_FLAGS),A14,W
CALLR RP_REPORT_ATTRIBUTES
ANDI M_PUP_BIGHEAD|M_PUP_HUGEHEAD|M_PUP_TINYHEAD,A14
JRZ RP_NEXT ;BR=NO HEAD POWERUP
MOVI REPORT_INIT,B0
CALLR RP_MAKE_REPORT
RP_NEXT
ADDK 020H,A5
DEC A7
JRNN RP_LUPE
MOVE A3,A14
ANDI 011B,A14
JRZ RP_CHECK_RIGHT_GOALIE ;BR=TEAM NOT ACTIVE
MOVK 4,A7
MOVI PLAYER_4_BLOCK,A6
MOVE *A6(POF_PUP_FLAGS),A14,W
ANDI M_PUP_BIGHEAD|M_PUP_HUGEHEAD|M_PUP_TINYHEAD,A14
JRZ RP_CHECK_RIGHT_GOALIE ;BR=NO HEAD POWERUP
MOVI REPORT_INIT,B0
CALLR RP_MAKE_REPORT
MOVE A8,A8
JRZ RP_CHECK_RIGHT_GOALIE ;BR=DOESN'T EXIST
MOVI REPORT_TIMEOUT_ANIM,A1
CALLA STRT_ANIM
MOVI REPORT_GOALIE_INIT,B0
CALLA EASYMAKE
MOVI LEFT_GOALIE_REPORT_YX,A1
CALLA SET_SCRNOBJ
MOVI BLUTXT5P,A0
CALLA CHANGE_PAL
CALLA INSERT_OBJ
RP_CHECK_RIGHT_GOALIE
MOVE A3,A14
ANDI 01100B,A14
JRZ RP_MODES ;BR=TEAM NOT ACTIVE
MOVK 5,A7
MOVI PLAYER_8_BLOCK,A6
MOVE *A6(POF_PUP_FLAGS),A14,W
ANDI M_PUP_BIGHEAD|M_PUP_HUGEHEAD|M_PUP_TINYHEAD,A14
JRZ RP_MODES ;BR=NO HEAD POWERUP
MOVI REPORT_INIT,B0
CALLR RP_MAKE_REPORT
MOVE A8,A8
JRZ RP_MODES ;BR=DOESN'T EXIST
MOVI REPORT_TIMEOUT_ANIM,A1
CALLA STRT_ANIM
MOVI REPORT_GOALIE_INIT,B0
CALLA EASYMAKE
MOVI RGHT_GOALIE_REPORT_YX,A1
CALLA SET_SCRNOBJ
MOVI REDTXT3P,A0
CALLA CHANGE_PAL
CALLA INSERT_OBJ
RP_MODES
MOVI [154,199],A3
MOVE @BIG_PUCK,A14,W
JRZ RP_CHECK_BS ;BR=NORMAL PUCK
MOVI BP_MESS,A2
CALLR REPORT_SINGLE_POWERUP
RP_CHECK_BS
MOVE @BABY_SIZE,A14,W
JRZ RP_CHECK_UT ;BR=NORMAL SIZE
MOVI BS_MESS,A2
ADDI [13,0],A3
CALLR REPORT_SINGLE_POWERUP
RP_CHECK_UT
MOVE @UNLIM_TURBO,A14,W
JRZ RP_CHECK_UC ;BR=NOPE
MOVI UT_MESS,A2
ADDI [13,0],A3
CALLR REPORT_SINGLE_POWERUP
RP_CHECK_UC
MOVE @UNLIM_CHECK,A14,W
JRZ RP_CHECK_SG ;BR=NOPE
MOVI UC_MESS,A2
ADDI [13,0],A3
CALLR REPORT_SINGLE_POWERUP
RP_CHECK_SG
MOVE @SUPER_GOALIE,A14,W
JRZ RP_CHECK_TM ;BR=DUMB ASS GOALIE
PUSH A3
MOVI REPORT_SUPER_GOALIE_INIT,B0
CALLA MULTIMAKE
JRZ RP_CHECK_TM ;BR=COULDN'T DO IT
PULLQ A3
ADDI [13,0],A3
MOVE A3,A1
MOVI [13,19],A14
ADDXY A14,A1
MOVI TEXTZVAL,A2
CALLA SET_SCRNOBJ
MOVI ORGTXT1P,A0
CALLA CHANGE_PAL_MULTI
CALLA INSERT_OBJ
RP_CHECK_TM
MOVE @TOURN_MODE,A14,W
JRZ RP_CHECK_CAO ;BR=NOPE
MOVI TM_MESS,A2
ADDI [13,0],A3
CALLR REPORT_SINGLE_POWERUP
RP_CHECK_CAO
MOVE @COMP_ASS_OFF,A14,W
JRZ RP_SOUND ;BR=NOPE
MOVI CAO_MESS,A2
ADDI [13,0],A3
CALLR REPORT_SINGLE_POWERUP
RP_SOUND
MOVE A9,A9
JRZ RP_DONE ;BR=NONE
MOVI S_POWERUP_REPORT,A4
CALLA do_sound
RP_DONE
RETS
**************************************************************************
* *
* REPORT_SINGLE_POWERUP *
* *
* PASS: *
* A2 = POWER-UP IMAGE *
* A3 = [Y,X] SCREEN POSITION *
* A9 = POWER-UP COUNT *
* *
* RETURN: *
* A8 = OBJECT *
* A9 = POWER-UP COUNT *
* *
**************************************************************************
REPORT_SINGLE_POWERUP
MOVI REPORT_BIGPUCK_INIT,B0
CALLA EASYMAKE
JRZ RSP_ABORT ;BR=COULDN'T DO IT
MOVE A2,A1
MOVI DMAWNZ,A4
CALLA ANI
MOVE A3,A1
MOVI TEXTZVAL,A2
CALLA SET_SCRNOBJ
MOVI ORGTXT1P,A0
CALLA CHANGE_PAL
CALLA INSERT_OBJ
INC A9 ;ACKNOWLEDGE POWERUP
RSP_ABORT
RETS
**************************************************************************
* *
* RP_MAKE_REPORT *
* *
* PASS: *
* A2 = Z POSITION *
* A7 = PLAYER NUMBER - 1 *
* A14 = POF_PUP_FLAGS *
* A9 = POWER-UP COUNT *
* *
* RETURN: *
* A8 = OBJECT *
* A9 = POWER-UP COUNT *
* *
**************************************************************************
RP_MAKE_REPORT
MMTM SP,A3,A5
MOVE A14,A6
LMO A6,A6
SUBK 31,A6
ABS A6
SLL 5,A6
MOVI REPORT_MESS_TABLE,A3
MOVI HEAD_REPORT_YX_TABLE,A5
CALLR MAKE_REPORT_OBJ
INC A9 ;ACKNOWLEDGE POWERUP
MMFM SP,A3,A5
RETS
**************************************************************************
* *
* RP_REPORT_ATTRIBUTES *
* *
* PASS: *
* A2 = Z POSITION *
* A7 = PLAYER NUMBER - 1 *
* A14 = POF_PUP_FLAGS *
* A9 = POWER-UP COUNT *
* *
* RETURN: *
* A8 = OBJECT *
* A9 = POWER-UP COUNT *
* *
**************************************************************************
RP_REPORT_ATTRIBUTES
MMTM SP,A3,A5,A14
MOVE A14,A6
SRL 4,A6
JRZ RP_RA_DONE ;BR=NONE
LMO A6,A6
SUBK 31,A6
ABS A6
SLL 5,A6
MOVI ATTRIBUTE_MESS_TABLE,A3
MOVI ATTRIBUTE_YX_TABLE,A5
CALLR MAKE_REPORT_OBJ
; MOVI REPORT_TIMEOUT_ANIM,A1
; CALLA STRT_ANIM
INC A9 ;ACKNOWLEDGE POWERUP
RP_RA_DONE
MMFM SP,A3,A5,A14
RETS
**************************************************************************
* *
* MAKE_REPORT_OBJ *
* *
* PASS: *
* A2 = Z POSITION *
* A3 = MESSAGE TABLE *
* A5 = [Y,X] TABLE *
* A6 = TABLE OFFSET *
* A7 = PLAYER NUMBER -1 *
* *
* RETURN: *
* A8 = OBJECT *
* *
**************************************************************************
MAKE_REPORT_OBJ
MOVI REPORT_INIT,B0
CALLA EASYMAKE
JRZ MRO_ABORT
ADD A3,A6
MOVE *A6,A1,L
MOVI DMAWNZ,A4
CALLA ANI
MOVE A7,A6
SLL 5,A6
MOVE A6,A1
ADD A5,A1
MOVE *A1,A1,L
CALLA SET_SCRNOBJ
ADDI REPORT_PAL_TABLE,A6
MOVE *A6,A0,L
CALLA CHANGE_PAL
CALLA INSERT_OBJ
MRO_ABORT
RETS
ATTRIBUTE_MESS_TABLE
.LONG FTH_MESS,IS_MESS,ISH_MESS,IP_MESS,IC_MESS,IPH_MESS,FTR_MESS
ATTRIBUTE_YX_TABLE
.LONG [230,50],[230,150],[230,250],[230,350]
REPORT_MESS_TABLE
.LONG BH_MESS,HH_MESS,TH_MESS
LEFT_GOALIE_REPORT_YX EQU [60,50]
RGHT_GOALIE_REPORT_YX EQU [60,350]
HEAD_REPORT_YX_TABLE
.LONG [130,70]
.LONG [145,140]
.LONG [145,260]
.LONG [130,330]
.LONG LEFT_GOALIE_REPORT_YX
.LONG RGHT_GOALIE_REPORT_YX
REPORT_PAL_TABLE
.LONG PRPTXT5P,BLUTXT5P,GLDTXT5P,GRNTXT5P,BLUTXT5P,REDTXT3P
REPORT_INIT
.long BH_MESS
.word DMAWNZ,M_SCRNOBJ|M_NOVEL
.word OM_OID|OM_ANIM
.word OID_JUNK
.LONG REPORT_ANIM
REPORT_ANIM
LWL 1,3|AFUNC,OBJ_CONST
LWL 1,3|AFUNC,OBJ_ON
LWL 1,3|AFUNC,OBJ_CONST
LWL 1,3|AFUNC,OBJ_ON
LWL 1,3|AFUNC,OBJ_CONST
LWL 1,3|AFUNC,OBJ_ON
LWL 1,3|AFUNC,OBJ_CONST
LWL 1,3|AFUNC,OBJ_ON
LWL 1,3|AFUNC,OBJ_CONST
LWL 1,3|AFUNC,OBJ_ON
LW 1,60
LWL 1,1|AFUNC,DELETE_OBJ
REPORT_GOALIE_INIT
.long G_MESS
.word DMAWNZ,M_SCRNOBJ|M_NOVEL
.word OM_OID|OM_ANIM
.word OID_JUNK
.LONG REPORT_TIMEOUT_ANIM
REPORT_TIMEOUT_ANIM
LW 1,90
LWL 1,1|AFUNC,DELETE_OBJ
REPORT_BIGPUCK_INIT
.long BP_MESS
.word DMAWNZ,M_SCRNOBJ|M_NOVEL
.word OM_OID|OM_ANIM
.word OID_JUNK
.LONG REPORT_TIMEOUT_ANIM
REPORT_SUPER_GOALIE_INIT
.byte 2, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
.long GFONT10CP ;IMGPAL
.word OID_JUNK, 0 ;OID, GLOBAL_OPTIONS
* .long IMG
* .word OCTRL, OFLAGS, OZOFF
* .word OPTIONS
LWWWW S_MESS, DMAWNZ, M_SCRNOBJ|M_NOVEL, 0, OM_ANIM
.LONG REPORT_TIMEOUT_ANIM
LWWWW G_MESS, DMAWNZ, M_SCRNOBJ|M_NOVEL, 0, OM_PRVANIM
**************************************************************************
* *
* CHECK_TOURNMODE_VALID - CHECK IF TOURNAMENT MODE IS VALID *
* *
* PASS: *
* NUTIN' *
* RETURN: *
* Z CLR IF VALID *
* *
**************************************************************************
CHECK_TOURNMODE_VALID
MMTM SP,A0
MOVE @PLAYER_BITS,A0,W
MOVE A0,A14
ANDI 01100B,A14
JRZ CTV_DONE ;BR=RIGHT TEAM NOT ACTIVE
ANDI 011B,A0 ;CHECK LEFT TEAM
CTV_DONE
MMFM SP,A0
RETS
.END
;BIGHEAD_SWPUP EQU M_SW_U|M_SW_P|M_SW_T
;HUGEHEAD_SWPUP EQU M_SW_L|M_SW_S|M_SW_T
;;TINYHEAD_SWPUP EQU M_SW_R|M_SW_S|M_SW_P
;NORMHEAD_SWPUP EQU M_SW_D|M_SW_S|M_SW_P|M_SW_T
;
;GOALIE_BIGHEAD_SWPUP EQU M_SW_D|M_SW_S
;GOALIE_HUGEHEAD_SWPUP EQU M_SW_U|M_SW_S|M_SW_T
;;GOALIE_TINYHEAD_SWPUP EQU M_SW_R|M_SW_S
;GOALIE_NORMHEAD_SWPUP EQU M_SW_U|M_SW_S|M_SW_P|M_SW_T
;
;;BIGPUCK_SWPUP EQU M_SW_U|M_SW_L|M_SW_P
;
;;BABYSIZE_SWPUP EQU M_SW_D|M_SW_T
;
;**************************************************************************
;* *
;* POWERUP_SNAPSHOT_PROC - CHECK FOR "SNAPSHOT" POWER UPS *
;* *
;* PASS: *
;* NUTIN' *
;* RETURN: *
;* NUTIN' *
;* *
;**************************************************************************
;
;POWERUP_SNAPSHOT_PROC
;PSNP_LUPE
; MOVE A11,A4
;PSNP_NEXT_POWERUP
; MOVE *A4+,A9,W
; JRZ PSNP_NAP ;BR=TABLE DONE
; SLL 24,A9
; MOVE *A4+,A10,L
;
; MOVK 3,A0
; MOVE @PLAYER_BITS,A1,W
; MOVI dpl_lst,A2
; MOVE @SWITCH,A3,L
; NOT A3
;PSNP_PLAYER_LUPE
; BTST A0,A1
; JRZ PSNP_NEXT ;BR=PLAYER NOT ACTIVE
;
; KITN 4
; JREQ PSNP_CHECK ;BR=4 PLAYER KIT
; CMPI 3,A0
; JRNE PSNP_CHECK ;BR=NOT PLAYER 2(4)
; MOVE A3,A14
; SLL 16,A14 ;PLAYER 2 FUDGE
; JRUC PSNP_FUDGE
;PSNP_CHECK
; MOVE A3,A14
;PSNP_FUDGE
; ANDI PLAYER_SWMASK << 24,A14
; XOR A9,A14
; JRNZ PSNP_NEXT ;BR=NO MATCH
;PSNP_POWERUP
; CALL A10
;PSNP_NEXT
; SLL 8,A3
; ADDK 020H,A2
; DEC A0
; JRNN PSNP_PLAYER_LUPE
;
; JRUC PSNP_NEXT_POWERUP
;PSNP_NAP
; SLEEP 1
;
; JRUC PSNP_LUPE
;
;**************************************************************************
;* *
;* POWERUP SNAPSHOT ROUTINES CANNOT TRASH: *
;* *
;* A0 = PLAYER NUMBER - 1 *
;* A1 = PLAYER_BITS *
;* A2 = PLAYER BLOCK ADDRESS TABLE *
;* A4 = NEXT POWERUP TABLE ENTRY *
;* A9 = POWERUP BUTTONS << 24 *
;* A10 = POWERUP ROUTINE ADDRESS *
;* A11 = POWERUP TABLE *
;* *
;**************************************************************************
;
;TG_POWERUP_PROC_TABLE
; WL BIGHEAD_SWPUP,BIGHEAD_POWERUP
; WL HUGEHEAD_SWPUP,HUGEHEAD_POWERUP
;; WL TINYHEAD_SWPUP,TINYHEAD_POWERUP
; WL NORMHEAD_SWPUP,NORMHEAD_POWERUP
; WL GOALIE_BIGHEAD_SWPUP,GOALIE_BIGHEAD_POWERUP
; WL GOALIE_HUGEHEAD_SWPUP,GOALIE_HUGEHEAD_POWERUP
;; WL GOALIE_TINYHEAD_SWPUP,GOALIE_TINYHEAD_POWERUP
; WL GOALIE_NORMHEAD_SWPUP,GOALIE_NORMHEAD_POWERUP
;; WL BIGPUCK_SWPUP,BIGPUCK_POWERUP
;; WL BABYSIZE_SWPUP,BABYSIZE_POWERUP
; .WORD 0
;
;**************************************************************************
;NORMHEAD_POWERUP
; MOVK M_PUP_NORMHEAD,A5
; JRUC HEAD_POWERUP
;TINYHEAD_POWERUP
; MOVK M_PUP_TINYHEAD,A5
; JRUC HEAD_POWERUP
;HUGEHEAD_POWERUP
; MOVK M_PUP_HUGEHEAD,A5
; JRUC HEAD_POWERUP
;BIGHEAD_POWERUP
; MOVK M_PUP_BIGHEAD,A5
;HEAD_POWERUP
; MOVE *A2,A6,L
;H_PUP_GO
; MOVE *A6(POF_PUP_FLAGS),A14,W
; MOVE A14,A7
; AND A5,A7
; JRNZ H_PUP_DONE ;BR=ALREADY SET
;
; ANDNI M_PUP_HEADS,A14
; OR A5,A14
; MOVE A14,*A6(POF_PUP_FLAGS),W
;
; CALLR POWERUP_SOUND
;
;H_PUP_DONE
; RETS
;
;**************************************************************************
;GOALIE_NORMHEAD_POWERUP
; MOVK M_PUP_NORMHEAD,A5
; JRUC GOALIE_HEAD_POWERUP
;GOALIE_TINYHEAD_POWERUP
; MOVK M_PUP_TINYHEAD,A5
; JRUC GOALIE_HEAD_POWERUP
;GOALIE_HUGEHEAD_POWERUP
; MOVK M_PUP_HUGEHEAD,A5
; JRUC GOALIE_HEAD_POWERUP
;GOALIE_BIGHEAD_POWERUP
; MOVK M_PUP_BIGHEAD,A5
;GOALIE_HEAD_POWERUP
; MOVI PLAYER_4_BLOCK,A6
;
; KITN 4
; JREQ GBP_4P ;BR=4 PLAYER KIT
; CMPI 3,A0
; JRNE H_PUP_GO ;BR=NOT PLAYER 2(4)
;
; MOVI PLAYER_8_BLOCK,A6
; JRUC H_PUP_GO
;GBP_4P
; CMPI 2,A0
; JRLT H_PUP_GO ;BR=LEFT GOALIE
; MOVI PLAYER_8_BLOCK,A6
; JRUC H_PUP_GO
;
;**************************************************************************
;BIGPUCK_POWERUP
; MOVE @BIG_PUCK,A14,W
; JRNZ BP_PUP_DONE ;BR=ALREADY BIG
;
; MOVK 1,A14
; MOVE A14,@BIG_PUCK,W
;
; CALLR POWERUP_SOUND
;
;BP_PUP_DONE
; RETS
;
;**************************************************************************
;BABYSIZE_POWERUP
; MOVE @TOURN_MODE,A14,W
; JRN BAP_PUP_DONE ;BR=DIPSWITCH ON
;
; MOVE @BABY_SIZE,A14,W
; JRNZ BAP_PUP_DONE ;BR=ALREADY BIG
;
; MOVK 1,A14
; MOVE A14,@BABY_SIZE,W
;
; CALLR POWERUP_SOUND
;
;BAP_PUP_DONE
; RETS
;