revolution-x/GXLA3.ASM

1075 lines
23 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 "GXLA3.ASM"
.TITLE " <<< GENERATION X -- LA UNIVERSE ROUTINES PART 3 >>>"
.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 "GXLA3.TBL"
.include "GXSTRING.H"
* SYMBOLS IN HERE
.DEF PUSH_BUTTON
; .DEF CHAIRBOY_GUNVECT, CHAIRBOY_COLLVECT, WLAMP_GUNVECT
.DEF WLAMP_GUNVECT
.DEF WLAMP_COLLVECT, PORTDOOR_COLLVECT
.DEF FCHAIR_GUNVECT, FCHAIR_COLLVECT, DGITAR_GUNVECT, DGITAR_COLLVECT
.DEF DMIRROR_GUNVECT, DMIRROR_COLLVECT, DELITRAY_GUNVECT, DELITRAY_COLLVECT
.DEF FRUIT_GUNVECT, FRUIT_COLLVECT, DOLL_GUNVECT, DOLL_COLLVECT
.DEF LSWITCH_GUNVECT, PBUTTON_GUNVECT
.ref VIDEO_PLAY
.REF DUXNOFADE
* SYMBOLS IN GXRAM
.REF GUNS_OFF, BUYIN_NOFADE
* SYMBOLS IN GXLA2.ASM
.REF MIRROR_GUNVECT, MIRROR_CVECT2, SND_DLAMP_BREAK, SHRED_GUNVECT
.REF SND_DLAMP_BREAK, SHRED_GUNVECT
* SYMBOLS IN GXSCROLL.ASM
.REF SECRET_PALETTE_TABLE
* SYMBOLS FROM GXNONBOY.ASM
.REF SND_BODY_THUD
* SYMBOLS FROM GXBLOOD.ASM
.REF BLOODY_BULLET_HIT
.BSS VCR_PLAYER,16 ;Player number that shot VCR play button
.BSS UNUSED_WORD,16
.TEXT
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * DRESSING ROOM DAMAGE CONTINUED *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
**************************************************************************
* *
* DRESSING ROOM MIRROR VECTORS *
* *
**************************************************************************
DMIRROR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DMIRROR_CVECT
WL 0,DUMCRETS
DMIRROR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DMIRROR_DONE
CALLA MIRROR_CVECT2
JRUC DMIRROR_CHECK
DMIRROR_GUNVECT
CALLA MIRROR_GUNVECT
DMIRROR_CHECK
MOVE *A8(OGUNVECT),A14,L
CMPI DUMRETS,A14
JRNE DMIRROR_DONE
MOVK 1,A14
MOVE A14,@SCROLL_FLAG,L
CALLA GET_FREE_LINK
JRZ DMIRROR_DONE
CLR A14
MOVE A14,*A0(MAP_FLAGS),W
MOVI VIDEO_ANIM+M_IF_SEQ,A14
MOVE A14,*A0(MAP_IMG),L ;WATER ANIMATION
move *a8(OXVAL),*A0(MAP_X),L
MOVE *a8(OYVAL),*A0(MAP_Y),L
MOVE *a8(OZVAL),a14,L
addk 2,a14
move a14,*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
DMIRROR_DONE
RETS
VIDEO_ANIM
LWL SNOWSCRN,1|AFunc,A_CHECK_BUTTON
.long 0
**************************************************************************
* *
* A_CHECK_BUTTON - CHECK IF PLAY BUTTON PUSHED *
* *
* A8 = VIDEO SCREEN OBJECT *
* *
**************************************************************************
A_CHECK_BUTTON
MOVE @SCROLL_FLAG,A14,L
JRNZ A_CB_DONE
MOVE A8,A2
CLR A8
MOVI [63,255],A9
CLR A10
MOVK 20,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A2,A8
MOVI VIDEO_PLAY,A14
MOVE A14,*A8(AnimFrm),L
A_CB_DONE
RETS
**************************************************************************
* *
* PLAY BUTTON VECTOR *
* *
**************************************************************************
PUSH_BUTTON
MOVI FGLIST,A1
MOVE A1,A8
MOVI VCPLAY1,A3 ;FIND THIS
CLR A2 ;This says no player shot it
JRUC PB_NEXT
PB_LUPE
MOVE *A8(OIMG),A14,L
CMP A3,A14
JRNE PB_NEXT ;BR=NOT DA BUTTON
MOVE *A8(OGUNVECT),A14,L
CMPI PBUTTON_GUNVECT,A14
JREQ PBUTTON_GUNVECT ;BR=IT'S OKAY!
RETS
PB_NEXT
MOVE *A8,A8,L
CMP A1,A8
JRNE PB_LUPE ;BR=NOT END OF LIST
LOCKON
RETS
PBUTTON_GUNVECT
CALLA PULL_ANIM
CALLA OBJ_ON_WNZ
SOUNDZ SND_BUTTON_CLICK
MOVI DUMRETS,A14
MOVE A14,*A8(OGUNVECT),L
MOVE A2,A2
JRNZ PBG_PLAYER_SHOT_IT
MOVK 1,A0
NEG A0
JRUC PBG_STORE_PLAYER
PBG_PLAYER_SHOT_IT
CALLA GPLAYNUM
PBG_STORE_PLAYER
MOVE A0,@VCR_PLAYER,W ;Let the world now who shot it
MOVI FGLIST,A1
MOVE A8,A0
MOVI VHSB14,A3 ;FIND THIS
JRUC PBG_NEXT
PBG_LUPE
MOVE *A0(OIMG),A14,L
CMP A3,A14
JRNE PBG_NEXT ;BR=NOT DA TAPE
MOVI TAPE_ANIM,A1
JAUC STRTANIM
PBG_NEXT
MOVE *A0,A0,L
CMP A1,A0
JRNE PBG_LUPE ;BR=NOT END OF LIST
PBUTTON_DONE
RETS
SND_BUTTON_CLICK
.WORD 0F308H,31,0A15AH,0
**************************************************************************
* *
* A_TAPE_IN - TAPE IS IN THE VCR *
* *
* A8 = TAPE OBJECT *
* *
**************************************************************************
A_TAPE_IN
CLR A14
MOVE A14,@SCROLL_FLAG,L ;FLAG VIDEO TO START
JAUC PULL_ANIM
TAPE_ANIM
LWLLW VHSB12,5|AFunc,A_Set_Var_Word+3,GUNS_OFF,1
LW VHSB8,5
LW VHSB6,5
LW VHSB4,5
LW VHSB1,30
LWL 1,1|AFunc,A_TAPE_IN
**************************************************************************
* *
* DRESSING ROOM GITAR VECTORS *
* *
**************************************************************************
DGITAR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DGITAR_CVECT
WL 0,DUMCRETS
DGITAR_COLLVECT2
WWL OID_GRND,0FFFFH,DGITAR_CVECT2
WL 0,DUMCRETS
DGITAR_CVECT2
SOUNDZ SND_DGITAR_TWANG
JAUC DELETE_OBJ
DGITAR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DGITAR_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 1000,A1
CLR A9
CALLA PRINT_SCORE
CALLA UNIV_FLASH ;FLASH IT!
MOVI DGITAR_COLLVECT2,A14
MOVE A14,*A8(OCVECT),L
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14 ;SET GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
MOVI 03000H,A14
MOVE A14,*A8(OYACCEL),W
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
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;REMOVE FROM UNIVERSE
DGITAR_GUNVECT
SOUNDZ SND_DGITAR_TWANG
DGITAR_DONE
RETS
SND_DGITAR_TWANG
.WORD 0F320H,86,0A16AH,0
**************************************************************************
* *
* FOLDING CHAIR VECTORS *
* *
**************************************************************************
FCHAIR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,FCHAIR_CVECT
WL 0,DUMCRETS
FCHAIR_CVECT
CALLA UNIV_COLL_CHECK
JRNZ FCHAIR_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A1
CLR A9
CALLA PRINT_SCORE
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_U30,B14
CALLA Fragger
MOVI FLDCHR2p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
SOUNDZ SND_FCHAIR_SHRED
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
RETS
FCHAIR_GUNVECT
MOVI 500,A5 ;POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_FCHAIR_CLANG
FCHAIR_DONE
RETS
SND_FCHAIR_CLANG
.WORD 0F320H,30,0A111H,0
SND_FCHAIR_SHRED
.WORD 0F320H,60,0A147H,0
**************************************************************************
* *
* DOLL VECTORS *
* *
**************************************************************************
DOLL_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DOLL_CVECT
WL 0,DUMCRETS
DOLL_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DOLL_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
DOLL_GUNVECT
; MOVI 500,A5 ;POINTS
; MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
; CLR A9
; CALLA UNIV_DAMAGE_HANDLER
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 FRAGMENTS
MOVI 040000H,A0
CLR A3
CALLA PreFrag_Box
MOVI -0FFH,B9
MOVI -01H,B10
MOVI FRAG_SS30,B14
CALLA Fragger
MOVI DOLLZ1,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
SOUNDZ SND_DOLL_SHRED
DOLL_DONE
RETS
SND_DOLL_SHRED
.WORD 0F320H,60,0A126H,0
**************************************************************************
* *
* FRUIT VECTORS *
* *
**************************************************************************
FRUIT_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,FRUIT_CVECT
WL 0,DUMCRETS
FRUIT_CVECT
CALLA UNIV_COLL_CHECK
JRNZ FRUIT_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
FRUIT_GUNVECT
SOUNDZ SND_FRUIT
MOVE *A8(OIMG),A14,L
CMPI DAPPL1,A14
JREQ FG_APPLE ;BR=WE HAVE APPLE
MOVI 500,A5 ;START BANANIMATION
MOVK M_FLASHOBJ,A7
CLR A9
CALLA UNIV_DAMAGE_HANDLER
MOVI GROUND_COLLVECT,A14
JRUC FG_GO
FG_APPLE
MOVI 500,A1 ;DO THE APPLE THING
CLR A9
CALLA PRINT_SCORE
CALLA UNIV_FLASH
MOVI APPLE_CVECT,A14
FG_GO
MOVE A14,*A8(OCVECT),L
MOVI SHRED_GUNVECT,A14
MOVE A14,*A8(OGUNVECT),L
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14 ;SET GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
MOVI 02800H,A14
MOVE A14,*A8(OYACCEL),W
MOVI 010000H,A0
MOVI -010000H,A1
CALLA RANGERND
MOVE A0,*A8(OXVEL),L
MOVI -030000H,A0
MOVI -040000H,A1
CALLA RANGERND
MOVE A0,*A8(OYVEL),L
MOVI -010H,A0
MOVI -080H,A1
CALLA RANGERND
MOVE A0,*A8(OZVEL),L
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
JAUC REMOVE_AND_FREE_LINK
FRUIT_DONE
RETS
SND_FRUIT
.WORD 0F308H,31,0A15AH,0
**************************************************************************
* *
* APPLE GROUND COLLISION STUFF *
* *
**************************************************************************
APPLE_CVECT
WWL OID_GRND,0FFFFH,APPLE_GRND_COLL
WL 0,DUMCRETS
APPLE_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
**************************************************************************
* *
* DELI TRAY VECTORS *
* *
**************************************************************************
DELITRAY_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,DELITRAY_CVECT
WL 0,DUMCRETS
DELITRAY_COLLVECT2
WWL OID_GRND,0FFFFH,DELITRAY_CVECT2
WL 0,DUMCRETS
DELITRAY_CVECT2
SOUNDZ SND_DELITRAY_LAND
JAUC DELETE_OBJ
DELITRAY_CVECT
CALLA UNIV_COLL_CHECK
JRNZ DELITRAY_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVI 500,A5
MOVK M_LASTFRM|M_FLASHOBJ,A7
CLR A9
CALLA UNIV_DAMAGE_HANDLER
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
CLR A0
MOVI 080H,A3
CALLA PreFrag_Box
MOVI 08000H,B3 ;MIN X VEL
MOVI 020000H,B4 ;MAX X VEL
MOVI -060000H,B7 ;MIN Y VEL
MOVI -038000H,B8 ;MAX Y VEL
MOVI 010000H,A1
MOVE *A8(OXVAL),A0,L
MOVE @XBASE,A14,L
SUB A14,A0
JRN DTC_GO
MOVE *A8(OCTRL),A14,W
XORI M_FLIPH,A14
MOVE A14,*A8(OCTRL),W
NEG A1
NEG B3 ;CHANGE FRAGMENTS X DIRECTION
NEG B4
DTC_GO
MOVI FRAG_FOOD,B14
CALLA Fragger
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
MOVE A1,*A8(OXVEL),L
MOVI 02800H,A14
MOVE A14,*A8(OYACCEL),W
MOVI -038000H,A0
MOVI -050000H,A1
CALLA RANGERND
MOVE A0,*A8(OYVEL),L
MOVI 040H,A0
CLR A1
CALLA RANGERND
MOVE A0,*A8(OZVEL),L
MOVE *A8(OFLAGS),A14,W
ORI M_GCOLL,A14 ;SET GROUND COLL FLAG
MOVE A14,*A8(OFLAGS),W
MOVI DELITRAY_COLLVECT2,A14
MOVE A14,*A8(OCVECT),L
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK
DTC_CLANG
SOUNDZ SND_DELITRAY_CLANG
RETS
DELITRAY_GUNVECT
MOVE *A8(OYACCEL),A14,W
JRNZ DTC_CLANG
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
MOVI 07FH,A3
CLR A4
CALLA PreFrag_Gun
MOVI FRAG_SS5,B14
CALLA Fragger
MOVE A0,A1
MOVK 4,A0
CALLA RAND0
SLL 5,A0
ADDI FOOD_PAL_TBL,A0
MOVE *A0,A0,L
MOVE A0,*A1(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10
DELITRAY_DONE
RETS
SND_DELITRAY_CLANG
.WORD 0F340H,27,0A344H,0
SND_DELITRAY_LAND
.WORD 0F350H,35,0A347H,0
FRAG_FOOD
.long FRAG_UANIM,F_FOOD_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL)
.long FRAG_UANIM,F_FOOD_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL)
.long FRAG_UANIM,F_FOOD_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL)
.long FRAG_UANIM,F_FOOD_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL)
.long FRAG_UANIM,F_FOOD_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGBOG+FRGGCOL)
.long FRAG_SMALL_SHARD_ANIM,F_FOOD_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGGCOL)
.long FRAG_SMALL_SHARD_ANIM,F_FOOD_STUFF
.word OID_JUNK,(5 << 11) + (1 << 6) + (FRGBOG+FRGGCOL)
.long 0
**************************************************************************
* *
* F_FOOD_STUFF - DO STUFF *
* *
* A0 = Ptr to un-inserted object. *
* *
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
* *
**************************************************************************
F_FOOD_STUFF
MOVI FRAG_UCOLL,A14
MOVE A14,*A0(OCVECT),L ;Set up chunk with Vectors
MOVE A0,A2
MOVK 4,A0
CALLA RAND0
SLL 5,A0
ADDI FOOD_PAL_TBL,A0
MOVE *A0,A0,L
CALLA GETFPAL
JRNZ FFS_PAL ;BR = WE HAVE PALETTE!
CLR A0
FFS_PAL
MOVE A0,*A2(OPAL),W
MOVE A2,A0
RETS
FOOD_PAL_TBL
.LONG DTOM9p,DCAULI6p,DCARRT5p,DBROC9p
DTOM9p:
.word 31
.word 001c0h,058a3h,05020h,04883h,054e6h,068c0h,06880h,06ce1h
.word 079ech,07520h,03020h,06903h,079a7h,07f16h,05880h,07523h
.word 07d65h,074a0h,04567h,029e3h,04927h,05d6ah,07e6fh,06420h
.word 07148h,06907h,07de8h,03ce4h,01a00h,040e4h,040e4h
DCAULI6p:
.word 31
.word 001c0h,02d48h,05671h,00840h,066f3h,066d1h,07334h,07b78h
.word 07bbch,0564dh,045ech,05e8bh,07336h,049e8h,05eb2h,02a2ah
.word 01204h,062b0h,02d23h,03dabh,04181h,02420h,0522ch,05207h
.word 06af6h,06f10h,07755h,00520h,05ad4h,05ad4h,05ad4h
DCARRT5p:
.word 31
.word 001c0h,058e0h,03c00h,04400h,05460h,05400h,07d80h,07e45h
.word 07de2h,07e24h,04d40h,07e04h,07e68h,06d20h,06500h,05ca0h
.word 07da1h,07960h,07f0dh,07140h,07a08h,07560h,04800h,064a0h
.word 07da0h,07e66h,04c20h,02580h,07181h,07940h,07940h
DBROC9p:
.word 31
.word 001c0h,00220h,000a0h,00020h,00040h,00100h,0224ch,00162h
.word 00103h,00144h,00000h,001e2h,00567h,00040h,011c7h,0268dh
.word 005c6h,000e3h,036cfh,00a88h,00146h,00a2ah,01a07h,02248h
.word 04354h,011c4h,009a0h,01a25h,02e6ah,015e0h,01e25h
**************************************************************************
* *
* LIGHT SWITCH VECTOR *
* *
**************************************************************************
LSWITCH_GUNVECT
MOVE @SCROLL_FLAG,A14,L
JRZ LSWITCH_DONE ;BR=NOT YET DUMMY
SOUNDZ SND_SWITCH
MOVI 500,A5
MOVK M_NOMORE|M_FLASHOBJ,A7
CLR A9
CALLA UNIV_DAMAGE_HANDLER
MOVI SECRET_PALETTE_TABLE,A1
LSWITCH_LUPE
MOVE *A1+,A0,L
JRZ LSWITCH_GO ;BR=NO MORE PALETTES
CALLA FINDPAL
JRZ LSWITCH_LUPE ;BR=NOT FOUND, SHOULD NEVER HAPPEN
CALLA FREEPAL ;ALLOCATE PALETTE
JRUC LSWITCH_LUPE
LSWITCH_GO
CLR A14 ;LIGHTS UP!
MOVE A14,@BLACKOUT,W
MOVE A14,@SCROLL_FLAG,L ;CLEAR LADDER FLAG
MOVI DUXNOFADE,A0 ;FADE IN EVERYTHING ELSE
CALLA FADEIN
CLRM @BUYIN_NOFADE,L
LSWITCH_DONE
RETS
SND_SWITCH
.WORD 0F308H,31,0A15AH,0
**************************************************************************
* *
* ********************************************************************** *
* * *
* * ******************************************************************** *
* * * *
* * * OUTSIDE CLUB X PORTAL DAMAGE *
* * * *
* * ******************************************************************** *
* * *
* ********************************************************************** *
* *
**************************************************************************
**************************************************************************
* *
* WALL LAMP VECTORS *
* *
**************************************************************************
WLAMP_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,WLAMP_CVECT
WL 0,DUMCRETS
WLAMP_CVECT
CALLA UNIV_COLL_CHECK
JRNZ WLAMP_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
WLAMP_GUNVECT
MOVI 500,A5 ;POINTS
MOVK M_NOMORE|M_FLASHOBJ,A7 ;LAST AND FLASH
CLR A9
CALLA UNIV_DAMAGE_HANDLER
SOUNDZ SND_DLAMP_BREAK
MOVE *A8(OXPOS),A14,W
CMPI 08FH,A14
JRNE WLG_FRAG
MOVE A8,A9 ;NO SCORE, NO OFFSET
MOVI FGLIST,A0
MOVI CLBXIT1_SHOOTER,A4 ;CHANGE THESE
MOVI NNDOR1,A11
JRUC WLG_NEXT
WLG_LUPE
MOVE *A8(AnimScr),A14,L ;CHECK SCRIPTS
JRZ WLG_NOANIM
CMP A4,A14
JREQ WLG_CHANGE
WLG_NOANIM
MOVE *A8(OIMG),A14,L ;CHECK IMAGES
CMP A11,A14
JRNE WLG_NEXT
WLG_CHANGE
CLR A5
CLR A7
CALLA UNIV_DAMAGE_HANDLER
JRUC WLG_GO
WLG_NEXT
MOVE *A8,A8,L
CMP A0,A8
JRNE WLG_LUPE ;BR=NOT END OF LIST
WLG_GO
MOVE A9,A8
WLG_FRAG
MMTM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
MOVI 040000H,A0
CLR A3
; MOVI [27,0],A4
CALLA PreFrag_Center
MOVI -0FFH,B9 ;MIN Z VEL
MOVI -01H,B10 ;MAX Z VEL
; MOVI -010000H,B7 ;MINIMUM Y VELOCITY
MOVI FRAG_U2,B14
MOVE *A8(OIHOFF),A9,W
JRZ WLG_GO_BIG_FRAGS
MOVI FRAG_U5,B14
WLG_GO_BIG_FRAGS
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
MOVE A9,A9
JRNZ WLAMP_DONE
MOVI LSHADE_INIT,A5 ;LET'S MAKE SOME FIREWORKS
CALLA CREATE_OBJ
JRZ WLAMP_DONE ;BR=OOPS!
MOVI LSHADE_GUNVECT,A14
MOVE A14,*A0(OGUNVECT),L
CLR A14
MOVE A14,*A0(OATEROCKET),L ;CLEAR ROCKET HIT FLAG
MOVE *A8(OZVAL),A1,L
DEC A1
MOVE A1,*A0(OZVAL),L ;SET Z POSITION
MOVE *A8(OXVAL),*A0(OXVAL),L ;SET X, Y POSITION
MOVE *A8(OYVAL),A14,L
SUBI 19 << 15,A14
MOVE A14,*A0(OYVAL),L
MOVI 02800H,A14
MOVE A14,*A0(OYACCEL),W
MOVE A0,A7
MOVI 010000H,A0
MOVI -010000H,A1
CALLA RANGERND
MOVE A0,*A7(OXVEL),L
MOVI -018000H,A0
MOVI -020000H,A1
CALLA RANGERND
MOVE A0,*A7(OYVEL),L
MOVI -01H,A0
MOVI -0FFH,A1
CALLA RANGERND
MOVE A0,*A7(OZVEL),L
MOVE A7,A0
CALLA INSOBJ
WLAMP_DONE
RETS
**************************************************************************
* *
* LAMP SHADE VECTORS *
* *
**************************************************************************
LSHADE_COLLVECT
WWL OID_GRND,0FFFFH,FRAG_UGRND_COLL
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,LSHADE_CVECT
WL 0,DUMCRETS
LSHADE_CVECT
CALLA UNIV_COLL_CHECK
JRNZ LSHADE_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
LSHADE_GUNVECT
MOVI 1000,A1
CLR A9
CALLA PRINT_SCORE
SOUNDZ SND_LSHADE_EXPLODE
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_U3,B14
CALLA Fragger
MOVI NGLAMP3p,A14
MOVE A14,*A0(FPDATA),L ;SET PALETTE
MMFM SP,B1,B2,B4,B5,B6,B8,B9,b10 ;MAKE FRAGMENTS
JAUC DELETE_OBJ
LSHADE_DONE
RETS
SND_LSHADE_EXPLODE
.WORD 0F320H,31,0A15AH,0
LSHADE_INIT
.LONG LSHADE1,LSHADE_COLLVECT
.WORD OID_UNIV, DMAWNZ, M_GCOLL, 0
.LONG C_STRTANIM
.LONG LAMP_SHADE_ANIM
LAMP_SHADE_ANIM
LW LSHADE2,4
LW LSHADE3,4
LWW LSHADE2,4|AFlip,M_FLIPV
LW LSHADE1,4
LWW LSHADE2,4|AFlip,M_FLIPV|M_FLIPH
LWW LSHADE3,4|AFlip,M_FLIPH
LW LSHADE2,4
LWW LSHADE1,4|AFlip,0
.long 0
**************************************************************************
* *
* PORTAL DOOR VECTOR *
* *
**************************************************************************
PORTDOOR_COLLVECT
WWL OID_PROCKET,~MASK_PLAYER,UNIV_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,PORTDOOR_CVECT
WL 0,DUMCRETS
PORTDOOR_CVECT
MOVE @WAVE_UNIV,A14,L
CMPI GXPORTAL,A14
JRNE PORTDOOR_DONE ;BR=NOT IN PORTAL ANYMORE
MOVE @ZSCROLL,A14,L
JRNZ PORTDOOR_DONE ;BR=WE'RE MOVIN'
MOVE @OBJENEMIES,A14,W
JRZ PORTDOOR_DONE
CALLA UNIV_COLL_CHECK
JRNZ PORTDOOR_DONE
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
CALLA POID_TO_PDATA
MOVK 1,A14 ; signal scroll table
MOVE A14,@SCROLL_FLAG,W ; to let us through
CALLA STOP_ENEMIES
SOUNDZ SND_DOOR_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,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 ;MAKE FRAGMENTS
MOVE *A8(OULINK),A0,L
CLR A14
MOVE A14,*A8(OULINK),L
CALLA REMOVE_AND_FREE_LINK ;DELETE DOOR
CALLA DEL_PROC_AND_OBJ
; movi FLEADOROPN-30h,a1 ; start of seq in a1
; move *a8(OIMG),a14,L ; current frame
;find_start:
; addi 30h,a1
; move *a1,a3,L ; start animation
; cmp a14,a3 ; on current frame
; jrne find_start
; calla STRT_ANIM
PORTDOOR_DONE
RETS
;FLEADOROPN:
; LW NNDOR1,3
; LW NNDOR2,3
; LW NNDOR3,3
; LW NNDOR4,3
; LW NNDOR5,1
; LWLL 1,1|AFunc,AU_CHANGE_MAP_IMG+2,NNDOR5
; LWL 1,1|AFunc,PULL_ANIM
SND_DOOR_EXPLODE
.WORD 0F320H,69,0A14AH,0
.end