narc/NARC/NARCMINE.ASM

592 lines
13 KiB
NASM
Raw Normal View History

2021-04-06 14:36:38 -07:00
.FILE 'NARCMINE.ASM'
.TITLE " <<< N A R C -- LAND MINES >>>"
.WIDTH 132
.OPTION B,D,L
.MNOLIST
* GET THE SYSTEM STUFF
.INCLUDE "\video\MPROCEQU.ASM" ;MPROC equates
.INCLUDE "\video\DISPEQU.ASM" ;Display processor equates
.INCLUDE "\video\GSP.INC" ;GSP assembler equates
.INCLUDE "\video\SYS.INC" ;Zunit system equates
.INCLUDE "\video\MACROS.HDR" ;Macros, Yeah!
* LOCAL STUFF
.INCLUDE "NARCEQU.ASM" ;NARC Equates
.INCLUDE "IMGTBL.GLO" ;Image Label Equates
.EVEN
.TEXT
.GLOBAL NEXPLODE,NEXAIR,WEEDCOLD,NUCLEXP,NEXINIT
**************************************************************************
* *
* MINECOLD - MINE COLD START *
* A5 = [Y,X] UPPER LEFT *
* A6 = [0,Z] *
* TYPES: 8 = NORMAL LANDMINE *
* 9 = HIDDEN MINE, RAISES AT SOME RANDOM TIME *
* *
**************************************************************************
MINECOLD
MOVE A6,A11
MOVE A5,A10
OR A5,A6
JRNZ MINEPOSG ;WE GOT US A POSITION
MOVK 1,A5 ;FLAG RANDOM POSITION(S)
JRUC MINEDOIT
MINEPOSG
CLR A5 ;FLAG CONSTANT POSITION(S)
MINEDOIT
MOVE A14,A6
SLL 8,A6
SRL 28,A6 ;GRAB # TO START
MOVE A14,A0
SLL 12,A0
SRL 28,A0 ;GRAB RANDOM # TO START
JRZ MINENORN ;BR = NO RANDOM # TO START
CALLA RANDU
ADD A0,A6
MINENORN
MOVI LMINEPID,A1
SLL 28,A14
SRL 28,A14
CMPI 9,A14
JRNE MINENORM ;BR = DEFAULT TO NORMAL MINE THANG
MOVI HIDEMINE,A7
JRUC MINELP
MINENORM
MOVI LANDERM,A7
MINELP
MOVE A5,A5
JRZ MINECR ;BR = JUST CREATE WITH GIVEN POS.
CLR A11 ;OTHERWISE RANDOM [Y,X]
MOVE @PLYMIN,B0,W
MOVE @PLYMAX,B1,W
SUBK 32,B1
CALLA RANGRAND
SLL 16,A0
MOVY A0,A10
MOVI 512,B0
MOVE B0,B1
SLL 1,B1
CALLA RANGRAND
MOVX A0,A10
MOVE @WORLDTL,A0,L
ADDXY A0,A10 ;OFFSET TO THE CURRENT WORLD
MINECR
CALLA GETPRC
DSJ A6,MINELP
RETS
*
*LAND MINE INIT TABLE
LANDINIT
.LONG 0,0,0,0
.WORD 0,0
.LONG LANDMINE,LANDMZ,LMCOLL
.WORD DMAWNZ,BEOID|LANDMOID
.LONG 0
**************************************************************************
* *
* LANDERM - NORMAL LANDMINE THAT JUST SITS THERE LIKE A BUMP *
* A10 = [Y,X] POSITION *
* A11 = [0,Z] IF Z = ZERO THEN OBJECT IS CONSIDERED ON THE GROUND *
* *
**************************************************************************
LANDERM
CALLR INITMINE
JAZ DUMDIE
MOVI EXPLOSIONS,A1
CALLA INSOBJ
CALLA ADDSUPP ;O.K. HERE IT IS
CLR A0
MOVE A0,*A8(OPLINK),L
DIE
**************************************************************************
* *
* HIDEMINE - HIDDEN LANDMINE COMES OUT OF THE GROUND AT SOME RANDOM TIME *
* A10 = [Y,X] POSITION *
* A11 = [0,Z] IF Z = ZERO THEN OBJECT IS CONSIDERED ON THE GROUND *
* *
**************************************************************************
HIDEMINE
CALLR INITMINE
JAZ DUMDIE
MOVE *A8(OIMG),A14,L
MOVE *A14(ISIZEY),A2,W ;GET THE AMOUNT TO CLIP
DEC A2
MOVK 1,A1
MOVE A1,*A8(OSIZEY),W ;CUT THE SUCKA DOWN
MOVE *A8(OYPOS),A1,W
ADD A2,A1 ;OFFSET THE Y POSITION
MOVE A1,*A8(OYPOS),W
MOVE A2,A9 ;STORE ITERATION COUNT
HIDEMLP
CALLA SCRTST
JRZ HIDEW
SLOOP 15,HIDEMLP
HIDEW
MOVI 5,B0 ;SLEEP ANYTIME FROM 1
MOVI 20H,B1 ;TO 10 SECONDS
CALLA RANGRAND
CALLA PRCSLP
MOVE A8,A0
CALLA INSOBJ ;TIME TO WAKE UP CHARLIE
MOVK 5,A11 ;FIVE PIXEL FAIR WARNING
HIDEUILP
MOVE *A8(OYPOS),A1,W
DEC A1
MOVE A1,*A8(OYPOS),W
MOVE *A8(OSIZEY),A1,W
INC A1
MOVE A1,*A8(OSIZEY),W
SLEEP 5
DEC A9
DSJS A11,HIDEUILP
MOVI EXPLOSIONS,A1
MOVE A8,A0
CALLA ADDSUPP ;NOW MAKE IT DESPICABLE
HIDEULP
MOVE *A8(OYPOS),A1,W ;UNCOVER THE DEADLY TRUTH REST
DEC A1
MOVE A1,*A8(OYPOS),W
MOVE *A8(OSIZEY),A1,W
INC A1
MOVE A1,*A8(OSIZEY),W
SLEEP 5
DSJS A9,HIDEULP
CLR A0
MOVE A0,*A8(OPLINK),L ;DE-LINKIFY
DIE
**************************************************************************
* *
* INITMINE - INITIALIZE THE MINE OBJECT *
* A10 = [Y,X] POSITION *
* A11 = [0,Z] IF Z = 0 THEN OBJECT IS GROUNDED *
* RETURNS: *
* Z BIT SET = FAILURE A0 = A8 = 0 *
* Z BIT CLR = SUCCESS A0 = A8 = PTR TO MINE OBJECT *
* *
**************************************************************************
INITMINE
PUSH A14
MOVI LANDINIT,A14
CALLA GPALOBJ ;GET US AN OBJECT
JAZ INITMX ;NO LUCK CHEESE BALL
CALLA STFOBJ ;STUFF IT UP DUDE
MOVE A0,A8
MOVE A13,*A0(OPLINK),L
CLR A14
MOVX A10,A14
MOVE A14,*A0(OXPOS),W
MOVY A10,A14
SRL 16,A14
MOVE A14,*A0(OYPOS),W
MOVE A11,A11
JRZ LANDSETZ
MOVE A11,*A0(OZPOS),W
JRUC LANDMGO
LANDSETZ
CALLA SETZPOS
LANDMGO
MOVE A0,A0 ;CLR Z BIT
INITMX
PULL A14
RETS
*
*LAND MINE CAR COLLISION
*A0 = PTR TO CAR
*A8 = PTR TO LAND MINE
LMCOLCAR
MOVI CEXPLODE,A7 ;BIG CAR EXPLOSION
MOVI CEXPID,A1
JRUC LMCOLL3
*
*LAND MINE NORMAL COLLISION
*A8 = PTR TO THING THAT STEPPED ON IT
*A0 = PTR TO LAND MINE
LMCOLL1
MOVI NEXPLODE,A7 ;NORMAL EXPLOSION
MOVI REXPID,A1 ;EXPROSION PROCESS I.D.
LMCOLL3
MOVE *A0(OZPOS),A2,W ;LAND MINE Z
MOVE *A0(OFLAGS),A9,W
SLL 16,A9
MOVX A2,A9 ;A9 = OFLAGS:OZPOS
MOVE *A0(OXPOS),A3,W
MOVE *A0(OSIZEX),A2,W
SRA 1,A2
ADD A2,A3
MOVE *A0(OYPOS),A2,W
MOVE *A0(OSIZEY),A10,W
ADD A10,A2
SLL 16,A2
MOVE *A0(OID),A10,W ;A10 = ROCKET I.D.
MOVY A2,A11
MOVX A3,A11 ;PASS MINE BOTTOM MIDDLE [Y,X]
MOVE A0,B0
CALLA GETPRC ;CREATE THE ROCKET EXPLOSION
MOVE B0,A0
MOVE *A0(OPLINK),A0,L
JRZ LMCOLL4
CALLA KILL
LMCOLL4
MOVE B0,A0
MOVI EXPLOSIONS,A1
CALLA DELSUPP
CALLA DELSOBJ
CLR A0
INC A0
RETS
**************************************************************************
* *
* WEEDCOLD - SOME KIND OF WEED COLD START *
* A5 = [Y,X] UPPER LEFT *
* A6 = [0,Z] *
* TYPES: 8 = BOOBY TRAPPED WEED *
* *
**************************************************************************
WEEDCOLD
MOVE A6,A11
MOVE A5,A10
OR A5,A6
JRNZ WEEDPOSG ;WE GOT US A POSITION
MOVK 1,A5 ;FLAG RANDOM POSITION(S)
JRUC WEEDDOIT
WEEDPOSG
CLR A5 ;FLAG CONSTANT POSITION(S)
WEEDDOIT
MOVE A14,A6
SLL 8,A6
SRL 28,A6 ;GRAB # TO START
MOVE A14,A0
SLL 12,A0
SRL 28,A0 ;GRAB RANDOM # TO START
JRZ WEEDNORN ;BR = NO RANDOM # TO START
CALLA RANDU
ADD A0,A6
WEEDNORN
MOVI WEEDPID,A1
SLL 28,A14
SRL 28,A14
CMPI 8,A14
JRNE WEEDNORM ;BR = DEFAULT TO NORMAL WEED THANG
MOVI BTWEED,A7
JRUC WEEDLP
WEEDNORM
MOVI WEEDPLANT,A7
WEEDLP
MOVE A5,A5
JRZ WEEDCR ;BR = JUST CREATE WITH GIVEN POS.
CLR A11 ;OTHERWISE RANDOM [Y,X]
MOVE @PLYMIN,B0,W
MOVE @PLYMAX,B1,W
SUBK 32,B1
CALLA RANGRAND
SLL 16,A0
MOVY A0,A10
MOVI 512,B0
MOVE B0,B1
SLL 1,B1
CALLA RANGRAND
MOVX A0,A10
MOVE @WORLDTL,A0,L
ADDXY A0,A10 ;OFFSET TO THE CURRENT WORLD
WEEDCR
CALLA GETPRC
DSJ A6,WEEDLP
RETS
*
*WEED PLANT INIT TABLE
WEEDINIT
.LONG 0,0,0,0
.WORD 0,0
.LONG WEED,WEEDZ,WEEDCOLL
.WORD DMAWNZ,BEOID|LANDMOID
.LONG 0
**************************************************************************
* *
* WEEDPLANT - NORMAL WEEDPLANT THAT JUST SITS THERE LIKE A BUMP *
* A10 = [Y,X] POSITION *
* A11 = [0,Z] IF Z = ZERO THEN OBJECT IS CONSIDERED ON THE GROUND *
* *
**************************************************************************
WEEDPLANT
CALLR INITWEED
JAZ DUMDIE
CALLA INSOBJ
CLR A0
MOVE A0,*A8(OPLINK),L
DIE
**************************************************************************
* *
* BTWEED - BOOBY TRAPPED WEED PLANT EXPLODES WHEN YOU TOUCH IT *
* A10 = [Y,X] POSITION *
* A11 = [0,Z] IF Z = ZERO THEN OBJECT IS CONSIDERED ON THE GROUND *
* *
**************************************************************************
BTWEED
CALLR INITWEED
JAZ DUMDIE
MOVI EXPLOSIONS,A1
CALLA INSOBJ
CALLA ADDSUPP ;O.K. HERE IT IS
CLR A0
MOVE A0,*A8(OPLINK),L
DIE
**************************************************************************
* *
* INITWEED - INITIALIZE THE WEED OBJECT *
* A10 = [Y,X] POSITION *
* A11 = [0,Z] IF Z = 0 THEN OBJECT IS GROUNDED *
* RETURNS: *
* Z BIT SET = FAILURE A0 = A8 = 0 *
* Z BIT CLR = SUCCESS A0 = A8 = PTR TO WEED OBJECT *
* *
**************************************************************************
INITWEED
PUSH A14
MOVI WEEDINIT,A14
CALLA GPALOBJ ;GET US AN OBJECT
JAZ INITWX ;NO LUCK CHEESE BALL
CALLA STFOBJ ;STUFF IT UP DUDE
MOVE A0,A8
MOVE A13,*A0(OPLINK),L
CLR A14
MOVX A10,A14
MOVE A14,*A0(OXPOS),W
MOVY A10,A14
SRL 16,A14
MOVE A14,*A0(OYPOS),W
MOVE A11,A11
JRZ WEEDSETZ
MOVE A11,*A0(OZPOS),W
JRUC WEEDMGO
WEEDSETZ
CALLA SETZPOS
WEEDMGO
MOVE A0,A0 ;CLR Z BIT
INITWX
PULL A14
RETS
*
*NEXPLODE - NUCLEAR EXPLOSION THANG
*A9 = OFLAGS:OZPOS OF ROCKET
*A10 = OID OF ROCKET
*A11 = YX POSITION OF ROCKET
*ENTER HERE FOR AIR BOMB
NEXAIR
MOVI AIRB1,A7
JRUC NEXPLODG
*ENTER HERE FOR GROUND BOMB
NEXPLODE:
MOVI NUCLEXP,A7 ;GET ANIMATION TABLE
NEXPLODG
MOVE A7,*A13(PDATA),L
MOVI NEXINIT,A14
CALLA GPALOBJ
JRZ NEXXXDI ;BR = THERE'S NO PALETTES HERE
CALLA STFOBJ
MOVE A13,*A0(OPLINK),L ;LINK IT TO THIS PROCESS
SRL 4,A10
SLL 4,A10
ADDK EXPLODID,A10 ;MAKE THIS AN EXPLOSION
MOVE A10,*A0(OID),W ;STUFF I.D.
SUBK EXPLODID,A10 ;BACK HOME AGAIN
MOVE A9,*A0(OZPOS),W ;GONNA SET US A Z POSITION, YESIREE
MOVI REXOFF,A8
SRL 20,A9 ;GET FLAGS INTO POSITION
SLL 4,A9
ORI DMAWNZ,A9 ;MAKE SURE THE WRITE IS CORRECT
BTST B_FLIPH,A9 ;AND TEST FOR FLIP
JREQ NEX2 ;BR = ROCKET NOT FLIPPED
NEG A8
NEX2
ADDXY A8,A11 ;ADD IN THE OFFSET
CLR A2
MOVY A11,A2 ;SET Y POSITION
MOVX A11,A3
SLL 16,A3 ;SET X POSITION
MOVE A9,A4
CALLA GANISAG ;ADJUST
CALLA INSOBJ
MOVI EXPLOSIONS,A1 ;INSERT ON THE EXPLOSIONS LIST
CALLA ADDSUPP ;ADD IT TO THE CORRECT SUPPLEMENTAL LIST
MOVE A0,A8
MOVE *A13(PDATA),A9,L
MOVI SND1,A0
CALLA ONESND ;EXPLODE WITH NOISE
CLR A1
NEX3 JSRP FRANIM
JRC NEXXX
*** MOVE *A8(OZPOS),A0,W
*** ADDK 2,A0
*** MOVE A0,*A8(OZPOS),W ;EXPLODE OUTWARDS PLEASE
JRUC NEX3
NEXXX
MOVE A8,A0 ;GET BACK FOR DELETE
MOVI EXPLOSIONS,A1
CALLA DELSUPP ;UN-SUPP ME
MOVK 1,A1
JSRP FRANIM ;ANIMATE THE REST
MOVE A8,A0
CALLA DELPAL
CALLA DELOBJ ;TAKE IT AWAY
NEXXXDI
JAUC SUCIDE
*
*NUCLEAR BOMB EXPLOSION
NEXINIT
.LONG 0,0,0,0
.WORD 0,0
.LONG nb1grnd,NEXZ,DUMCOLL
.WORD DMAWNZ,0
.LONG 0
AIRB1:
.long nb1
.word NEWPALET|4
.long newbom
.long nb2a
.word 6
.long nb3a
.word 5
LONGNULL
AIRB2:
.long nb4
.word 4
.long nb5
.word 3
.long nb6
.word 3
.long nb7
.word 3
.long nb8
.word 3
.long hiro9air
.word 3
.long hiro10air
.word 3
.long hiro11air
.word 3
LONGNULL
*
*NUCLEAR EXPLOSION ANIMATION
NUCLEXP
.long nb1grnd
.word 3
.long hiro1
.word 5
.long hiro2
.word 5
.long hiro3
.word 5
.long hiro4
.word 4
LONGNULL
.long hiro5 ;TAKE IT OFF OF THE EXPLOSIONS LIST
.word 3
.long hiro6
.word 3
.long nb5grnd
.word 3
.long nb6grnd
.word 3
.long nb7grnd
.word 3
.long nb8grnd
.word 3
.long hiro9
.word 3
.long hiro10
.word 3
.long hiro11
.word 3
LONGNULL
*
*WEED PLANT COLLISION
*
*LAND MINE COLLISION
WEEDCOLL
.WORD B1OID|EXPLODID
.LONG LMCOLL1
.WORD B2OID|EXPLODID
.LONG LMCOLL1
.WORD BEOID|EXPLODID
.LONG LMCOLL1
.WORD P1OID
.LONG LMCOLL1
.WORD P2OID
.LONG LMCOLL1
.WORD 0
.LONG DUMRTSG
*
*LAND MINE COLLISION
LMCOLL
.WORD C1OID|CBODYID
.LONG LMCOLCAR
.WORD CAR2OID|CBODYID
.LONG LMCOLCAR
.WORD CAR3OID|CBODYID
.LONG LMCOLCAR
.WORD TRAN1OID|CBODYID
.LONG LMCOLCAR
.WORD B1OID|EXPLODID
.LONG LMCOLL1
.WORD B2OID|EXPLODID
.LONG LMCOLL1
.WORD BEOID|EXPLODID
.LONG LMCOLL1
.WORD P1OID
.LONG LMCOLL1
.WORD P2OID
.LONG LMCOLL1
.WORD CLOWNOID
.LONG LMCOLL1
.WORD DUMPOID
.LONG LMCOLL1
.WORD LOFOID
.LONG LMCOLL1
.WORD LOFOID|1
.LONG LMCOLL1
.WORD LOFOID|2
.LONG LMCOLL1
.WORD LOFOID|3
.LONG LMCOLL1
.WORD LOFOID|4
.LONG LMCOLL1
.WORD LOFOID|5
.LONG LMCOLL1
.WORD LOFOID|6
.LONG LMCOLL1
.WORD DOGOID|0
.LONG LMCOLL1
.WORD HYPOEOID|0
.LONG LMCOLL1
.WORD BGGID
.LONG LMCOLL1
.WORD BGDMPID
.LONG LMCOLL1
.WORD 0
.LONG DUMRTSG