total-carnage/CHUNKS.ASM

574 lines
11 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.

**************************************************************
*
* Software: Mark Turmell
* Initiated: 9/2/90
*
* Modified: Shawn Liptak, 10/27/91 -Orcus mods
*
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 12/27/91 14:21
**************************************************************
.FILE 'CHUNKS.ASM'
.TITLE 'CHUNK/EXPLOSION CODE'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "GAME.EQU"
;SOUNDS EXTERNAL
;SYMBOLS EXTERNALLY DEFINED
.ref GETFPAL,FRANIM,GPALOBJ,GETCPNT
.ref RNDRNGS
.ref RANDPER
;SYMBOLS DEFINED IN THIS FILE
.DEF BLOOD_LST2,ALL_CHUNKS,CHUNK_OBJ,BEGIN_CHNK,PCTOT
.DEF BLOOD_LST1,PCINFO,BOX_OUT,LASTPC
;UNINITIALIZED RAM DEFINITIONS
.BSS LASTPC,32
.BSS PCTOT,16
.BSS PCINFO,(32+16+32)*PCSMAX
.BSS GENERIC_INIT,7*32-16
;EQUATES FOR THIS FILE
;FOR STARTING A CHUNK OBJECT
XVAL .EQU GENERIC_INIT
YVAL .EQU XVAL+32
IMG .EQU YVAL+32
ZPOS .EQU IMG+32
FLAGS .EQU ZPOS+16
ID .EQU FLAGS+16
XVEL .EQU ID+16
YVEL .EQU XVEL+32
.TEXT
.REF LOCK_NUM,DO_ALL_STUFF,ADJSTWTL,SLIDEIN,INFO_BOX
.REF STRLNRMO,ERASE_TXT,WRLD,RD7FONT,EXITSND
.DEF WARP_INFO
WARP_INFO
;BRING PUT WARP INFO BOX AND TEXT
MOVE @LOCK_NUM,A0
CMPI 6,A0
JRZ WDIE
MOVI BUYINPID,A0
CLR A1
NOT A1
CALLA EXISTP
* Z BIT SET = NO MATCH, A0 = 0
JRNZ WDIE
MOVI BX1A,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVE A0,*A13(PDATA),L
MOVI BX2A,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVE A0,*A13(PDATA+32),L
MOVI BX3A,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVE A0,*A13(PDATA+64),L
MOVE A13,@INFO_BOX,L
MOVI SLIDEIN,A0
CALLA ONESND
MOVK 13H,A11
WVOUT SLEEPK 1
MOVE A13,A10
MOVK 3,A9
WVOUT1 MOVE *A10(PDATA),A0,L
MOVE *A0(OYPOS),A1
SUBK 5,A1
MOVE A1,*A0(OYPOS)
ADDK 32,A10
DSJ A9,WVOUT1
DSJ A11,WVOUT
CREATE TYPTEXT,DOT
SLEEP 130+150+30
BOX_OUT
;KILL ALL TEXT
MOVI TYPTEXT,A0
CLR A1
MOVE A1,@INFO_BOX,L
CALLA KIL1C
CALLA ERASE_TXT
MOVI EXITSND,A0
CALLA ONESND
MOVI 23H,A11
WVOU SLEEPK 1
MOVE A13,A10
MOVK 3,A9
WVOU1 MOVE *A10(PDATA),A0,L
MOVE *A0(OXPOS),A1
ADDK 7,A1
MOVE A1,*A0(OXPOS)
ADDK 32,A10
DSJ A9,WVOU1
DSJ A11,WVOU
MOVE *A13(PDATA),A0,L
CALLA DELOBJ
MOVE *A13(PDATA+32),A0,L
CALLA DELOBJ
MOVE *A13(PDATA+64),A0,L
CALLA DELOBJ
WDIE DIE
DOT
CLR A0
MOVE A0,@WRLD
MOVI RD7FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI WOBJ1,A8 ;WARPED TO:
MOVI [09EH,0E7H],A9 ;SCRN Y/X
MOVI 2525H,A6 ;
MOVK 2,A0
JSRP STRLNRMO
;BASED ON WARP #, PRINT OUT WARPED TO AREA:
MOVI BLIP,A0
CALLA ONESND
MOVE @LOCK_NUM,A8
SLL 5,A8
ADDI WARPTX1,A8
MOVE *A8,A8,L
MOVI [09EH+9,0E7H],A9 ;SCRN Y/X
MOVI 0C0CH,A6 ;
MOVK 2,A0
JSRP STRLNRMO
MOVI BLIP,A0
CALLA ONESND
MOVI WOBJ2,A8 ;WARP CODE:
MOVI [0B4H,0E7H],A9 ;SCRN Y/X
MOVI 2525H,A6 ;
MOVK 2,A0
JSRP STRLNRMO
MOVE @LOCK_NUM,A8
SLL 5,A8
ADDI FWARPTX2,A8
MOVE *A8,A8,L
MOVI BLIP,A0
CALLA ONESND
MOVI 500,A0
CALLA RANDPER
JRNC NOPASS ;BR=NO PASSWORD THIS TIME
MOVE @LOCK_NUM,A8
SLL 5,A8
ADDI WARPTX2,A8
MOVE *A8,A8,L
NOPASS MOVI [0B4H,0E7H+80],A9 ;SCRN Y/X
MOVI 0C0CH,A6 ;
MOVK 2,A0
JSRP STRLNRMO
MOVI BLIP,A0
CALLA ONESND
MOVI WOBJ2A,A8 ;DIFFICULTY:
MOVI [0B4H+9,0E7H],A9 ;SCRN Y/X
MOVI 2525H,A6 ;
MOVK 2,A0
JSRP STRLNRMO
MOVI BLIP,A0
CALLA ONESND
MOVE @LOCK_NUM,A8
SLL 5,A8
ADDI WARPTX2A,A8
MOVE *A8,A8,L
MOVI [0B4H+9,0E7H+87],A9 ;SCRN Y/X
MOVI 3A3AH,A6 ;
MOVK 2,A0
JSRP STRLNRMO
MOVI BLIP,A0
CALLA ONESND
MOVI WOBJ3,A8 ;ADVICE:
MOVI [0CAH,0E7H],A9 ;SCRN Y/X
MOVI 2525H,A6 ;
MOVK 2,A0
JSRP STRLNRMO
MOVI BLIP,A0
CALLA ONESND
MOVE @LOCK_NUM,A8
SLL 5,A8
ADDI WARPTX3,A8
MOVE *A8,A8,L
MOVI [0CAH+9,0E7H],A9 ;SCRN Y/X
MOVI 0C0CH,A6 ;
MOVK 2,A0
JSRP STRLNRMO
MOVI BLIP,A0
CALLA ONESND
MOVE @LOCK_NUM,A8
SLL 5,A8
ADDI WARPTX4,A8
MOVE *A8,A8,L
MOVI [0CAH+18,0E7H],A9 ;SCRN Y/X
MOVI 0C0CH,A6 ;
MOVK 2,A0
JSRP STRLNRMO
DIE
WOBJ1 .BYTE "WARPED TO:",0
WOBJ2 .BYTE "WARP CODE:",0
WOBJ2A .BYTE "DIFFICULTY:",0
WOBJ3 .BYTE "ADVICE:",0
BLIP .WORD >F3F7,>20,>8099,0 ;BLIP SND
WARPTX1 .LONG WP1,WP1A,WP1B,WP1C,WP1D,WP1E,0,WP1G,WP1H,WP1H
WARPTX2 .LONG WP2,WP2A,WP2B,WP2C,WP2D,WP2E,0,WP2G,WP2H,WP2H
FWARPTX2
.LONG FWP2,FWP2A,FWP2B,FWP2C,FWP2D,FWP2E,0,FWP2G,FWP2H,FWP2H
WARPTX2A
.LONG WPD2,WPD2A,WPD2B,WPD2C,WPD2D,WPD2E,0,WPD2G,WPD2H,WPD2H
WARPTX3 .LONG WP3,WP3A,WP3B,WP3C,WP3D,WP3E,0,WP3G,WP3H,WP3H
WARPTX4 .LONG WP4,WP4A,WP4B,WP4C,WP4D,WP4E,0,WP4G,WP4H,WP4H
WP1 .BYTE "BIO-NUCLEAR ZONE",0 ;MIDDLE OF DESERT
FWP2 .BYTE "?ULU",0
WP2 .BYTE "ZULU",0 ;GETS YOU TO WAVE BEFORE TAUNT
WPD2 .BYTE "05",0
WP3 .BYTE "BLOW UP LAND",0
WP4 .BYTE "MINES WITH BOMB",0
WP1A .BYTE "BONUS HOSTAGES",0 ;LOWER LEFT OF DESERT
FWP2A .BYTE "GOOB",0
WP2A .BYTE "ORCS",0 ;GETS YOU DESERT LCKDWN #1
WPD2A .BYTE "08",0
WP3A .BYTE "DROP BOMBS AND",0
WP4A .BYTE "DON'T BE GREEDY!",0
WP1B .BYTE "NEAR FACTORY",0 ;FROM TRIPLE GUNNER
FWP2B .BYTE "LICK",0
WP2B .BYTE "M??K",0 ;GETS YOU TO ORCUS
WPD2B .BYTE "07",0
WP3B .BYTE "SHOOT BARREL TO",0
WP4B .BYTE "DELAY EXPLOSION!",0
WP1C .BYTE "BONUS KEYS!",0 ;1ST HANGAR IN AIRPORT
FWP2C .BYTE "ROAD",0 ;GETS YOU TO AFTER RACKUP #1
WP2C .BYTE "LIPS",0 ;GETS YOU TO END OF ROAD #1
WPD2C .BYTE "10",0
WP3C .BYTE "EXPERIENCE PAIN",0
WP4C .BYTE "BEFORE PLEASURE!",0
WP1D .BYTE "REACTOR INTERIOR",0 ;MIDDLE OF AIRPORT GOING UP
FWP2D .BYTE "LICK",0 ;GETS YOU TO END OF TARMAC
WP2D .BYTE "EA?S",0 ;AREA WHERE SPIDER EGGS ARE
WPD2D .BYTE "10",0
WP3D .BYTE "KILL MR. BUTANE",0
WP4D .BYTE "WITH MANY BOMBS!",0
WP1E .BYTE "SECRET AIRPLANES",0 ;ON ROAD GOING INTO BIG FORT
FWP2E .BYTE "TOID",0 ;GETS YOU TO START OF BIGFORT
WP2E .BYTE "TO?D",0
WPD2E .BYTE "10",0
WP3E .BYTE "GRAB ROCKET PACKS",0
WP4E .BYTE "FLOAT OVER MINES!",0
;WP1F .BYTE "ELECTRIC CHAIR",0 ;ON ROAD GOING INTO BIG FORT
;FWP2F .BYTE "SHOK",0 ;GETS YOU TO START OF BIGFORT
;WP2F .BYTE "SHOK",0
;WPD2F .BYTE "10",0
;WP3F .BYTE "WHACK ON BUTTON",0
;WP4F .BYTE "TO ESCAPE DEATH!",0
WP1G .BYTE "EASY FREE MAN!",0 ;IN AIRPRT
FWP2G .BYTE "BL?W",0 ;GETS YOU TO SECRET PATH
WP2G .BYTE "B?OW",0
WPD2G .BYTE "4",0
WP3G .BYTE "SUPER HERO GAMES",0
WP4G .BYTE "ARE FOR DOGS!",0
WP1H .BYTE "JEEP ACTION!",0 ;LOWER RIGHT DESERT
FWP2H .BYTE "SHOK",0 ;SHOCK SCENE
WP2H .BYTE "SHOK",0
WPD2H .BYTE "5",0
WP3H .BYTE "YOU SHOULD HAVE",0
WP4H .BYTE "2 PLAYERS HERE!",0
;FEASTMASTER
.EVEN
BX1A:
.LONG [0E3H,0],[0F9H,0],BXTOP
.WORD 472,DMAWNZ|M_NOCOLL,CLSDEAD
.LONG 0,0
BX2A:
.LONG [0E3H,0],[0FEH,0],BXMID
.WORD 472,DMAWNZ|M_NOCOLL,CLSDEAD
.LONG 0,0
BX3A:
.LONG [0E3H,0],[0146H,0],BXTOP
.WORD 472,DMAWNZ|M_NOCOLL|M_FLIPV,CLSDEAD
.LONG 0,0
********************************
* Chunk an object (Process)
* PLACE INTO PCINFO TABLE FOR UPDATING BY THE PC DRIVER (ALL_CHUNKS) PROCESS
* A8=*OBJECT TO BLOW UP
* A9=XVEL
* A10=YVEL FOR ADDING IN
* A11=LIST FOR FRANIM, FIRST ENTRY IS IMG TO START, 0 ENDS LIST
CHUNK_OBJ
MOVE @PCTOT,A0
CMPI 40,A0
JRGE DONE
CALLA GETCPNT
MOVX A1,A0
SLL 16,A0 ;A0=PROPER X,A1=Y
MOVE A9,A6
MOVE A10,A7
MOVE *A11+,A2,L
MOVI 293,A3 ;240
MOVI DMAWNZ|M_NOCOLL,A4
MOVI CLSDEAD,A5 ;I WILL KILL MYSELF
CALLR BEGIN_CHNK
MOVE *A13(PDATA),A0
JRZ NOCH
MOVE A0,*A8(OPAL) ;CHANGE TO OTHER PAL
NOCH
MOVE @LASTPC,A0,L ;NOW INSERT THIS PNTR INTO CHUNK DRIVER
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVE *A11+,A9,L ;LIST FOR THIS CHUNK
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
JRUC AGAIN ;WILL NOW GENERATE X CHUNKS FOR CRATE DEATH
colp MOVE @PCTOT,A2
INC A2
MOVE A2,@PCTOT
CALLR NEWV2 ;GET VELOCITIES FOR THIS CHUNK
CALLR QUICK_CHNK
MOVE *A13(PDATA),A0
JRZ NOCH2
MOVE A0,*A8(OPAL) ;CHANGE TO OTHER PAL
NOCH2 MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
AGAIN MOVE *A11+,A9,L
JRNZ colp
DONE DIE
;NEWV MOVI -09000H,B0
; MOVI 09000H,B1
; CALLA RANGRAND
; ADD A6,A0
; MOVE A0,@XVEL,L
; MOVI -07000H,B0
; MOVI 07000H,B1
; CALLA RANGRAND
; ADD A7,A0
; MOVE A0,@YVEL,L
; RETS
NEWV2
movi >e000,a0
calla RNDRNGS
add a6,a0
move a0,@XVEL,L
movi >c000,a0
calla RNDRNGS
add a7,a0
move a0,@YVEL,L
rets
********************************
* PROCESS WHICH HANDLES ALL CHUNKS
ALL_CHUNKS
CLR A0
MOVI PCINFO,A1
MOVI PCSMAX,A2
PCL1 MOVE A0,*A1+,L
MOVE A0,*A1+,W
MOVE A0,*A1+,L
DSJS A2,PCL1
MOVI PCINFO,A0
MOVE A0,@LASTPC,L
PCTP MOVI PCINFO,A3
PCTP1
MOVE *A3+,A8,L
JREQ DN
;PC PNTR FOUND
MOVE *A3,A0,W ;GET SLP TIME
DEC A0
MOVE A0,*A3+,W
JRGT PCOUTA ;JRNE
;READY FOR ANIMATION ON THIS PIECE
MOVE *A3,A9,L ;GET FRANIM LIST
MOVK 4,A1
JSRP FRANIM ;PIG ON CYCLES!
JRC YDONE ;GET RID OF PIECE
MOVE A9,*A3,L
MOVE A0,*A3(-16),W ;RESTORE SLEEP TIME
PCOUTA ADDK 32,A3
JRUC PCTP1
YDONE SUBI 48,A3
;ONLY NECESSARY IF ONLY PIECE IN LIST?
CLR A0
MOVE A0,*A3,L
CALLA DELOBJA8
MOVE @PCTOT,A0
DEC A0
MOVE A0,@PCTOT
JRNN YD
CLR A0
MOVE A0,@PCTOT
YD
MOVE @LASTPC,A0,L
SUBI 80,A0
MOVE A0,@LASTPC,L
MOVE *A0,A5,L
JREQ DN ;BR=ONLY 1 PC IN LIST AND IT DIED!
MOVE *A0+,A1,L
MOVE *A0+,A2,W
MOVE *A0,A5,L
CLR A4
SUBI 48,A0
MOVE A4,*A0,L ;ZERO OUT PREVIOUS LAST ENTRY
MOVE A1,*A3+,L
MOVE A2,*A3+,W
MOVE A5,*A3+,L
JRUC PCTP1
DN SLEEPK 1
JRUC PCTP
BEGIN_CHNK
MOVE A0,@XVAL,L
MOVE A1,@YVAL,L
MOVE A2,@IMG,L
MOVE A3,@ZPOS
MOVE A4,@FLAGS
MOVE A5,@ID
MOVE A6,@XVEL,L
MOVE A7,@YVEL,L
QUICK_CHNK
MOVI GENERIC_INIT,A14 ;DEFINE OBJECT PARAMS
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
RETS
*****************************************************************************
;
; FRANIM LISTS OF CHUNKS/BLOOD
;
*****************************************************************************
BLOOD_LST1
;BLOODY CHUNK
.LONG rblot1
.WORD NEWPALET|20
.LONG RDBOOM ;ONUP1
.LONG rblot2
.WORD 5
.LONG rblot3
.WORD 5
.LONG rblot4
.WORD 5
.LONG rblot5
.WORD 5
.LONG rblot6
.WORD 5
.LONG rblot7
.WORD 5
.LONG rblot8
.WORD 4
.LONG rblot9
.WORD 4
.LONG rblot10
.WORD 5
.LONG 0
BLOOD_LST2
;OVAL BLOOD EXPLOSION
.LONG bldclt1
.WORD NEWPALET|1
.LONG RDBOOM ;ONUP1
.LONG bldclt2
.WORD 6
.LONG bldclt3
.WORD 6
.LONG bldclt4
.WORD 6
.LONG bldclt5
.WORD 6
.LONG bldclt6
.WORD 6
.LONG bldclt7
.WORD 6
.LONG bldclt8
.WORD 7
.LONG 0
BLOOD_LST3
;BLOODY CHUNK
.LONG rblot1
.WORD NEWPALET|40
.LONG RDBOOM ;ONUP1
.LONG rblot2
.WORD 5
.LONG rblot3
.WORD 6
.LONG rblot4
.WORD 6
.LONG rblot5
.WORD 5
.LONG rblot6
.WORD 5
.LONG rblot7
.WORD 5
.LONG rblot8
.WORD 4
.LONG rblot9
.WORD 4
.LONG rblot10
.WORD 5
.LONG 0
*****************************************************************************
.END