revolution-x/GXLA1.ASM

3929 lines
85 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 "GXLA1.ASM"
.TITLE " <<< GENERATION X -- LA UNIVERSE ROUTINES PART 1 >>>"
.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 "GXLA1.TBL"
*** SYMBOLS IN HERE
.DEF LAVA_SHATTER_HOOK,LAVADAM2,LAVADAM3,LAVADAM4,LAVADAM5,LAVADAM6,LAVADAM7
.DEF LA_OUTSIDE2_VECT_TABLE,WC_MAKE_GLASS
.DEF LA_LOBBY_BAR_VECT_TABLE
.DEF LA_OUTSIDE1_VECT_TABLE, S_CHECK_TICKET_WINDOWS
.DEF FLASH_GITAR_PROC
.DEF LID_GUNVECT, LID_COLLVECT, CAN_GUNVECT, CAN_COLLVECT
.DEF CTABLE_GUNVECT, CTABLE_COLLVECT, BOTTLE_GUNVECT, BOTTLE_COLLVECT
.DEF GLASS_COLLVECT, SND_SWAT, BREAK_WINDOW, AU_GITAR_SND
.DEF DUMPSTER_COLLVECT, DUMPSTER_GUNVECT, FRAG_FZZZ_ANIM
.def PHONE_COLLVECT,PHONE_GUNVECT
.def RECEIVER_COLLVECT,RECEIVER_GUNVECT,COIN_DOOR_COLLVECT,COIN_DOOR_GUNVECT
.DEF PALMTREETOP_COLLVECTR,PALMTREETOP_GUNVECT
* SYMBOLS IN GXLA2.ASM
.REF TRASHCAN_GUNVECT, TRASHCAN_COLLVECT, SND_PIPE_DING
.REF MIRROR_GUNVECT, MIRROR_CVECT2, DLAMP_GUNVECT, DLAMP_COLLVECT
.REF FLOWERS_COLLVECT,FLOWERS_GUNVECT,MLIGHT_COLLVECT,MLIGHT_GUNVECT
.REF MIRROR_COLLVECT
* SYMBOLS IN GXLA3.ASM
.REF WLAMP_GUNVECT
.REF WLAMP_COLLVECT, PORTDOOR_COLLVECT
.REF FCHAIR_COLLVECT,FCHAIR_GUNVECT
***** From GXUNIFX.ASM
.REF GOT_TROG, MAKE_TROG_PROC, GITTEN_KITTEN, CAT_DONE
***** From GXUNIJP2.ASM
.REF METAL_GUNVECT
* SYMBOLS FROM GXAFUNC.ASM
.REF A_DELETE_ZBOT
* SYMBOLS IN GXJUNGLE.ASM
.ref MAKE_VIDCAM_SND
* SYMBOLS IN GXKERRI.ASM
.ref KERCAGE_COLLVECT, KERCAGE_GUNVECT
* SYMBOLS IN ?
.ref DGV_FRAG_SPARK
* SYMBOLS IN GXNONBOY.ASM
.REF FALLING_DEATH_ANIM, WINBOY_DEATH_ANIM
* SYMBOLS IN GXSCROLL.ASM
.REF PORTAL_LOCKOUT
* SYMBOLS IN GXPOWER.ASM
.REF REVEAL_CD2, REVEAL_SBOMB2, REVEAL_LIFE2, REVEAL_SHIELD
* SYMBOLS IN GXUNIV1.ASM
.REF FRAG_U1_X2
* SYMBOLS IN GXRAM.ASM
.REF ENERGY_AWARDS
* SYMBOLS IN GXHELI.ASM
.REF GET_PCENTRY
; .BSS ZFAR_FOLLOW,32 ;ZFAR FOLLOW THIS
.BSS PHONE_FLAG,16 ;PHONE RECORDING FLAG
.bss filler,16 ; to keep long word aligned
.TEXT
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * LOBBY DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
**************************************************************************
* *
* TICKET WINDOW VECTORS *
* *
**************************************************************************
TWINDOW_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,TWINDOW_CVECT
WL 0,DUMCRETS
TWINDOW_CVECT
; CHKZLIM 078A7H+010H,TWG_DONE
CALLA UNIV_COLL_CHECK
JRNZ TWG_DONE
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
JRUC TWG_STOP
TWINDOW_GUNVECT
; CHKZLIM 078A7H+010H,TWG_DONE
MOVI [-90, -26],A3
MOVI [-43, 26],A4
CALLA BOX_CHECK_OBJ
JRZ TWG_DONE ;BR=NOT THE WINDOW PART
SOUNDZ SND_WINDOW_CRACK
MOVE *A8(OFLAGS),A14,W
BTST B_NOPIXSCAN,A14
JRZ TWG_DONE ;BR=WINDOW ALREADY BROKE
; MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
MOVK M_FLASHOBJ,A7 ;FLASH
MOVI 500,A5 ;500 POINTS
MOVE *A8(OULINK),A0,L
MOVB *A0(MAP_ID+8),A14 ;GET CURRENT DAMAGE LEVEL
CMPK 1,A14
JRNE TWG_GO
MOVE *A2(PPLASMASHOTS),A14,W
JRNZ TWG_STOP ;BR=BIG GUN
MOVE *A0(MAP_OBJ),A14,W ;GET CURRENT COUNT
SLL 28,A14
SRL 28,A14
CMPK 3,A14
JRNE TWG_GO
TWG_STOP
CALLA STOP_ENEMIES
TWG_GO
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC TWG_DONE ;BR=NOT THE LAST
MOVI DUMCOLL,A14
MOVE A14,*A8(OCVECT),L
MOVE *A8(OFLAGS),A14,W ;TURN ON PIXEL SCANNING
ANDNI M_NOPIXSCAN,A14
MOVE A14,*A8(OFLAGS),W
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9
MOVI -01H,B10
MOVI FRAG_S20,B14
CALLA Fragger
MOVI SHARDPAL1,A5 ;SILVER PALETTE
MOVE A5,*A0(FPDATA),L ;SET PALETTE
MOVE *A8(OIHOFF),A14,W
JRNZ TWG_FRAG_DONE ;BR=DON'T MAKE SMALL PIECES
MOVI FRAG_SS10,B14
CALLA Fragger
MOVE A5,*A0(FPDATA),L ;SET PALETTE
TWG_FRAG_DONE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
JRUC WC_MAKE_GLASS
TWG_DONE
RETS
**************************************************************************
* *
* S_CHECK_TICKET_WINDOWS *
* *
**************************************************************************
S_CHECK_TICKET_WINDOWS
MOVI FGLIST,A8
MOVI BOXOWIN3b,A9 ;LOOK FOR THIS
S_CTW_RESTART
MOVE A8,A0
CLR A1
JRUC S_CTW_NEXT
S_CTW_LUPE
MOVE *A0(OIMG),A14,L ;CHECK IMAGES
CMP A9,A14
JRNE S_CTW_NEXT
INC A1
S_CTW_NEXT
MOVE *A0,A0,L
CMP A8,A0
JRNE S_CTW_LUPE ;BR=NOT END OF LIST
CMPK 3,A1
JREQ S_CTW_GO
SLEEP 1
JRUC S_CTW_RESTART
S_CTW_GO
SLEEP 60
JAUC SCRL_DISPATCHER
**************************************************************************
* *
* BREAK_WINDOW - CAUSE WINDOW TO BREAK IF NONBOY FLIES THROUGH IT *
* *
* PASS: *
* A8 = NONBOY OBJECT *
* RETURN: *
* A1 = NONBOY DEATH ANIMATION IF NO BREAK *
* *
**************************************************************************
BREAK_WINDOW
PUSH A8
; MOVE *A8(ONATEROCKET),A0,L
; JR-- BW_NOBREAK ;BR=ROCKET COLLISION
MOVE *A8(ONATEEXPLO),A0,L
JRNZ BW_NOBREAK ;BR=EXPLOSION COLLISION
MOVE *A8(OXVAL),A5,L
MOVI FGLIST,A0
; MOVE A0,A8
MOVI BOXOWIN1b,A3 ;CHANGE THIS
MOVI BOXOWIN2b,A4 ;OR THIS
MOVI 060000H,A6
JRUC BW_NEXT
BW_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A3,A14
JREQ BW_CHECK
CMP A4,A14
JRNE BW_NEXT
BW_CHECK
MOVE *A8(OXVAL),A14,L
SUB A5,A14
ABS A14
CMP A6,A14
JRGT BW_NEXT ;BR=OUTSIDE X RANGE
MOVE A2,A9 ;PLAYER
CALLA STOP_ENEMIES
MOVE *A8(OPLINK),A0,L
JRZ BW_NOKILL ;BR=NO FLASH PROC TO KILL
CLR A14
MOVE A14,*A8(OPLINK),L
CALLA KILL
BW_NOKILL
CREATE PID_IND,BREAK_WINDOW_PROC
MOVE A0,*A8(OPLINK),L
PULLQ A8
MOVE *A8(OYVAL),A14,L
SUBI 10 << 15,A14 ;MOVE NONBOY UP
MOVE A14,*A8(OYVAL),L
MOVI FALLING_DEATH_ANIM,A1
RETS
BW_NEXT
MOVE *A8(OBLINK),A8,L
CMP A0,A8
JRNE BW_LUPE ;BR=NOT END OF LIST
;GLASS ALREADY SHATTERED
BW_NOBREAK
MOVI WINBOY_DEATH_ANIM,A1 ;FALL BACK ANIMATION
PULLQ A8
RETS
BREAK_WINDOW_PROC
SLEEP 10
MOVE A9,A2 ;PLAYER
MOVI 25000,A5
CLR A14
MOVE A14,*A8(OPLINK),L ;MAKE FLASH HAPPEN
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CALLR TWG_GO
DIE
**************************************************************************
* *
* PHONE VECTORS *
* *
**************************************************************************
SND_TONE_0
.WORD 0F351H,6,0A36EH,0
SND_TONE_1
.WORD 0F351H,6,0A371H,0
SND_TONE_2
.WORD 0F351H,6,0A374H,0
SND_TONE_3
.WORD 0F351H,6,0A377H,0
SND_TONE_4
.WORD 0F351H,6,0A37AH,0
SND_PHONE_RECORDING
.WORD 0E350H,120,0836BH,173,08368H,0
SND_DIAL_TONE
; .WORD 0E350H,120,0836BH,0
.WORD 0E350H,319,0836BH,0
SND_COINS_JACKPOT
.WORD 0E321H,62,0A35DH,0
SND_COINS_BOUNCE
.WORD 0F321H,277,0A163H,0
SND_PHONE_EXPLODE
.WORD 0F320H,61,0A126H,0
SND_COIN_DOOR_DING
.WORD 0F320H,45,0A13EH,0
SND_RECEIVER_BOING
.WORD 0F310H,82,0A15DH,0
SND_SIGN_CLANG
.WORD 0F310H,30,0A111H,0
SND_PHONE_HIT
.WORD 0F308H,34,0A160H,0
SND_RECEIVER_HIT
.WORD 0F308H,31,0A15AH,0
TONE_TBL
.LONG SND_TONE_0,SND_TONE_1,SND_TONE_2,SND_TONE_3
PHONE_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,PHONE_CVECT
WL 0,DUMCRETS
PHONE_CVECT
CHKZLIM 01239AH+010H,PHG_DONE
CALLA UNIV_COLL_CHECK
JRNZ PHG_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 PHONE_GO
PHONE_GUNVECT
CHKZLIM 01239AH+010H,PHG_DONE
MOVI PHONE_BOX_TBL,A0
CALLA TABLE_BOX_CHECK
JRZ PHG_DONE ;BR=NO GOOD
DEC A1
JRNZ PHONE_NO_TONE
MOVK 4,A0
CALLA RAND0
SLL 5,A0
ADDI TONE_TBL,A0
MOVE *A0,A0,L
JAUC ONESND_Z
PHONE_NO_TONE
MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
PHONE_GO
SOUNDZ SND_PHONE_HIT
MOVI 500,A5 ;500 POINTS
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC PHG_DONE
SOUNDZ SND_PHONE_EXPLODE
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Center
MOVI -0FFH,B9
MOVI -01H,B10
MOVI FRAG_U10,B14
CALLA Fragger
MOVI PAYPHON2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE *A8(OXVAL),A7,L
MOVI FGLIST,A0
; MOVE A0,A8
MOVI RECEIVER1,A3 ;CHANGE THIS
MOVI PCOINB1,A4 ;CHANGE THIS
MOVK 2,A5
JRUC PHG_NEXT
PHG_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A3,A14
JRNE PHG_OTHER
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMPI 050000H,A14
JRGT PHG_NEXT
; MOVB *A8(OFLAGS+B_ANIM-7),A14
; JRN PHG_NEXT ;BR=IT'S ANIMATING
DEC A5
CLR A3
MMTM SP,A0,A3,A4,A5,A7,A8
MOVK 1,A5 ;RECEIVER KABOOM FLAG
CALLR RECEIVER_KABOOM
MMFM SP,A0,A3,A4,A5,A7,A8
JRUC PHG_NEXT
PHG_OTHER
CMP A4,A14
JRNE PHG_NEXT
MOVE *A8(OXVAL),A14,L
SUB A7,A14
ABS A14
CMPI 050000H,A14
JRGT PHG_NEXT
MOVE *A8(OULINK),A14,L
JRZ PHG_NEXT
DEC A5
CLR A4
MMTM SP,A0,A3,A4,A5,A7,A8
CLR A3
CLR A5
CALLR COIN_DOOR_KABOOM
MMFM SP,A0,A3,A4,A5,A7,A8
PHG_NEXT
MOVE A5,A5
JRZ PHG_DONE
MOVE *A8(OBLINK),A8,L
CMP A0,A8
JRNE PHG_LUPE ;BR=NOT END OF LIST
PHG_DONE
RETS
PHONE_BOX_TBL
.LONG [20,12],[29,20] ;KEYPAD
.LONG [9,8],[37,24] ;DAMAGE AREA
.LONG -1
**************************************************************************
* *
* PHONE RECEIVER VECTORS *
* *
**************************************************************************
RECEIVER_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,RECEIVER_CVECT
WL 0,DUMCRETS
RECEIVER_COLLVECT2
WL 0,RECEIVER_BLOWUP
RECEIVER_CVECT
CHKZLIM 01239AH+010H,REG_DONE
MOVE *A8(OIMG),A14,L
CMPI RECEIVER6,A14
JREQ RECEIVER_BLOWUP ;BR=WRONG COLLVECT IS SET
CALLA UNIV_COLL_CHECK
JRNZ REG_DONE
RECEIVER_BLOWUP
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
clr a5
jruc RECEIVER_KABOOM
RECEIVER_GUNVECT
CHKZLIM 01239AH+010H,REG_DONE
CLR A5
RECEIVER_KABOOM
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRNN REG_STILL ;BR=IT'S NOT ANIMATING
MOVE *A8(AnimScr),A14,L
CMPI dSWINGsq,A14
JRNE REG_DONE ;BR=WE'RE FALLING
MOVK 1,A14 ;SET ANIMATION LOOP FLAG
MOVB A14,*A8(AnimLoop)
RETS
REG_STILL
CLR A14
MOVB A14,*A8(AnimLoop)
MOVI SND_RECEIVER_HIT,A0
MOVE *A8(OIMG),A14,L
CMPI RECEIVER1,A14
JRNE REG_SND
CREATE PID_IND,PHONE_RECORDING_PROC
MOVI SND_RECEIVER_BOING,A0
REG_SND
CALLA ONESND_Z
CLR A7
MOVE A5,A5
JRNZ REG_GO ;BR=NO POINTS FOR KABOOM
MOVE *A8(OULINK),A0,L
MOVI RECEIVER_DAM_TBL+M_IF_DAM,A1
MOVE *A0(MAP_IMG),A14,L
CMP A1,A14
JREQ REG_GO ;BR=NO POINTS
MOVI 500,A5 ;500 POINTS
MOVK M_FLASHOBJ,A7 ;FLASH
REG_GO
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVE A1,*A0(MAP_IMG),L ;RESET DAMAGE TABLE
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 RECEIVER_COLLVECT2,A14
MOVE A14,*A8(OCVECT),L
REG_DONE
RETS
PHONE_RECORDING_PROC
MOVE @PHONE_FLAG,A14,W
JRNZ PRP_TONE
SLEEP 40
SOUNDZ SND_PHONE_RECORDING
MOVK 1,A14
MOVE A14,@PHONE_FLAG,W
DIE
PRP_TONE
SOUNDZ SND_DIAL_TONE
DIE
RECEIVER_DAM_TBL:
.long RECEIVER6+0
.word 1
.long dSWINGsq+9
dSWINGsq:
LWWL RECEIVER5,3|AFlip|AFunc,M_FLIPH,AU_RESET_LUPE
LW RECEIVER4,3
LW RECEIVER5,2
LWW RECEIVER6,2|AFlip,0
LW RECEIVER5,2
LW RECEIVER4,2
LW RECEIVER5,2
LWL RECEIVER6,3|AFunc,AU_CHECK_LUPE+2,dSWINGsq
LWW RECEIVER5,3|AFlip,M_FLIPH
LWWL RECEIVER6,1|AFlip|AFunc,0,PULL_ANIM
**************************************************************************
* *
* COIN DOOR VECTORS *
* *
**************************************************************************
COIN_DOOR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,COIN_DOOR_CVECT
WL 0,DUMCRETS
COIN_DOOR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ CDG_ABORT
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
CLR A3 ;NO CURSOR POSITION, FLY RANDOM
COIN_DOOR_GUNVECT
CHKZLIM 01239AH+010H,CDG_ABORT
MOVI 500,A5 ;500 POINTS
COIN_DOOR_KABOOM
MOVK M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVE *A8(OIHOFF),A14,W
JRNZ CDG_COIN_DOOR ;BR=WE'RE FAR AWAY
MOVE @ZSCROLL,A14,L
JRN CDG_COIN_DOOR ;BR=NOT IF WE'RE BACKIN' UP
SOUNDZ SND_COINS_JACKPOT
CREATE PID_IND,MAKE_BOUNCING_COINS_SND_PROC
MOVE A8,A14
ADDI OXVAL,A14
MMFM A14,A9,A10,A11
SRA 16,A10
SRA 16,A11
move @WAVE_UNIV,a14,L ; no coins in elevator room
cmpi GXELRM2,a14
jreq CDG_COIN_DOOR
CREATE PID_IND,MAKE_CHANGE_PROC
CDG_COIN_DOOR
MOVI COIN_DOOR_FLY,A0
JAUC THING_FLY_START
CDG_ABORT
RETS
MAKE_BOUNCING_COINS_SND_PROC
SLEEP 20
SOUNDZ SND_COINS_BOUNCE
DIE
* .WORD OFLYSCORE, OFLYSCOREINC *
* .LONG OFLYHITSND, OFLYYVEL *
* .WORD OFLYXSLL, OYACCEL, OZVEL *
COIN_DOOR_FLY
.LONG [5000, 5000], SND_COIN_DOOR_DING, -020000H
.WORD 13, 02000H, -080H
**************************************************************************
* *
* MAKE_CHANGE_PROC *
* *
**************************************************************************
MAKE_CHANGE_PROC
MOVI 20,A8
MCP_LUPE
MOVE A9,B0
MOVE A11,B1
MOVE A11,B2
MOVE A10,B5
MOVE A10,B6
MOVI -04000H,B3
MOVI 04000H,B4
CLR B7
MOVI 01000H,B8
CLR B9
CLR B10
* B0 = OZVAL *
* B1 = min Xpos *
* B2 = max Xpos *
* B3 = min Xvel *
* B4 = max Xvel *
* B5 = min Ypos *
* B6 = max Ypos *
* B7 = min Yvel *
* B8 = max Yvel *
* B9 = min Zvel *
* B10 = max Zvel *
MOVI COINS_FRAG,B14
CALLA Fragger
SLEEP 5
MOVE @ZBASE,A6,L ;GET Z OFFSET FROM UNIVERSE TO WORLD
MOVE @ZFAR,A5,L
ADD A6,A5
ADDI ZMAX_KLUDGE,A6
CMP A6,A9
JALT SUCIDE
CMP A5,A9
JAGT SUCIDE
DSJ A8,MCP_LUPE
DIE
COINS_FRAG
.long COIN_ANIM,COIN_STUFF
.word OID_JUNK,(1 << 11) + (0 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
.long 0
**************************************************************************
* *
* COIN_STUFF *
* *
**************************************************************************
COIN_STUFF
MOVI 03000H,A14
MOVE A14,*A0(OYACCEL),W
MOVI COIN_CVECT,A14
MOVE A14,*A0(OCVECT),L
RETS
COIN_CVECT
WWL OID_GRND,0FFFFH,COIN_GRND_COLL
WL 0,DUMCRETS
COIN_GRND_COLL
MOVE *A8(OYVEL),A14,L
JAN DELETE_OBJ ;BR=GOING UP
JAZ DELETE_OBJ ;BR=STOPPED
MOVE A14,A0
SRA 2,A0
SUB A0,A14
CMPI 010000H,A14
JALT DELETE_OBJ ;BR=BELOW MINIMUM VELOCITY
NEG A14 ;REVERSE VELOCITY
MOVE A14,*A8(OYVEL),L
RETS
COIN_ANIM
LW COINa1,3
LW COINa2,3
LW COINa3,3
LW COINa4,3
LW COINa5,3
LW COINa6,3
LW COINa7,3
.long 0
**************************************************************************
* *
* SIGN PORTAL DAMAGE VECTORS *
* *
**************************************************************************
FLEASIGN_PORTAL_DAMAGE_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,FLEASIGN_PORTAL_DAMAGE_CVECT
WL 0,DUMCRETS
SIGN_PORTAL_DAMAGE_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,SIGN_PORTAL_DAMAGE_CVECT
WL 0,DUMCRETS
FLEASIGN_PORTAL_DAMAGE_GUNVECT
SOUNDZ SND_SIGN_CLANG
MOVE @SCROLL_FLAG,A14,W
JRNZ SPD_DONE ;BR=NOT ALLOWED
JRUC SPD_LOCKOUT
FLEASIGN_PORTAL_DAMAGE_CVECT
MOVE @SCROLL_FLAG,A14,W
JRNZ SPD_DONE ;BR=NOT ALLOWED
SIGN_PORTAL_DAMAGE_CVECT
MOVE @PORTAL_LOCKOUT,A0,W
JRNZ SPD_DONE ;BR=NOT ALLOWED
CALLA UNIV_COLL_CHECK
JRNZ SPD_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
SIGN_PORTAL_DAMAGE_GUNVECT
SOUNDZ SND_SIGN_CLANG
SPD_LOCKOUT
MOVE @PORTAL_LOCKOUT,A0,W
JRNZ SPD_DONE ;BR=NOT ALLOWED
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
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 ;500 POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;NO MORE DAMAGE AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JAUC PORTAL_GUNVECT
SPD_DONE
RETS
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * BAR DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
LAVA_LAMP_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,LAVA_LAMP_CVECT
WL 0,DUMCRETS
LAVA_LAMP_CVECT
CALLA UNIV_COLL_CHECK
JRNZ LLG_DONE ;BR=NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVK M_NOMORE|M_LASTFRM,A7
JRUC LLG_DAM
LAVA_LAMP_GUNVECT
MOVK M_FLASHOBJ,A7
MOVE *A8(OULINK),A0,L
MOVB *A0(MAP_ID+8),A14 ;GET CURRENT DAMAGE LEVEL
JRZ LLG_DAM ;BR=NOT DAMAGED
MOVK M_NOMORE,A7
LLG_DAM
CLR A5
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC LLG_CRACK ;BR=CRACK THE GLASS
MOVI [-40,0],A10 ;[Y,X] OFFSET
MOVK 1,A11 ;Z OFFSET
CREATE PID_IND,REVEAL_CD
MOVE *A8(OZVAL),A10,L
MOVE @ZREL_OFF,A14,L
SRA ZFRAC,A14
SUB A14,A10
CMPI 18000H,A10
JRGE LLG_JUST_CDS
MOVI [-90,0],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_SHIELD
JRUC LLG_CONT
LLG_JUST_CDS
MOVI [-80,0],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_CD
LLG_CONT
CALLA GET_FREE_LINK
JRZ LLG_DONE ;BR=NONE AVAILABLE
MOVE *A8(OCTRL),A14,W ;DO THE FLIPH THING
ANDI M_FLIPH,A14
XORI 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 LAVADAM7,A14
MOVE A14,*A0(MAP_IMG),L
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
movi lvdamp1,a11 ; set palette - was LAVADAMp
MOVE A0,A9
MOVE A2,A10
CREATE PID_IND,LAVA_SHATTER_PROC
MOVK 1,A0
MOVE A0,@UNIVERR,W ;FORCE CREATION BY UPDATE_UNIV
RETS
LLG_CRACK
SOUNDZ SND_LAVA_CRACK
LLG_DONE
RETS
**************************************************************************
* *
* LAVA_SHATTER_PROC *
* *
**************************************************************************
LAVA_SHATTER_PROC
SLEEP 1
MOVE *A9(MAP_OBJ),A0,L
JRN LAVA_SHATTER_PROC
MOVI 1000,A1
MOVE A10,A2
CLR A9
CALLA PRINT_SCORE
MOVI dLAVA2asq,A1
CALLA STRTANIM
MOVE *A8(OULINK),A0,L
MOVI LAVADAM7,A14
MOVE A14,*A0(MAP_IMG),L
CALLA STRT_ANIM
SOUNDZ SND_LAVA_SHATTER
LAVA_SHATTER_HOOK:
MOVI 030000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
MOVI FRAG_S20,B14
CALLA Fragger
MOVI SHARDPAL2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MOVI FRAG_LAVA_BLOBS,B14
CALLA Fragger
move a11,*a0(FPDATA),L ; store palette
DIE
**************************************************************************
* *
* F_BLOB_STUFF - DO STUFF *
* *
* A0 = Ptr to un-inserted object. *
* *
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
* *
**************************************************************************
F_BLOB_STUFF
MOVE *A0(OZVEL),A14,L
SUBI 080H,A14
MOVE A14,*A0(OZVEL),L
MOVI 03000H,A14
MOVE A14,*A0(OYACCEL),W
MOVI 9 << 15,A14
MOVE A14,*A0(OGRNDOFF),L
MOVI FRAG_BLOB_COLL,A14
MOVE A14,*A0(OCVECT),L ;Set up chunk with Vectors
move A0,A2
MOVE *A13(FPDATA),A0,L ;GET PALETTE
calla GETFPAL
JRNZ FB_PAL ;BR = WE HAVE PALETTE!
CLR A0
FB_PAL
move A0,*A2(OPAL),W
move A2,A0
RETS
FRAG_BLOB_COLL
WWL OID_GRND,0FFFFH,FRAG_BLOB_GRND_COLL
WL 0,DUMCRETS
FRAG_BLOB_COLL2
WWL OID_GRND,0FFFFH,FRAG_BLOB_GRND_COLL2
WL 0,DUMCRETS
**************************************************************************
* *
* FRAG_BLOB_GRND_COLL - LAVA BLOB FRAGMENT GROUND COLLISION VECTOR *
* *
* PASS: *
* A8 = OBJECT *
* *
**************************************************************************
FRAG_BLOB_GRND_COLL
MOVI 256,A0
CALLA RANDPER
JRC FBGC_BOUNCE ;BR=FOLLOW THE BOUNCING BALL
CLR A14
MOVE A14,*A8(OCVECT),L
CALLA CLR_VEL
MOVI 11 << 15,A14
MOVE A14,*A8(OGRNDOFF),L
CALLA SetOnGrnd
MOVI LAVA_BLOB_SPLAT,A1
JAUC STRT_ANIM
FBGC_BOUNCE
MOVI FRAG_BLOB_COLL2,A14
MOVE A14,*A8(OCVECT),L
FRAG_BLOB_GRND_COLL2
MOVE *A8(OYVEL),A14,L
JAN DELETE_OBJ ;BR=GOING UP
JAZ DELETE_OBJ ;BR=STOPPED
MOVE A14,A0
SRA 2,A0
SUB A0,A14 ;OYVEL=OYVEL*3/4
; SRA 1,A14 ;OYVEL=OYVEL/2
CMPI 010000H,A14
JALT DELETE_OBJ ;BR=BELOW MINIMUM VELOCITY
NEG A14 ;REVERSE VELOCITY
MOVE A14,*A8(OYVEL),L
; MOVI LAVA_BLOB_BOUNCE,A14
; MOVE A14,*A8(AnimFrm),L
; CLR A14
; MOVB A14,*A8(AnimSlp)
; RETS
MOVI LAVA_BLOB_BOUNCE,A1
JAUC STRT_ANIM
FRAG_LAVA_BLOBS
.long FRAG_LAVA_BLOB_ANIM,F_BLOB_STUFF
; .word OID_JUNK,(10 << 11) + (1 << 6) + (FRGBOG+FRGGCOL+FRGNOFLY+FRGNOFLP)
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLY+FRGNOFLP)
.long FRAG_LAVA_BLOB_ANIM,F_BLOB_STUFF
.word OID_JUNK,(5 << 11) + (0 << 6) + (FRGBOG+FRGGCOL+FRGNOFLY+FRGNOFLP)
.long 0
LAVA_BLOB_SPLAT
LW BSPLAT1,4
LW BSPLAT2,4
LW BSPLAT3,4
LW BSPLAT4,4
LW BSPLAT5,4
LWL BSPLAT6,4|AFunc,DELETE_OBJ
LAVA_BLOB_BOUNCE
LW BLOB1h,1
LW BLOB2h,1
LW BLOB3h,2
LW BLOB2h,3
LW BLOB1h,4
FRAG_LAVA_BLOB_ANIM
; LWL BLOB1,1|AFunc,PULL_ANIM
LWLL BLOB1,1|AFunc,A_AnimScr+2,LAVA_BLOB_WAIT
LAVA_BLOB_WAIT
LWL 1,4|AFunc,A_DELETE_ZBOT
.long 0
; LW BLOB1,4
; LW BLOB1v,4
; LW BLOB2v,4
; LW BLOB3v,4
; LW BLOB2v,4
; LW BLOB1v,4
; .long 0
dLAVA2asq:
LW LAVADAM2,5
LW LAVADAM3,3
LW LAVADAM4,3
LW LAVADAM5,3
LW LAVADAM6,3
LWL LAVADAM7,1|AFunc,PULL_ANIM
SND_LAVA_CRACK
.WORD 0E30BH,47,0A32BH,0
SND_LAVA_SHATTER
.WORD 0F325H,64,0A316H,0
**************************************************************************
* *
* GITAR VECTORS *
* *
**************************************************************************
GITAR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,GITAR_CVECT
WL 0,DUMCRETS
GITAR_COLLVECT2
WWL OID_GRND,0FFFFH,GITAR_CVECT2
WL 0,DUMCRETS
GITAR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ GG_DONE ;BR=NO GOOD
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
SOUNDZ SND_GITAR_TWANG
MOVI 5000,A5
MOVK M_NOMORE|M_FLASHOBJ|M_LASTFRM,A7 ;NO MORE DAMAGE
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14 ;SET GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
MOVI -20 << 15,A14
MOVE A14,*A8(OGRNDOFF),L
MOVI 03000H,A14
MOVE A14,*A8(OYACCEL),W
MOVI GITAR_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 FLYVG4ap,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
GITAR_CVECT2
CLR A14
MOVE A14,*A8(OCVECT),L
MOVE A14,*A8(OYACCEL),W
MOVE A14,*A8(OYVEL),L
MOVE *A8(OFLAGS),A14,W
ANDNI M_GCOLL,A14 ;CLEAR GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
SOUNDZ SND_GITAR_TWANG
CALLA SetOnGrnd
MOVI GITAR_TIMEOUT_ANIM,A1
JAUC STRT_ANIM
GITAR_GUNVECT
MOVK 1,A3 ;DEFAULT LOOP AND HIT SOUND
MOVE *A8(OID),A1,W
ANDI MASK_ID,A1
SRL 2,A1
CMPK 15,A1
JREQ GG_NOT_SPECIAL
MOVE *A8(OPLINK),A14,L ;THIS IS NOT A DAMAGE PROCESS!
JRZ GG_NOT_SPECIAL
SUBK 16,A1
MOVK 1,A14
SLL A1,A14
MOVE @SCROLL_FLAG,A0,W
BTST A1,A0
JRNZ GG_NOT_SPECIAL
OR A14,A0
MOVE A0,@SCROLL_FLAG,W
MOVK 2,A3 ;SET LOOP AND TWANG SOUND
GG_NOT_SPECIAL
MOVB A3,*A8(AnimLoop)
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRN GG_DONE ;BR=IT'S ANIMATING
CLR A5
MOVK M_STAY,A7 ;NO MORE DAMAGE
CLR A9 ;NO OFFSET
JAUC UNIV_DAMAGE_HANDLER
GG_DONE
RETS
GITAR_TIMEOUT_ANIM
LW 1,60
LWL 1,1|AFunc,DELETE_OBJ
**************************************************************************
* *
* AU_GITAR_SND *
* *
**************************************************************************
AU_GITAR_SND
MOVI SND_SWAT,A0
MOVB *A8(AnimLoop),A14
CMPK 2,A14
JRNE AU_GS_GO
MOVI SND_GITAR_SLIDE,A0
AU_GS_GO
CALLA ONESND_Z
JAUC AU_RESET_LUPE
SND_SWAT
.WORD 0F308H,31,0A15AH,0
SND_GITAR_TWANG
.WORD 0F320H,86,0A16AH,0
SND_GITAR_SLIDE
.WORD 0F330H,130,08167H,0
**************************************************************************
* *
* FLASH_GITAR_PROC *
* *
* PASS: *
* A9 = GITAR ID *
* *
**************************************************************************
FLASH_GITAR_PROC
MOVE A9,A11
SLL 2,A9
MOVI FGLIST,A0
MOVE A0,A8
JRUC FGP_NEXT
FGP_LUPE
MOVE *A8(OID),A14,W
ANDI MASK_ID,A14
CMP A9,A14
JRNE FGP_NEXT
MOVE *A8(OULINK),A14,L
JRNZ FGP_FOUND
FGP_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE FGP_LUPE ;BR=NOT END OF LIST
DIE
FGP_FOUND
MOVE A13,*A8(OPLINK),L
SUBK 16,A11
MOVK 20,A10
FGP_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
BTST A11,A14
JRNZ FGP_DONE
MOVE *A8(OULINK),A14,L
JRZ FGP_DONE
SLEEP 3
DSJ A10,FGP_FLASH_LUPE
FGP_DONE
CLR A14
MOVE A14,*A8(OPLINK),L
DIE
**************************************************************************
* *
* BOTTLE VECTORS *
* *
**************************************************************************
BOTTLE_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,BOTTLE_CVECT
WL 0,DUMCRETS
BOTTLE_CVECT
CALLA UNIV_COLL_CHECK
JRNZ B_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
BOTTLE_GUNVECT
; CHKZLIM 0A3E0H+010H,B_DONE
CHKZLIM 012511H+010H,B_DONE
MOVI SND_BOTTLE_SHATTER,A0
MOVE *A8(OID),A14,W
CMPI OID_UNIV|26 << 2,A14
JRNE B_SND
MOVI SND_CANDLE_SHATTER,A0
B_SND
CALLA ONESND_Z
MOVE *A8(OIHOFF),A14,W
JRNZ B_GO
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_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
B_GO
MOVI 500,A5 ;500 POINTS
MOVK M_NOMORE,A7
CLR A9 ;NO OFFSET
JAUC UNIV_DAMAGE_HANDLER
B_DONE
RETS
SND_BOTTLE_SHATTER
.WORD 0F310H,36,0A16DH,0
SND_CANDLE_SHATTER
.WORD 0F310H,44,0A173H,0
**************************************************************************
* *
* FISH VECTORS *
* *
**************************************************************************
FISH_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,FISH_CVECT
WL 0,DUMCRETS
FISH_CVECT
CALLA UNIV_COLL_CHECK
JRNZ FG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI OID_UNIV|20 << 2,A1 ;FIND TAIL
MOVE *A8(OCTRL),A5,W
MOVI 0100H,A14
BTST B_FLIPH,A5
JRZ FC_NOFLIPH
SLL 1,A14
FC_NOFLIPH
MOVE @SCROLL_FLAG,A10,W
OR A14,A10
MOVE A10,@SCROLL_FLAG,W
MOVE A8,A10
MOVI FGLIST,A0
JRUC FC_NEXT
FC_LUPE
MOVE *A8(OID),A14,W
CMP A1,A14
JRNE FC_NEXT
MOVE *A8(OCTRL),A14,W
XOR A5,A14
BTST B_FLIPH,A14
JRNZ FC_NEXT
FC_DEL
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;DELETE TAIL
CALLA DEL_PROC_AND_OBJ
JRUC FC_GO
FC_NEXT
MOVE *A8(OBLINK),A8,L
CMP A0,A8
JRNE FC_LUPE ;BR=NOT END OF LIST
FC_GO
MOVE A10,A8
MOVI 1000,A5
MOVK M_LASTFRM|M_NOMORE|M_FLASHOBJ,A7 ;NO MORE DAMAGE
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_FISH_SKIN
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_U40,B14
CALLA Fragger
MOVI MARLN3p2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
FISH_GUNVECT
MOVI OID_UNIV|20 << 2,A1
MOVE *A8(OCTRL),A5,W
MOVE A8,A10
MOVI FGLIST,A0
JRUC FG_NEXT
FG_LUPE
MOVE *A10(OID),A14,W
CMP A1,A14
JRNE FG_NEXT
MOVE *A10(OCTRL),A14,W
XOR A5,A14
BTST B_FLIPH,A14
JRNZ FG_NEXT
MOVB *A10(OFLAGS+B_ANIM-7),A14
JRN FG_DONE ;BR=IT'S ANIMATING
CALLA UNIV_FLASH
JRUC FTG_GO
FG_NEXT
MOVE *A10(OBLINK),A10,L
CMP A0,A10
JRNE FG_LUPE ;BR=NOT END OF LIST
FG_DONE
RETS
SND_FISH_SKIN
.WORD 0F320H,87,0A179H,0
**************************************************************************
* *
* FISH TALE VECTORS *
* *
**************************************************************************
FISHTALE_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,FISHTALE_CVECT
WL 0,DUMCRETS
FISHTALE_CVECT
CALLA UNIV_COLL_CHECK
JRNZ FG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI OID_UNIV|29 << 2,A1
MOVE *A8(OCTRL),A5,W
MOVE A8,A10
MOVI FGLIST,A0
JRUC FTC_NEXT
FTC_LUPE
MOVE *A10(OID),A14,W
CMP A1,A14
JRNE FTC_NEXT
MOVE *A10(OCTRL),A14,W
XOR A5,A14
BTST B_FLIPH,A14
JRZ FC_DEL
FTC_NEXT
MOVE *A10,A10,L
CMP A0,A10
JRNE FTC_LUPE ;BR=NOT END OF LIST
RETS
FISHTALE_GUNVECT
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRN FTG_DONE ;BR=IT'S ANIMATING
MOVI OID_UNIV|29 << 2,A1
MOVE *A8(OCTRL),A5,W
MOVE A8,A10
MOVI FGLIST,A0
JRUC FTG_NEXT
FTG_LUPE
MOVE *A8(OID),A14,W
CMP A1,A14
JRNE FTG_NEXT
MOVE *A8(OCTRL),A14,W
XOR A5,A14
BTST B_FLIPH,A14
JRNZ FTG_NEXT
CALLA UNIV_FLASH
JRUC FTG_GO
FTG_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE FTG_LUPE ;BR=NOT END OF LIST
FTG_GO
MOVE A10,A8
CLR A5
MOVI M_STAY|M_FLASHOBJ,A7
CLR A9
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_FISHTALE_SHAKE
FTG_DONE
RETS
SND_FISHTALE_SHAKE
.WORD 0F310H,45,0A17CH,0
**************************************************************************
* *
* BAR WALL VECTORS *
* *
**************************************************************************
BARWALL_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,BARWALL_CVECT
WL 0,DUMCRETS
BARWALL_CVECT
CALLA UNIV_COLL_CHECK
JRNZ BG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
CALLA STOP_ENEMIES
MOVI 1000,A5
MOVK M_LASTFRM|M_NOMORE|M_FLASHOBJ,A7 ;NO MORE DAMAGE
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_BARWALL_EXPLODE
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 -060000H,B7 ;MIN Y VEL
MOVI FRAG_BRICKS,B14
CALLA Fragger
CLR A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI [-17,17],A11 ;X OFFSETS
MOVI [0,65],A9 ;Y OFFSETS
MOVK 5,A1 ;Z OFFSET
JAUC OBJ_KILL_ENEMIES
BARWALL_GUNVECT
SOUNDZ SND_SWAT
BG_DONE
RETS
SND_BARWALL_EXPLODE
.WORD 0F320H,76,0A170H,0
FRAG_BRICKS
; .long FRAG_BRICK_ANIM,F_UFRAG_STUFF
; .word OID_JUNK,(24 << 11) + (0 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
.long FRAG_BRICK_ANIM,F_UFRAG_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
.long FRAG_BRICK_ANIM,F_UFRAG_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
.long FRAG_BRICK_ANIM,F_UFRAG_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
.long FRAG_BRICK_ANIM,F_UFRAG_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
; .long FRAG_BRICK_ANIM,F_UFRAG_STUFF
; .word OID_JUNK,(16 << 11) + (0 << 6) + (FRGBOG+FRGGCOL+FRGNOFLY+FRGPAL)
.long FRAG_BRICK_ANIM,F_UFRAG_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
.long FRAG_BRICK_ANIM,F_UFRAG_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL+FRGNOFLY+FRGPAL)
.long 0
FRAG_BRICK_ANIM
LW CBRIK1,1
LW CBRIK2,1
LW CBRIK3,1
LW CBRIK4,1
LW CBRIK5,1
LW CBRIK6,1
LW CBRIK7,1
LW CBRIK8,1
LW CBRIK9,1
LW CBRIK10,1
LW CBRIK11,1
LWL CBRIK12,1|AFunc,A_DELETE_ZBOT
.long 0
**************************************************************************
* *
* COCKTAIL TABLE VECTORS *
* *
**************************************************************************
CTABLE_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,CTABLE_CVECT
WL 0,DUMCRETS
CTABLE_CVECT
CALLA UNIV_COLL_CHECK
JRNZ CTG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
CALLA STOP_ENEMIES
MOVI 1000,A5
MOVK M_LASTFRM|M_NOMORE|M_FLASHOBJ,A7 ;NO MORE DAMAGE
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_TABLE_EXPLODE
SOUNDZ SND_TABLE_TORCH
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_U40,B14
CALLA Fragger
MOVI CAMTBLd1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI [-17,17],A11 ;X OFFSETS
MOVI [0,64],A9 ;Y OFFSETS
MOVK 5,A1 ;Z OFFSET
JAUC OBJ_KILL_ENEMIES
CTABLE_GUNVECT
SOUNDZ SND_SWAT
CTG_DONE
RETS
SND_TABLE_EXPLODE
.WORD 0F327H,29,0A176H,0
SND_TABLE_TORCH
.WORD 0F326H,70,0A319H,0
**************************************************************************
* *
* STOOL VECTORS *
* *
**************************************************************************
STOOL_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,STOOL_CVECT
WL 0,DUMCRETS
STOOL_CVECT
CALLA UNIV_COLL_CHECK
JRNZ STG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 1000,A5
MOVK M_LASTFRM|M_NOMORE|M_FLASHOBJ,A7 ;NO MORE DAMAGE
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_STOOL_EXPLODE
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,B14
CALLA Fragger
MOVI BSTSMA1p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
STOOL_GUNVECT
SOUNDZ SND_PIPE_DING
STG_DONE
RETS
SND_STOOL_EXPLODE
.WORD 0F320H,60,0A147H,0
**************************************************************************
* *
* NEON SIGN VECTORS *
* *
**************************************************************************
NEON_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,NEON_CVECT
WL 0,DUMCRETS
NEON2_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,NEON2_CVECT
WL 0,DUMCRETS
NEON_CVECT
CHKZLIM 01306FH+010H,NG_DONE
NEON2_CVECT
CALLA UNIV_COLL_CHECK
JRNZ NG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 25000,A5 ;BIG POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC NG_DONE
; LOCKON NC
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_X2,B14
CALLA Fragger
MOVI XNEON2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
SOUNDZ SND_NEON_TOAST
SOUNDZ SND_NEON_TOAST2
CLR A5 ;FLASH DELETION
JRUC NG_STOP_FLASHES
NEON_GUNVECT
CHKZLIM 01306FH+010H,NG_DONE
NEON2_GUNVECT
MOVE *A8(AnimScr),A14,L
CMPI dNEONCX2b,A14
JREQ NG_MAKE_FZZZ ;BR=IN FLASH ANIM, JUST FZZZ
CLR A5 ;NO POINTS
CLR A7 ;NO FLAGS
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
; JRZ NG_FZZZ
JRZ NG_DONE
MOVI SND_NEON_SURGE_1,A0
CMPK 11,A10
JRLT NG_GO
MOVI 5000,A1
CLR A9
CALLA PRINT_SCORE
CREATE PID_IND,MAKE_MULTI_FZZZ
MOVI SND_NEON_SURGE_2,A0
NG_GO
CALLA ONESND_Z
NG_FZZZ
CALLR NG_MAKE_FZZZ ;MAKE FZZZ EFFECT
NG_CHECK_FLASHES
MOVE A10,A10
JRZ NG_DONE
CLR A5 ;DEFAULT TO FLASH DELETION
MOVE *A8(AnimScr),A14,L
CMPI NEOZAP1,A14
JREQ NG_STOP_FLASHES ;BR=STOP THE FLASHES
MOVK 1,A5 ;LET'S RE-SYNCRONIZE INSTEAD!
NG_STOP_FLASHES
MOVE @WAVE_UNIV,A14,L
CMPI GXCX3,A14
JRNE NG_DONE
MOVI ANIOBJS,A0
MOVE *A0,A0,L
JRZ NG_DONE ;BR=NUTIN'S ANIMATING
MOVI GLAMPH1,A1
MOVI FLASHBULB,A6
MOVK 2,A4 ;LOOK FOR 2 ANIMATIONS
NG_LUPE
MOVE *A0(AnimScr),A14,L
CMP A1,A14
JREQ NG_FOUND ;BR=FOUND ONE GUY
CMP A6,A14
JRNE NG_NOT_HERE ;BR=CLUELESS
NG_FOUND
MOVE A5,A5
JRZ NG_ZAP ;BR=DELETE THE ANIMATION
SUBI 050H*2,A14 ;BACKUP SOME HOMEY!
MOVE A14,*A0(AnimFrm),L ;RESYNC
clr A14
movb A14,*A0(AnimSlp) ;NO SLEEP 'TIL
DEC A4
JRZ NG_DONE ;BR=GOT 'EM BOTH
MOVE *A0(AnimNxt),A0,L
JRNZ NG_LUPE ;BR=NOT DONE YET
RETS
NG_ZAP
MOVE *A0(AnimNxt),A3,L
MOVE A0,A10
MOVE *A10(OULINK),A0,L
CLR A14
MOVE A14,*A10(OULINK),L
CALLA REMOVE_AND_FREE_LINK
MOVE A10,A0
CALLA DELOBJ
DEC A4
JRZ NG_DONE ;BR=GOT 'EM BOTH
MOVE A3,A0
JRNZ NG_LUPE ;BR=NOT DONE YET
RETS
NG_NOT_HERE
MOVE *A0(AnimNxt),A0,L
JRNZ NG_LUPE ;BR=NOT DONE YET
NG_DONE
RETS
NG_MAKE_FZZZ
SOUNDZ SND_NEON_CRACKLE_0
MOVE *A8(OIHOFF),A14,W
CMPI 090H,A14
JRGT NG_MF_DONE
MOVE *A8(OGTIME),A14,L
MOVE @WAVEIRQS,A9,L
SUB A9,A14
CMPI -30,A14
JRGT NG_MF_DONE ;BR=NO FZZZ
MOVE A9,*A8(OGTIME),L ;NEW LAST GUN HIT TIME
MOVI FZZZ_INIT,A5 ;LET'S MAKE SOME FIREWORKS
CALLA CREATE_OBJ
JRZ NG_DONE ;BR=OOPS!
MOVE *A8(OZVAL),A1,L ;SET Z
SUBK 6,A1
MOVE A1,*A0(OZVAL),L
MOVE A3,A5 ;CONVERT SCREEN TO UNIVERSE
SEXT A3,W
SRA 16,A5
STOUXY A1,A3,A5
MOVE A3,*A0(OXVAL),L ;SET X, Y POSITION
MOVE A5,*A0(OYVAL),L
MOVK M_FLIPH,A14
CALLA RANDFLIP ;RANDOM FLIPH
CALLA INSOBJ
NG_MF_DONE
RETS
FZZZ_INIT
.LONG FWORKS1,0
.WORD OID_JUNK, DMAWNZ, 0, 0
.LONG C_STRTANIM
.LONG NEONSIGN_FZZZ_ANIM
**************************************************************************
* *
* MAKE_MULTI_FZZZ *
* *
**************************************************************************
MAKE_MULTI_FZZZ
MOVI 20,A9
MMF_LUPE
MOVE *A8(OIHOFF),A14,W
CMPI 090H,A14
JAGT SUCIDE
CLR A0
CLR A3
CALLA PreFrag_Box
MOVI -1,B9
MOVI FZZZ_FRAG,B14
CALLA Fragger
SLEEP 3
DSJ A9,MMF_LUPE
DIE
FZZZ_FRAG
.long FRAG_FZZZ_ANIM,0
.word OID_JUNK,(1 << 11) + (0 << 6) + (FRGBOG+FRGNOFLP+FRGNOFLY+FRGPAL)
.long 0
FRAG_FZZZ_ANIM
LWLL FWORKS1,1|AFunc,A_SOUNDZ+2,SND_NEON_CRACKLE_0
NEONSIGN_FZZZ_ANIM
LW 1,4
LW FWORKS2,4
LW FWORKS3,4
LW FWORKS4,4
LW FWORKS5,4
LWL 1,1|AFunc,DELETE_OBJ
SND_NEON_TOAST
.WORD 0F320H,70,0A319H,0
SND_NEON_TOAST2
.WORD 0F120H,64,0A32CH,0
SND_NEON_CRACKLE_0
.WORD 0F310H,22,0A31CH,0
;SND_NEON_CRACKLE_1
; .WORD 0F310H,25,0A31FH,0
SND_NEON_SURGE_1
.WORD 0F320H,20,0A322H,0
SND_NEON_SURGE_2
; .WORD 0F320H,12,0A325H,12,0A325H,24,0A325H,0
.WORD 0F320H,12,0A325H,6,0A325H,24,0A325H,0
**************************************************************************
* *
* SECRET MIRROR EXIT IN BAR COLLISION VECTOR *
* *
**************************************************************************
BAR_SECRET_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,BAR_SECRET_CVECT
WL 0,DUMCRETS
BAR_SECRET_CVECT
CALLA UNIV_COLL_CHECK
JRNZ BS_DONE
CALLA MIRROR_CVECT2
JRUC BS_CHECK
BAR_SECRET_GUNVECT
CALLA MIRROR_GUNVECT
MOVE *A8(OGUNVECT),A14,L
CMPI DUMRETS,A14
JRNE BS_DONE
BS_CHECK
; RETS
MOVE @SCROLL_FLAG,A14,W
SLL 16+6,A14
SRL 30,A14
CMPK 3,A14
JAEQ PORTAL_GUNVECT
BS_DONE
RETS
;**************************************************************************
;* *
;* ZFAR_FOLLOW_PROC *
;* *
;**************************************************************************
;
;ZFAR_FOLLOW_PROC
; MOVE @ZFAR_FOLLOW,A8,L
; JAZ SUCIDE
; MOVE *A8(OCTRL),A14,W
; JANN SUCIDE
; MOVE *A8(OZVAL),A0,L
; MOVE @ZBASE,A14,L
; SUB A14,A0
; ADDK 4,A0 ;ERROR
; MOVE A0,@ZFAR,L
; SLEEP 1
; JRUC ZFAR_FOLLOW_PROC
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * OUTSIDE CLUB X DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
**************************************************************************
* *
* SKYLITE VECTORS *
* *
**************************************************************************
SKYLITE_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,SKYLITE_CVECT
WL 0,DUMCRETS
SKYLITE_CVECT
CALLA UNIV_COLL_CHECK
JRNZ SG_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 FRAME AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC SG_SANS_GLASS
SC_MAKE_GLASS
SOUNDZ SND_WINDOW_BREAK
MOVI [-35,-37],A10 ;[Y,X] OFFSET
MOVK 1,A11 ;Z OFFSET
CREATE PID_IND,REVEAL_CD
MOVI [-35,37],A10 ;[Y,X] OFFSET
CREATE PID_IND,REVEAL_CD
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 -010000H,B8
MOVI FRAG_S20,B14
CALLA Fragger
; MOVI GLASTOP2,A14
MOVI SHARDPAL1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVI SKYGLASS_INIT,A5 ;LET'S MAKE SOME SHARDS
CALLA CREATE_OBJ
JRZ SG_SANS_GLASS ;BR=OOPS!
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 A0,A8
MOVI -70,A1
CALLA SET_OGRNDOFF ;DON'T FALL TO THE GROUND!
JAUC INSERT_OBJ
SKYLITE_GUNVECT
MOVI 1000,A5 ;500 POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRC SC_MAKE_GLASS ;BR=LAST DAMAGE FRAME
SOUNDZ SND_WINDOW_CRACK
SG_SANS_GLASS
SG_DONE
RETS
;SND_WINDOW_SHATTER
; .WORD 0F325H,64,0A32EH,0
;SND_WINDOW_CRACK
; .WORD 0E30BH,47,0A32BH,0
SKYGLASS_INIT
.LONG SKYSHAT3, GLASS_COLLVECT
.WORD OID_JUNK, DMAWNZ, M_GCOLL, 0
.LONG 0
**************************************************************************
* *
* WINDOW_VECTORS *
* *
**************************************************************************
WINDOW_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,WINDOW_CVECT
WL 0,DUMCRETS
WINDOW_CVECT
CALLA UNIV_COLL_CHECK
JRNZ WG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A5 ;500 POINTS
WC_DAMAGE
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC WG_SANS_GLASS
WC_MAKE_GLASS
SOUNDZ SND_WINDOW_BREAK
CALLR MAKE_WINDOW_FRAGS ;Do our glass
MOVE @WAVE_UNIV,A14,L
CMPI GXCX3,A14
JRNE WG_SANS_GLASS ;BR=THIS IS NOT THE SPECIAL CASE
MOVE *A8(OID),A14,L
ANDI MASK_ID,A14 ;JUST GET ID OF OID
CMPI 14 << 2,A14
JRNE WG_SANS_GLASS ;BR=NOT THE PORTAL
MOVE @GITTEN_KITTEN,A14,W
JRZ WG_SANS_GLASS
MOVE *A8(OULINK),A0,L ;SET ANIMATION AND FLAGS
MOVI BROKEN_WINDOW_OPEN+M_IF_DANIM+M_IF_SEQ,A14
MOVE A14,*A0(MAP_IMG),L
MOVE *A0(MAP_FLAGS),A14,W ;SET TO PORTAL
ORI 1 << B_BF_PORTAL,A14
MOVE A14,*A0(MAP_FLAGS),W
JAUC PORTAL_GUNVECT ;OPEN PORTAL
WINDOW_GUNVECT
MOVI [6-119, 9-42],A3
MOVI [110-119, 77-42],A4
CLR A9 ;NO OFFSET
MOVE *A8(OIMG),A14,L
CMPI CXWIND1b,A14
JREQ WG_OPENBOX ;BR=IT'S THE OPEN WINDOW
CMPI CXWIND2b,A14
JRNE WG_BOX ;BR=IT'S CLOSED
WG_OPENBOX
MOVI [56-119,77-42],A4 ;WINDOW BOTTOM RIGHT
MOVI [-29,0],A9 ;SCORE OFFSET
WG_BOX
CALLA BOX_CHECK_OBJ
JRZ TWG_DONE ;BR=NOT THE WINDOW PART
SOUNDZ SND_WINDOW_CRACK
MOVI 1000,A5 ;500 POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
CALLA UNIV_DAMAGE_HANDLER
JRC WC_MAKE_GLASS ;BR=LAST DAMAGE FRAME
; SOUNDZ SND_WINDOW_CRACK
WG_SANS_GLASS
WG_DONE
RETS
**************************************************************************
* *
* MAKE_WINDOW_FRAGS *
* *
* Routine to make the fragments for a busted window. *
* *
* A8 = Ptr to window making frags *
* *
* Returns: *
* Nothing *
* *
**************************************************************************
MAKE_WINDOW_FRAGS
MMTM SP,A0,A3,A5
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_S10,B14
CALLA Fragger
; MOVI PELLA2,A14
MOVI SHARDPAL1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,B10
MOVI GLASS_INIT,A5 ;LET'S MAKE SOME SHARDS
CALLA CREATE_OBJ
JRZ MWF_NO_GLASS ;BR=OOPS!
MOVE *A8(OXVAL),*A0(OXVAL),L ;SET POSITION
MOVE *A8(OYVAL),A14,L
SUBI 60 << 15,A14
MOVE A14,*A0(OYVAL),L
MOVE *A8(OZVAL),A14,L
SUBI 05DH,A14
MOVE A14,*A0(OZVAL),L
MOVI 04000H,A14
MOVE A14,*A0(OYACCEL),W ;SET GRAVITY
CALLA INSOBJ
MWF_NO_GLASS
MMFM SP,A0,A3,A5
RETS
GLASS_COLLVECT
.WORD OID_GRND,0FFFFH
.LONG DELETE_OBJ
.WORD 0
.LONG DUMCRETS
GLASS_INIT
.LONG CXWNSHAT1, GLASS_COLLVECT
.WORD OID_JUNK, DMAWNZ, M_GCOLL, 0
.LONG 0
BROKEN_WINDOW_OPEN:
LWL CXWIND3a,3|AFunc,AU_PORTAL_START
LW CXWIND4a,3
LW CXWIND5a,3
LW CXWIND6a,3
LWL CXWIND7a,1|AFunc,AU_PORTAL_SET_OPEN
LWL CXWIND7a,3|AFunc,A_DISABLE_PORTAL
LW CXWIND6a,3
LW CXWIND5a,3
LW CXWIND4a,3
LWL CXWIND3a,3|AFunc,AU_PORTAL_SET_CLOSED
**************************************************************************
* *
* A_DISABLE_PORTAL *
* *
**************************************************************************
A_DISABLE_PORTAL
MOVI DUMCOLL,A14
MOVE A14,*A8(OCVECT),L
MOVI DUMRETS,A14
MOVE A14,*A8(OGUNVECT),L
JAUC AU_PORTAL_START
**************************************************************************
* *
* Kerri's Bedroom window vectors *
* *
**************************************************************************
BED_WINDOW_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,BED_WINDOW_CVECT
WL 0,DUMCRETS
**************************************************************************
* *
* BED_WINDOW_CVECT *
* *
* Collision vector for an explosion and Kerri's bedroom *
* window. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to window object *
* *
**************************************************************************
BED_WINDOW_CVECT
CALLA UNIV_COLL_CHECK
JRNZ WG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A5 ;500 POINTS
BWC_DAMAGE
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC WG_DONE
BWC_MAKE_GLASS
SOUNDZ SND_WINDOW_BREAK
CALLR MAKE_WINDOW_FRAGS
MOVE @GOT_TROG,A14,W
JRNZ BWC_DO_PORTAL ;BR = He found the secret
RETS
BWC_DO_PORTAL
MOVE *A8(OULINK),A0,L ;SET ANIMATION AND FLAGS
MOVI BROKEN_WINDOW_OPEN+M_IF_DANIM+M_IF_SEQ,A14
MOVE A14,*A0(MAP_IMG),L
MOVE *A0(MAP_FLAGS),A14,W ;SET TO PORTAL
ORI 1 << B_BF_PORTAL,A14
MOVE A14,*A0(MAP_FLAGS),W
JAUC PORTAL_GUNVECT ;OPEN PORTAL
**************************************************************************
* *
* BED_WINDOW_GUNVECT *
* *
* Gun vector for Kerri's bedroom. *
* *
* A2 = Ptr to player shooting *
* A8 = Ptr to window object *
* *
**************************************************************************
BED_WINDOW_GUNVECT
MOVI [-29-119,0-42],A9 ;SCORE OFFSET
SOUNDZ SND_WINDOW_CRACK
MOVI 500,A5 ;500 POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;FLASH
CALLA UNIV_DAMAGE_HANDLER
JRC BWC_MAKE_GLASS ;BR=LAST DAMAGE FRAME
RETS
**************************************************************************
* *
* X BOARD UP VECTORS *
* *
**************************************************************************
XBOARD_AWARD_TABLE
.LONG REVEAL_SBOMB2, REVEAL_LIFE2, REVEAL_LIFE2
XBOARD_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,XBOARD_CVECT
WL 0,DUMCRETS
XBOARD_CVECT
CALLA UNIV_COLL_CHECK
JRNZ XC_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 5000,A5 ;500 POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST FRAME AND FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC XC_DONE
SOUNDZ SND_XBOARD_EXPLODE
MOVI [-64,-12],A10 ;[Y,X] OFFSET
MOVK 1,A11 ;Z OFFSET
MOVI PID_IND,A1
MOVE *A8(OID),A7,W
SLL 16+9,A7 ;GET ID
SRL 16+11,A7
SUBK 29,A7
JRNN XC_GET_OFFSET ;BR=NOT DA SPECIAL CASE
CLR A7 ;ZERO INDEX
XC_GET_OFFSET
SLL 5,A7
ADDI XBOARD_AWARD_TABLE,A7
MOVE *A7,A7,L
CALLA GETPRC
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 HBORED2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
CLR A14
MOVE A14,*A8(OCVECT),L ;NO MORE COLLISIONS
CALLA GET_FREE_LINK
JRZ XC_DONE ;BR=NONE AVAILABLE
ADDI OXVAL,A8 ;GET POSITION
MMFM A8,A2,A3,A4 ;A4,A3,A2 = OXVAL, OYVAL, OZVAL
MOVI DRAPE1,A14 ;COVER UP DA HOLE IMAGE
MOVE A14,*A0(MAP_IMG),L
CLR A14
MOVE A14,*A0(MAP_FLAGS),L
MOVE A4,A14 ;ADJUST POSITION
ADDI 039971H,A14
MOVE A14,*A0(MAP_X),L
MOVE A3,A14
ADDI 024F64H,A14
MOVE A14,*A0(MAP_Y),L
ADDK 10+9,A2
MOVE A2,*A0(MAP_Z),L
MOVE @UNIV_ID,A5 ;SET ID AND OBJ
MOVE A5,*A0(MAP_ID),W
MOVI 080000000H,A6
MOVE A6,*A0(MAP_OBJ),L
CALLA INSERT_LINK
CALLA GET_FREE_LINK
JRZ XC_DONE ;BR=NONE AVAILABLE
MOVI XBOARD_FIRE_ANIM+M_IF_SEQ,A14
MOVE A14,*A0(MAP_IMG),L ;FIRE ANIMATION
MOVE @RAND,A14,W ;LEFTY OR RIGHTY?
ANDI M_FLIPH,A14
MOVE A14,*A0(MAP_FLAGS),L
ADDI 048E5BH,A4 ;ADJUST POSITION
MOVE A4,*A0(MAP_X),L
ADDI 01BD74FH,A3
MOVE A3,*A0(MAP_Y),L
DEC A2
MOVE A2,*A0(MAP_Z),L
MOVE A5,*A0(MAP_ID),W ;SET ID AND OBJ
MOVE A6,*A0(MAP_OBJ),L
CALLA INSERT_LINK
MOVK 1,A0
MOVE A0,@UNIVERR,W ;FORCE CREATION BY UPDATE_UNIV
XC_DONE
RETS
XBOARD_GUNVECT
MOVI 1000,A5 ;POINTS
MOVK M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRZ XG_DONE
MOVI 1000,A1
CLR A9
CALLA PRINT_SCORE
SOUNDZ SND_XBOARD_CRACK
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_U10,B14
CALLA Fragger
MOVI HBORED2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
XG_DONE
RETS
SND_XBOARD_CRACK
.WORD 0F340H,44,0A328H,0
SND_XBOARD_EXPLODE
.WORD 0F340H,44,0A328H,90,0A33EH,0 ;X window blow out, skip chan
XBOARD_FIRE_ANIM
; LW DUMFLAM1,4
LW DUMFLAM2,4
LW DUMFLAM3,4
LW DUMFLAM4,4
; LW DUMFLAM5,4
; LW DUMFLAM6,4
; LW DUMFLAM7,4
LW DUMFLAM8,4
LW DUMFLAM9,4
LW DUMFLAM10,4
; LW DUMFLAM11,4
.long 0
**************************************************************************
* *
* EXIT SIGN VECTORS *
* *
**************************************************************************
EXIT_COLLVECT
.WORD 0
.LONG EXIT_CVECT
EXIT_CVECT
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
EXIT_GUNVECT
MOVI 500,A5
MOVK M_NOMORE|M_FLASHOBJ,A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC EG_DONE
SOUNDZ SND_LAMP_BREAK
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 EXITLITEb,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
CLR A5
MOVK M_FLASHOBJ|M_ANIMSYNC,A7 ;SYNC AND FLASH
CLR A9 ;NO OFFSET
MOVK 3,A6 ;CHANGE 3 OBJECTS MAX.
MOVE *A8(OXVAL),A1,L
MOVE *A8(OYVAL),A3,L
MOVI FGLIST,A0
MOVE A0,A8
MOVI CLBXIT1_CXsq,A4 ;CHANGE THESE
MOVI NNDOR1,A11
JRUC EG_NEXT
EG_LUPE
MOVE *A8(AnimScr),A14,L ;CHECK SCRIPTS
JRZ EG_NOANIM
CMP A4,A14
JREQ EG_CHECK_OBJ
CMPI CLBXIT1_SHOOTER,A14
JREQ EG_CHECK_OBJ
CMPI CLBXIT1_LADDER,A14
JREQ EG_CHECK_OBJ
EG_NOANIM
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMPI CLBSTEP2,A14
JREQ EG_CHECK_OBJ
CMPI CLBXITBLK1a,A14
JREQ EG_CHECK_OBJ
CMP A11,A14
JREQ EG_CHECK_OBJ
EG_NEXT
MOVE A6,A6
JRZ EG_DONE ;BR=CHANGED EVERYTHING
MOVE *A8,A8,L
CMP A0,A8
JRNE EG_LUPE ;BR=NOT END OF LIST
EG_DONE
RETS
EG_CHECK_OBJ
MOVE *A8(OXVAL),A14,L
SUB A1,A14
ABS A14
CMPI 0D0000H,A14
JRGT EG_NEXT ;BR=OUT OF X RANGE
MOVE *A8(OYVAL),A14,L
SUB A3,A14
JRN EG_NEXT ;BR=OUT OF Y RANGE
CMPI 0680000H,A14
JRGT EG_NEXT ;BR=OUT OF Y RANGE
CALLA UNIV_DAMAGE_HANDLER
DEC A6 ;COUNT CHANGE
JRUC EG_NEXT
**************************************************************************
* *
* POSTA_COLLVECT *
* *
**************************************************************************
POSTA_COLLVECT
.WORD 0
.LONG POSTA_CVECT
POSTA_CVECT
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
POSTA_GUNVECT
MOVI 500,A5
MOVK M_NOMORE|M_FLASHOBJ,A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC PG_DONE
SOUNDZ SND_LAMP_BREAK
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 GRELAMP2b,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
CLR A5 ;NO SCORE
MOVK 2,A6 ;CHANGE 5 OBJECTS
MOVE *A8(OXVAL),A1,L
MOVI FGLIST,A0
MOVE A0,A8
MOVI CXEWAL1,A3 ;CHANGE THESE
MOVI BASEMOLD1h,A11
JRUC PG_NEXT
PG_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A3,A14
JREQ PG_CHECK_OBJ
CMP A11,A14
JREQ PG_CHECK_OBJ
PG_NEXT
MOVE A6,A6
JRZ PG_DONE ;BR=CHANGED EVERYTHING
MOVE *A8,A8,L
CMP A0,A8
JRNE PG_LUPE ;BR=NOT END OF LIST
PG_DONE
RETS
PG_CHECK_OBJ
MOVE *A8(OXVAL),A14,L
SUB A1,A14
ABS A14
CMPI 0200000H,A14
JRGT PG_NEXT ;BR=OUT OF X RANGE
CALLA UNIV_DAMAGE_HANDLER
DEC A6 ;COUNT CHANGE
JRUC PG_NEXT
**************************************************************************
* *
* LAMP_COLLVECT *
* *
**************************************************************************
LAMP_COLLVECT
.WORD 0
.LONG LAMP_CVECT
LAMP_CVECT
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
LAMP_GUNVECT
PUSH A8
MOVI 500,A5
MOVK M_NOMORE|M_FLASHOBJ,A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC LG_DONE
SOUNDZ SND_LAMP_BREAK
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 GRELAMP2b,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE *A8(OCTRL),A10,W
MOVI FGLIST,A8
MOVE A8,A4
CLR A5 ;NO SCORE
MOVK M_NOMORE|M_FLASHOBJ|M_ANIMSYNC,A7
; CLR A9
MOVK 2,A6 ;2 OBJECT TO FIND
MOVI (OID_UNIV|((28-1) << 2)) & ~MASK_SUPP,A1 ;FIND DOOR
JRUC LG_NEXT
LG_LUPE
MOVE *A8(AnimScr),A14,L ;CHECK SCRIPTS
JRZ LG_CHECK_DOOR
CMPI GLAMPH1,A14
JRNE LG_CHECK_DOOR
MOVE *A8,A3,L ;GET RID OF FLASH ANIMATION
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK
CALLA DELETE_OBJ
DEC A6
JRZ LG_DONE ;BR=WE'RE OUT OF HERE
MOVE A3,A8
JRUC LG_COMP
LG_CHECK_DOOR
MOVE *A8(OID),A14,W
CMP A1,A14
JRNE LG_NEXT
MOVE *A8(OCTRL),A14,W
XOR A10,A14
BTST B_FLIPH,A14
JRZ LG_NEXT
CALLA UNIV_DAMAGE_HANDLER ;DAMAGE DOOR
DEC A6
JRZ LG_DONE ;BR=WE'RE OUT OF HERE
LG_NEXT
MOVE *A8,A8,L
LG_COMP
CMP A4,A8
JRNE LG_LUPE ;BR=NOT END OF LIST
LG_DONE
PULLQ A8
RETS
; MOVI XDOORON1,A11
;
; JRUC LG_NEXT
;LG_LUPE
; MOVE *A8(AnimScr),A14,L ;CHECK SCRIPTS
; JRZ LG_NOANIM
; CMPI GLAMPH1,A14
; JRNE LG_NOANIM
;
; MOVE *A8,A3,L ;GET RID OF FLASH ANIMATION
; MOVE *A8(OULINK),A0,L
; CLR A14
; MOVE A14,*A8(OULINK),L
; CALLA REMOVE_AND_FREE_LINK
; CALLA DELETE_OBJ
; DEC A6
; JRZ LG_DONE ;BR=WE'RE OUT OF HERE
; MOVE A3,A8
; JRUC LG_COMP
;LG_NOANIM
; MOVE *A8(OIMG),A14,L ;CHECK IMAGES
; CMP A11,A14
; JRNE LG_NEXT
; MOVE *A8(OCTRL),A14,W
; XOR A1,A14
; BTST B_FLIPH,A14
; JRZ LG_NEXT ;BR=WRONG DOOR
; CALLA UNIV_DAMAGE_HANDLER
; DEC A6
;LG_NEXT
; MOVE A6,A6
; JRZ LG_DONE ;BR=CHANGED EVERYTHING
; MOVE *A8,A8,L
;LG_COMP
; CMP A4,A8
; JRNE LG_LUPE ;BR=NOT END OF LIST
;LG_DONE
; RETS
SND_WINDOW_BREAK
.WORD 0F340H,64,0A32EH,0 ;Window break, skips channels
SND_WINDOW_CRACK
.WORD 0E308H,47,0A32BH,0
SND_LAMP_BREAK
.WORD 0F340H,75,083CEH,0 ;Lamp break
**************************************************************************
* *
* DUMPSTER VECTORS *
* *
**************************************************************************
DUMPSTER_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DUMPSTER_CVECT
WL 0,DUMCRETS
DUMPSTER_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DG_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 25000,A5 ;POINTS
MOVK M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7 ;LAST AND FLASH
MOVI [0,42],A9 ;OFFSET TO CENTER OF WHOLE DUMP
MOVE *A8(OCTRL),A14,W
BTST B_FLIPH,A14
JRZ DC_OOK ;BR=NO FLIP, OFFSET OK
NEG A9 ;FLIP OFFSET
DC_OOK
CALLA UNIV_DAMAGE_HANDLER
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVE *A8(OZVAL),A14,L
DEC A14
MOVE A14,B0
MOVK (11 << 15) >> 16,B3
MOVI (43*2 << 15) >> 16,B4
MOVE *A8(OCTRL),A14,W
BTST B_FLIPH,A14
JRZ DC_XOK
NEG B3
NEG B4
DC_XOK
MOVE *A8(OXPOS),A14,W
MOVE A14,B1
ADD B3,B1
MOVE A14,B2
ADD B4,B2
MOVI -040000H,B3
MOVI 040000H,B4
MOVE *A8(OYPOS),A14,W
MOVE A14,B5
SUBI (78 << 15) >> 16,B5
MOVE A14,B6
SUBK (61 << 15) >> 16,B6
MOVI -040000H,B7
MOVI 040000H,B8
MOVI -07FH,B9
MOVI 07FH,B10
MOVI FRAG_U20,B14
CALLA Fragger
MOVE *A8(OIMG),A1,L
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
; MOVI FLYINHK,A14
; MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
SOUNDZ SND_DUMPSTER_EXPLODE
SOUNDZ SND_DUMPSTER_BURN
CALLA GET_FREE_LINK
JRZ DC_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 XBOARD_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
;WE COULD CALL OBJ_KILL_ALL_ENEMIES
PUSH A8 ;SAVE FOR LATER
SLL 15,A9
ADD A9,A5 ;OFFSET X TO CENTER OF DUMPSTER
MOVI OID_NONBOY,A14
CALLA GETSUPP_FROM_OID
MOVE A14,A8
DC_ENEMY_CHECK_LUPE
MOVE *A8(OSLINK),A8,L
JRZ DC_CAUSE_DAMAGE ;BR=END OF LIST
MOVE *A8(OZVAL),A9,L
SUB A3,A9
CMPK 6,A9
JRNE DC_ENEMY_CHECK_LUPE ;BR=Z IS WRONG
MOVE *A8(OGUNVECT),A14,L
;WFD start 6/14/1994
JRZ DC_ENEMY_CHECK_LUPE ;BR = NO GUN VECTOR
;WFD end 6/14/1994
MMTM SP,A3,A9
CALL A14 ;CALL GUN VECTOR
MMFM SP,A3,A9
JRUC DC_ENEMY_CHECK_LUPE
DC_CAUSE_DAMAGE
PULLQ A8 ;WE'RE BACK!
.if BILL
MOVK 3,A11 ;CHANGE THIS NUMBER OF OBJECTS
.endif
CLR A5 ;NO POINTS
MOVI BCAN1GRN,A3 ;DEFAULT TO THE GREEN DUMPSTER
MOVI DMPOPN1g,A4
MOVE *A8(OPAL),A0,W
CALLA GET_PALID
CMPI GRNDMP1,A0
JREQ DC_GO_GET_EM ;BR=IT'S THE GREEN DUMPSTER
MOVI BCAN1RED,A3 ;THE RED DUMPSTER
MOVI DLIDOPN1,A4
DC_GO_GET_EM
MOVI FGLIST,A0
MOVE A0,A8
JRUC DC_NEXT
DC_LUPE
MOVE *A8(OIMG),A14,L
CMP A3,A14
JREQ DC_DAMAGE ;BR=DUMPSTER IMAGE
MOVE *A8(AnimScr),A14,L
CMP A4,A14
JRNE DC_NEXT ;BR=NO LID IMAGE
DC_DAMAGE
.if BILL
DEC A11 ;COUNT DAMAGED OBJECT
.endif
CALLA OBJ_ON_WNZ ;TURN LIDS ON!
CALLA UNIV_DAMAGE_HANDLER
CLR A14
MOVE A14,*A8(OCVECT),L ;NO MORE COLLISIONS
DC_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE DC_LUPE ;BR=NOT END OF LIST
.if BILL
MOVE A11,A11
LOCKON NZ ;DIDN'T CHANGE ALL IMAGES
.endif
DC_DONE
RETS
DUMPSTER_GUNVECT
SOUNDZ SND_DUMPSTER_HIT
DG_DONE
RETS
SND_DUMPSTER_HIT
.WORD 0F306H,20,0A33BH,0
SND_DUMPSTER_EXPLODE
.WORD 0F328H,69,0A14AH,0
SND_DUMPSTER_BURN
.WORD 0F327H,85,0A33EH,0
**************************************************************************
* *
* GARBAGE CAN VECTORS *
* *
**************************************************************************
CAN_COLLVECT
WWL OID_GRND,0FFFFH,CAN_GRND_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,CAN_CVECT
WL 0,DUMCRETS
CAN_GRND_CVECT
SOUNDZ SND_CAN_LAND
MOVE *A8(OYVEL),A14,L
JRN CGC_ONGRND ;BR=GOING UP
JRZ CGC_ONGRND ;BR=STOPPED
SRA 2,A14
CMPI [1,0],A14
JRLT CGC_ONGRND ;BR=BELOW MINIMUM VELOCITY
NEG A14 ;REVERSE VELOCITY
MOVE A14,*A8(OYVEL),L
RETS
CGC_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),A9,W
XOR A3,A9
MOVE A9,*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
MOVE @BLACKOUT,A14,W
JRNZ CGC_ANIM ;BR=DON'T GIVE ME ANY GARBAGE
MOVE @WAVE_UNIV,A14,L
; CMPI GXSTAGE3,A14
CMPI GXSTG3TP,A14
JREQ CGC_MAKE_GARBAGE ;BR=NO ROCKETS HERE
MOVE *A0(MAP_ID),A3,W ;ROCKET COUNT IN PORTAL ID
MOVE A3,A1
SLL 16+8,A3
SRL 16+8+3,A3 ;WE JUST HAVE THE COUNT
CMPK 4,A3
JRGE CGC_MAKE_GARBAGE ;BR=NO ROCKETS LEFT
SUBK 4,A3
NEG A3 ;MAKE THE REST
ANDNI 0F8H,A1 ;CLEAR OLD COUNT
ORI 4 << 3,A1 ;SAVE MAX COUNT
MOVE A1,*A0(MAP_ID),W
MOVI [-010H,-0100H],A10 ;[MAX, MIN] Z VELOCITY
MOVI [-060H,010H],A11 ;[Y, X] VELOCITY LIMITS
MOVE A9,A14
MOVI (-2 << 16) + ((-18 << 8) & 0FF00H) + 27,A9 ;Z, Y, X OFFSET
BTST B_FLIPH,A14
JRZ CGC_PROCK_LUPE
MOVI (-2 << 16) + ((-18 << 8) & 0FF00H) + (-27 & 0FFH),A9 ;Z, Y, X OFFSET
CGC_PROCK_LUPE
CREATE PID_IND,THROW_PROCK
DSJS A3,CGC_PROCK_LUPE
JRUC CGC_ANIM
CGC_MAKE_GARBAGE
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVE *A8(OZVAL),A14,L
DEC A14
MOVE A14,B0
MOVI 01000H,B3
MOVI 040000H,B4
MOVK (27 << 15) >> 16,B7
BTST B_FLIPH,A9
JRZ CGC_XOK
NEG B3
NEG B4
NEG B7
CGC_XOK
MOVE *A8(OXPOS),A14,W
MOVE A14,B1
ADD B7,B1
MOVE B1,B2
MOVE *A8(OYPOS),A14,W
MOVE A14,B5
SUBK (18 << 15) >> 16,B5
MOVE B5,B6
MOVI -040000H,B7
MOVI -01000H,B8
MOVI -07FH,B9
MOVI 07FH,B10
MOVI FRAG_U5,B14
CALLA Fragger
; MOVE *A8(OIMG),A1,L
; MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
; MOVI FLYINHK,A14
MOVI P_METALHF,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
CGC_ANIM
MOVI CAN_HIT_ANIM,A1 ;CAN LANDING ON GROUND ANIM
JAUC STRT_ANIM
CAN_CVECT
CALLA UNIV_COLL_CHECK
JRNZ CG_DONE
; MOVB *A8(OFLAGS+B_ANIM-7),A14
; JRN CG_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 CG_DONE
.endif
SOUNDZ SND_CAN_ROCKET
;DON'T DO THIS MAKE IT AT LEAST FLASH AND GIVE SOME POINTS!
; MOVI DUMRETS,A14
; MOVE A14,*A8(OGUNVECT),L
MOVI CAN_DAM_TBL+M_IF_DAM,A14 ;RESET DAMAGE TABLE
MOVE *A8(OULINK),A0,L
MOVE A14,*A0(MAP_IMG),L
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
JRUC CG_LID ;THROW LID
CAN_GUNVECT
SOUNDZ SND_CAN_HIT
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRNN CG_STILL ;BR=IT'S NOT ANIMATING
MOVE *A8(AnimScr),A14,L
CMPI dGCANSPIN1sq,A14
JREQ CG_DONE ;BR=WE'RE SPINNING
MOVK 1,A14 ;SET ANIMATION LOOP FLAG
MOVB A14,*A8(AnimLoop)
RETS
CG_STILL
CLR A14
MOVB A14,*A8(AnimLoop)
MOVI 500,A5 ;500 POINTS
MOVI M_STAY|M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
MOVE *A8(OULINK),A0,L
MOVE *A0(MAP_IMG),A14,L
CMPI CAN_DAM_TBL+M_IF_DAM,A14
JREQ CG_DONE
MOVE *A0(MAP_ID),A14,W ;ROCKET COUNT IN PORTAL ID
MOVE A14,A1
SLL 16+8,A14
SRL 16+8+3,A14 ;WE JUST HAVE THE COUNT
CMPK 4,A14
JRGE CG_DONE ;BR=NO ROCKETS LEFT
INC A14
SLL 3,A14
ANDNI 0F8H,A1 ;CLEAR OLD COUNT
OR A14,A1 ;SAVE NEW COUNT
MOVE A1,*A0(MAP_ID),W
MOVE @WAVE_UNIV,A14,L
; CMPI GXSTAGE3,A14
CMPI GXSTG3TP,A14
JREQ CG_LID ;BR=NO ROCKETS HERE
MOVI (2 << 16) + ((-52 << 8) & 0FF00H) + 0,A9 ;Z, Y, X OFFSET
MOVI [-010H,-0100H],A10 ;[MAX, MIN] Z VELOCITY
MOVI [-060H,010H],A11 ;[Y, X] VELOCITY LIMITS
CREATE PID_IND,THROW_PROCK
CG_LID
MOVE *A8(OXVAL),A4,L
MOVI XGCAN2lid,A3 ;FIND THE LID
MOVI FGLIST,A0
MOVE A0,A8
JRUC CG_NEXT
CG_LUPE
MOVE *A8(OIMG),A14,L
CMP A3,A14
JRNE CG_NEXT ;BR=NO LID IMAGE
MOVB *A8(OFLAGS+B_ANIM-7),A14
JRN CG_NEXT ;BR=IT'S ANIMATING ALREADY
MOVE *A8(OXVAL),A14,L ;GET X POSITION DELTA
SUB A4,A14
ABS A14
CMPI 020000H,A14
JRLE LID_FLY_RANDOM ;BR=THIS IS THE LID FOR THE CAN
CG_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE CG_LUPE ;BR=NOT END OF LIST
CG_DONE
RETS
CAN_DAM_TBL:
.long XGCANDRP1+0
.word 1
.long CAN_HIT_ANIM+1
.word 128
.long dGCANSPIN1sq+9
CAN_HIT_ANIM ;THIS IS ALSO THE LANDING SEQ
LW XGCANDRP3,2
LW XGCANDRP6,2
LW XGCANDRP1,2
LW XGCANDRP3,2
LWL XGCANDRP1,2|AFunc,PULL_ANIM
SND_CAN_HIT
.WORD 0F305H,40,0A35AH,0
SND_CAN_ROCKET
.WORD 0F320H,53,0A341H,0
SND_CAN_LAND
.WORD 0F320H,46,0A357H,0
SND_LID_HIT
.WORD 0F305H,27,0A344H,0
SND_LID_LAND
.WORD 0F320H,35,0A347H,0
**************************************************************************
* *
* AU_RESET_LUPE - RESET ANIMATION LOOP FLAG *
* *
* PASS: *
* A8 = OBJECT *
* *
**************************************************************************
AU_RESET_LUPE
CLR A14
MOVB A14,*A8(AnimLoop)
RETS
**************************************************************************
* *
* AU_CHECK_LUPE - CHECK IF ANIMATION SHOULD LOOP *
* *
* PASS: *
* A8 = OBJECT *
* AARG+,L = LOOP ADDRESS *
* *
**************************************************************************
AU_CHECK_LUPE
MOVB *A8(AnimLoop),A14
JRZ AU_CL_DONE ;BR=DON'T LOOP
CALLA GETAFARG_LONG
MOVE A0,*A8(AnimFrm),L ;LOAD LOOP FRAME
AU_CL_DONE
RETS
**************************************************************************
* *
* GARBAGE CAN LID VECTORS *
* *
**************************************************************************
LID_COLLVECT
WWL OID_GRND,0FFFFH,LID_GRND_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,LID_CVECT
WL 0,DUMCRETS
LID_GRND_CVECT
SOUNDZ SND_LID_LAND
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 LID_LAND_ANIM,A1 ;LID LANDING ON GROUND ANIM
JAUC STRT_ANIM
LID_CVECT
CALLA UNIV_COLL_CHECK
JRNZ LID_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
LID_FLY_RANDOM
CLR A3 ;FLAG RANDOM DIRECTION
LID_GUNVECT
MOVI 500,A5 ;500 POINTS
MOVI M_STAY|M_FLASHOBJ,A7 ;FLASH
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
.if DEBUG
LOCKON NC
.else
JRNC LID_DONE
.endif
LID_FLY
SOUNDZ SND_LID_HIT
MOVI 04000H,A14 ;SET VELOCITIES AND ACCEL
MOVE A14,*A8(OYACCEL),W ;GRAVITY
MOVI -070000H,A0
MOVI -080000H,A1
CALLA RANGERND
MOVE A0,*A8(OYVEL),L ;RANDOM INITIAL Y VELOCITY
SEXT A3,W
JRNZ LID_XOK ;BR=NO RANDOM DIRECTION
MOVI 25 << 13,A0
MOVI -24 << 13,A1
CALLA RANGERND ;GET RANDOM X VELOCITY
MOVE A0,A1
JRUC LID_XSET
LID_XOK
MOVE *A8(ODAGX),A1,W ;COMPUTE VELOCITY FROM OFFSET
MOVE *A8(OSIZEX),A14,W ; FROM THE CENTER OF THE LID
SRA 1,A14
ADD A14,A1 ;CENTER OF THE LID (SCREEN X)
SUB A3,A1 ;DIFFERENCE FROM GUN (SCREEN X)
SLL 13,A1 ;CONVERT TO VELOCITY
MOVE *A8(OZVAL),A4,L
MOVE @ZBASE,A14,L
SUB A14,A4
SRA Z2SCALE,A4
SETF 16,1,1
MPYS A4,A1 ;SCALE X VELOCITY
SETF 32,1,1
SRA 8,A1
LID_XSET
MOVE A1,*A8(OXVEL),L
MOVI -080H,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
LID_DONE
RETS
LID_LAND_ANIM
LW XGCANLID1,2
LW XGCANLID2,2
LW XGCANLID3,2
LW XGCANLID4,2
LW XGCANLID5,2
LWW XGCANLID4,2|AFlip,M_FLIPH
LW XGCANLID2,2
LWW XGCANLID8,2|AFlip,0
; LW XGCANLID9,2
; LW XGCANLID10,2
; LW XGCANLID9,2
; LW XGCANLID10,2
LWL XGCAN2lid,1|AFunc,PULL_ANIM
.long 0
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * CITY DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
**************************************************************************
* *
* SQUARE CITY WINDOW VECTORS *
* *
**************************************************************************
CITY_WINDOW_COLLVECT
.WORD 0
.LONG CITY_WINDOW_CVECT
CITY_WINDOW_COLLVECTR
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,CITY_WINDOW_CVECTR
WL 0,DUMCRETS
CITY_WINDOW_CVECTR
CALLA UNIV_COLL_CHECK
JRNZ CWV_DONE
CITY_WINDOW_CVECT
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
JRUC CWV_GO
CITY_WINDOW_SQUARE_GUNVECT
MOVI [-82*2, -12*2],A3
MOVI [-39*2, 40*2],A4
CWV_CHECK
CALLA BOX_CHECK_OBJ
JRZ CWV_DONE ;BR=NOT THE WINDOW PART
CWV_GO
MOVE *A8(OID),A7,W
MOVI 500,A5 ;500 POINTS
MOVI [-72, 13*2],A9 ;SQUARE SCORE OFFSET
MOVI [-60*2, 14*2],A10 ;SQUARE POWERUP OFFSET
SLL 25,A7 ;LATER
SRL 28,A7
JRZ CWV_CHOOSE ;BR=THIS IS THE SQUARE WINDOW
MOVI [-29, 0*2],A9 ;LOFT SCORE OFFSET
CMPK 1,A7
JRNE CWV_DAM ;BR=THIS IS A LOFT WINDOW
MOVI [0*2, -11*2],A9 ;LONG SCORE OFFSET
MOVI [-21*2, 0*2],A10 ;LONG POWERUP OFFSET
CWV_CHOOSE
MOVI 1024,A0
CALLA RAND0
CMPI 1024/3,A0
JRGT CWV_DAM
CLR A5 ;NO POINTS
MOVK 1,A11 ;Z OFFSET
MOVE @ENERGY_AWARDS,A3,W
MOVI ENERGY_MAX_TABLE,A1
CALLA GET_PCENTRY
CMP A14,A3
JRGE CWV_CD2_AWARD ;BR=MAXED OUT ENERGY AWARDS
CMPI 1024/25,A0
JRLT CWV_LIFE_AWARD
CWV_CD2_AWARD
CREATE PID_IND,REVEAL_CD2
JRUC CWV_DAM
CWV_LIFE_AWARD
CREATE PID_IND,REVEAL_LIFE2
CWV_DAM
MOVI M_NOSTOPANIM|M_NOMORE|M_LASTFRM|M_FLASHOBJ,A7
CALLA UNIV_DAMAGE_HANDLER
CWV_SND
MOVK 5,A0
CALLA RAND0
SLL 6,A0
ADDI SND_SHATTER,A0
JAUC ONESND_Z
CWV_DONE
RETS
ENERGY_MAX_TABLE
.WORD 2, 3, 5
SND_SHATTER
.WORD 0F320H,82,0A3C2H,0 ;SHATTER #0
.WORD 0F320H,82,0A3C5H,0 ;SHATTER #1
.WORD 0F320H,82,0A3C8H,0 ;SHATTER #2
.WORD 0F320H,82,0A3CBH,0 ;SHATTER #3
.WORD 0F320H,82,0A3CEH,0 ;SHATTER #4
**************************************************************************
* *
* LONG CITY WINDOW VECTOR *
* *
**************************************************************************
CITY_WINDOW_LONG_GUNVECT
MOVI [-38*2, -72*2],A3
MOVI [-4*2, 74*2],A4
JRUC CWV_CHECK
**************************************************************************
* *
* LOFT CITY WINDOW VECTOR *
* *
**************************************************************************
CITY_WINDOW_LOFT_GUNVECT
MOVI [6-119, 9-42],A3
MOVI [110-119, 77-42],A4
JRUC CWV_CHECK
**************************************************************************
* *
* LOFT SIGN LIGHT VECTORS *
* *
**************************************************************************
LOFTSIGNLITE_COLLVECT
.WORD 0
.LONG LOFTSIGNLITE_CVECT
LOFTSIGNLITE_CVECT
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
LOFTSIGNLITE_GUNVECT
MOVI 10000,A5
MOVK M_NOMORE|M_FLASHOBJ,A7
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC LV_DONE
SOUNDZ SND_LAMP_BREAK
MOVI FGLIST,A0
MOVE A0,A8
MOVI LOFTSINE1,A3 ;CHANGE THIS
JRUC LV_NEXT
LV_LUPE
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A3,A14
JRNE LV_NEXT
MOVI LOFTPAL1d,A0
JAUC CHANGE_PAL
LV_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE LV_LUPE ;BR=NOT END OF LIST
LV_DONE
RETS
LOFTPAL1d:
.word 8
.word 00000h,07fffh,02504h,02d45h,02d45h,02d45h,01060h,01060h
**************************************************************************
* *
* PALM TREE TOP VECTORS *
* *
**************************************************************************
PALMTREETOP_COLLVECTR
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,PALMTREETOP_CVECTR
WL 0,DUMCRETS
PALMTREETOP_CVECTR
CALLA UNIV_COLL_CHECK
JRNZ PV_DONE
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 PV_GO
PALMTREETOP_GUNVECT
; SOUND1 SND_TREE_HIT
MOVE @WAVE_UNIV,A14,L
CMPI GXFLITE4,A14
JREQ PG_NOFRAG ;BR=NO FRAGS IN CITY
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 080000H,A0
CLR A3
CLR A4
CALLA PreFrag_Gun
DEC B0
MOVI FRAG_U1_X2,B14
CALLA Fragger
MOVI NEWPLM1c2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
PG_NOFRAG
MOVE *A8(OGTIME),A14,L
MOVE @WAVEIRQS,A9,L
MOVE A9,*A8(OGTIME),L ;NEW LAST GUN HIT TIME
SUB A14,A9
CMPK 10,A9
JRLE PV_COUNT ;BR=HIT COUNTED
MOVE *A8(OULINK),A0,L
SETF 4,0,0 ;FIELD 0 IS 4 BITS
CLR A14
MOVE A14,*A0(MAP_OBJ),0 ;RESET COUNT
SETF 16,1,0 ;WORD SIGN EXTEND
RETS
PV_COUNT
MOVK M_NOMORE|M_FLASHOBJ,A7
PV_GO
MOVI 5000,A5 ;500 POINTS
MOVI [-75*2,0],A9 ;SCORE OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC PV_DONE ;BR=NO TORCH
MOVE @WAVE_UNIV,A14,L
CMPI GXFLITE4,A14
JREQ PG_NOFRAGS ;BR=NO FRAGS IN CITY
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 080000H,A0
CLR A3
CLR A4
CALLA PreFrag_Center
DEC B0
MOVI FRAG_U20_X2,B14
CALLA Fragger
MOVI NEWPLM1c2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
PG_NOFRAGS
SOUND1 SND_TREE_TORCH
PV_DONE
RETS
SND_TREE_TORCH
.WORD 0F327H,85,0A33EH,0
;SND_TREE_HIT
; .WORD 0E10AH,26,0A1CFH,0
*
* Collision vector for tree that spawns forth the Trog
*
TROG_PALM_CVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,TROG_PALM_COLL
WL 0,DUMCRETS
TROG_PALM_COLL
CALLA UNIV_COLL_CHECK
JRNZ TPC_DONE ;BR = We were not the intended obj
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
MOVI 500,A5 ;500 POINTS
CLR A5
CLR A9 ;NO OFFSET
CALLA UNIV_DAMAGE_HANDLER
JRNC TPC_DONE ;BR = Not destroyed
SOUNDZ SND_TREE_TORCH
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CLR A4
CALLA PreFrag_Center
DEC B0
CLR B8
MOVI FRAG_U20,B14
CALLA Fragger
MOVI NEWPLM1c2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE @GITTEN_KITTEN,A14,W
JRZ TPC_DONE ;BR = No chance to see Trog
MOVB @CAT_DONE,A14
JRNZ TPC_DONE ;BR = No chance to see Trog
CREATE PID_IND,MAKE_TROG_PROC ;Get Trog to blow out
TPC_DONE
RETS
TROG_PALM_GUNVECT
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
CLR A4
CALLA PreFrag_Gun
DEC B0
CLR B8
MOVI FRAG_U1,B14
CALLA Fragger
MOVI NEWPLM1c2,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
RETS
**************************************************************************
* *
* DAMAGE VECTOR TABLES *
* *
**************************************************************************
LA_OUTSIDE1_VECT_TABLE
;1, 2
.LONG 0,0,EXIT_COLLVECT,EXIT_GUNVECT
;3, 4
.LONG POSTA_COLLVECT,POSTA_GUNVECT,NEON_COLLVECT,NEON_GUNVECT
;5, 6
; .LONG LAMP_COLLVECT,LAMP_GUNVECT,0,0
.LONG 0,0,0,0
;7, 8
.LONG 0,0,0,0
;9, 10
.LONG SKYLITE_COLLVECT,SKYLITE_GUNVECT,WINDOW_COLLVECT,WINDOW_GUNVECT
;11, 12
.LONG XBOARD_COLLVECT,XBOARD_GUNVECT,DUMPSTER_COLLVECT,DUMPSTER_GUNVECT
;13, 14
.LONG CAN_COLLVECT,CAN_GUNVECT,LID_COLLVECT,LID_GUNVECT
;15, 16
.LONG WINDOW_COLLVECT,WINDOW_GUNVECT,DLAMP_COLLVECT,DLAMP_GUNVECT
;17, 18
.LONG BOTTLE_COLLVECT,BOTTLE_GUNVECT,WLAMP_COLLVECT,WLAMP_GUNVECT
;19, 20
.LONG 0,0,FLEASIGN_PORTAL_DAMAGE_COLLVECT,FLEASIGN_PORTAL_DAMAGE_GUNVECT
;21, 22
.LONG FLEASIGN_PORTAL_DAMAGE_COLLVECT,FLEASIGN_PORTAL_DAMAGE_GUNVECT,PHONE_COLLVECT,PHONE_GUNVECT
;23, 24
.LONG RECEIVER_COLLVECT,RECEIVER_GUNVECT,COIN_DOOR_COLLVECT,COIN_DOOR_GUNVECT
;25, 26
; .LONG CHAIRBOY_COLLVECT,CHAIRBOY_GUNVECT,PORTDOOR_COLLVECT,DUMRETS
.LONG 0,0,PORTDOOR_COLLVECT,DUMRETS
;27, 28
.LONG PALMTREETOP_COLLVECTR,PALMTREETOP_GUNVECT,0,0
;29, 30
.LONG TROG_PALM_CVECT,TROG_PALM_GUNVECT,0,0
;31, 32
.LONG XBOARD_COLLVECT,XBOARD_GUNVECT,XBOARD_COLLVECT,XBOARD_GUNVECT
LA_LOBBY_BAR_VECT_TABLE
;1, 2
.LONG 0,0,TWINDOW_COLLVECT,TWINDOW_GUNVECT
;3, 4
.LONG BAR_SECRET_COLLVECT,BAR_SECRET_GUNVECT,TRASHCAN_COLLVECT,TRASHCAN_GUNVECT
;5, 6
.LONG KERCAGE_COLLVECT,KERCAGE_GUNVECT
.LONG SIGN_PORTAL_DAMAGE_COLLVECT,SIGN_PORTAL_DAMAGE_GUNVECT
;7, 8
.LONG SIGN_PORTAL_DAMAGE_COLLVECT,SIGN_PORTAL_DAMAGE_GUNVECT,PHONE_COLLVECT,PHONE_GUNVECT
;9, 10
.LONG RECEIVER_COLLVECT,RECEIVER_GUNVECT,COIN_DOOR_COLLVECT,COIN_DOOR_GUNVECT
;11, 12
.LONG 0,0,0,0
;13, 14
.LONG 0,0,0,0
;15, 16
.LONG NEON2_COLLVECT,NEON2_GUNVECT,GITAR_COLLVECT,GITAR_GUNVECT
;17, 18
.LONG GITAR_COLLVECT,GITAR_GUNVECT,GITAR_COLLVECT,GITAR_GUNVECT
;19, 20
.LONG GITAR_COLLVECT,GITAR_GUNVECT,GITAR_COLLVECT,GITAR_GUNVECT
;21, 22
.LONG FISHTALE_COLLVECT,FISHTALE_GUNVECT,BARWALL_COLLVECT,BARWALL_GUNVECT
;23, 24
.LONG STOOL_COLLVECT,STOOL_GUNVECT,LAVA_LAMP_COLLVECT,LAVA_LAMP_GUNVECT
;25, 26
.LONG DUM_COLLVECT,METAL_GUNVECT,CTABLE_COLLVECT,CTABLE_GUNVECT
;27, 28
.LONG BOTTLE_COLLVECT,BOTTLE_GUNVECT,BOTTLE_COLLVECT,BOTTLE_GUNVECT
;29, 30
.LONG BOTTLE_COLLVECT,BOTTLE_GUNVECT,FISH_COLLVECT,FISH_GUNVECT
;31, 32
.LONG 0,0,0,0
LA_OUTSIDE2_VECT_TABLE
;1, 2
.LONG 0,0,CITY_WINDOW_COLLVECT,CITY_WINDOW_SQUARE_GUNVECT
;3, 4
.LONG CITY_WINDOW_COLLVECT,CITY_WINDOW_LONG_GUNVECT,PALMTREETOP_COLLVECTR,PALMTREETOP_GUNVECT
;5, 6
.LONG LOFTSIGNLITE_COLLVECT,LOFTSIGNLITE_GUNVECT,CITY_WINDOW_COLLVECT,CITY_WINDOW_LOFT_GUNVECT
;7, 8
.LONG 0,0,0,0
;9, 10
.LONG SKYLITE_COLLVECT,SKYLITE_GUNVECT,BED_WINDOW_COLLVECT,BED_WINDOW_GUNVECT
;11, 12
.LONG 0,0,0,0
; .LONG XBOARD_COLLVECT,XBOARD_GUNVECT,DUMPSTER_COLLVECT,DUMPSTER_GUNVECT
;13, 14
.LONG 0,0,0,0
; .LONG CAN_COLLVECT,CAN_GUNVECT,LID_COLLVECT,LID_GUNVECT
;15, 16
.LONG 0,0,0,0
;17, 18
.LONG 0,0,0,0
;19, 20
.LONG 0,0,0,0
;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
.END