narc/NARC/NARCMINE.ASM

592 lines
13 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.

.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