.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