revolution-x/GXLA2.ASM

3617 lines
79 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.MLIB "GXMACS.LIB"
.FILE "GXLA2.ASM"
.TITLE " <<< GENERATION X -- LA UNIVERSE ROUTINES PART 2 >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**************************************************************************
* *
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
* ALL RIGHTS RESERVED. *
* *
**************************************************************************
* GET THE SYSTEM STUFF
.INCLUDE "GX.INC"
.INCLUDE "GXCONTRL.H"
.INCLUDE "GXNONBOY.H"
.INCLUDE "IMGTBL.GLO"
.include "univtbl.glo"
.INCLUDE "GXLA2.TBL"
.BSS NASTY_FLAG,16 ;NASTY BLOOD WATER FLAG
.BSS FOUNTAIN_FLAG,16 ;WE HAVE FOUNTAIN FLAG
.BSS SPLASH_FLAG,16 ;WE HAVE SINK SPLASH FLAG
.BSS PILLAR_COUNT,16 ;PILLARS DESTROYED
.BSS KERRI_SOUND_FLAGS,32 ;UHL FOR KERRI SOUNDS
* SYMBOLS IN HERE
.DEF LA_BATHROOM_VECT_TABLE, LA_STAGE_VECT_TABLE
.DEF TRASHCAN_GUNVECT, TRASHCAN_COLLVECT, SND_PIPE_DING
.DEF MIRROR_GUNVECT, MIRROR_CVECT2, DLAMP_GUNVECT, DLAMP_COLLVECT
.DEF S_NONBOY_BATHROOM, SND_DLAMP_BREAK, SHRED_GUNVECT
.DEF SND_SLAM_STALL, SND_TCAN_SHAKE, SND_SEAT_SLAM, SND_MIRROR_CRACK
.DEF LA_DRESS_VECT_TABLE,MIRROR_COLLVECT,MC_MAKE_GLASS
.DEF FLOWERS_COLLVECT,FLOWERS_GUNVECT,MLIGHT_COLLVECT,MLIGHT_GUNVECT
.DEF PASPEAKER_COLLVECT,PASPEAKER_GUNVECT
.DEF SPOTLIGHT_COLLVECT,SPOTLIGHT_GUNVECT, PILLAR_COUNT
.DEF S_KERRI_BATHROOM
* SYMBOLS IN GXLA1.ASM
.REF LID_GUNVECT, LID_COLLVECT, CAN_GUNVECT, CAN_COLLVECT
.REF CTABLE_GUNVECT, CTABLE_COLLVECT, BOTTLE_GUNVECT, BOTTLE_COLLVECT
.REF GLASS_COLLVECT, SND_SWAT
* SYMBOLS IN GXLA3.ASM
.REF FCHAIR_GUNVECT, FCHAIR_COLLVECT, DGITAR_GUNVECT, DGITAR_COLLVECT
.REF DMIRROR_GUNVECT, DMIRROR_COLLVECT, DELITRAY_GUNVECT, DELITRAY_COLLVECT
.REF FRUIT_GUNVECT, FRUIT_COLLVECT, DOLL_GUNVECT, DOLL_COLLVECT
.REF LSWITCH_GUNVECT, PBUTTON_GUNVECT
* SYMBOLS FROM GXAFUNC.ASM
.REF A_DELETE_ZBOT
* SYMBOLS FROM GXSCROL2.ASM
.REF SND_DIR_CHOSEN
* SYMBOLS FROM GXUNIV1.ASM
.REF FRAG_ONE_CLOUD, FRAG_ONE_CLOUD_X2, GOLD_DUST_PAL
.REF F_UFRAG_STUFF_X2, FRAG_DUST_CLOUD_ANIM
***** From GXPOWER.ASM
.REF PROC_DELAYED_SBOMB, REVEAL_CD2
***** From GXPLAYER.ASM
.REF VALID_PLAYER, PLAYER_AWARD_GIRL
* SYMBOLS FROM GXNONBOY.ASM
.REF SND_BODY_THUD
* SYMBOLS FROM GXBLOOD.ASM
.REF BLOODY_BULLET_HIT
* SYMBOLS FROM GXAERO.ASM
.REF CREATE_TOM_PEE, T161_1, TOM_TURN_ANIM
* SYMBOLS FROM GXSCROL3.ASM
.REF TOMS_SIDE
* SYMBOLS FROM GXHELGA.ASM
.REF MAKE_TABLE_SOUND
* SYMBOLS FROM GXRAM.ASM
.REF VIOLENCE_LEVEL
.TEXT
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * BATHROOM DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
SND_POOP
.WORD 0F341H,64,0A14DH,0
SND_CERAMIC_CRASH
.WORD 0F328H,86,0A129H,0
SND_CERAMIC_SPLASH
.WORD 0F327H,80,0A157H,0
SND_DRIER_CRUNCH
.WORD 0F327H,60,0A147H,0
SND_DRIER_FIRE
.WORD 0F326H,86,0A33EH,0
SND_SOAPBOX_ROCKET
.WORD 0F327H,61,0A126H,0
SND_SOAPBOX_SPLAT
.WORD 0F326H,72,0A12FH,0
SND_MIRROR_SHATTER
.WORD 0F325H,64,0A32EH,0
SND_TCAN_ROCKETED
.WORD 0F324H,53,0A341H,0
SND_ROCKET_STALL
.WORD 0F323H,69,0A14AH,0
SND_FLUSH
.WORD 0F322H,260,0A150H,0
SND_HANDLE_BOING_AND_FLUSH
.WORD 0F321H,82,0A15DH,0F322H,319,0A150H,0
SND_HANDLE_BOING ;KABOOM
.WORD 0F321H,82,0A15DH,0
SND_REMOVE_SEAT
.WORD 0F321H,21,0A328H,0
SND_SLAM_STALL
.WORD 0F30EH,75,0A13BH,0
SND_SHOOT_STALL
.WORD 0F30DH,60,0A138H,0
SND_TCAN_HIT
.WORD 0F30CH,20,0A35AH,0 ;Can hit sound
SND_TCAN_SHAKE
.WORD 0F30CH,46,0A357H,0
SND_MIRROR_CRACK
.WORD 0E30BH,47,0A32BH,0
SND_DRIER_CLANG
.WORD 0F308H,57,0A135H,0
SND_VENT_CLANG
.WORD 0F308H,50,0A132H,0
SND_SEAT_SLAM
.WORD 0F308H,48,0A166H,0
SND_SEAT_CRACK
.WORD 0F307H,34,0A160H,0
SND_SOAPBOX_SPOO
.WORD 0F306H,54,0A12CH,0
SND_TPAPER_REMOVE
.WORD 0F306H,31,0A15AH,0
SND_FAUCET_DING
.WORD 0F305H,40,0A141H,0
SND_CERAMIC_DING
.WORD 0F304H,45,0A13EH,0
SND_PIPE_DING
.WORD 0F304H,39,0A144H,0
SND_SPLASH
.word 0F301H,1,05153H,0 ;Make this as a Background
SND_FOUNTAIN
.word 0F301H,1,05151H,0 ;Make this as a Background
**************************************************************************
* *
* S_NONBOY_BATHROOM - PUT SOME NONBOYS IN THE STALLS *
* *
**************************************************************************
S_NONBOY_BATHROOM
PUSH A11
CLR A14 ;RESET BATHROOM FLAGS
MOVE A14,@NASTY_FLAG,W
MOVE A14,@FOUNTAIN_FLAG,W
MOVE A14,@SPLASH_FLAG,W
MOVE @YWORLD,A3,L
ADDI 028000H,A3 ;SET STANDING NONBOYS INTO THE GROUND
MOVI 0158000H,A5 ;UNIVERSE Y FOR POOPER
MOVE @SCROLL_FLAG,A6,L ;UNIVERSE Z
MOVI BOYS_X_TBL,A1 ;COPY RAM TABLE
CALLA COPY_ROMTBL
MOVE A0,A4
MOVE @TOMS_SIDE,A14,L ;GET THE SIDE HE'S ON
ADDI 01849AH,A14 ;ADD BASE Z POSITION (01AB3DH-FLEAOFF+2c00h)
CMP A14,A6
JRNE SNB_POOPBOY ;BR=NO TOM HERE
CALLA PICK_ENTRY ;GET STALL FOR A POOPER
SLL 12,A2
MOVE A0,A4
MOVE A2,A10
MOVE A3,A9
MOVE A6,A8
CALLA CREATE_TOM_PEE ;MAKE TOM PEE
MOVE A4,A0 ;GET STALL FOR A POOPER
SNB_POOPBOY
CALLA PICK_ENTRY ;GET STALL FOR A POOPER
SLL 12,A2
MOVE A0,A4
MOVE A2,A10
MOVE A5,A9
MOVE A6,A8
CALLR CREATE_POOPBOY ;MAKE A POOPER
MOVE A4,A0 ;GET STALL FOR A SHOOTER
CALLA PICK_ENTRY
SLL 12,A2
MOVE A0,A4
MOVE A2,A9
MOVE A3,A10
MOVE A6,A11
CREATE PID_IND,CREATE_STALLBOY ;MAKE A SHOOTER
S_NB_GETX
MOVE A4,A0
JRZ S_NB_DONE ;BR=WE'RE NOT DONE YET
CALLA PICK_ENTRY ;GET STALL
SLL 12,A2
MOVE A0,A4
MOVK 3,A0 ;GET RANDOM NUMBER FOR CONTENTS
CALLA RAND0
MOVE A0,A0
JRNZ S_NB_SHOOT ;BR=NOT A POOPER
MOVE A2,A10
MOVE A5,A9
MOVE A6,A8
CALLR CREATE_POOPBOY ;MAKE A POOPER
JRUC S_NB_GETX
S_NB_SHOOT
DEC A0
JRNZ S_NB_GETX ;BR=IT'S EMPTY
MOVE A2,A9
MOVE A3,A10
MOVE A6,A11
CREATE PID_IND,CREATE_STALLBOY ;MAKE A SHOOTER
JRUC S_NB_GETX
S_NB_DONE
PULLQ A11
JAUC SCRL_DISPATCHER
BOYS_X_TBL
.WORD -01068H,-01358H,-01618H,-018F8H,0
**************************************************************************
* *
* S_KERRI_BATHROOM - PUT KERRIS IN THE STALLS *
* *
**************************************************************************
S_KERRI_BATHROOM
PUSH A11
CLR A14 ;RESET BATHROOM FLAGS
MOVE A14,@NASTY_FLAG,W
MOVE A14,@FOUNTAIN_FLAG,W
MOVE A14,@SPLASH_FLAG,W
MOVI [KERRI_SOUNDS, 0],A14
MOVE A14,@KERRI_SOUND_FLAGS,L
MOVE @YWORLD,A9,L
ADDI 028000H,A9 ;UNIVERSE Y
MOVE @SCROLL_FLAG,A8,L ;UNIVERSE Z
MOVI BOYS_X_TBL,A2
SKB_LUPE
MOVE *A2+,A10,W
JRZ SKB_DONE ;BR=NO MORE
SLL 12,A10
CALLR CREATE_KERRI
JRUC SKB_LUPE
SKB_DONE
PULLQ A11
JAUC SCRL_DISPATCHER
**************************************************************************
* *
* CREATE_KERRI - CREATE KERRI UNIVERSE OBJECT *
* *
* PASS: *
* A8 = UNIVERSE Z *
* A9 = UNIVERSE Y *
* A10 = UNIVERSE X *
* *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
CREATE_KERRI
CALLA GET_FREE_LINK
JRZ CK_ABORT ;BR=NONE AVAILABLE
MOVE A0,A1
CALLA RANDOM
ANDI M_FLIPH,A0 ;ISOLATE FLIPH BIT ONLY
JRZ CK_NOFLIPH
SUBI 030000H,A10 ;COMPENSATE FOR FLIP
CK_NOFLIPH
ORI M_NOSCALE,A0 ;NO SCALE HERE
MOVE A0,*A1(MAP_FLAGS),W
MOVE A1,A0
MOVI KEREEK1,A14
MOVE A14,*A0(MAP_IMG),L
MOVE A0,A14
ADDI MAP_Z+020H,A14
MMTM A14,A8,A9,A10 ;SET POSITION
MOVE @UNIV_ID,A14,W ;SET ID AND OBJ
MOVE A14,*A0(MAP_ID),W
MOVI 080000000H,A14
MOVE A14,*A0(MAP_OBJ),L
CALLA INSERT_LINK
MOVK 1,A0
MOVE A0,@UNIVERR,W ;FORCE CREATION BY UPDATE_UNIV
CK_ABORT
RETS
KERRI_COVERUP_ANIM
LW 1,10
LWL 1,20|AFunc,A_KERRI_SOUND
LW KEREEK2,6
LW KEREEK3,6
LWL KEREEK4,1|AFunc,A_KERRI_POINTS
SND_OO_0
.WORD 0F380H,21,084F1H,0
SND_OO_1
.WORD 0F380H,23,084F4H,0
SND_OO_2
.WORD 0F380H,32,084F7H,0
SND_BABY
.WORD 0F381H,70,08542H,0
KERRI_SOUNDS EQU 4
KERRI_SOUND_TABLE
.LONG SND_OO_0, SND_OO_1, SND_OO_2, SND_BABY
**************************************************************************
* *
* A_KERRI_SOUND *
* *
**************************************************************************
A_KERRI_SOUND
MOVI KERRI_SOUND_TABLE,A3
MOVI KERRI_SOUND_FLAGS,A6
MOVK KERRI_SOUNDS-1,A7
CALLA MAKE_TABLE_SOUND
RETS
**************************************************************************
* *
* A_KERRI_POINTS *
* *
**************************************************************************
A_KERRI_POINTS
MOVE *A8(OPLAYER),A2,L
MOVI 10000,A1
CLR A9
CALLA PRINT_SCORE ;BONUS
CALLA PLAYER_AWARD_GIRL
JAUC UNIV_MAKE_STATIC
**************************************************************************
* *
* CREATE_POOPBOY - CREATE NONBOY UNIVERSE OBJECT SITTIN' ON THE CAN *
* *
* PASS: *
* A8 = UNIVERSE Z *
* A9 = UNIVERSE Y *
* A10 = UNIVERSE X *
* *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
CREATE_POOPBOY
CALLA GET_FREE_LINK
JRZ CP_ABORT ;BR=NONE AVAILABLE
MOVE A0,A1
CALLA RANDOM
ANDI M_FLIPH,A0 ;ISOLATE FLIPH BIT ONLY
JRZ CP_NOFLIPH
SUBI 030000H,A10 ;COMPENSATE FOR FLIP
CP_NOFLIPH
ORI 19 << 6,A0 ;SET OID #20
MOVE A0,*A1(MAP_FLAGS),W
MOVE A1,A0
MOVI G_B1POTDDA1,A14
MOVE A14,*A0(MAP_IMG),L
MOVE A0,A14
ADDI MAP_Z+020H,A14
MMTM A14,A8,A9,A10 ;SET POSITION
MOVE @UNIV_ID,A14,W ;SET ID AND OBJ
MOVE A14,*A0(MAP_ID),W
MOVI 080000000H,A14
MOVE A14,*A0(MAP_OBJ),L
CALLA INSERT_LINK
MOVK 1,A0
MOVE A0,@UNIVERR,W ;FORCE CREATION BY UPDATE_UNIV
CP_ABORT
RETS
**************************************************************************
* *
* POOPING NONBOY VECTORS *
* *
**************************************************************************
POOPBOY_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,POOPBOY_CVECT
WL 0,DUMCRETS
POOPBOY_CVECT
CALLA UNIV_COLL_CHECK
JRNZ POG_DONE ;BR=NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
POOPBOY_KABOOM
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;SEPERATE HIM FROM THE UNIVERSE
CLR A14
MOVE A14,*A8(OCVECT),L
MOVI DUMRETS,A14
MOVE A14,*A8(OGUNVECT),L
MOVI 1000,A1
CLR A9
CALLA PRINT_SCORE
MOVE A2,*A8(OPLAYER),L ;Hang on to this address
MOVI NONBOY_EXPLODE_ANIM,A1 ;NONBOY GO BOOM!
JAUC STRT_ANIM
POOPBOY_GUNVECT
SOUND1 SND_BODY_THUD
CALLA BLOODY_BULLET_HIT
MOVE *A8(OULINK),A0,L
.if DEBUG
LOCKON Z
.else
JRZ POG_DONE
.endif
MOVE *A0(MAP_IMG),A14,L
BTST B_IF_DAM,A14
JRZ POG_DONE ;BR=NO MORE GUN DAMAGE
MOVI 1000,A5
CLR A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER ;KILL POOPER
MOVI G_B1POTDDA10,A14
MOVE A14,*A0(MAP_IMG),L ;MAKE A STATIC IMAGE
MOVK NUM_GRUNT_SNDS,A0 ;RANDOM GRUNT SOUND
CALLA RAND0
SLL 5,A0
ADDI GRUNT_HIT_TBL,A0
MOVE *A0,A0,L
CALLA ONESND_Z ;Do the volume sound
POG_DONE
RETS
POOPBOY_DAM_TBL:
.long G_B1POTDDA1+0
.word 1
.long POOPBOY_DEATH_ANIM+9
POOPBOY_DAM_TBL2:
.long G_B1POTDDA2+0
.word 1
.long POOPBOY_DEATH_ANIM2+9
POOPBOY_SITUP_ANIM
LWLL 1,30|AFunc,A_SET_MAP_IMG+2,POOPBOY_DAM_TBL+M_IF_DAM
POOPBOY_SITUP_NOW_ANIM
LWLL G_B1POTDDA2,20|AFunc,A_SET_MAP_IMG+2,POOPBOY_DAM_TBL2+M_IF_DAM
LWLL 1,40|AFunc,A_SOUNDZ+2,SND_POOP
LWLL G_B1POTDDA1,1|AFunc,A_SET_MAP_IMG+2,POOPBOY_DAM_TBL+M_IF_DAM
LWL 1,1|AFunc,PULL_ANIM
POOPBOY_DEATH_ANIM
LW G_B1POTDDA2,3
POOPBOY_DEATH_ANIM2
LW G_B1POTDDA3,6
LW G_B1POTDDA9,6
LWL G_B1POTDDA10,1|AFunc,PULL_ANIM
**************************************************************************
* *
* STALL DOOR VECTORS *
* *
**************************************************************************
STALLDOOR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,STALLDOOR_CVECT
WL 0,DUMCRETS
STALLDOOR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ SDG_DONE ;BR=NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
SOUNDZ SND_ROCKET_STALL
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE STALL DOOR FRAGMENTS
MOVI 030000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9
MOVI -01H,B10
MOVI FRAG_U40,B14
CALLA Fragger
MOVE *A8(OIMG),A1,L
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI 500,A5 ;DEFAULT POINTS
CMPI STDOR6,A1
JRNE SDC_DAM ;BR=NO EXTRA POINTS
MOVI 5000,A5 ;EXTRA POINTS FOR DIFFICULTY
SDC_DAM
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRUC SDG_GO
STALLDOOR_GUNVECT
MOVE *A8(OIMG),A14,L
CMPI STDOR6,A14
JREQ SDG_DONE ;BR=BOYS DOOR IS OPEN
CMPI gSTDOR6,A14
JREQ SDG_DONE ;BR=GIRLS DOOR IS OPEN
SOUNDZ SND_SHOOT_STALL
MOVI [59-121, 67-37],A3
MOVI [64-121, 75-37],A4
CALLA BOX_CHECK_OBJ
JRZ SDG_NOLOCK
MOVI 5000+1,A5
MOVK M_NEXTFRM|M_FLASHOBJ,A7 ;FLASH
JRUC SDG_DAM
SDG_NOLOCK
MOVI 500+1,A5 ;500 POINTS
MOVK M_FLASHOBJ,A7 ;FLASH
SDG_DAM
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRZ SDG_DONE
MOVI STALLDOOR_DAM_TBL+M_IF_DAM,A1 ;DEFAULT NEW DAMAGE TABLE
MOVE *A8(OIMG),A14,L
CMPI STDOR1,A14
JREQ SDC_SET_DAM_TBL ;BR=USE THIS TABLE FOR THE BOYS
MOVI gSTALLDOOR_DAM_TBL+M_IF_DAM,A1 ;NEW GIRLS DAMAGE TABLE
SDC_SET_DAM_TBL
MOVE *A8(OULINK),A0,L
MOVE A1,*A0(MAP_IMG),L
SDG_GO
MOVE *A8(OXVAL),A7,L
MOVI FGLIST,A0
; MOVE A0,A8
MOVI G_B1POTDDA1,A3 ;CHANGE THIS
MOVI G_B1SHOOTA1,A4 ;OR THIS
MOVI T161_1,A6 ;OR THIS
MOVI KEREEK1,A10 ;OR THIS
MOVE A8,A9 ;SAVE STALLDOOR OBJECT
MOVI 040000H,A5 ;MAXIMUM X DIFFERENCE
JRUC SDG_NEXT
SDG_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A3,A14
JRNE SDG_OTHER ;BR=NOT THE POOPER
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMP A5,A14
JRGT SDG_NEXT ;BR=OUT OF X DIFFERENCE
MOVI POOPBOY_SITUP_ANIM,A1
JAUC STRT_ANIM
SDG_OTHER
CMP A6,A14
JRNE SDG_OTHER_OTHER ;BR=NOT TOM
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMP A5,A14
JRGT SDG_NEXT ;BR=OUT OF X DIFFERENCE
MOVI TOM_TURN_ANIM,A1
CALLA STRT_ANIM
MOVE *A9(OFLAGS),A14,W
BTST B_ANIM,A14
JRZ SDG_DONE ;BR=NOT ANIMATING
MOVE A9,A8
MOVI STALLDOOR_STICK_SLAM_ANIM,A1
JAUC STRT_ANIM
SDG_OTHER_OTHER
CMP A10,A14
JRNE SDG_OTHER_OTHER_OTHER ;BR=NOT KERRI
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMP A5,A14
JRGT SDG_NEXT ;BR=OUT OF X DIFFERENCE
MOVE A2,*A8(OPLAYER),L
MOVI KERRI_COVERUP_ANIM,A1
CALLA STRT_ANIM
MOVE *A9(OFLAGS),A14,W
BTST B_ANIM,A14
JRZ SDG_DONE ;BR=NOT ANIMATING
MOVE A9,A8
MOVI STALLDOOR_STICK_SLAM_ANIM,A1
JAUC STRT_ANIM
SDG_OTHER_OTHER_OTHER
CMP A4,A14
JRNE SDG_NEXT ;BR=NOT THE SHOOTER
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMP A5,A14
JRGT SDG_NEXT ;BR=OUT OF X DIFF
; MOVB *A8(OFLAGS+B_ANIM-7),A14
; JRN SDG_DONE ;BR=IT'S ANIMATING
MOVI NONBOY_STALL_SHOOT_ANIM,A1
CALLA STRT_ANIM ;START ANIMATION
MOVK 30,A14
MOVB A14,*A8(AnimSlp) ;INITIAL NAP
RETS
SDG_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE SDG_LUPE ;BR=NOT END OF LIST
SDG_DONE
RETS
STALLDOOR_DAM_TBL
.long STDOR6
.word 128
.long JDSMASH+8
gSTALLDOOR_DAM_TBL
.LONG gSTDOR6
.word 128
.long gJDSMASH+8
STALLDOOR_STICK_SLAM_ANIM
LW STDOR2,2
LW STDOR3,3
LW STDOR4,3
LW STDOR5,3
LWLL STDOR6,3|AFunc,A_SOUNDZ+2,SND_SLAM_STALL
LWL 1,1|AFunc,PULL_ANIM
**************************************************************************
* *
* TOILET BASIN VECTORS *
* *
**************************************************************************
TBAS_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,TBAS_CVECT
WL 0,DUMCRETS
TBAS_CVECT
CALLA UNIV_COLL_CHECK
JRNZ THG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE TOILET BOWL FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Up
MOVI -0FFH,B9
MOVI -01H,B10
MOVI -010000H,B3 ;MIN OXVEL
MOVI 010000H,B4 ;MAX OXVEL
MOVI FRAG_U20,B14
CALLA Fragger
MOVI XJONP1a,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
CALLR CERAMIC_EXPLOSION
MOVI [-23,-11],A10
MOVK 1,A11
CREATE PID_IND,REVEAL_PROCK
MOVI [-23,15],A10
CREATE PID_IND,REVEAL_PROCK
MOVE *A8(OXVAL),A7,L
MOVI FGLIST,A0
MOVE A0,A8
MOVI TOILEV1,A3 ;CHANGE THIS
MOVI dTLEVER1sq,A4 ;OR THIS
MOVI TOILID1,A9 ;CHANGE THIS
MOVI dTOILID1sq,A10 ;OR THIS
MOVI (OID_UNIV+(19 << 2)) & ~MASK_SUPP,A11 ;CHANGE THIS (POOPER)
MOVK 7,A5
JRUC TBC_NEXT
TBC_LUPE
MOVE *A8(OIMG),A1,L ;CHECK IMAGES
MOVE *A8(AnimScr),A14,L
; BTST 0,A5
; JRZ TBC_OTHER ;BR=WE FOUND THIS ALREADY
CMP A4,A14
JREQ TBC_HAND ;BR=NOT THE ANIM
CMP A3,A1
JRNE TBC_OTHER ;BR=NOT THE IMAGE
MOVE *A8(OCVECT),A14,L
JRZ TBC_NEXT ;BR=IT'S ALREADY FUCKED
TBC_HAND
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMPI 010000H,A14
JRGT TBC_NEXT ;BR=NOT CLOSE ENOUGH
DEC A5
MMTM SP,A0,A3,A4,A5,A7,A8,A9,A10,A11
CLR A5 ;NO SCORE
CALLR THAND_KABOOM ;FUCK UP TOILET HANDLE
MMFM SP,A0,A3,A4,A5,A7,A8,A9,A10,A11
JRUC TBC_NEXT
TBC_OTHER
; BTST 1,A5
; JRZ TBC_OTHER_OTHER ;BR=WE FOUND THIS ALREADY
CMP A10,A14
JREQ TBC_SEAT ;BR=NOT THE ANIM
CMP A9,A1
JRNE TBC_OTHER_OTHER ;BR=NOT THE IMAGE
MOVE *A8(OCVECT),A14,L
JRZ TBC_NEXT ;BR=IT'S ALREADY FUCKED
TBC_SEAT
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMPI 010000H,A14
JRGT TBC_NEXT ;BR=NOT CLOSE ENOUGH
SUBK 2,A5
MMTM SP,A0,A3,A4,A5,A7,A8,A9,A10,A11
CLR A5 ;NO SCORE
CALLR TSEAT_KABOOM ;FUCK UP TOILET SEAT
MMFM SP,A0,A3,A4,A5,A7,A8,A9,A10,A11
JRUC TBC_NEXT
TBC_OTHER_OTHER
MOVE *A8(OID),A14,L ;CHECK IMAGES
ANDI MASK_TYPE+MASK_ID,A14
CMP A11,A14
JRNE TBC_NEXT ;BR=NOT THE OID
MOVE *A8(OULINK),A14,L
JRZ TBC_NEXT ;BR=IT'S ALREADY FUCKED
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMPI 030000H,A14
JRGT TBC_NEXT ;BR=NOT CLOSE ENOUGH
SUBK 4,A5
MMTM SP,A0,A3,A4,A5,A7,A8,A9,A10,A11
CALLR POOPBOY_KABOOM ;FUCK UP POOPER
MOVE @NASTY_FLAG,A14,W
JRNZ TBC_NO_NASTY ;BR=WE'RE ALREADY NASTY
MOVK 1,A14
MOVE A14,@NASTY_FLAG,W ;MAKE NASTY BLOOD WATER
CREATE PID_IND,NASTY_FADE_PROC
TBC_NO_NASTY
MMFM SP,A0,A3,A4,A5,A7,A8,A9,A10,A11
TBC_NEXT
MOVE A5,A5
JRZ TBG_DONE ;WE GOT 'EM ALL
MOVE *A8,A8,L
CMP A0,A8
JRNE TBC_LUPE ;BR=NOT END OF LIST
RETS
TBAS_GUNVECT
MOVI TOILET_BOX_TBL,A0
CALLA TABLE_BOX_CHECK
JRZ TBG_DONE
MOVI SND_PIPE_DING,A0
DEC A1
JAZ ONESND_Z
MOVI SND_CERAMIC_DING,A0
JAUC ONESND_Z
TBG_DONE
RETS
TOILET_BOX_TBL
.LONG [0,0],[31,42] ;PIPES
.LONG [32,0],[65,42] ;CERAMIC
.LONG -1
**************************************************************************
* *
* CERAMIC_EXPLOSION - MAKE A SINK OR TOILET EXPLODE AND SPEW WATER *
* *
* PASS: *
* A8 = UNIVERSE SINK OR TOILET OBJECT *
* *
**************************************************************************
CERAMIC_EXPLOSION
MOVI 500,A5
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_CERAMIC_CRASH
SOUNDZ SND_CERAMIC_SPLASH
CALLA GET_FREE_LINK
JRZ CE_DONE
MOVE *A8(OCTRL),A14,L ;MATCH FLIP
ANDI M_FLIPH,A14 ;ISOLATE FLIPH BIT ONLY
ORI M_BF_NOVECT,A14
MOVE A14,*A0(MAP_FLAGS),W
MOVE A8,A14
ADDI OXVAL,A14 ;GET POSITION
MMFM A14,A3,A4,A5 ;A5,A4,A3 = OXVAL, OYVAL, OZVAL
MOVI WATER_SPOUT_ANIM+M_IF_SEQ,A14
MOVE A14,*A0(MAP_IMG),L ;WATER ANIMATION
MOVE A5,*A0(MAP_X),L
MOVE A4,*A0(MAP_Y),L
DEC A3
MOVE A3,*A0(MAP_Z),L
MOVE @UNIV_ID,A14,W ;SET ID AND OBJ
MOVE A14,*A0(MAP_ID),W
MOVI 080000000H,A14
MOVE A14,*A0(MAP_OBJ),L
CALLA INSERT_LINK
MOVK 1,A0
MOVE A0,@UNIVERR,W ;FORCE CREATION BY UPDATE_UNIV
MOVE @FOUNTAIN_FLAG,A14,W
JRNZ CE_DONE
SOUND1 SND_BGND3_OFF ;TURN OFF SPLASH
SOUND1 SND_FOUNTAIN
MOVK 1,A14
MOVE A14,@FOUNTAIN_FLAG,W
CE_DONE
RETS
**************************************************************************
* *
* NASTY_FADE_PROC - MAKE THE NASTY BLOODY WATER *
* *
**************************************************************************
NASTY_FADE_PROC
SLEEP 10
MOVI WSPOUT1b,A0 ;FADE TO RED WATER
MOVE @VIOLENCE_LEVEL,A14,W
DEC A14
JRP NFP_RED ;BR = Violence is high
JRN NFP_DONE
MOVK M_DONT_FADE_GREEN,A10
JRUC NFP_FADE
NFP_RED
MOVK M_DONT_FADE_RED,A10
NFP_FADE
MOVI NASTY_FADE_DOWN,A11
CALLA FADE_ONLY
SLEEP 90
MOVI WSPOUT1b,A0 ;FADE TO CLEAR WATER
MOVI NASTY_FADE_UP,A11
CALLA FADE_ONLY
SLEEP 128+3
NFP_DONE
CLR A14 ;WE'RE READY FOR MORE NASTY H 0!
MOVE A14,@NASTY_FLAG,W ; 2
DIE
NASTY_FADE_DOWN
.WORD 96,64,48,32,24,16,12,8,6,4,2,1,0,-1
NASTY_FADE_UP
.WORD 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16
.WORD 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
.WORD 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
.WORD 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
.WORD 1+64, 2+64, 3+64, 4+64, 5+64, 6+64, 7+64, 8+64, 9+64,10+64,11+64,12+64,13+64,14+64,15+64,16+64
.WORD 17+64,18+64,19+64,20+64,21+64,22+64,23+64,24+64,25+64,26+64,27+64,28+64,29+64,30+64,31+64,32+64
.WORD 33+64,34+64,35+64,36+64,37+64,38+64,39+64,40+64,41+64,42+64,43+64,44+64,45+64,46+64,47+64,48+64
.WORD 49+64,50+64,51+64,52+64,53+64,54+64,55+64,56+64,57+64,58+64,59+64,60+64,61+64,62+64,63+64,64+64
.WORD -1
**************************************************************************
* *
* TOILET HANDLE VECTORS *
* *
**************************************************************************
THAND_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,THAND_CVECT
WL 0,DUMCRETS
THAND_CVECT
CALLA UNIV_COLL_CHECK
JRNZ THG_DONE ;BR=NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 1000,A5
SOUNDZ SND_HANDLE_BOING_AND_FLUSH
JRUC THAND_GO
THAND_KABOOM
SOUNDZ SND_HANDLE_BOING
THAND_GO
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7
CLR A9 ;NO OFFSET
JAUC UNIV_DAMAGE_HANDLER
THAND_GUNVECT
SOUNDZ SND_FAUCET_DING
MOVI 1000,A1
MOVE *A8(OGTIME),A14,L
MOVE @WAVEIRQS,A9,L
SUB A9,A14
CMPI -30,A14
JAGT SCORE ;BR=NO HANDLE MOTION
MOVE A9,*A8(OGTIME),L ;NEW LAST GUN HIT TIME
SOUNDZ SND_FLUSH
MOVI 1000+1,A5
MOVK M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVE *A8(OULINK),A0,L
MOVE *A0(MAP_IMG),A1,L ;WE DON'T WANT TO BE HERE
SRL 4,A1 ;CLEAR FLAGS FOR STATIC IMAGE
SLL 4,A1
SUBI 030H,A1 ;BACK ONE ENTRY
ORI M_IF_DAM,A1 ;RESTORE DAMAGE FLAG
MOVE A1,*A0(MAP_IMG),L ;BACK TO WHERE WE WERE
THG_DONE
RETS
**************************************************************************
* *
* TOILET SEAT VECTORS *
* *
**************************************************************************
TSEAT_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,TSEAT_CVECT
WL 0,DUMCRETS
TSEAT_CVECT
CALLA UNIV_COLL_CHECK
JRNZ TSG_DONE ;BR=NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A5
TSEAT_KABOOM
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7
CLR A9
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_REMOVE_SEAT
MOVI -040000H,A14 ;MAKE IT FLY
MOVE A14,*A8(OYVEL),L
MOVI 02000H,A14
MOVE A14,*A8(OYACCEL),W
MOVI -0100H,A14
MOVE A14,*A8(OZVEL),L
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14 ;CLEAR GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
MOVI GROUND_COLLVECT,A14 ;NEW VECTORS
MOVE A14,*A8(OCVECT),L
MOVI DUMRETS,A14
MOVE A14,*A8(OGUNVECT),L
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
MOVE *A8(OXVAL),A7,L
MOVI FGLIST,A0
; MOVE A0,A8
MOVI (OID_UNIV+(19 << 2)) & ~MASK_SUPP,A3 ;CHANGE THIS
JRUC TSC_NEXT
TSC_LUPE
MOVE *A8(OID),A14,L ;CHECK IMAGES
ANDI MASK_TYPE+MASK_ID,A14
CMP A3,A14
JRNE TSC_NEXT ;BR=NOT THE POOPBOY OID
MOVE *A8(OULINK),A14,L
JRZ TSC_NEXT ;BR=HE'S ALREADY FUCKED!
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMPI 020000H,A14
JRGT TSC_NEXT ;BR=NOT CLOSE ENOUGH
JRUC POOPBOY_KABOOM
TSC_NEXT
MOVE *A8(OBLINK),A8,L
CMP A0,A8
JRNE TSC_LUPE ;BR=NOT END OF LIST
RETS
TSEAT_GUNVECT
SOUNDZ SND_SEAT_CRACK
MOVI 500,A1
MOVE *A8(OGTIME),A14,L
MOVE @WAVEIRQS,A9,L
SUB A9,A14
CMPI -30,A14
JAGT SCORE ;BR=NO SEAT ACTION
MOVE A9,*A8(OGTIME),L ;NEW LAST GUN HIT TIME
MOVI 500+1,A5 ;500 POINTS
MOVK M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVE *A8(OULINK),A0,L
MOVE *A0(MAP_IMG),A1,L ;WE DON'T WANT TO BE HERE
SRL 4,A1 ;CLEAR FLAGS FOR STATIC IMAGE
SLL 4,A1
SUBI 030H,A1 ;BACK ONE ENTRY
ORI M_IF_DAM,A1 ;RESTORE DAMAGE FLAG
MOVE A1,*A0(MAP_IMG),L ;BACK TO WHERE WE WERE
TSG_DONE
RETS
**************************************************************************
* *
* TOILET PAPER VECTORS *
* *
**************************************************************************
TPAPER_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,TPAPER_CVECT
WL 0,DUMCRETS
TPAPER_FLYING_COLLVECT
WWL OID_PEXPLOSION,~MASK_PLAYER,TPAPER_FLYING_CVECT
WWL OID_GRND,0FFFFH,DELETE_OBJ
WL 0,DUMCRETS
TPAPER_FLYING_CVECT
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
TPAPER_FLYING_GUNVECT
MOVI 10000,A1
CLR A9
CALLA PRINT_SCORE ;BONUS
SOUNDZ SND_TPAPER_REMOVE
CLR A14
MOVE A14,*A8(OXVEL),L ;STOP THE ROLL
MOVE A14,*A8(OYVEL),L
MOVE A14,*A8(OZVEL),L
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE TOILET PAPER FRAGMENTS
MOVI 020000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -020000H,B7 ;MIN OYVEL
MOVI -010000H,B8 ;MAX OYVEL
MOVI FRAG_PAPER,B14
CALLA Fragger
MOVI TOIPAPR1p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
JAUC DEL_PROC_AND_OBJ ;DELETE ROLL AND FLASH PROCESS
TPAPER_CVECT
CALLA UNIV_COLL_CHECK
JRNZ TPG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
CALLA DELETE_OBJ ; AND DELETE
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE TOILET PAPER FRAGMENTS
MOVI 02C000H,A0
CLR A3
CALLA PreFrag_Up
MOVI -0A000H,B3 ;MIN OXVEL
MOVI -04000H,B4 ;MAX OXVEL
MOVI FRAG_PAPER,B14
CALLA Fragger
MOVI TOIPAPR1p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
JRUC TPG_FIND_POOPBOY ;MAKE POOPER LOOK UP!
TPAPER_GUNVECT
MOVI 500,A5 ;500 POINTS
MOVK M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_TPAPER_REMOVE
MOVI -08000H,A14 ;MAKE IT FLY
MOVE A14,*A8(OXVEL),L
MOVI -030000H,A14
MOVE A14,*A8(OYVEL),L
MOVI 02000H,A14
MOVE A14,*A8(OYACCEL),W
MOVI -0100H,A14
MOVE A14,*A8(OZVEL),L
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14 ;CLEAR GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
MOVE *A8(OCTRL),A14,W
XORI M_FLIPH,A14
MOVE A14,*A8(OCTRL),W
MOVI TPAPER_FLYING_COLLVECT,A14 ;NEW VECTORS
MOVE A14,*A8(OCVECT),L
MOVI TPAPER_FLYING_GUNVECT,A14
MOVE A14,*A8(OGUNVECT),L
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
TPG_FIND_POOPBOY
MOVE *A8(OXVAL),A7,L
MOVI FGLIST,A0
MOVE A0,A8
MOVI G_B1POTDDA1,A3 ;CHANGE THIS
JRUC TPG_NEXT
TPG_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A3,A14
JRNE TPG_NEXT ;BR=NOPE
MOVE *A8(OXVAL),A14,L
SUB A7,A14
JRNN TPG_NEXT
CMPI -0148000H,A14
JRLT TPG_NEXT ;BR=NOT CLOSE ENOUGH
MOVI POOPBOY_SITUP_NOW_ANIM,A1 ;LOOK UP
JAUC STRT_ANIM
TPG_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE TPG_LUPE ;BR=NOT END OF LIST
TPG_DONE
RETS
**************************************************************************
* *
* PAPER FRAGMENT STUFF *
* *
**************************************************************************
FRAG_PAPER
.long FRAG_PAPER_ANIM,F_PAPER_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGBOG+FRGGCOL+FRGNOFLY+FRGNOFLP)
.long FRAG_PAPER_ANIM,F_PAPER_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGBOG+FRGGCOL+FRGNOFLY+FRGNOFLP)
.long 0
FRAG_PAPER_ANIM
LW TISS1,2
LW TISS2,2
LWL TISS3,2|AFunc,A_CHECK_PAPER
.long 0
FRAG_PAPER_FLOAT_ANIM
LWL TISS1,0|AFunc,A_DELETE_ZBOT
LW TISS2,0
LW TISS3,0
LW TISS2,0
LWL TISS1,0|AFunc,A_SLOW_PAPER
.long 0
**************************************************************************
* *
* A_SLOW_PAPER - SLOW DOWN THE PAPER ANIMATION *
* *
* PASS: *
* A8 = OBJECT *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
A_SLOW_PAPER
MOVB *A8(AnimSLP),A14
CMPK 6,A14
JRGE ASP_DONE ;BR=WE'RE GOIN' THE SLOWEST
INC A14
MOVB A14,*A8(AnimSLP)
ASP_DONE
RETS
**************************************************************************
* *
* A_CHECK_PAPER - CHECK IF PAPER SHOULD START FLOATING *
* *
* PASS: *
* A8 = OBJECT *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
A_CHECK_PAPER
MOVE *A8(OYVEL),A14,L
CMPI 02000H,A14
JRLT ACP_DONE ;BR=DON'T FLOAT YET
MOVE *A8(OCTRL),A14,W
ANDNI M_FLIPV,A14
MOVE A14,*A8(OCTRL),W
CLR A14
MOVE A14,*A8(OYACCEL),W
MOVE A14,*A8(OXVEL),L
MOVI FRAG_PAPER_FLOAT_ANIM,A14
MOVE A14,*A8(AnimFrm),L
MOVE A14,*A8(AnimScr),L
MOVK 2,A14
MOVB A14,*A8(AnimSLP)
ACP_DONE
RETS
**************************************************************************
* *
* F_PAPER_STUFF - DO STUFF *
* *
* A0 = Ptr to un-inserted object. *
* *
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
* *
**************************************************************************
F_PAPER_STUFF
MOVE @RAND,A1,W
ANDI M_FLIPH,A1 ;GET FLIPH ONLY
MOVE *A0(OYVEL),A14,L
JRNN FPS_GO
ORI M_FLIPV,A1
FPS_GO
MOVE *A0(OCTRL),A14,W
OR A1,A14
MOVE A14,*A0(OCTRL),W
MOVI 01000H,A14
MOVE A14,*A0(OYACCEL),W
MOVI GROUND_COLLVECT,A14
MOVE A14,*A0(OCVECT),L ;Set up chunk with Vectors
move A0,A2
MOVE *A13(FPDATA),A0,L ;GET PALETTE
calla GETFPAL
JRNZ FPS_PAL ;BR = WE HAVE PALETTE!
CLR A0
FPS_PAL
move A0,*A2(OPAL),W
move A2,A0
RETS
**************************************************************************
* *
* SINK VECTORS *
* *
**************************************************************************
SINK_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,SINK_CVECT
WL 0,DUMCRETS
SINK_CVECT
CALLA UNIV_COLL_CHECK
JRNZ S_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
CALLR FIND_FAUCET_WATER
JRZ S_EXPLODE
MOVE A0,A1
MOVE *A1(OULINK),A0,L
CLR A14
MOVE A14,*A1(OULINK),L
CALLA REMOVE_AND_FREE_LINK
MOVE A1,A0
CALLA DELOBJ
S_EXPLODE
CALLR CERAMIC_EXPLOSION
MOVI [-8,-15],A10
MOVK 1,A11
CREATE PID_IND,REVEAL_PROCK
MOVI [-8,17],A10
CREATE PID_IND,REVEAL_PROCK
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE SINK FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9
MOVI -01H,B10
MOVI -020000H,B3 ;MIN OXVEL
MOVI 020000H,B4 ;MAX OXVEL
MOVI FRAG_U20,B14
CALLA Fragger
MOVI NSINK,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI FAUCET_INIT,A5 ;MAKE A FAUCET
CALLA CREATE_OBJ
JRZ S_DONE ;BR=WHOOPS!
MOVE A8,A14
ADDI OXVAL,A14 ;GET POSITION
MMFM A14,A3,A4,A5 ;A5,A4,A3 = OXVAL, OYVAL, OZVAL
MOVE A0,A14
ADDI OZVAL+020H,A14 ;SET POSITION
MMTM A14,A3,A4,A5 ;A5,A4,A3 = OXVAL, OYVAL, OZVAL
MOVI -030000H,A14 ;MAKE IT FLY
MOVE A14,*A0(OYVEL),L
MOVI 02000H,A14
MOVE A14,*A0(OYACCEL),W
MOVI -0100H,A14
MOVE A14,*A0(OZVEL),L
JAUC INSOBJ
SINK_GUNVECT
MOVI SINK_BOX_TBL,A0
CALLA TABLE_BOX_CHECK
JRZ S_DONE
MOVE A1,A0
DEC A0
SLL 5,A0
ADDI SINK_SND_TBL,A0
MOVE *A0,A0,L
CALLA ONESND_Z
CMPK 1,A1
JRNE S_DONE ;BR=NOT THE FAUCET
CLR A5
; MOVK M_FLASHOBJ,A7 ;FLASH
CLR A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRZ S_DONE ;BR=WE ALREADY HAVE WATER
; CALLR FIND_FAUCET_WATER
; JRNZ S_DONE
CALLA GET_FREE_LINK
JRZ S_DONE ;BR=NONE AVAILABLE
MOVE *A8(OCTRL),A14,L ;MATCH FLIP
ANDI M_FLIPH,A14 ;ISOLATE FLIPH BIT ONLY
ORI M_BF_NOVECT,A14
MOVE A14,*A0(MAP_FLAGS),W
MOVE A8,A14
ADDI OXVAL,A14 ;GET POSITION
MMFM A14,A3,A4,A5 ;A5,A4,A3 = OXVAL, OYVAL, OZVAL
MOVI FAUCET_WATER_ANIM+M_IF_SEQ,A14
MOVE A14,*A0(MAP_IMG),L ;WATER ANIMATION
MOVE A5,*A0(MAP_X),L
MOVE A4,*A0(MAP_Y),L
DEC A3
MOVE A3,*A0(MAP_Z),L
MOVE @UNIV_ID,A14 ;SET ID AND OBJ
MOVE A14,*A0(MAP_ID),W
MOVI 080000000H,A14
MOVE A14,*A0(MAP_OBJ),L
CALLA INSERT_LINK
MOVK 1,A0
MOVE A0,@UNIVERR,W ;FORCE CREATION BY UPDATE_UNIV
MOVE @FOUNTAIN_FLAG,A14,W
JRNZ S_DONE
MOVE @SPLASH_FLAG,A14,W
JRNZ S_DONE
SOUND1 SND_SPLASH
S_DONE
RETS
SINK_BOX_TBL
.LONG [0,23],[13,39] ;FAUCET
.LONG [14,0],[37,63] ;CERAMIC
.LONG [38,0],[61,63] ;PIPES
.LONG -1
SINK_SND_TBL
.LONG SND_FAUCET_DING,SND_CERAMIC_DING,SND_PIPE_DING
**************************************************************************
* *
* FIND_FAUCET_WATER - FIND THE FAUCET WATER OBJECT FOR THE SINK *
* *
* PASS: *
* A8 = SINK OBJECT *
* *
* RETURN: *
* A0 = FAUCET WATER OBJECT, IF NONE, THEN A0 = 0 AND Z IS SET *
* *
**************************************************************************
FIND_FAUCET_WATER
MOVE *A8(OXVAL),A7,L
MOVI FGLIST,A1
; MOVE A1,A0
MOVE A8,A0
MOVI FAUCET_WATER_ANIM,A3 ;FIND THIS
JRUC FFW_NEXT
FFW_LUPE
MOVE *A0(AnimScr),A14,L ;CHECK ANIMS
CMP A3,A14
JRNE FFW_NEXT ;BR=NO ANIM MATCH
MOVE *A0(OXVAL),A14,L
CMP A7,A14
JRNE FFW_NEXT ;BR=NOT THE SAME X
MOVE A0,A0 ;FOUND IT!
RETS
FFW_NEXT
MOVE *A0(OBLINK),A0,L
CMP A1,A0
JRNE FFW_LUPE ;BR=NOT END OF LIST
CLR A0 ;NO FAUCET WATER
RETS
FAUCET_WATER_ANIM
LW SWAb1,4
LW SWAb2,4
LW SWAb3,4
.long 0
FAUCET_INIT
.LONG FAWCET1, GROUND_COLLVECT
.WORD OID_JUNK, DMAWNZ, M_GCOLL, 0
.LONG C_STRTANIM
.LONG FAUCET_FLY_ANIM
FAUCET_FLY_ANIM
LW 1,4
LW FAWCET2,4
LW FAWCET3,4
LW FAWCET4,4
LW FAWCET5,4
LW FAWCET6,4
LW FAWCET7,4
.long 0
WATER_SPOUT_ANIM
LW WAWA1,3
LW WAWA3,3
LW WAWA5,3
LW WAWA7,3
LW WAWA9,3
LW WAWA11,3
LW WAWA13,3
LW WAWA15,3
LW WAWA17,3
LW WAWA19,3
LW WAWA21,3
.long 0
**************************************************************************
* *
* DRIER VECTORS *
* *
**************************************************************************
DRIER_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DRIER_CVECT
WL 0,DUMCRETS
DRIER_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DRG_DONE ;BR=NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
JRUC DRIER_GO
DRIER_GUNVECT
SOUNDZ SND_DRIER_CLANG
MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
DRIER_GO
MOVI 500,A5 ;500 POINTS
MOVI [-8,0],A9 ;OFFSET FROM CENTER OF OBJECT
CALLA UNIV_DAMAGE_HANDLER
JRNC DRG_DONE
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U20,B14
CALLA Fragger
MOVI HANDRY1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
CALLA MAKE_ONE_EXPLOSION
CALLA GET_FREE_LINK
JRZ DRG_CAUSE_DAMAGE ;BR=NONE AVAILABLE
MOVE *A8(OCTRL),A14,W ;DO THE FLIPH THING
ANDI M_FLIPH,A14
MOVE A14,*A0(MAP_FLAGS),W
MOVE A8,A14
ADDI OXVAL,A14 ;GET POSITION
MMFM A14,A3,A4,A5 ;A5,A4,A3 = OXVAL, OYVAL, OZVAL
MOVI DRIER_FIRE_ANIM+M_IF_SEQ,A14
MOVE A14,*A0(MAP_IMG),L ;FIRE ANIMATION
MOVE A5,*A0(MAP_X),L
MOVE A4,*A0(MAP_Y),L
INC A3
MOVE A3,*A0(MAP_Z),L
MOVE @UNIV_ID,A14 ;SET ID AND OBJ
MOVE A14,*A0(MAP_ID),W
MOVI 080000000H,A14
MOVE A14,*A0(MAP_OBJ),L
CALLA INSERT_LINK
MOVK 1,A0
MOVE A0,@UNIVERR,W ;FORCE CREATION BY UPDATE_UNIV
SOUNDZ SND_DRIER_CRUNCH
SOUNDZ SND_DRIER_FIRE
DRG_CAUSE_DAMAGE
MOVE *A8(OXVAL),A7,L
MOVI FGLIST,A0
; MOVE A0,A8
MOVI HDRYVENT1,A3 ;CHANGE THIS
JRUC DRG_NEXT
DRG_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A3,A14
JRNE DRG_NEXT
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMPI 010000H,A14
JRGT DRG_NEXT
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRN DRG_NEXT ;BR=IT'S ANIMATING
CLR A5 ;NO SCORE
CLR A3 ;NO CURSOR POSITION, FLY RANDOM
JRUC DRY_VENT_KABOOM
DRG_NEXT
MOVE *A8(OBLINK),A8,L
CMP A0,A8
JRNE DRG_LUPE ;BR=NOT END OF LIST
DRG_DONE
RETS
DRIER_FIRE_ANIM
LW HDFLAM1,3
LW HDFLAM2,3
LW HDFLAM3,3
LW HDFLAM4,3
LW HDFLAM5,3
LW HDFLAM6,3
LW HDFLAM7,3
.long 0
**************************************************************************
* *
* DRIER VENT VECTORS *
* *
**************************************************************************
OVENTSCORE EQU OU_ODATA ;UHL NEXT SCORE
DRY_VENT_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DRY_VENT_CVECT
WL 0,DUMCRETS
;DRY_VENT_FLY_COLLVECT
; WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
; WWL OID_PEXPLOSION,~MASK_PLAYER,DRY_VENT_FLY_CVECT
; WL 0,DUMCRETS
DRY_VENT_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DV_ABORT ;BR = NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
CLR A3 ;NO CURSOR POSITION, FLY RANDOM
DRY_VENT_GUNVECT
MOVI 500,A5 ;500 POINTS
DRY_VENT_KABOOM
MOVK M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVI DRIER_VENT_FLY,A0
JAUC THING_FLY_START
DV_ABORT
RETS
* .WORD OFLYSCORE, OFLYSCOREINC *
* .LONG OFLYHITSND, OFLYYVEL *
* .WORD OFLYXSLL, OYACCEL, OZVEL *
DRIER_VENT_FLY
.LONG [1000, 1000], SND_VENT_CLANG, -020000H
.WORD 13, 02000H, -080H
**************************************************************************
* *
* MIRROR VECTORS *
* *
**************************************************************************
MIRROR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,MIRROR_CVECT
WL 0,DUMCRETS
MIRROR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ MG_DONE ;BR=NO GOOD
MIRROR_CVECT2
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A5 ;500 POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC MG_SANS_GLASS
MC_MAKE_GLASS
SOUNDZ SND_MIRROR_SHATTER
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI SHARDPAL1,A5 ;SILVER PALETTE
MOVE @WAVE_UNIV,A9,L
CMPI GXOBOY2,A9
JRNE MC_FRAG ;BR=NOT THE BAR UNIVERSE
CLR A9 ;FLAG BAR UNIVERSE
MOVI SHARDPAL2,A5 ;GOLD PALETTE
MC_FRAG
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI -010000H,B8 ;MAXIMUM Y VELOCITY
MOVI FRAG_S20,B14
CALLA Fragger
MOVE A5,*A0(FPDATA),L ;SET PALETTE
MOVE *A8(OIHOFF),A14,W
JRNZ MC_FRAG_DONE ;BR=DON'T MAKE SMALL PIECES
MOVI FRAG_SS10,B14
CALLA Fragger
MOVE A5,*A0(FPDATA),L ;SET PALETTE
MC_FRAG_DONE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI MIRROR_SHATTER_INIT,A5 ;LET'S MAKE SOME SHARDS
CALLA CREATE_OBJ
JRZ MG_SANS_GLASS ;BR=OOPS!
MOVE *A8(OCTRL),A14,W
ANDI M_FLIPH|M_FLIPV,A14
MOVE *A0(OCTRL),A1,W
OR A14,A1
MOVE A1,*A0(OCTRL),W
BTST B_FLIPV,A1
JRZ MC_SET_POS ;BR=NO VERTICAL FLIP
MOVI 93 << 15,A14
MOVE A14,*A0(OGRNDOFF),L ;OFFSET ABOVE DA GROUND
MC_SET_POS
MOVE *A8(OXVAL),*A0(OXVAL),L ;SET POSITION
MOVE *A8(OYVAL),*A0(OYVAL),L
MOVE *A8(OZVAL),A14,L
DEC A14
MOVE A14,*A0(OZVAL),L
MOVI 04000H,A14 ;SET GRAVITY
MOVE A14,*A0(OYACCEL),W
MOVE A8,A3
MOVE A0,A8
MOVE A9,A9
JRNZ MC_INS ;BR=NOT THE BAR UNIVERSE
MOVI MFRAGS1c,A0 ;CHANGE TO GOLD PALETTE
CALLA CHANGE_PAL
MC_INS
CALLA INSERT_OBJ
MOVE A3,A8
RETS
MIRROR_GUNVECT
; MOVE *A8(OULINK),A0,L
; MOVB *A0(MAP_ID+8),A14 ;GET CURRENT DAMAGE LEVEL
; JRZ MG_GO ;BR=CRACK DA MIRROR
;
; MOVE *A8(OGTIME),A14,L
; MOVE @WAVEIRQS,A0,L
; SUB A14,A0
; CMPI 60,A0
; JRLT MG_DONE ;BR=DON'T BREAK YET
;MG_GO
SOUNDZ SND_MIRROR_CRACK
MOVI 500,A5 ;500 POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRC MC_MAKE_GLASS ;BR=LAST DAMAGE FRAME
; MOVE @WAVEIRQS,A14,L
; MOVE A14,*A8(OGTIME),L ;CRACK TIME
MG_SANS_GLASS
MG_DONE
RETS
MIRROR_SHATTER_INIT
.LONG MRRFRAG1, GLASS_COLLVECT
.WORD OID_JUNK, DMAWNZ, M_GCOLL, 0
.LONG 0
MFRAGS1c:
.word 63
.word 07c20h,06ad1h,07f53h,03524h,028c1h,024a0h,01c40h,07711h
.word 07311h,01c60h,04186h,02080h,03d65h,02ce2h,0626dh,04dc9h
.word 0560ah,03922h,04deah,05209h,045a7h,03103h,04165h,0562ch
.word 045a8h,0560bh,0668dh,04187h,06ed0h,04166h,03944h,06ef1h
.word 03d64h,072f1h,0668fh,0562bh,05e6dh,049c9h,0520bh,05e4dh
.word 06acfh,06ed1h,06ef0h,0628eh,0668eh,066afh,0628dh,066b0h
.word 07733h,072f0h,0520ah,07712h,05a4ch,06ecfh,05a4dh,05a2bh
.word 05a2ch,06ef2h,07313h,07f53h,07f53h,07733h,07b53h
**************************************************************************
* *
* SOAPBOX VECTORS *
* *
**************************************************************************
SOAPBOX_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,SOAPBOX_CVECT
WL 0,DUMCRETS
SOAPBOX_CVECT
CALLA UNIV_COLL_CHECK
JRNZ SOG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
SOUNDZ SND_SOAPBOX_ROCKET
SOUNDZ SND_SOAPBOX_SPLAT
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U5,B14
CALLA Fragger
MOVI SOAPDIS1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI 500,A5 ;500 POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CLR A9 ;NO OFFSET
JAUC UNIV_DAMAGE_HANDLER
SOAPBOX_GUNVECT
MOVE *A8(OGTIME),A14,L
MOVE @WAVEIRQS,A9,L
SUB A9,A14
CMPI -30,A14
JRGT SOG_DONE ;BR=NO SPOO!
SOUNDZ SND_SOAPBOX_SPOO
CALLA UNIV_FLASH
MOVI SPOO_INIT,A5 ;LET'S SPOO SOAP!
CALLA CREATE_OBJ
JRZ SOG_DONE ;BR=SPOOPS!
MOVE A9,*A8(OGTIME),L ;NEW LAST GUN HIT TIME
MOVE *A8(OXVAL),*A0(OXVAL),L ;SET POSITION
MOVE *A8(OYVAL),*A0(OYVAL),L
MOVE *A8(OZVAL),A14,L
DEC A14
MOVE A14,*A0(OZVAL),L
JAUC INSOBJ
SOG_DONE
RETS
SPOO_INIT
.LONG SOSPURT1, 0
.WORD OID_JUNK, DMAWNZ, 0, 0
.LONG C_STRTANIM
.LONG SPOO_ANIM
SPOO_ANIM
LW 1,4
LW SOSPURT2,4
LW SOSPURT3,4
LW SOSPURT4,4
LW SOSPURT5,4
LW SOSPURT6,4
LW SOSPURT7,30
LWL 1,1|AFunc,DELETE_OBJ
**************************************************************************
* *
* TRASH CAN VECTORS *
* *
**************************************************************************
TRASHCAN_COLLVECT
WWL OID_GRND,0FFFFH,TRASHCAN_GRND_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,TRASHCAN_CVECT
WL 0,DUMCRETS
TRASHCAN_GRND_CVECT
MOVE *A8(OYVEL),A14,L
JRN TGC_ONGRND ;BR=GOING UP
JRZ TGC_ONGRND ;BR=STOPPED
SRA 2,A14
CMPI [1,0],A14
JRLT TGC_ONGRND ;BR=BELOW MINIMUM VELOCITY
NEG A14 ;REVERSE VELOCITY
MOVE A14,*A8(OYVEL),L
RETS
TGC_ONGRND
;DON'T DO THIS (SEE NOTE BELOW)
; MOVI CAN_GUNVECT,A14
; MOVE A14,*A8(OGUNVECT),L
CLR A14 ;STOP IT!
MOVE A14,*A8(OXVEL),L
MOVE A14,*A8(OYVEL),L
MOVE A14,*A8(OZVEL),L
MOVE A14,*A8(OYACCEL),W
MOVE *A8(OFLAGS),A14,W
ANDNI M_GCOLL,A14 ;CLEAR GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
CALLA SET_ONGRND
MOVE *A8(OULINK),A0,L ;UPDATE RAM LINK POSITION
MOVE *A8(OXVAL),*A0(MAP_X),L
MOVE *A8(OYVAL),*A0(MAP_Y),L
MOVE *A8(OZVAL),*A0(MAP_Z),L
MOVE @RAND,A3,W ;RANDOM FLIPH
ANDI M_FLIPH,A3 ;ISOLATE FLIPH BIT ONLY
MOVE *A8(OCTRL),A1,W
XOR A3,A1
MOVE A1,*A8(OCTRL),W
ANDI M_FLIPH,A1 ;UPDATE FLIPH IN MAP_FLAGS
MOVE *A0(MAP_FLAGS),A14,W
ANDNI M_FLIPH,A14
OR A1,A14
MOVE A14,*A0(MAP_FLAGS),W
PUSH B0
CALLA UNLINK_LINK ;RESORT UNIVERSE LINK
CALLA INSERT_LINK
PULLQ B0
MOVI TRASHCAN_LAND_ANIM,A1 ;CAN LANDING ON GROUND ANIM
JAUC STRT_ANIM
TRASHCAN_CVECT
CALLA UNIV_COLL_CHECK
JRNZ TG_DONE
; MOVB *A8(OFLAGS+B_ANIM-7),A14
; JRN TG_DONE ;IT'S ANIMATING LEAVE IT ALONE!
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A5 ;500 POINTS
MOVK M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
.if DEBUG
LOCKON NC
.else
JRNC TG_DONE
.endif
SOUNDZ SND_TCAN_ROCKETED
;DON'T DO THIS MAKE IT AT LEAST FLASH AND GIVE SOME POINTS!
; MOVI DUMRETS,A14
; MOVE A14,*A8(OGUNVECT),L
MOVI TRASHCAN_DAM_TBL+M_IF_DAM,A14 ;RESET DAMAGE TABLE
MOVE *A8(OULINK),A0,L
MOVE A14,*A0(MAP_IMG),L
; SETF 4,0,0 ;FIELD 0 IS 4 BITS
; CLR A4 ;RESET COUNT FOR NEW FRAME
; MOVE A4,*A0(MAP_OBJ),0 ;SAVE CURRENT COUNT
; SETF 16,1,0 ;WORD SIGN EXTEND
MOVI 04000H,A14 ;SET VELOCITIES AND ACCEL
MOVE A14,*A8(OYACCEL),W ;GRAVITY
MOVI -060000H,A0
MOVI -080000H,A1
CALLA RANGERND
MOVE A0,*A8(OYVEL),L ;RANDOM INITIAL Y VELOCITY
MOVI 18 << 13,A0
MOVI -18 << 13,A1
CALLA RANGERND
MOVE A0,*A8(OXVEL),L ;RANDOM INITIAL X VELOCITY
MOVI -060H,A14
MOVE A14,*A8(OZVEL),L ;Z VELOCITY
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14 ;SET GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
RETS
TRASHCAN_GUNVECT
SOUNDZ SND_TCAN_HIT
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRNN TG_STILL ;BR=IT'S NOT ANIMATING
MOVE *A8(AnimScr),A14,L
CMPI dGCANSPIN1sq,A14
JREQ TG_DONE ;BR=WE'RE SPINNING
MOVK 1,A14 ;SET ANIMATION LOOP FLAG
MOVB A14,*A8(AnimLoop)
RETS
TG_STILL
CLR A14
MOVB A14,*A8(AnimLoop)
MOVI 500,A5 ;500 POINTS
MOVK M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVE *A8(OULINK),A0,L ;BACK UP ONE DAMAGE ENTRY
; SETF 4,0,0 ;FIELD 0 IS 4 BITS
; CLR A4 ;RESET COUNT FOR NEW FRAME
; MOVE A4,*A0(MAP_OBJ),0 ;SAVE CURRENT COUNT
; SETF 16,1,0 ;WORD SIGN EXTEND
MOVE *A0(MAP_IMG),A1,L ;WE DON'T WANT TO BE HERE
SRL 4,A1 ;CLEAR FLAGS FOR STATIC IMAGE
SLL 4,A1
SUBI 030H,A1 ;BACK ONE ENTRY
ORI M_IF_DAM,A1 ;RESTORE DAMAGE FLAG
MOVE A1,*A0(MAP_IMG),L ;BACK TO WHERE WE WERE
TG_DONE
RETS
TRASHCAN_DAM_TBL:
.long BCANL4+0
.word 1
.long TRASHCAN_HIT_ANIM+1
.word 128
.long dBCANSPIN1sq+9
TRASHCAN_LAND_ANIM
LW BCANL1,2
LW BCANL2,2
LW BCANL3,2
LW BCANL4,2
TRASHCAN_HIT_ANIM
LWLL BCANL3,2|AFunc,A_SOUNDZ+2,SND_TCAN_SHAKE
LW BCANL4,2
LW BCANL3,2
LWL BCANL4,2|AFunc,PULL_ANIM
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * STAGE DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
;**************************************************************************
;* *
;* AU_CHECK_EROK - CHECK IF EROK SHOULD DIE *
;* *
;**************************************************************************
;
;AU_CHECK_EROK
; MOVE @SCROLL_FLAG,A14,W
; JRZ EROKG_DONE ;BR = NOPE. NOT YET
; CLR A2
;
; ;CONTINUE WITH EROK_GUNVECT
;
;**************************************************************************
;* *
;* EROK VECTOR *
;* *
;**************************************************************************
;
;EROK_GUNVECT
; CLR A5
; MOVK M_NOMORE,A7 ;NO MORE DAMAGE
; CLR A9 ;NO OFFSET
; CALLA UNIV_DAMAGE_HANDLER
; JRNC EROKG_DONE ;BR=ALREADY TRASHED. HA! HA!
; MOVK 1,A14
; MOVE A14,@SCROLL_FLAG,W
; SOUND1 SND_EROK_YELL
;EROKG_DONE
; RETS
;
;SND_EROK_YELL
; .WORD 0F310H,40,08206H,0
**************************************************************************
* *
* ROPE LADDER VECTORS *
* *
**************************************************************************
RLADDER_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,RLADDER_CVECT
WL 0,DUMCRETS
RLADDER_CVECT
MOVE @BLACKOUT,A14,W
JRNZ RG_DONE ;BR=LIGHTS OUT! BLACKOUT!
CALLA UNIV_COLL_CHECK
JRNZ RG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
RLADDER_GUNVECT
MOVE @BLACKOUT,A14,W
JRNZ RG_DONE ;BR=LIGHTS OUT! BLACKOUT!
MOVI 500,A5 ;500 POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVK 1,A14
MOVE A14,@SCROLL_FLAG,W
RG_DONE
RETS
**************************************************************************
* *
* SEATS VECTORS *
* *
**************************************************************************
SEATS_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,SEATS_CVECT
WL 0,DUMCRETS
SEATS_CVECT
CALLA UNIV_COLL_CHECK
JRNZ SEATS_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
CALLA STOP_ENEMIES
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Up
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U20,B14
CALLA Fragger
MOVE *A8(OIMG),A1,L
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI 1000,A5 ;POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_SEATS_EXPLODE
MOVI [-108-17,108+17],A11 ;X OFFSETS
MOVI [-80,46],A9 ;Y OFFSETS
MOVK 5,A1 ;Z OFFSET
JAUC OBJ_KILL_ENEMIES
SEATS_GUNVECT
MOVE @SCROLL_FLAG,A14,L
SRL 4,A14
SLL 4,A14
CMP A8,A14
JREQ SEATS_HIT ;BR=WE JUST HIT THIS OBJECT
MOVE *A8(OXVAL),A14,L
CMPI -0EC9B00H,A14
JRLT SEATS_HIT ;BR=CAN'T GO LEFT
CMPI 0A37100H,A14
JRGT SEATS_HIT ;BR=CAN'T GO RIGHT
MOVE *A8(OZVAL),A14,L
MOVE @ZBASE,A0,L
ADDI ZMAX_REAL+01000H,A0
CMP A0,A14
JRGT SEATS_HIT ;BR=NOT CLOSE ENOUGH IN Z
MOVE @XBASE,A0,L
SG_CHECK_CENTER
CMPI -0250B00H,A0
JRNE SG_GO_CENTER ;BR=GO TO THE CENTER
MOVE *A8(OXVAL),A14,L
MOVK 1,A1
SUB A0,A14
JRN SG_GO ;BR=GO LEFT
MOVK 4,A1
JRUC SG_GO ;BR=GO RIGHT
SG_GO_CENTER
MOVK 2,A1 ;GO CENTER
SG_GO
OR A8,A1 ;OBJECT + DIRECTION FLAG
MOVE A1,@SCROLL_FLAG,L
CALLA UNIV_FLASH
SOUND1 SND_DIR_CHOSEN
SEATS_DONE
RETS
SEATS_HIT
SOUNDZ SND_SEATS_HIT
RETS
SND_SEATS_HIT
; .WORD 0F310H,34,0A160H,0
.WORD 0F308H,31,0A15AH,0
SND_SEATS_EXPLODE
.WORD 0F320H,29,0A176H,0
;**************************************************************************
;* *
;* FIND_SEATS_PROC *
;* *
;**************************************************************************
;
;FIND_SEATS_PROC
; MOVI OID_UNIV|9 << 5,A9
; MOVI FGLIST,A10
;FSP_RESTART
; MOVE A10,A8
; CLR A11
;
; MOVE @ZBASE,A2,L
; MOVE @ZBASE,A3,L
;
; JRUC FGP_NEXT
;FSP_LUPE
; MOVE *A8(OID),A14,W
; CMP A9,A14
; JRNE FSP_NEXT
;
; MOVE *A8(OZVAL),A14,L
;
;
;
; CREATE PID_IND,FSP_FLASH
;
;
; INC A11
; SLEEP 1
; MOVE @SCROLL_FLAG
; JRNZ FSP_FOUND
;FSP_NEXT
; MOVE *A8,A8,L
; CMP A10,A8
; JRNE FSP_LUPE ;BR=NOT END OF LIST
; DIE
;
;FSP_FLASH
; MOVE A13,*A8(OPLINK),L
;
; MOVK 20,A10
;FSP_FLASH_LUPE
; MOVE *A8(OCTRL),A14,W
; ANDI 0FFF0H,A14
; ORI DMACNZ & 0FH,A14 ;SET CONSTANT ON NON-ZERO DATA
; MOVE A14,*A8(OCTRL),W
;
; SLEEP 3
;
; MOVE *A8(OCTRL),A14,W
; ANDI 0FFF0H,A14
; ORI DMAWNZ & 0FH,A14 ;SET CONSTANT ON NON-ZERO DATA
; MOVE A14,*A8(OCTRL),W
;
; MOVE @SCROLL_FLAG,A14,W
; JRNZ FSP_FLASH_DONE
;
; SLEEP 3
; DSJ A10,FSP_FLASH_LUPE
;
;FSP_FLASH_DONE
; CLR A14
; MOVE A14,*A8(OPLINK),L
; DIE
**************************************************************************
* *
* PASPEAKER VECTORS *
* *
**************************************************************************
PASPEAKER_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,PASPEAKER_CVECT
WL 0,DUMCRETS
PASPEAKER_CVECT
CALLA UNIV_COLL_CHECK
JRNZ PASPEAKER_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A5 ;POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
PAS_EXPLODE
SOUNDZ SND_PASPEAKER_EXPLODE
MOVK 1,A11 ;Z OFFSET
MOVE *A8(OFLAGS),A14,W
BTST B_DBLSCL,A14
JRZ PAS_ONE_CD ;BR=NOT DOUBLE SCALE
MOVI [-35*2,-40*2],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_CD2
MOVI [-35*2,40*2],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_CD2
MOVI [-105*2,-40*2],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_CD2
MOVI [-105*2,40*2],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_CD2
JRUC PAS_GO
PAS_ONE_CD
MOVI [-70,0],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_CD2
PAS_GO
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U20_X2,B14
CALLA Fragger
MOVI SPKR1p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
PASPEAKER_GUNVECT
MOVI 500,A5 ;POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
JRC PAS_EXPLODE
SOUNDZ SND_SWAT
PASPEAKER_DONE
RETS
SND_PASPEAKER_EXPLODE
.WORD 0F320H,69,0A14AH,0
**************************************************************************
* *
* MONITOR VECTORS *
* *
**************************************************************************
MONITOR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,MONITOR_CVECT
WL 0,DUMCRETS
MONITOR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ MONITOR_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 1000,A5 ;POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
MON_EXPLODE
SOUNDZ SND_MONITOR_EXPLODE
MOVI [-40,3],A10
MOVE *A8(OIMG),A14,L
CMPI MONSMA1,A14
JREQ MON_REVEAL ;BR=THIS IS THE MONITOR
MOVI [-28,1],A10 ;DRESSING ROOM SPEAKER
MON_REVEAL
MOVK 1,A11
CREATE PID_IND,REVEAL_CD
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Up
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U10_X2,B14
CALLA Fragger
MOVI SPKR1p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
MONITOR_GUNVECT
MOVI 1000,A5 ;POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
JRC MON_EXPLODE
SOUNDZ SND_SWAT
MONITOR_DONE
RETS
SND_MONITOR_EXPLODE
.WORD 0F320H,60,0A147H,0
**************************************************************************
* *
* BALCONY VECTORS *
* *
**************************************************************************
BALCONY_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,BALCONY_CVECT
WL 0,DUMCRETS
BALCONY_CVECT
CALLA UNIV_COLL_CHECK
JRNZ BALCONY_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVE *A8(OCTRL),A14,W
BTST B_FLIPH,A14
JRZ BAL_NOFLIPH
CLR B4
JRUC BAL_GO
BAL_NOFLIPH
CLR B3
BAL_GO
MOVI FRAG_U40_X2,B14
CALLA Fragger
MOVE *A8(OIMG),A1,L
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
CLR A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_ONE_CLOUD_X2,B14
CALLA Fragger
MOVI GOLD_DUST_PAL,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI 1000,A5 ;POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
MOVK 1,A11
MOVI [-36*2,28*2],A10
CREATE PID_IND,REVEAL_PROCK
MOVI [-48*2,25*2],A10
CREATE PID_IND,REVEAL_PROCK
MOVI [-59*2,10*2],A10
CREATE PID_IND,REVEAL_PROCK
MOVI [-48*2,5*2],A10
CREATE PID_IND,REVEAL_PROCK
MOVI [-44*2,-7*2],A10
CREATE PID_IND,REVEAL_PROCK
SOUND1 SND_GOLDSHIT_EXPLODE
RETS
BALCONY_GUNVECT
SOUNDZ SND_SWAT
BALCONY_DONE
RETS
**************************************************************************
* *
* PROSCENIUM VECTORS *
* *
**************************************************************************
PROSC_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,PROSC_CVECT
WL 0,DUMCRETS
PROSC_CVECT
CALLA UNIV_COLL_CHECK
JRNZ PROSC_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
CLR A3
MOVI 1000,A5 ;POINTS
PRO_DAMAGE
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
MOVI TOPMOD1,A0 ;LOOK FOR THIS
MOVE *A8(OIMG),A11,L
CMP A0,A11
JRNE PRO_GO
MOVI [0,-94],A9
PRO_GO
CALLA UNIV_DAMAGE_HANDLER
MOVE A0,A10
;PRO_EXPLODE
SOUND1 SND_GOLDSHIT_EXPLODE
MOVE A3,A11
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U20_X2,B14
CALLA Fragger
MOVI BIGTOPp2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
CLR A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_ONE_CLOUD_X2,B14
CALLA Fragger
MOVI GOLD_DUST_PAL,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE A9,A9
JRZ PROSC_DONE
MOVE A11,A3
JRNZ PROSC_DONE
MOVK 1,A3
MOVI FGLIST,A0
MOVE A0,A8
CLR A5 ;NO SCORE
PRO_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A10,A14
JREQ PRO_DAMAGE
PRO_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE PRO_LUPE ;BR=NOT END OF LIST
RETS
PROSC_GUNVECT
; MOVI 1000,A5 ;POINTS
; MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
; CLR A9
; CALLA UNIV_DAMAGE_HANDLER
; JRC PRO_EXPLODE
SOUNDZ SND_SWAT
PROSC_DONE
RETS
SND_GOLDSHIT_EXPLODE
.WORD 0F320H,40,0A328H,0
**************************************************************************
* *
* PILLAR VECTORS *
* *
**************************************************************************
PILLAR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,PILLAR_CVECT
WL 0,DUMCRETS
PILLAR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ PILLAR_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
SOUND1 SND_GOLDSHIT_EXPLODE
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U40_X2,B14
CALLA Fragger
MOVI COLMN1p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
CLR A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_ONE_CLOUD_X2,B14
CALLA Fragger
MOVI GOLD_DUST_PAL,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE @PILLAR_COUNT,A1,W
CMPK 1,A1
JRNE PIL_DEL ;BR=NO PILLARS DESTROYED
MOVE @ZSCROLL,A14,L
JRNZ PIL_ABORT ;BR=STILL MOVIN'
MOVE @ZBASE,A14,L
CMPI 05336CH,A14
JRNE PIL_ABORT ;BR=NOT AT DESTRUCTION Z
; CMPI 53300H,A14
; JRLT PIL_ABORT ;BR = No good if not close
PIL_DEL
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK
CALLA DEL_PROC_AND_OBJ
INC A1
CMPK 2,A1
JREQ PIL_GO
MOVE A1,@PILLAR_COUNT,W
PIL_ABORT
RETS
PIL_GO
SOUND1 SND_BREAKDOWN
.IF DEBUG
CALLA VALID_PLAYER
.ENDIF
MOVI 75,A10 ;Delay for smart bomb
MOVE A2,A11
CREATE PID_IND,PROC_DELAYED_SBOMB ;Smart bomb effect for landing
PIL_NO_SBOMB
MOVI FGLIST,A3
MOVE A3,A8
MOVI OID_UNIV|9 << 2,A4
PIL_LUPE
MOVE *A8(OID),A14,W
CMP A4,A14
JRNE PIL_NEXT
MOVE *A8(OYVAL),A14,L
JRNN PIL_NEXT
MOVE *A8(OULINK),A0,L ;REMOVE FROM UNIVERSE
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK
MOVI 08001H,A0
CALLA RAND0
MOVE A0,*A8(OYVEL),L
MOVI 03000H,A14
MOVE A14,*A8(OYACCEL),W
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14
MOVE A14,*A8(OFLAGS),W
MOVI PROSC_GROUND_COLLVECT,A14
MOVE A14,*A8(OCVECT),L
PIL_NEXT
MOVE *A8,A8,L
CMP A3,A8
JRNE PIL_LUPE ;BR=NOT END OF LIST
RETS
PILLAR_GUNVECT
SOUNDZ SND_SWAT
PILLAR_DONE
RETS
SND_BREAKDOWN
.WORD 0F380H,120,0A305H,0
**************************************************************************
* *
* PROSCENIUM GROUND COLLISION STUFF *
* *
**************************************************************************
PROSC_GROUND_COLLVECT
WWL OID_GRND,0FFFFH,PROSC_GROUND_CVECT
WL 0,DUMCRETS
PROSC_GROUND_CVECT
MOVE *A8(OFLAGS),A14,W
ANDNI M_GCOLL,A14
MOVE A14,*A8(OFLAGS),W
SOUND1 SND_CRUMBLE
CALLA STOPOBJ
CALLA SetOnGrnd
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
; MOVI 040000H,A0
; CLR A3
; CALLA PreFrag_Box
; MOVI -0FFH,B9 ;MIN Z VEL
; MOVI -01H,B10 ;MAX Z VEL
; MOVI -080000H,B7
; CLR B8
; MOVI FRAG_U5,B14
; CALLA Fragger
;
; MOVI BIGTOPp2,A14
; MOVE A14,*A0(FPDATA),L ;SET PALETTE
CLR A0
CLR A3
CALLA PreFrag_Box
MOVI -010000H,B7
MOVI -0800H,B9
MOVI -0800H,B10
MOVI FRAG_PROSC_SMOKE,B14
CALLA Fragger
MOVI GOLD_DUST_PAL,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI FRAG_DUST_CLOUD_ANIM,A1
JAUC STRT_ANIM
FRAG_PROSC_SMOKE
.long FRAG_PROSC_SMOKE_ANIM,F_UFRAG_STUFF_X2
.word OID_JUNK,(3 << 11) + (1 << 6) + (FRGNOFLY)
.long FRAG_PROSC_SMOKE_ANIM,F_UFRAG_STUFF_X2
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGBOG+FRGNOFLY)
.long FRAG_PROSC_SMOKE_ANIM,F_UFRAG_STUFF_X2
.word OID_JUNK,(2 << 11) + (1 << 6) + (FRGBOG+FRGNOFLY)
.long 0
;SMOKE_NEW_PAL
; MOVE *A0(OFLAGS),A14,W
; ORI M_DBLSCL,A14
; MOVE A14,*A0(OFLAGS),W
;
; MOVI -0800H,A14
; MOVE A14,*A0(OZVEL),L
;
; move A0,A2
; MOVI GOLD_DUST_PAL,A0
; calla GETFPAL
; JRNZ SNP_PAL ;BR = WE HAVE PALETTE!
; CLR A0
;SNP_PAL
; move A0,*A2(OPAL),W
; MOVE A2,A0
; RETS
PROSC_SMOKE_ANIM
LW 1,10
FRAG_PROSC_SMOKE_ANIM
LWLL dstcld1,4|AFunc,A_CHANGE_PAL+2,GOLD_DUST_PAL
LW dstcld2,4
LW dstcld3,4
LW dstcld4,4
LW dstcld5,4
LW dstcld6,4
LW dstcld7,4
LW dstcld8,4
LW dstcld1,4
LW dstcld2,4
LW dstcld3,4
LW dstcld4,4
LW dstcld5,4
LW dstcld6,4
LW dstcld7,4
LW dstcld8,4
LWL 1,1|AFunc,DEL_PROC_AND_OBJ
SND_CRUMBLE
; .WORD 0F321H,60,0A30BH,0
.WORD 0F37FH,86,0A33EH,0
**************************************************************************
* *
* SPOTLIGHT VECTORS *
* *
**************************************************************************
SPOTLIGHT_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,SPOTLIGHT_CVECT
WL 0,DUMCRETS
SPOTLIGHT_COLLVECT2
WWL OID_GRND,0FFFFH,SPOTLIGHT_GROUND_CVECT
WL 0,DUMCRETS
SPOTLIGHT_GROUND_CVECT
SOUNDZ SND_SPOT_CRUNCH
SOUNDZ SND_SPOT_SHATTER
JAUC DELETE_OBJ
SPOTLIGHT_CVECT
CALLA UNIV_COLL_CHECK
JRNZ SPOTLIGHT_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 1000,A1
CLR A9
CALLA PRINT_SCORE
SOUNDZ SND_SPOT_CRUNCH
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
MOVI 03000H,A14
MOVE A14,*A8(OYACCEL),W
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14
MOVE A14,*A8(OFLAGS),W
MOVI SPOTLIGHT_COLLVECT2,A14
MOVE A14,*A8(OCVECT),L
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U5,B14
CALLA Fragger
MOVI MOL14d,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
SPOTLIGHT_GUNVECT
SOUNDZ SND_SPOT_HIT
MOVE *A8(OYACCEL),A14,W
JRNZ SPOTLIGHT_DONE
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRN SLG_CHECK ;BR=IT'S ANIMATING
CLR A5
MOVI M_STAY|M_FLASHOBJ,A7
CLR A9
JAUC UNIV_DAMAGE_HANDLER
SLG_CHECK
MOVE *A8(OIMG),A14,L
CMPI MOL13,A14
JREQ SLG_OUT
CMPI MOL14,A14
JRNE SPOTLIGHT_DONE
SLG_OUT
MOVI 1000,A1
CLR A9
CALLA PRINT_SCORE
SOUNDZ SND_SPOT_OUT
MOVE *A8(OULINK),A0,L
MOVI dam_tbl_SPOTOUT+M_IF_DAM,A14
MOVE A14,*A0(MAP_IMG),L
MOVI SPOTOUT_NOW_ANIM,A1
CALLA STRT_ANIM
; MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
;
; MOVI 040000H,A0
; CLR A3
; CALLA PreFrag_Center
; MOVI -0FFH,B9 ;MIN Z VEL
; MOVI -01H,B10 ;MAX Z VEL
; MOVI FRAG_S10,B14
; CALLA Fragger
;
; MOVI SHARDPAL1,A14
; MOVE A14,*A0(FPDATA),L ;SET PALETTE
;
; MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
SPOTLIGHT_DONE
RETS
dam_tbl_SPOTOUT:
.long MOL3+0
.word 1
.long dSPOTOUTsq+9
dSPOTOUTsq:
LW MOL1,3
LWW MOL3,3|AFlip,M_FLIPH
LW MOL5,3
LW MOL7,3
LW MOL9,3
LW MOL11,3
SPOTOUT_NOW_ANIM
LWW MOL11,4|AFlip,0
LW MOL9,4
LW MOL7,5
LW MOL5,5
LWL MOL1,1|AFunc,PULL_ANIM
SND_SPOT_CRUNCH
.WORD 0F321H,60,0A147H,0
SND_SPOT_SHATTER
.WORD 0F320H,64,0A32EH,0
SND_SPOT_HIT
.WORD 0F308H,30,0A120H,0
SND_SPOT_OUT
.WORD 0F310H,47,0A32BH,0
**************************************************************************
* *
* STAR ON THE DRESSING ROOM DOOR VECTORS *
* *
**************************************************************************
STAR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,STAR_CVECT
WL 0,DUMCRETS
STAR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ STAR_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
STAR_GUNVECT
MOVI 1000,A1
CLR A9
CALLA PRINT_SCORE
SOUNDZ SND_SPOT_CRUNCH
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_U20,B14
CALLA Fragger
MOVI RSTAR1p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVK 1,A14
MOVE A14,@SCROLL_FLAG,W
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
JAUC DELETE_OBJ ; AND DELETE
STAR_DONE
RETS
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * DRESSING ROOM DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
**************************************************************************
* *
* DRESSING ROOM LAMP VECTORS *
* *
**************************************************************************
DLAMP_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DLAMP_CVECT
WL 0,DUMCRETS
DLAMP_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DLAMP_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
JRUC DLAMP_GO
DLAMP_GUNVECT
MOVI [30-5,0-22],A3
MOVI [47-5,46-22],A4
CALLA BOX_CHECK_OBJ
JRZ DLAMP_DONE
DLAMP_GO
MOVE @BLACKOUT,A14,W
JRNZ DLAMP_DONE ;BR=LIGHTS OUT! BLACKOUT!
MOVI 500,A5 ;POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_DLAMP_BREAK
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
MOVI [27,0],A4
CALLA PreFrag_Offset
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI -010000H,B7 ;MINIMUM Y VELOCITY
MOVI FRAG_U5,B14
CALLA Fragger
MOVI NGLAMP3p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MOVI FRAG_SS10,B14
CALLA Fragger
MOVI SHARDPAL1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
CLR B3 ;CLEAR X VELOCITY
CLR B4
CLR B7 ;CLEAR Y VELOCITY
CLR B8
CLR B9 ;CLEAR Z VELOCITY
CLR B10
MOVI FRAG_ONE_SPARK,B14
CALLA Fragger
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
DLAMP_DONE
RETS
SND_DLAMP_BREAK
.WORD 0F340H,75,083CEH,0 ;Lamp break
**************************************************************************
* *
* MIRROR LIGHT VECTORS *
* *
**************************************************************************
MLIGHT_COLLVECT
; WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PROCKET,~MASK_PLAYER,MLIGHT_CVECT
WWL OID_PEXPLOSION,~MASK_PLAYER,MLIGHT_CVECT
WL 0,DUMCRETS
MLIGHT_CVECT
; CALLA UNIV_COLL_CHECK
; JRNZ MLIGHT_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MLIGHT_GUNVECT
MOVI 500,A1
CLR A9
CALLA PRINT_SCORE
SOUNDZ SND_DLAMP_BREAK
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_SS5,B14
CALLA Fragger
MOVI SHARDPAL1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
JAUC DELETE_OBJ ; AND DELETE
MLIGHT_DONE
RETS
**************************************************************************
* *
* BUNCH OF FLOWERS VECTORS *
* *
**************************************************************************
FLOWERS_COLLVECT
; WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PROCKET,~MASK_PLAYER,FLOWERS_CVECT
WWL OID_PEXPLOSION,~MASK_PLAYER,FLOWERS_CVECT
WL 0,DUMCRETS
FLOWERS_CVECT
; CALLA UNIV_COLL_CHECK
; JRNZ FLOWERS_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
JRUC FLOWERS_GO
FLOWERS_GUNVECT
MOVI [56-75,30-34],A3
MOVI [75-75,38-34],A4
CALLA BOX_CHECK_OBJ
JRNZ FLOWERS_GO
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CLR A4
CALLA PreFrag_Gun
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_SS5,B14
CALLA Fragger
MOVI FLOWR2p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
FLOWERS_GO
MOVI 1000,A5 ;POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_VASE_SHATTER
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_SS20,B14
CALLA Fragger
MOVI FLOWR2p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MOVI 040000H,A0
CLR A3
CLR A4
CALLA PreFrag_Offset
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_SS10,B14
CALLA Fragger
MOVI SHARDPAL1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MOVI 040000H,A0
CLR A3
MOVI [-35,0],A4
CALLA PreFrag_Offset
MOVI -028000H,B3 ;MIN X VEL
MOVI -08000H,B4 ;MAX X VEL
MOVI -010000H,B8 ;MAX Y VEL
MOVI -0190H,B9 ;MIN Z VEL
MOVI -010H,B10 ;MAX Z VEL
MOVI FRAG_FLOWERS,B14
CALLA Fragger
MOVE *A8(OCTRL),*A0(FPDATA),W ;PASS VASE FLIP
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
FLOWERS_DONE
RETS
SND_VASE_SHATTER
.WORD 0F310H,44,0A173H,0
FRAG_FLOWERS
.long FLOWER_FLY_ANIM,F_FLOWER_STUFF
.word OID_JUNK,(4 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLP+FRGPAL)
.long FLOWER_FLY_ANIM,F_FLOWER_STUFF
.word OID_JUNK,(2 << 11) + (1 << 6) + (FRGBOG+FRGGCOL+FRGNOFLP+FRGPAL)
.long 0
FLOWER_FLY_ANIM
LW DFLURB2,5
LW DFLURB5,1
LWL 1,2|AFunc,A_CHECK_FLOWER
LW DFLURB6,3
LWLL DFLURB9,1|AFunc,A_AnimScr+2,FLOWER_LUPE
FLOWER_LUPE
LWL 1,4|AFunc,A_DELETE_ZBOT
.long 0
**************************************************************************
* *
* A_CHECK_FLOWER - CHECK FLOWERS VELOCITY *
* *
* A8 = FLOWER OBJECT *
* *
**************************************************************************
A_CHECK_FLOWER
MOVE *A8(OYVEL),A14,L
CMPI 03000H,A14
JRGE A_CF_DONE
MOVE *A8(AnimFrm),A14,L
SUBI 020H+010H+020H,A14
MOVE A14,*A8(AnimFrm),L
A_CF_DONE
RETS
**************************************************************************
* *
* F_FLOWERS_STUFF - DO STUFF TO DA FLOWER FRAGMENTS *
* *
* A0 = Ptr to un-inserted object. *
* *
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
* *
**************************************************************************
F_FLOWER_STUFF
MOVI FRAG_FLOWER_COLL,A14
MOVE A14,*A0(OCVECT),L ;Set up chunk with Vectors
MOVI SHRED_GUNVECT,A14
MOVE A14,*A0(OGUNVECT),L ;MAKE IT SHREDABLE
MOVE *A13(FPDATA),A1,W ;GET VASE FLIP
ANDI M_FLIPH,A1
MOVE A0,A7
MOVI 256,A0
CALLA RANDPER
JRNC F_FS_GO
XORI M_FLIPH,A1
F_FS_GO
MOVE A7,A0
MOVE *A0(OCTRL),A14,W
ANDNI M_FLIPH,A14 ;FLIP TO POINT RIGHT
OR A1,A14
MOVE A14,*A0(OCTRL),W
MOVE A1,A1
JRZ F_FS_DONE ;BR=WE'RE UNFLIPPED. NEGATIVE OXVEL OK!
MOVE *A0(OXVEL),A14,L
NEG A14
MOVE A14,*A0(OXVEL),L
F_FS_DONE
RETS
FRAG_FLOWER_COLL
WWL OID_GRND,0FFFFH,DELETE_OBJ
WL 0,DUMCRETS
**************************************************************************
* *
* SHRED_GUNVECT - SHRED AN OBJECT *
* *
* A8 = OBJECT *
* *
**************************************************************************
SHRED_GUNVECT
MOVI 10000,A1
CLR A9
CALLA PRINT_SCORE
SOUNDZ SND_SHRED
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_SS10,B14
CALLA Fragger
MOVE *A8(OIMG),A1,L
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE *A8(OULINK),A14,L
JAZ DELETE_OBJ ;BR=DELETE A NON-UNIVERSE OBJECT
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
JAUC DELETE_OBJ ; AND DELETE
RETS
SND_SHRED
.WORD 0F308H,31,0A15AH,0
**************************************************************************
* *
* DAMAGE VECTOR TABLES *
* *
**************************************************************************
LA_BATHROOM_VECT_TABLE
;1, 2
.LONG 0,0,0,0
;3, 4
.LONG 0,0,TRASHCAN_COLLVECT,TRASHCAN_GUNVECT
;5, 6
.LONG MIRROR_COLLVECT,MIRROR_GUNVECT,0,0
;7, 8
.LONG 0,0,0,0
;9, 10
.LONG 0,0,0,0
;11, 12
.LONG DRIER_COLLVECT,DRIER_GUNVECT,DRY_VENT_COLLVECT,DRY_VENT_GUNVECT
;13, 14
.LONG SOAPBOX_COLLVECT,SOAPBOX_GUNVECT,SINK_COLLVECT,SINK_GUNVECT
;15, 16
.LONG STALLDOOR_COLLVECT,STALLDOOR_GUNVECT,THAND_COLLVECT,THAND_GUNVECT
;17, 18
.LONG TSEAT_COLLVECT,TSEAT_GUNVECT,TBAS_COLLVECT,TBAS_GUNVECT
;19, 20
.LONG TPAPER_COLLVECT,TPAPER_GUNVECT,POOPBOY_COLLVECT,POOPBOY_GUNVECT
;21, 22
.LONG 0,0,0,0
;23, 24
.LONG 0,0,0,0
;25, 26
.LONG 0,0,0,0
;27, 28
.LONG 0,0,0,0
;29, 30
.LONG 0,0,0,0
;31, 32
.LONG 0,0,0,0
LA_STAGE_VECT_TABLE
;1, 2
.LONG 0,0,RLADDER_COLLVECT,RLADDER_GUNVECT
;3, 4
.LONG CAN_COLLVECT,CAN_GUNVECT,LID_COLLVECT,LID_GUNVECT
;5, 6
.LONG DELITRAY_COLLVECT,DELITRAY_GUNVECT,SEATS_COLLVECT,SEATS_GUNVECT
;7, 8
.LONG PASPEAKER_COLLVECT,PASPEAKER_GUNVECT,MONITOR_COLLVECT,MONITOR_GUNVECT
;9, 10
.LONG BALCONY_COLLVECT,BALCONY_GUNVECT,PROSC_COLLVECT,PROSC_GUNVECT
;11, 12
.LONG PILLAR_COLLVECT,PILLAR_GUNVECT,SPOTLIGHT_COLLVECT,SPOTLIGHT_GUNVECT
;13, 14
.LONG 0,0,0,0
;15, 16
.LONG 0,0,STAR_COLLVECT,STAR_GUNVECT
;17, 18
.LONG 0,0,0,0
;19, 20
.LONG 0,0,0,0
;21, 22
.LONG DLAMP_COLLVECT,DLAMP_GUNVECT,0,0
;23, 24
.LONG 0,0,0,0
;25, 26
.LONG 0,0,0,0
;27, 28
.LONG 0,0,0,0
;29, 30
.LONG 0,LSWITCH_GUNVECT,0,0
;31, 32
.LONG 0,0,0,0
*
* Aerosmith's dressing room
*
LA_DRESS_VECT_TABLE
;1, 2
; .LONG 0,0,RLADDER_COLLVECT,RLADDER_GUNVECT
.LONG 0,0,0,0
;3, 4
.LONG CAN_COLLVECT,CAN_GUNVECT,LID_COLLVECT,LID_GUNVECT
;5, 6
.LONG DELITRAY_COLLVECT,DELITRAY_GUNVECT,SEATS_COLLVECT,SEATS_GUNVECT
;7, 8
.LONG PASPEAKER_COLLVECT,PASPEAKER_GUNVECT,MONITOR_COLLVECT,MONITOR_GUNVECT
;9, 10
.LONG BALCONY_COLLVECT,BALCONY_GUNVECT,PROSC_COLLVECT,PROSC_GUNVECT
;11, 12
.LONG PILLAR_COLLVECT,PILLAR_GUNVECT,SPOTLIGHT_COLLVECT,SPOTLIGHT_GUNVECT
;13, 14
.LONG 0,0,0,0
;15, 16
.LONG 0,0,STAR_COLLVECT,STAR_GUNVECT
;17, 18
.LONG CTABLE_COLLVECT,CTABLE_GUNVECT,BOTTLE_COLLVECT,BOTTLE_GUNVECT
;19, 20
.LONG FLOWERS_COLLVECT,FLOWERS_GUNVECT,DGITAR_COLLVECT,DGITAR_GUNVECT
;21, 22
.LONG DLAMP_COLLVECT,DLAMP_GUNVECT,MLIGHT_COLLVECT,MLIGHT_GUNVECT
;23, 24
.LONG MONITOR_COLLVECT,MONITOR_GUNVECT,FCHAIR_COLLVECT,FCHAIR_GUNVECT
;25, 26
.LONG DMIRROR_COLLVECT,DMIRROR_GUNVECT,0,PBUTTON_GUNVECT
;27, 28
.LONG DOLL_COLLVECT,DOLL_GUNVECT,FRUIT_COLLVECT,FRUIT_GUNVECT
;29, 30
.LONG 0,LSWITCH_GUNVECT,0,0
;31, 32
.LONG 0,0,0,0
.end