roadkill/RKDEATH/DRMIS.ASM

2072 lines
36 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: DRMIS.ASM
*** MISSILIE STUFF
***
*** JFL 10 JAN 93
*** JFL 18 JAN 93; ROCKET
*** JFL 27 JAN 93
*** JFL 29 JAN 93
*** JFL 09 FEB 93
*** JFL 12 FEB 93
*** JFL 14 MAR 93; FF WEAPON
*** JFL 13 APR 93; LMINE PICKUP
*** JFL 14 APR 93; MISL VEL SLOWED
***
.MLIB "APMACS.LIB"
.FILE "DRMIS.ASM"
.TITLE " <<< DERBY RACE -- MISSILE DEF >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**
** COMPILE FLAGS
**
***********************************************************************
* *
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
* ALL RIGHTS RESERVED. *
* *
*************************************************************************
* GET THE SYSTEM STUFF
.INCLUDE "AP.H"
.INCLUDE "DR.I"
.INCLUDE "DRO.I"
.INCLUDE "DRV.I"
.INCLUDE "DRMIS.I"
.INCLUDE "DRSND.I"
.INCLUDE "DRC.I"
.INCLUDE "IMGTBLM2.GLO"
** OTHERS USE
.DEF MISIMAGES ;DRMIS.ASM
.DEF MISLAUNCH ;DRMIS.ASM
.DEF MISFFPROC ;DRMIS.ASM
.DEF MISPICKUP ;DRMIS.ASM
.DEF LMINEPICKUP ;DRMIS.ASM
.DEF MISFINDLOCKCLOSEST ;DRMIS.ASM
.DEF MISDETONATEALL ;DRMIS.ASM
.DEF MISDETONATETARGET ;DRMIS.ASM
.DEF CREATELANDMINE ;DRMIS.ASM
.DEF LMINEDETONATE ;DRMIS.ASM
** WE USE
.REF COMPTODIRVEC ;DR.ASM
.REF VECTORTOVELS ;DR.ASM
.REF GENAOBJLIST ;DRA.ASM
.REF ASMISLBOOM ;DRAS.ASM
.REF ASMISLFFBOOM ;DRAS.ASM
.REF ASDEFENSEBOOM ;DRA.ASM
.REF TAKEDAMAGE ;DRH.ASM
.REF MAKESHADMULTI ;DRI.ASM
.REF TOPOXZ ;DRT.ASM
.REF MISBLOWUPTBL ;DRT.ASM
.REF MISBLOWUPTBLX ;DRT.ASM
.REF ARENASND ;DRSND.I
.REF MAKESND ;DRSND.I
.REF CARTHROWUP ;DRC.ASM
.REF OBJ2OBJDIR ;DRH.ASM
.REF SCORESETMISL ;DRS.ASM
.REF SCORESETLMINE ;DRS.ASM
.REF RANDOMA2 ;APUTIL.ASM
.REF OBJINITDEFMISL ;DRAS.ASM
.REF OBJINITLMINE ;DRAS.ASM
.REF OBJINITFF ;DRAS.ASM
.REF INSANI ;APD.ASM
.REF ANISPAWNONE ;DRA.ASM
.REF ASLMINE ;DRAS.ASM
.REF WAVEIRQS
.REF SETGCOL ;APD.ASM
.REF SETZMIN ;DRH.ASM
** WE USE -- RAM
.REF OBJINITRAMMISSILE ;DRRAM.ASM
.REF DRG ;DRRAM.ASM
.TEXT
.EVEN
**
** NOTES
**
** - MISSILE COLOR IN OBJINITRAMMISSILE IS ASSUMED TO BE NEUTRAL
**
**
** DEFINES
**
MISLDAMAGE EQU 14 ;HOW MUCH DAMAGE TO GIVE
MISLFFDAMAGE EQU 2 ;HOW MUCH DAMAGE TO GIVE
FIRSTRETARGETTIME EQU 55*4 ;HOW LONG MISL LOCKS ON FIRST TARGET
MISLLOOKFIRST EQU ONESECOND/2 ;HOW OFTEN MISSILE LOOKS & DIRECTS ITSELF
MISLLOOKTIME EQU 16 ;HOW OFTEN MISSILE LOOKS & DIRECTS ITSELF
MISLTARGETTIME EQU 60 ;HOW OFTEN MISL RETARGETS
MISLSAFETIME EQU 80 ;HOW LONG A CAR THATS JUST BEEN HIT IS SAFE
MISLDEFENSETIME EQU 8 ;HOW LONG BEFORE IT WORKS
MISZOFF EQU -8 ;Z OFF -- HELPS MISL HIT IN FRONT OF FG OBJS
DIRTOMISL EQU 2 ;SHIFT TO CONVERT DIR 0..FF TO 0..63
MISLGASTIME EQU 55*10 ;HOW LONG MISSILE LIVES FOR
MISLNEUTRAL_P EQU MISLN_P ;PALLETTE FOR NEUTRAL MISSILES
MISLYPOS EQU -4 ;HEIGHT OF MISL
FFYPOS EQU 4 ;HEIGHT OF FF (MAKE POSITIVE)
MISFFYACC EQU 400H
MAXMISLSTATE EQU 3 ;0..2 ARE OK
MISMAXVEL EQU 5000H ;MAX MISSILE
MISINITVEL EQU 3000H ;INIT MISSLE WITH FRAC BITS!
MISFFINITVEL EQU 500H ;INIT FF NO FRAC BITS
MISINITACC EQU 0040H ;ACCELERATION
MISTURNACC EQU 0010H ;DECELERATION
MISNEGACC EQU 0010H ;DECELERATION
MISVELFRACSHIFT EQU 4 ;BITS OF FRACTION
MISTURN EQU 6 ;TURN DELTA
MISLSIZEOF EQU 5 ; SIZEOF ONE ENTRY IN THE IMG TBL
.IF PMSIZE >= PSDATA
ERROR TOO BIG
.ENDIF ;CHECK
SL_MISDIRTOINDEX EQU 24 ;LEFT SHIFT FIRST
SR_MISDIRTOINDEX EQU 24+4
**
** MISFINDLOCKCLOSEST
**
** IN
** A2-A3 SCRATCH
** A7 CD
** A8 OBJ
** OUT
** C IF NOT LOCKED ON OBJ
** ELSE A2 IS BEST MISSILEOBJ THAT IS LOCKED ON
**
** JFL 18 JAN 93
** JFL 29 JAN 93; CLOSEST
** JFL 18 FEB 93; MISL SUP LIST
**
MISFINDLOCKCLOSEST
;HOW MANY ARE LOCKED ON?
MOVW *A7(CDMISLOCK),A3
SUBK 2,A3
JRN MISFINDLOCKANY ;ONLY 1
ADDK 2,A3
MMTM SP,A0,A1,A4,A5,A6,A8
MOVL @SUPPLSTS+SUPL_MISL,A2
JRZ MFLCBADX
;SET UP
CLR A0 ;WINNER
MOVI 32767,A1 ;DIST
MOVW *A8(OXPOS),A5 ;X
MOVW *A8(OZPOS),A6 ;Y
;REG USE
; A0 WINNER
; A1 DIST
; A2 CUR
; A3 COUNT
; A4 SC
; A5 X
; A6 Y
; A7 CD
; A8 OBJ
MFLCLOOP
;CHECK IF THIS IS LOCKED IN ON OBJ
MOVL *A2(OPLINK),A4
TLOCKON Z
MOVL *A4(PMTARGET),A14
CMP A8,A14
JRNE MFLCNEXT
;LOCKED ONTO PLAYER, IS THIS CLOSEST?
MOVW *A2(OXPOS),A4 ;X
MOVW *A2(OZPOS),A14 ;Y
QDISTXY A5,A6,A4,A14 ;QDISTXY X1,Y1,X2,Y2 SC:X2 OUT:Y2
CMP A1,A14
JRHS MFLCNEXT
;THIS IS BETTER
MOVE A14,A1 ;NEW DIST
MOVE A2,A0 ;NEW WINNER
DSJ A3,MFLCNEXT
MFLCX
MOVE A0,A2 ;SET RESULT
MMFM SP,A0,A1,A4,A5,A6,A8
CLRC
RETS
MFLCNEXT
;NEXT
MOVL *A2(OSLINK),A2
JRNZ MFLCLOOP
MFLCBADX
MMFM SP,A0,A1,A4,A5,A6,A8
SETC
RETS
**
** MISFINDLOCKANY
** IN
** A2-A3 SCRATCH
** A7 CD
** A8 OBJ
** OUT
** C IF NOT LOCKED ON OBJ
** ELSE A2 IS FIRST MISSILEOBJ THAT IS LOCKED ON
**
** JFL 18 JAN 93
** JFL 29 JAN 93; CLOSEST
** JFL 18 FEB 93; MISL SUP LIST
**
MISFINDLOCKANY
MOVL @SUPPLSTS+SUPL_MISL,A2
JRZ MFLABADX
MFLALOOP
;CHECK IF THIS IS LOCKED IN ON OBJ
MOVL *A2(OPLINK),A3
TLOCKON Z
MOVL *A3(PMTARGET),A14
CMP A8,A14
JREQ MFLAX
MFLANEXT
;NEXT
MOVL *A2(OSLINK),A2
JRNZ MFLALOOP
MFLABADX
SETC
RETS
MFLAX
CLRC
RETS
**
** MISDETONATEALL
**
** IN
** A2-A3 SCRATCH
** B0 IRQ TO DETONATE
**
** JFL 10 FEB 93
** JFL 18 FEB 93; MISL SUP LIST
**
MISDETONATEALL
MOVL @SUPPLSTS+SUPL_MISL,A2
JRZ MDAX
MDALOOP
;SET TO DETONATE
MOVL *A2(OPLINK),A14
TLOCKON Z
MOVE B0,A3
MOVL A3,*A14(PMDETONATE)
MDANEXT
;NEXT
MOVL *A2(OSLINK),A2
JRNZ MDALOOP
MDAX
RETS
**
** MISDETONATETARGET
** DETONATE ALL LOCKED ON TARGET
**
** IN
** A0 TARGET
** A2-A3 SCRATCH
** B0 IRQ TO DETONATE
**
** JFL 10 FEB 93
** JFL 18 FEB 93; MISL SUP LIST
**
MISDETONATETARGET
MOVL @SUPPLSTS+SUPL_MISL,A2
JRZ MDATX
MDATLOOP
;CHECK IF THIS IS LOCKED IN ON OBJ
MOVL *A2(OPLINK),A14
TLOCKON Z
MOVL *A14(PMTARGET),A3
CMP A0,A3
JRNE MDATNEXT
;SET TO DETONATE
MOVE B0,A3
MOVL A3,*A14(PMDETONATE)
MDATNEXT
;NEXT
MOVL *A2(OSLINK),A2
JRNZ MDATLOOP
MDATX
RETS
**
** MISSILEPROCTBL
**
** JFL 18 JAN 93
** JFL 24 FEB 93
**
MISSILEPROCTBL
.LONG 0 ;ROCKET
.LONG SMARTMPROC ;SMART
.LONG DEFENSEMPROC ;DEFENSE
.LONG 0 ;GUIDED
MISSILEPROCTBLX
**
** MISLAUNCH
**
** IN
** A2 MISSILE TYPE
** A7 CD
** A8 OBJ
** OUT
** C SET IF NOT LAUNCHED
**
** JFL 13 JAN 93
** JFL 18 JAN 93
**
MISLAUNCH
MMTM SP,A1
MOVE A2,A1
;LAUNCH SOUND
MOVW *A7(CDINPNUM),A14
ADDI SNDMISL1,A14
CALLA ARENASND ;IN:A14 SNDID
;SET UP FOR PROCESS
MMTM SP,A0,A7,A8
MOVE A7,A9 ;PASS CD AS A9
SLL 5,A1 ;SIZEOF MISSILEPROCTBL
ADDI MISSILEPROCTBL,A1
.IF DEBUG
CMPI MISSILEPROCTBLX,A1
TLOCKON HS
.ENDIF ;DEBUG
MOVL *A1,A7
TLOCKON Z
MOVI PID_DRAGONE,A1
CALLA GETPRC
MMFM SP,A0,A7,A8
CLRC
MMFM SP,A1
RETS
MLBADX
SETC
MMFM SP,A1
RETS
**
** MISPICKUP
**
** IN
** A2 COUNT
** A7 CD
** A8 OBJ
**
** JFL 13 JAN 93
**
MISPICKUP
;ADD THEM TO INVENTORY
MOVW *A7(CDMISSILES),A3
ADD A2,A3
MOVW A3,*A7(CDMISSILES)
;SET SCORE
MOVE A8,A2
CALLA SCORESETMISL ;IN: A2,A3 OBJ,MISSILES
RETS
**
** LMINEPICKUP
**
** IN
** A2 COUNT
** A7 CD
** A8 OBJ
**
** JFL 13 APR 93
**
LMINEPICKUP
;ADD THEM TO INVENTORY
MOVW *A7(CDLMINES),A3
ADD A2,A3
MOVW A3,*A7(CDLMINES)
;SET SCORE
MOVE A8,A2
CALLA SCORESETLMINE ;IN: A2,A3 OBJ,COUNT
RETS
**
** FINDCLOSESTCAR
**
** IN
** A2 EXCLUDE OBJ
** A3 SCRATCH
** A8 OBJ
** OUT
** A2 CLOSEST OBJ (Z IF NONE)
**
** JFL 10 JAN 93
**
FINDCLOSESTCAR
MMTM SP,A4,A5,A6,A10,A11
;GET SUPL
CLR A10 ;BEST OBJ
MOVL @SUPPLSTS+SUPL_CAR,A4
JRZ FCCX
;SETUP
MOVI 32767,A11 ;BEST DIST
MOVW *A8(OXPOS),A5
MOVW *A8(OZPOS),A6
FCCLOOP
;THIS IS BETTER, MAKE SURE ITS NOT EXCLUDED
CMP A2,A4
JREQ FCCNEXT
;FIND DIST KIND OF
MOVW *A4(OXPOS),A3
SUB A5,A3
ABS A3
MOVW *A4(OZPOS),A14
SUB A6,A14
ABS A14
ADD A14,A3
;CHECK IF THIS IS BETTER
CMP A11,A3
JRHS FCCNEXT
;ITS A KEEPER
MOVE A4,A10 ;BETTER OBJ
MOVE A3,A11 ;BETTER DIST
FCCNEXT
;NEXT
MOVL *A4(OSLINK),A4
JRNZ FCCLOOP
FCCX
MOVE A10,A2
MMFM SP,A4,A5,A6,A10,A11
RETS
***
*** MISL SUBROUTINES ------------------------------------------------------
***
**
** MISLCREATE
**
** IN
** A0-A6 SCRATCH
** A7 CD
** A8 MOTHER OBJ
** B5 WAVEIRQS
** OUT
** A8 MISL OBJ
**
** JFL 18 JAN 93
** JFL 09 FEB 93; Bx
**
MISLCREATE
;CREATE THE OBJ
MOVW *A8(ODIR),A2
SLL 24,A2
SRL 24+DIRTOMISINDEX,A2
SLL MISIZEOF,A2
ADDI MISIMAGES,A2
MOVI OBJINITRAMMISSILE,A5
MOVL *A2+,A3
MOVL A3,*A5(COIMG)
MOVW *A2,A3
MOVW A3,*A5(COCTRL)
CALLA CREATE_OBJ ;IN: A5 CREATE_OBJ INIT BLOCK
LOCKON Z
;
;HOW HARD MISL IS
;
;DETERMINE HARD MISL IS TO GET AWAY FROM
MOVE B5,A14 ;WAVEIRQS
ADDI MISLLOOKFIRST,A14
MOVL A14,*A13(PMLOOKIRQ)
MOVK MISLDAMAGE,A14 ;HOW MUCH DAMAGE
MOVW A14,*A13(PMDAMAGE)
;INIT
CLR A14
MOVL A14,*A0(OMISHIT) ;NOT CLEARED BY GETOBJ
MOVL A14,*A13(PMTARGET)
MOVW *A8(OXPOS),*A0(OXPOS)
MOVL *A8(OZPOS),A2
MOVI MISZOFF,A14
MOVW A14,*A0(OZOFF)
SUB A14,A2
MOVW A2,*A0(OZPOS)
MOVI MISLYPOS,A14
MOVW A14,*A0(OYPOS)
MOVW *A8(ODIR),A14
MOVW A14,*A0(ODIR)
MOVW A14,*A13(PMDIR)
MOVI GENAOBJLIST+(AOID_MISSILE*AOLSIZE),A14
MOVL A14,*A0(OAOL)
MOVL A8,*A13(PMMOM)
MOVW *A8(OID),*A13(PMMOMOID)
MOVL A8,*A13(PMSAFE)
MOVL A13,*A0(OPLINK)
MOVI AOID_MISSILE,A14
MOVW A14,*A0(OPARTID)
MOVE A0,A8 ;SETUP FOR LOOP
;NUM MISSILES ALIVE
MOVI DRG+DRGMISSILES,A2
MOVW *A2,A14
INC A14
MOVW A14,*A2
;MAKE SHADOW
MOVL @OBJINITRAMMISSILE,A2 ;PULL IHDR FROM ABOVE
CALLA MAKESHADMULTI ;IN A2,A3-A5,A8 SHADIMG,SC,OBJ
;INSERT THE OBJECT
CALLA INSERT_OBJ ;IN: A8 OBJ (MULTIPART HEAD OR PART)
RETS
**
** MISLSETIMG
**
** IN
** A8 OBJ
** A10 DIR
**
** JFL 18 JAN 93
** JFL 12 MAR 93; ANIMATED MISL
**
MISLSETIMG
SLL 24,A10
SRL 24+DIRTOMISL,A10
SLL MISLSIZEOF,A10
MOVE A10,A2
ADDI MISLCTRLTBL,A2
.IF DEBUG
CMPI MISLCTRLTBLX,A2
TLOCKON HS
.ENDIF ;DEBUG
;PICK IMG STATE
MOVW *A8(OSTATE),A14 ;USE THIS STATE
MOVE A14,A1 ;FIGURE NEXT STATE
INC A1
CMPI MAXMISLSTATE,A1
JRLO MSISOK
CLR A1
MSISOK
MOVW A1,*A8(OSTATE)
SLL 6+5,A14 ;*64*32
ADD A14,A10
ADDI MISLIMGTBL,A10
MOVL *A10+,A1 ;IHDR
MOVW *A2+,A4 ;CTRL
MOVW *A2,A10 ;SHAD CTRL
MOVL *A8(OSHADIMG),A2
TLOCKON Z
;UPDATE IMAGE
MOVL A1,*A8(OIMG) ;UPDATE IMAGE
MOVL A1,*A2(OIMG) ;UPDATE IMAGE
MOVL *A1(ISIZE),A14 ;Y:X SIZ
MOVL A14,*A8(OUSIZE)
MOVL A14,*A2(OUSIZE) ;SHAD SIZE
MOVL *A1(IANIOFF),A14 ;Y:X ANI
MOVL A14,*A8(OUANIOFF)
MOVL A14,*A2(OUANIOFF) ;SHAD ANI
MOVL *A1(ISAG),A14
MOVL A14,*A8(OSAG) ;SAG
MOVL A14,*A2(OSAG) ;SHAD SAG
MOVW *A1(ICTRL),A14 ;GET ICTRL
OR A14,A4 ;OR IN OUR
MOVW A4,*A8(OCTRL)
OR A14,A10
MOVW A10,*A2(OCTRL) ;SHAD CTRL
;FORCE SCALE & MULTIPLY UPDATES FOR ANIM POINTS
CLR A14
MOVW A14,*A8(OSCALEMUL)
MOVW A14,*A2(OSCALEMUL)
MSIX
RETS
**
** MISLHITCAR -- JUMP TO THIS FROM PROCESS!!!
**
** IN
** A1 CAR HIT
** A8 MISLOBJ
** OUT
** B2 CAR HIT
**
** JFL 12 FEB 93
**
MISLFFHITCAR
MOVI CCIDMISSILEFFHIT,A6
JRUC MISLHITGENERIC
MISLHITCAR
MOVI CCIDMISSILEHIT,A6
MISLHITGENERIC
CLR B2 ;CAR HIT -- USED LATER
MOVE A1,A0 ;CAR OBJ ALLEDGEDLY HIT
;CHECK IF CAR HIT HAS BEEN ZAPPED
MOVB *A0(OCTRL+B_INUSE-7),A14
JRNN MHCGONEX ;OBJ HAS BEEN ZAPPED
MOVW *A8(OMISOID),A2 ;OID WHEN HIT
MOVW *A0(OID),A14 ;OID NOW -- MAYBE OBJ CHANGED
CMP A14,A2
JRNE MHCGONEX ;INVASION OF THE OBJ SNATCHERS
MOVE A0,B2 ;MARK AS CAR HIT
;MAKE CAR JUST HIT SAFE FOR A WHILE
CALLR MISLSAFETY ;IN:A0,A2-A7 SAFEOBJ,SC
;STOP CAR
CLR A14
MOVL A14,*A0(OXVEL)
MOVL A14,*A0(OZVEL)
MOVW *A1(OXPOS),*A8(OXPOS)
MOVW *A1(OYPOS),*A8(OYPOS)
MOVW *A1(OZPOS),*A8(OZPOS)
;DONT TOSS
MOVE A6,A6
JRZ MHGNOTOSS
;TOSS THE CAR HIT UP IN THE AIR
MOVL *A0(OCAR),A7
MOVE A6,A2 ;CCIDXXX
CALLA CARTHROWUP ;IN: A0,A2,A7 OBJ,CCID,CD
MHGNOTOSS
;GET OWNER OF MISSILE & CHECK IF THEY HAVE BEEN ZAPPED
CLR B0 ;DEFAULT TO NO OWNER
MOVL *A8(OPLINK),A2
MOVL *A2(PMMOM),A0 ;OBJ WHO LAUNCHED US
MOVB *A0(OCTRL+B_INUSE-7),A14
JRNN MHCOWNERZAPPED ;OWNER HAS BEEN ZAPPED
MOVW *A0(OID),A14
MOVW *A2(PMMOMOID),A2
CMP A2,A14
JRNE MHCOWNERZAPPED ;ANOTHER OBJ LIVES HERE NOW..
MOVE A0,B0 ;WHO LAUNCHED THIS
MHCOWNERZAPPED
;GIVE DAMAGE TO THE CAR THAT GOT HIT & CREDIT TO MISL OWNER
MOVE A1,A2 ;CAR OBJ HIT -- NZAP CHECK ABOVE
MOVW *A8(OMISAREA),A3 ;AREA HIT ON CAR
MOVW *A13(PMDAMAGE),A14
MOVE A7,B5 ;SAVE
MOVE A8,B6 ;SAVE
CALLR TAKEDAMAGE ;IN: A2,A3,A14,B0,B1 CARGET,AREA HIT,DAM,CARGIVE,SC
;OUT: C IF CAR DIED, B1=1 FOR PART OFF,ELSE 0
;SC: A0-A11
MOVE B5,A7 ;UNSAVE
MOVE B6,A8 ;UNSAVE
JRNC MHCNOKILL
;SOUND OF MISL HITTING CAR & KILLING IT
MOVW *A7(CDINPNUM),A14
ADDI SNDKILLMISL1,A14
CALLA ARENASND ;IN:A14 SNDID
JRUC MHCX
MHCNOKILL
;IF TAKEDAMAGE DIDNT KILL CAR, DO SOUND
;SOUND OF MISL HITTING CAR
MOVW *A7(CDINPNUM),A14
ADDI SNDMISLHIT1,A14
CALLA ARENASND ;IN:A14 SNDID
MHCX
JRUC MISLDETONATE
MHCGONEX
JRUC MISLDETONATE
**
** DEFENSEMISLBLOWS
**
** IN
** A0-A7 SCRATCH
** A8 OBJ
** A9-A11 SCRATCH
**
** JFL 13 FEB 93
**
DEFENSEMISLBLOWS
;DETONATE ALL LOCKED ON US
CLR B0 ;DETONATE NOW
MOVL *A8(OMISHIT),A0 ;ANYONE TARGETTED ON THIS OBJ
CALLR MISDETONATETARGET ;IN:A0,A2-A3,B0 TARGET,SCRATCH,DETONIRQ
RETS
EXPLOSIONZOFF EQU -10
**
** MISLBLOWS -- JUMP TO THIS FROM PROC !!!
** MISLDEFENSEBLOWS -- JUMP TO THIS FROM PROC !!!
** MISLDETONATE -- JUMP TO THIS FROM PROC !!
**
** IN
** A8 MISLOBJ
** B2 CAR HIT OR ZERO (MISLDETONATE ONLY)
** Bx B REGS
**
** JFL 04 FEB 93
**
MISLDEFENSEBLOWS
;HITS WALL OR SOMETHING OTHER THAN CAR
MOVI SNDMISLBLOWS,A14
CALLA ARENASND ;IN:A14 SNDID
;DETONATE ALL LOCKED ON US
MOVE B5,B0 ;WAVEIRQS
ADDK 8,B0
MOVL *A13(PMMOM),A0
CALLA MISDETONATETARGET ;IN:A0,A2-A3,B0 TARGET,SCRATCH,DETONIRQ
;SET ANIM
MOVI ASDEFENSEBOOM,A6
CLR B2 ;NO CAR HIT
JRUC MDGENERIC
MISLBLOWS
;HITS WALL OR SOMETHING OTHER THAN CAR
MOVI SNDMISLBLOWS,A14
CALLA ARENASND ;IN:A14 SNDID
CLR B2 ;NO CAR HIT
MISLDETONATE
;SET ANIM
MOVI ASMISLBOOM,A6
MDGENERIC
;
;GENERIC MISL BLOWS
;
;REMOVE LOCK
MOVL *A13(PMTARGET),A0
JRZ MDNOLOCK
;CHECK IF TARGET OBJ HAS BEEN ZAPPED
MOVB *A0(OCTRL+B_INUSE-7),A14
JRNN MDNOLOCK ;TARGET ZAPPED
MOVW *A0(OID),A14
MOVW *A13(PMTARGETOID),A2
CMP A2,A14
JRNE MDNOLOCK ;OBJ RECYCLING IS IN
;UNLOCK FROM TARGET
MOVL *A0(OCAR),A7
MOVW *A7(CDMISLOCK),A14
DEC A14
MOVW A14,*A7(CDMISLOCK)
TLOCKON N
MDNOLOCK
;DISCONNECT PROC FROM OBJ
CLR A14
MOVL A14,*A8(OPLINK)
CLR A14
MOVL A14,*A8(OXVEL)
MOVL A14,*A8(OZVEL)
CLR A3 ;NO INIT()
MOVE A6,A2 ;ANIM
CALLA ANISPAWNONE ;IN:A2,A3,A4,A5,A7,A8 ASCRIPT,INIT(),
;SC,SC,SC,PARENTOBJ OUT:A0,A1 OBJ,IHDR
;CHECK FOR CAR TO ATTACH TO
MOVE B2,A9
JRZ MDNOCAR
;SET ZOFF
;MOVI EXPLOSIONZOFF,A14
MOVW *A9(OZPOS),A14
ADDK 8,A14
MOVW A14,*A0(OZPOS)
;ADD IT AS A MULTIPART OF CAR -- AS LAST OBJ
MOVE A9,A1 ;HEAD
MOVE A9,A14 ;TMP
MDADDLOOP
MOVE A14,A9
MOVL *A9(OPARTS),A14
JRNZ MDADDLOOP
;LINK IN
MOVL A1,*A0(OPART1)
MOVL A0,*A9(OPARTS)
JRUC MDCARORNOT
MDNOCAR
;SET POS
MOVW *A8(OXPOS),*A0(OXPOS)
MOVW *A8(OYPOS),*A0(OYPOS)
MOVW *A8(OZPOS),A2
MOVI EXPLOSIONZOFF,A14
MOVW A14,*A0(OZOFF)
SUB A14,A2
MOVW A2,*A0(OZPOS)
MDCARORNOT
;KILL OLD OBJ
CALLA ZAP_OBJ ;IN:A8
;NUM MISSILES ALIVE
MOVI DRG+DRGMISSILES,A2
MOVW *A2,A14
DEC A14
MOVW A14,*A2
TLOCKON N
;KILL PROC
DIE
**
** MISLFFBLOWS -- JUMP TO THIS FROM PROC !!!
**
** IN
** A8 MISLOBJ
** Bx B REGS
**
** JFL 04 FEB 93
** JFL 15 MAR 93; SPLIT OFF FROM MISLBLOWS
**
MISLFFBLOWS
;HITS WALL OR SOMETHING OTHER THAN CAR
MOVI SNDMISLBLOWS,A14
CALLA ARENASND ;IN:A14 SNDID
;SET ANIM
MOVI ASMISLFFBOOM,A9
;DISCONNECT PROC FROM OBJ
CLR A14
MOVL A14,*A8(OPLINK)
CLR A14
MOVL A14,*A8(OXVEL)
MOVL A14,*A8(OZVEL)
CLR A3 ;NO INIT()
MOVE A9,A2 ;ANIM
CALLA ANISPAWNONE ;IN:A2,A3,A4,A5,A7,A8 ASCRIPT,INIT(),
;SC,SC,SC,PARENTOBJ OUT:A0,A1 OBJ,IHDR
MOVW *A8(OXPOS),*A0(OXPOS)
MOVW *A8(OZPOS),*A0(OZPOS)
MOVW *A8(OYPOS),*A0(OYPOS)
CALLA ZAP_OBJ ;IN:A8
;NUM MISSILES ALIVE
MOVI DRG+DRGMISSILES,A2
MOVW *A2,A14
DEC A14
MOVW A14,*A2
TLOCKON N
;KILL PROC
DIE
**
** MISLSAFETY
**
** IN
** A0 SAFEOBJ
** A2-A7 SCRATCH
** A8 MISLOBJ -- IGNORE THIS ONE
** B5 WAVEIRQS
**
** JFL 09 FEB 93
** JFL 18 FEB 93; MISL SUP LIST
**
MISLSAFETY
MOVK 3,B0 ;SAFETY COUNT, EVERY 4TH IS DANGEROUS
MOVE B5,A5
ADDI MISLSAFETIME,A5 ;NEXT RETARGETTING
MOVL @SUPPLSTS+SUPL_MISL,A4
JRNZ MSFIRST
JRUC MSX
MSLOOP
;EVERY FOURTH IS DANGEROUS
INC B0
MOVE B0,A14
SLL 32-2,A14
JRZ MSNEXT ;LEAVE DANGEROUS
;SET SAFEOBJ AS SAFE
MOVL *A4(OPLINK),A2
MOVL A0,*A2(PMSAFE)
MOVL A5,*A2(PMTARGETIRQ)
MSNEXT
;NEXT
MOVL *A4(OSLINK),A4
JRZ MSX
MSFIRST
;CHECK IF THIS IS LOCKED ON OUR EXCLUDE OBJ
MOVL *A4(OPLINK),A14
MOVL *A14(PMTARGET),A14
CMP A1,A14
JRNE MSNEXT ;NOT LOCKED ON EXCLUDEOBJ
JREQ MSLOOP ;LOCKED ON
MSX
RETS
**
** FINDLOCK
**
** IN
** A0 SCRATCH
** A2 EXCLUDEOBJ
** A3 SCRATCH
** A8 OBJ
**
** JFL 29 JAN 93
** JFL 04 FEB 93
**
FINDLOCK
CALLR FINDCLOSESTCAR ;IN:A2,A8 EXCLUDEOBJ,OBJ OUT:A2 OBJ
;SIGNAL UNLOCK FROM OLDTARGET
MOVL *A13(PMTARGET),A0
JRZ FLDOIT ;FIRST LOCK
CMP A2,A0
JREQ FLX ;SAME AS OLD ONE
;CHECK IF OLD TARGET OBJ HAS BEEN ZAPPED
MOVB *A0(OCTRL+B_INUSE-7),A14
JRNN FLDOIT ;ZAPPA APPAZ
MOVW *A0(OID),A14
MOVW *A13(PMTARGETOID),A3
CMP A3,A14
JRNE FLDOIT ;OBJ RECYCLING IS IN
;UNLOCK FROM OLD
MOVL *A0(OCAR),A3
MOVW *A3(CDMISLOCK),A14
DEC A14
MOVW A14,*A3(CDMISLOCK)
TLOCKON N
FLDOIT
;SET NEW TARGET FOR OUR RECORD
MOVL A2,*A13(PMTARGET)
MOVE A2,A2
JRNZ FLLOCKIT
;NO TARGET... NO LOCK
MOVI MISLNEUTRAL_P,A0 ;MISL NO LOCK PAL
CALLA GETFPAL ;IN:A0 ADR OF PAL
MOVW A0,*A8(OPAL)
JRUC FLX
FLLOCKIT
MOVW *A2(OID),*A13(PMTARGETOID)
;GET CD OF CAR WE LOCK ON TO
MOVL *A2(OCAR),A3
;LOCK ON TO NEW
MOVW *A3(CDMISLOCK),A14
INC A14
MOVW A14,*A3(CDMISLOCK)
;SET PAL OF MISL TO MATCH CAR WERE LOCKED ON TO
MOVW *A3(CDMISLPAL),*A8(OPAL)
FLX
RETS
***
*** MISSILE PROCESSES ----------------------------------------------------
***
***
*** --------------------------------------------------------------------------
***
**
** SMARTMPROC
**
** IN
** A8 MOTHER OBJ
** A9 CD
**
** JFL 10 JAN 93
** JFL 18 JAN 93; M_CDFMISLOCK
** JFL 09 FEB 93; USE B REGS FOR STUFF
**
SMARTMPROC
GUIDEDMPROC
;SAVE MOM
MOVE A9,A7 ;CD
;SET UP B REGS
MOVL @WAVEIRQS,B5
;CREATE THE MISSILE OBJ
CALLR MISLCREATE ;IN:A7,A8,Bx CD,MOMOBJ
;FIND TARGET
MOVL *A13(PMSAFE),A2
CALLR FINDLOCK ;IN:A0,A2,A8 SC,EXCLUDEOBJ,OBJ OUT:A2 OBJ
;SET VEL & ACC
MOVI MISINITVEL,A14
MOVW A14,*A13(PMVEL)
MOVI MISINITACC,A14
MOVW A14,*A13(PMACC)
;SET TIME TO RE-EVAL TARGET
MOVE B5,A2 ;WAVEIRQS
MOVE A2,A3
ADDI FIRSTRETARGETTIME,A3 ;WHEN TO RETARGET
MOVL A3,*A13(PMTARGETIRQ)
ADDI MISLGASTIME,A2 ;WHEN TO DETONATE
MOVL A2,*A13(PMDETONATE)
SLEEP 1
;REGS
; A8 OBJ
; A13 PROC
SMMPLOOP
;SET UP B REGS
MOVL @WAVEIRQS,B5
CLR B0 ;TURN FLAG
;
;CHECK TERRAIN
;
;CHECK IF WE HIT SOMETHING
MOVW *A8(OXPOS),A2
MOVW *A8(OZPOS),A14
MOVW *A8(OZOFF),A3
ADD A3,A14
SLL 16,A14
MOVY A14,A2 ;Z:X
CALLA TOPOXZ ;IN:A2 Z:X OUT:A2,A3 TOPOC,TOPOBA
JRC MISLBLOWS ;OFFSCREEN
MOVE A3,A2
SLL 24,A3 ;ISOLATE TOPOA
SRL 24-3,A3 ;SIZEOF TBL
ADDI MISBLOWUPTBL,A3
.IF DEBUG
CMPI MISBLOWUPTBLX,A3
TLOCKON HS
.ENDIF ;DEBUG
MOVB *A3,A3
JRZ SMMPNOTOPO
JRP MISLBLOWS
;CHECK ANGLE
MOVB *A8(ODIR),A3
SLL 16,A2 ;ISOLATE TOPOB -- DIR OF TOPO
SRA 24,A2
SUB A3,A2
ADDI DIR180/2,A2
SLL 25,A2
JRC MISLBLOWS ;OPPOSING ANGLE
SMMPNOTOPO
;
;CHECK IF WE HIT A CAR
;
;CHECK IF WE SHOULD DESTROY THE MISSILE
MOVL *A8(OMISHIT),A1
JRZ SMMPNOHIT
MOVL *A13(PMSAFE),A14
CMP A1,A14
JRNE MISLHITCAR
;RESET HIT DATA
CLR A1
MOVL A1,*A8(OMISHIT)
SMMPNOHIT
;
;TIME RELATED
;
;GET TIME
MOVE B5,A2 ;WAVEIRQS
;TIME TO DETONATE?
MOVL *A13(PMDETONATE),A14
CMP A14,A2
JRHS MISLBLOWS ;DONT DETONATE FOR A LANDMINE
;TIME TO RE-TARGET?
MOVL *A13(PMTARGETIRQ),A14
CMP A14,A2
JRLO SMMPKEEPTARGET
;WHEN TO RE-TARGET NEXT
ADDI MISLTARGETTIME,A2
MOVL A2,*A13(PMTARGETIRQ)
;RE-TARGET
CLR A2
MOVL A2,*A13(PMSAFE) ;NO ONE IS SAFE...
CALLR FINDLOCK ;IN:A0,A2,A8 SC,EXCLUDEOBJ,OBJ OUT:A2 OBJ
MOVE A2,A3 ;DST
JRZ MISLBLOWS ;NO TARGET, DIE
MOVE A8,A2 ;SRC
JRUC SMMPKT
SMMPKEEPTARGET
;GET TARGET
MOVE A8,A2 ;SRC
MOVL *A13(PMTARGET),A3 ;DST
SMMPKT
;TIME TO TAKE ANOTHER LOOK AT THE TARGET?
MOVL *A13(PMLOOKIRQ),A14 ;WHEN TO LOOK
MOVE B5,A0 ;WAVEIRQS
CMP A14,A0
JRHS SMMLOOK
;USE OLD VALUE
MOVW *A13(PMDIR),A3
JRUC SMMADJDIR
SMMLOOK
CALLR OBJ2OBJDIR ;IN:A2,A3 SRCOBJ,DSTOBJ OUT:A3 DIR SC:A0-A4
;SET DIR TO TURN TOWARD & WHEN TO LOOK AGAIN
MOVW A3,*A13(PMDIR)
MOVE B5,A14 ;WAVEIRQS
ADDI MISLLOOKTIME,A14
MOVL A14,*A13(PMLOOKIRQ)
SMMADJDIR
;
;ADJUST DIR TO FACE TARGET
;
MOVB *A8(ODIR),A10 ;CUR DIR
MOVE A10,A7
SLL 24,A7
SRL 24,A7
SUB A3,A7
SLL 24,A7
SRA 24+4,A7
JRZ SMMPDIROK
JRP SMMPDIRADD
ADDK MISTURN,A10
;ADD A SMALL RND AMOUNT TO TURN SO MISLS DONT ALL DO THE SAME THING
MOVW @REFCNT,A14
SLL 32-3-2,A14
SRA 32-3,A14 ;RND +/- 0..3
ADD A14,A10
MOVK 1,B0 ;TURN FLAG
;MAKE FLAME SMALL DUE TO TURN
CLR A14
MOVW A14,*A8(OSTATE)
JRUC SMMPDIROK
SMMPDIRADD
SUBK MISTURN,A10
;ADD A SMALL RND AMOUNT TO TURN SO MISLS DONT ALL DO THE SAME THING
MOVW @REFCNT,A14
SLL 32-3-2,A14
SRA 32-3,A14 ;RND +/- 0..3
ADD A14,A10
MOVK 1,B0 ;TURN FLAG
;MAKE FLAME SMALL DUE TO TURN
CLR A14
MOVW A14,*A8(OSTATE)
SMMPDIROK
;PICK IMAGE BASED ON DIR
MOVW A10,*A8(ODIR)
CALLR MISLSETIMG ;IN:A8,A10 OBJ,DIR
;
;SET VEL -- TAKE INTO ACCOUNT SLOWING BECAUSE OF TURN
;
MOVW *A8(ODIR),A10
MOVW *A13(PMVEL),A11
;CHECK IF TURNING
MOVE B0,A14
JRZ SMMPNOTURN
;TURNING -- DECEL
MOVW *A13(PMACC),A14
SUB A14,A11
SUBK 1,A14
MOVW A14,*A13(PMACC)
JRUC SMMPVCHECKLOW
SMMPNOTURN
;NOT TURNING -- ACCEL
MOVW *A13(PMACC),A14
ADD A14,A11
ADD A14,A11
MOVW A14,*A13(PMACC)
SMMPVCHECKHI
CMPI MISMAXVEL,A11
JRLT SMMPVCHECKLOW
SMMPVMAX
MOVI MISMAXVEL,A11
JRUC SMMPVOK
SMMPVCHECKLOW
;MAKE SURE VEL IS IN RANGE
MOVE A11,A11
JRNN SMMPVOK
;STOPPED, BLOW THIS LOSER MISL UP
CLR A11
MOVL A11,*A13(PMDETONATE) ;RAN OUT OF GAS HERE
SMMPVOK
MOVW A11,*A13(PMVEL)
SRL MISVELFRACSHIFT,A11
CALLR VECTORTOVELS ;IN:A10,A11 DIR,MAG OUT:A10,A11 X,Z
SLL VELSHIFT,A10
SLL VELSHIFT,A11
MOVL A10,*A8(OXVEL) ;DONT GIVE VEL FOR A LANDMINE
MOVL A11,*A8(OZVEL)
SMMPX
SLEEP 1
JRUC SMMPLOOP
***
*** ------------------------------------------------------------------------
***
**
** DEFENSEMPROC
**
** IN
** A8 MOTHER OBJ
** A9 CD
**
** JFL 10 JAN 93
** JFL 18 JAN 93; M_CDFMISLOCK
** JFL 09 FEB 93; USE B REGS FOR STUFF
** JFL 11 FEB 93; DEFENSEMPROC
** JFL 13 FEB 93; DOESNT LAUNCH A MISSLE
**
DEFENSEMPROC
;SOUND
MOVI SNDDEFENSEWEAPON,A14
CALLA MAKESND ;IN:A14 SNDID
;CREATE THE MISL
MOVI OBJINITDEFMISL,A5
CALLA CREATE_OBJ ;IN:A5 COBLOCK OUT:A0 OBJ
JRZ DMPX
;POSITION AT CAR
MOVW *A8(OXPOS),*A0(OXPOS)
MOVW *A8(OZPOS),A14
INC A14 ;MAKE CLOSER TO VIEWER
MOVW A14,*A0(OZPOS)
CALLA INSOBJ
;RECORD WHO LAUNCHED THIS & WHO TO CALL WHEN IT BLOWS
MOVL A8,*A0(OMISHIT)
MOVI DEFENSEMISLBLOWS,A14
MOVL A14,*A0(OCVECT)
;ADD THE ANIM
MOVI ASDEFENSEBOOM,A14
MOVL A14,*A0(ANIMFRM)
MOVL A14,*A0(ANIMSCR)
MOVK 1,A14
MOVW A14,*A0(ANIMSLPB)
CALLA INSANI ;IN:A0
DMPX
DIE
***
*** ------------------------------------------------------------------------
***
**
** LMINEBLOWS
**
** IN
** A0-A7 SCRATCH
** A8 OBJ
** A9-A11 SCRATCH
**
** JFL 13 FEB 93
** JFL 24 FEB 93; LMINE FROM DEFENSEMISLBLOWS
**
LMINEBLOWS
CALLA ZAP_OBJ ;IN:A8
RETS
**
** LMINEDETONATE
**
** NOTE: THIS ZAPS A0 OBJ!
**
** IN
** A0 LMINE OBJ
** A2-A3 SCRATCH
**
** JFL 14 MAR 93
**
LMINEDETONATE
MMTM SP,A0,A1,A4,A5,A7,A8
MOVE A0,A8
CLR A3 ;NO INIT()
MOVI ASMISLBOOM,A2 ;ANIM
CALLA ANISPAWNONE ;IN:A2,A3,A4,A5,A7,A8 ASCRIPT,INIT(),
;SC,SC,SC,PARENTOBJ OUT:A0,A1 OBJ,IHDR
MOVW *A8(OXPOS),*A0(OXPOS)
MOVW *A8(OZPOS),*A0(OZPOS)
MOVW *A8(OYPOS),*A0(OYPOS)
MOVW *A8(OZOFF),*A0(OZOFF)
CALLA ZAP_OBJ ;IN:A8
MMFM SP,A0,A1,A4,A5,A7,A8
RETS
**
** CREATELANDMINE
**
** IN
** A7 CD
** A8 MOTHER OBJ
** SCRATCH:A0-A6,A9-A11
**
** JFL 24 FEB 93
**
CREATELANDMINE
;SOUND
MOVI SNDLANDMINEDROPPED,A14
CALLA MAKESND ;IN:A14 SNDID
;CREATE
MOVI OBJINITLMINE,A5
CALLA CREATE_OBJ ;IN:A5 COBLOCK OUT:A0 OBJ
JRZ CLMX
;POSITION UNDER CAR BUT ABOVE SHADOW
MOVW *A8(OXPOS),*A0(OXPOS)
MOVI ICONZOFF,A3
MOVW A3,*A0(OZOFF)
MOVL *A8(OZVAL),A14
SLL 16,A3
SUB A3,A14
MOVL A14,*A0(OZVAL)
CALLA INSOBJ ;IN:A0
;RECORD WHO LAUNCHED THIS & WHO TO CALL WHEN IT BLOWS
MOVK AOID_LMINE,A14
MOVW A14,*A0(OPARTID)
MOVL A8,*A0(OLMINEMOM)
MOVI LMINEBLOWS,A14
MOVL A14,*A0(OCVECT)
;ADD THE ANIM
MOVI ASLMINE,A14
MOVL A14,*A0(ANIMFRM)
MOVL A14,*A0(ANIMSCR)
MOVK 1,A14
MOVW A14,*A0(ANIMSLPB)
CALLA INSANI ;IN:A0
CLMX
RETS
***
*** ------------------------------------------------------------------------
***
**
** MISFFHITGROUND
**
** IN
** A8 OBJ
** SCRATCH:B0,A0-A8,A10-A11
**
** JFL 14 MAR 93
**
MISFFHITGROUND
;SIGNAL TO DETONATE
CLR A14
MOVL *A8(OPLINK),A2
TLOCKON Z
MOVL A14,*A2(PMDETONATE)
RETS
**
** MISFFPROC -- PROCESS
**
** IN
** A8 MOTHER OBJ
** A9 CD
**
** JFL 14 MAR 93
**
MISFFPROC
;CREATE
MOVI OBJINITFF,A5
CALLA CREATE_OBJ ;IN:A5 COBLOCK OUT:A0 OBJ
JRZ MFFPX
;SET SCALE UP
CALLA SETZMIN ;IN:A0 OBJ
;SET UP AS A MISSILE ARENA OBJECT
MOVI GENAOBJLIST+(AOID_MISSILE*AOLSIZE),A14
MOVL A14,*A0(OAOL)
MOVL A8,*A13(PMMOM)
MOVW *A8(OID),*A13(PMMOMOID)
MOVL A8,*A13(PMSAFE)
MOVL A13,*A0(OPLINK)
MOVI AOID_MISSILE,A14
MOVW A14,*A0(OPARTID)
;
;POSITION AT CAR
;
MOVW *A8(ODIR),A10
MOVW A10,*A0(ODIR)
MOVW *A8(OYPOS),A14
SUBK FFYPOS,A14
MOVW A14,*A0(OYPOS)
MOVW *A8(OXPOS),*A0(OXPOS)
MOVW *A8(OZPOS),A2
MOVI MISZOFF,A14
MOVW A14,*A0(OZOFF)
SUB A14,A2
MOVW A2,*A0(OZPOS)
;
;SET VEL
;
;SET X&Z VELS
MOVI MISFFINITVEL,A11 ;SCALED IN VELADD
CALLR VECTORTOVELS ;IN:A10,A11 DIR,MAG OUT:A10,A11 X,Z
SLL VELSHIFT,A10
SLL VELSHIFT,A11
MOVL *A8(OXVEL),A14
SRA 1,A14
ADD A14,A10
MOVL A10,*A0(OXVEL)
MOVL *A8(OZVEL),A14
SRA 1,A14
ADD A14,A11
MOVL A11,*A0(OZVEL)
;SET UP
CLR A14
MOVL A14,*A0(OMISHIT) ;NOT CLEARED BY GETOBJ
MOVK MISLFFDAMAGE,A14
MOVW A14,*A13(PMDAMAGE)
MOVL A14,*A13(PMTARGET)
;MAKE SHADOW
MOVE A0,A8 ;PUT SHAD ON NEW OBJ
MOVL @OBJINITFF,A2 ;PULL IHDR FROM ABOVE
CALLA MAKESHADMULTI ;IN A2,A3-A5,A8 SHADIMG,SC,OBJ
CALLA INSERT_OBJ ;IN:A8
;SOUND
MOVI SNDFFSHOT,A14
CALLA MAKESND ;IN:A14 SNDID
;NUM MISSILES ALIVE
MOVI DRG+DRGMISSILES,A2
MOVW *A2,A14
INC A14
MOVW A14,*A2
;SET UP FOR HOW LONG IT STAYS IN THE AIR
MOVK 1,A14
MOVW A14,*A13(PMDETONATE)
;
;START OUR DESCENT TO THE GROUND
;
;SET UP YACC (NO YVEL SINCE WE ARE NOT GOING UP)
MOVI MISFFYACC,A3
MOVL A3,*A8(OYACC)
;SET UP FOR GCOL
MOVI MISFFHITGROUND,A2
MOVI SETGCOL,B8 ;IN:A2,A8 GCOL(),OBJ
EXGPC B8
MFFPNOFALL
SLEEP 1
;REGS
; A8 OBJ
; A13 PROC
MFFPLOOP
;
;DID WE LAND & DETONATE
;
MOVW *A13(PMDETONATE),A14 ;HAS LANDING BEEN PROCESSED YET?
JRZ MISLFFBLOWS ;YES
;
;CHECK TERRAIN
;
;CHECK IF WE HIT SOMETHING
MOVW *A8(OXPOS),A2
MOVW *A8(OZPOS),A14
MOVW *A8(OZOFF),A3
ADD A3,A14
SLL 16,A14
MOVY A14,A2 ;Z:X
CALLA TOPOXZ ;IN:A2 Z:X OUT:A2,A3 TOPOC,TOPOBA
JRC MISLFFBLOWS ;OFFSCREEN
MOVE A3,A2
SLL 24,A3 ;ISOLATE TOPOA
SRL 24-3,A3 ;SIZEOF TBL
ADDI MISBLOWUPTBL,A3
.IF DEBUG
CMPI MISBLOWUPTBLX,A3
TLOCKON HS
.ENDIF ;DEBUG
MOVB *A3,A3
JRZ MFFPNOTOPO
JRP MISLFFBLOWS
;CHECK ANGLE
MOVB *A8(ODIR),A3
SLL 16,A2 ;ISOLATE TOPOB -- DIR OF TOPO
SRA 24,A2
SUB A3,A2
ADDI DIR180/2,A2
SLL 25,A2
JRC MISLFFBLOWS ;OPPOSING ANGLE
MFFPNOTOPO
;
;CHECK IF WE HIT A CAR
;
;CHECK IF WE SHOULD DESTROY THE FF
MOVL *A8(OMISHIT),A1
JRZ MFFPNOHIT
MOVL *A13(PMSAFE),A14
CMP A1,A14
JRNE MISLFFHITCAR
;RESET HIT DATA
CLR A1
MOVL A1,*A8(OMISHIT)
MFFPNOHIT
MFFPX
SLEEP 1
JRUC MFFPLOOP
***
*** ------------------------------------------------------------------------
***
**
** MISIMAGES
**
** .LONG IMAGE
** .WORD CTRL -- WITH DMAGO BIT CLEAR
** .WORD ANIM POINT OFFSET IN IHDR
**
** JFL 10 JAN 93
** JFL 04 FEB 93
**
MISIMAGES
.LONG MISL_12
.WORD M_FLIPH+DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_9
.WORD M_FLIPH+DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_7
.WORD M_FLIPH+DMAWNZ-DMAGO
.WORD IPT0
.LONG MISLD_5
.WORD M_FLIPH+DMAWNZ-DMAGO
.WORD IPT0
.LONG MISLG_2
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISLD_5
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_7
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_9
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_12
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_18
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_19
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_8_34
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_9_35
.WORD DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_8_34
.WORD M_FLIPH+DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_19
.WORD M_FLIPH+DMAWNZ-DMAGO
.WORD IPT0
.LONG MISL_18
.WORD M_FLIPH+DMAWNZ-DMAGO
.WORD IPT0
**
** MISLCTRLTBL
**
** .WORD CTRL
** .WORD SHADOW CTRL
**
** JFL 04 FEB 93
**
MISLCTRLTBL
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD DMAWNZ
.WORD DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
.WORD M_FLIPH|DMAWNZ
.WORD M_FLIPH|DMACNZ
MISLCTRLTBLX
MISLIMGTBL
;IMAGE SET 0
.LONG MISL17C
.LONG MISL16C
.LONG MISL15C
.LONG MISL14C
.LONG MISL13C
.LONG MISL12C
.LONG MISL11C
.LONG MISL10C
.LONG MISL09C
.LONG MISL08C
.LONG MISL07C
.LONG MISL06C
.LONG MISL05C
.LONG MISL04C
.LONG MISL03C
.LONG MISL02C
.LONG MISL01C
.LONG MISL02C
.LONG MISL03C
.LONG MISL04C
.LONG MISL05C
.LONG MISL06C
.LONG MISL07C
.LONG MISL08C
.LONG MISL09C
.LONG MISL10C
.LONG MISL11C
.LONG MISL12C
.LONG MISL13C
.LONG MISL14C
.LONG MISL15C
.LONG MISL16C
.LONG MISL17C
.LONG MISL18C
.LONG MISL19C
.LONG MISL20C
.LONG MISL21C
.LONG MISL22C
.LONG MISL23C
.LONG MISL24C
.LONG MISL25C
.LONG MISL26C
.LONG MISL27C
.LONG MISL28C
.LONG MISL29C
.LONG MISL30C
.LONG MISL31C
.LONG MISL32C
.LONG MISL33C
.LONG MISL32C
.LONG MISL31C
.LONG MISL30C
.LONG MISL29C
.LONG MISL28C
.LONG MISL27C
.LONG MISL26C
.LONG MISL25C
.LONG MISL24C
.LONG MISL23C
.LONG MISL22C
.LONG MISL21C
.LONG MISL20C
.LONG MISL19C
.LONG MISL18C
;IMAGE SET 1
.LONG MISL17B
.LONG MISL16B
.LONG MISL15B
.LONG MISL14B
.LONG MISL13B
.LONG MISL12B
.LONG MISL11B
.LONG MISL10B
.LONG MISL09B
.LONG MISL08B
.LONG MISL07B
.LONG MISL06B
.LONG MISL05B
.LONG MISL04B
.LONG MISL03B
.LONG MISL02B
.LONG MISL01B
.LONG MISL02B
.LONG MISL03B
.LONG MISL04B
.LONG MISL05B
.LONG MISL06B
.LONG MISL07B
.LONG MISL08B
.LONG MISL09B
.LONG MISL10B
.LONG MISL11B
.LONG MISL12B
.LONG MISL13B
.LONG MISL14B
.LONG MISL15B
.LONG MISL16B
.LONG MISL17B
.LONG MISL18B
.LONG MISL19B
.LONG MISL20B
.LONG MISL21B
.LONG MISL22B
.LONG MISL23B
.LONG MISL24B
.LONG MISL25B
.LONG MISL26B
.LONG MISL27B
.LONG MISL28B
.LONG MISL29B
.LONG MISL30B
.LONG MISL31B
.LONG MISL32B
.LONG MISL33B
.LONG MISL32B
.LONG MISL31B
.LONG MISL30B
.LONG MISL29B
.LONG MISL28B
.LONG MISL27B
.LONG MISL26B
.LONG MISL25B
.LONG MISL24B
.LONG MISL23B
.LONG MISL22B
.LONG MISL21B
.LONG MISL20B
.LONG MISL19B
.LONG MISL18B
;IMAGE SET 2
.LONG MISL17A
.LONG MISL16A
.LONG MISL15A
.LONG MISL14A
.LONG MISL13A
.LONG MISL12A
.LONG MISL11A
.LONG MISL10A
.LONG MISL09A
.LONG MISL08A
.LONG MISL07A
.LONG MISL06A
.LONG MISL05A
.LONG MISL04A
.LONG MISL03A
.LONG MISL02A
.LONG MISL01A
.LONG MISL02A
.LONG MISL03A
.LONG MISL04A
.LONG MISL05A
.LONG MISL06A
.LONG MISL07A
.LONG MISL08A
.LONG MISL09A
.LONG MISL10A
.LONG MISL11A
.LONG MISL12A
.LONG MISL13A
.LONG MISL14A
.LONG MISL15A
.LONG MISL16A
.LONG MISL17A
.LONG MISL18A
.LONG MISL19A
.LONG MISL20A
.LONG MISL21A
.LONG MISL22A
.LONG MISL23A
.LONG MISL24A
.LONG MISL25A
.LONG MISL26A
.LONG MISL27A
.LONG MISL28A
.LONG MISL29A
.LONG MISL30A
.LONG MISL31A
.LONG MISL32A
.LONG MISL33A
.LONG MISL32A
.LONG MISL31A
.LONG MISL30A
.LONG MISL29A
.LONG MISL28A
.LONG MISL27A
.LONG MISL26A
.LONG MISL25A
.LONG MISL24A
.LONG MISL23A
.LONG MISL22A
.LONG MISL21A
.LONG MISL20A
.LONG MISL19A
.LONG MISL18A
MISLIMGTBLX
* EOF