1682 lines
35 KiB
NASM
1682 lines
35 KiB
NASM
|
.FILE 'COLL2.ASM'
|
|||
|
.TITLE "ROBO COLLISION ROUTINES"
|
|||
|
.WIDTH 132
|
|||
|
.OPTION B,D,L,T
|
|||
|
.MNOLIST
|
|||
|
|
|||
|
;
|
|||
|
; INITIATED: MAY 18,1989
|
|||
|
; MODIFIED: !
|
|||
|
; SOFTWARE: THIS COLLISION ROUTINE WAS DEVELOPED BY TODD ALLEN.
|
|||
|
; SOFTWARE: MARK TURMELL
|
|||
|
;
|
|||
|
; TODD ALLEN CREATED THESE COLLISION ROUTINES FOR OFFENDER
|
|||
|
|
|||
|
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
|
|||
|
;
|
|||
|
****************************************************************************
|
|||
|
* When writing collision routines which are to be called from the collision
|
|||
|
* scanner in this file, the following things should be taken into
|
|||
|
* consideration:
|
|||
|
* The collision routines are called, not created..
|
|||
|
* The collision routine receives a ptr to the victims OBJ in A8
|
|||
|
* The collision routine receives a ptr to the killers OBJ in A0
|
|||
|
* The collision routine can destroy A0,A8 but should preserve all others.
|
|||
|
* When OBJ1,OBJ2 collide, two routines are called, one with
|
|||
|
* OBJ1 in A8 and the other with OBJ2 in A8. A collision routine
|
|||
|
* should only affect the victim, and not the killer.
|
|||
|
* If a victim object is deleted, it will not be scanned futher.
|
|||
|
* If any other object is deleted, the collision scan will be aborted.
|
|||
|
* To prevent multiple simultaneous collisions of the same victim
|
|||
|
* object, the object ID of the victim object should be modified
|
|||
|
* by the collision routine, if the victims nature is changed.
|
|||
|
;
|
|||
|
; GET THE SYSTEM STUFF
|
|||
|
|
|||
|
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
|
|||
|
.INCLUDE "DISP.EQU" ;DISPLAY PROCESSOR EQUATES
|
|||
|
.INCLUDE "\VIDEO\SYS\SYS.INC" ;ZUNIT SYSTEM EQUATES
|
|||
|
.INCLUDE "\VIDEO\SYS\GSP.INC" ;ZUNIT SYSTEM EQUATES
|
|||
|
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS, YEAH!
|
|||
|
.INCLUDE "ROBO.EQU"
|
|||
|
.INCLUDE "IMGTBL.GLO"
|
|||
|
|
|||
|
;
|
|||
|
;SYMBOLS EXTERNALLY DEFINED
|
|||
|
;
|
|||
|
;JARVIS AREA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
.REF FACBUL,PUSHFC
|
|||
|
.REF KILL_O1,ORB_ORB,KILL_LZR,ORBLAZ,ORBBUL
|
|||
|
.REF GALKIL,GALBUL,COBBUL
|
|||
|
;
|
|||
|
;SOUNDS
|
|||
|
;
|
|||
|
.REF EXP1,HASND,HA2SND
|
|||
|
.REF AWWSND,NOWAY,OUCH,ONOSND,AWWSND2
|
|||
|
|
|||
|
;
|
|||
|
.REF MARM6A,KILL_SNK
|
|||
|
.REF KILL_WLMN,YKIL_FT,OFFRNG,MUT_HIT,EXP_BULL,KIL_SNK,EXP_BULL2
|
|||
|
.REF KILL_BULL,KILL_HULK,KILL_PLYR,WORLDTLX,BAT_PLYR,KILL_H2
|
|||
|
.REF POW1ON,MV_BULL,CHAINHIT,KILL_TNK,KILL_TNKR,REGEXP
|
|||
|
.REF POW2ON,LSHIT,SPRAYON,PODON,KILL_TORSO
|
|||
|
.REF EXTRA,GRENON,RINGON,KEYON,NSTPON,TURN_TANK,ECON,ENON
|
|||
|
.REF KILL_BULLT,KILL_CBALL,CHAINHIT2,SHOEON,SMRTON
|
|||
|
.REF PUSH_FT,PCNT,KILL_CBALL2
|
|||
|
.REF KILL_F1
|
|||
|
.REF HIT_CHSR,KILL_CHSR,KC2
|
|||
|
.REF TPZ1,TPZ2,TPZ3,TCSH,TITM
|
|||
|
.REF KILL_RBT
|
|||
|
;
|
|||
|
;SYMBOLS DEFINED IN THIS FILE
|
|||
|
;
|
|||
|
.DEF COLLISIONS,SHORT_PLYR,SHORT2
|
|||
|
;
|
|||
|
;UNINITIALIZED RAM DEFINITIONS
|
|||
|
;
|
|||
|
;NOBJ=NUMBER OF OBJECTS TO DISPLAY
|
|||
|
;
|
|||
|
; .BSS CollList,0
|
|||
|
.BSS PList,32*(NOBJ+1) ;list of objects of class player
|
|||
|
.BSS NList,32*(NOBJ+1) ;list of objects of class neutral
|
|||
|
.BSS EList,32*(NOBJ+1) ;list of objects of class enemy
|
|||
|
.BSS DumObj,OBSIZ
|
|||
|
;
|
|||
|
;EQUATES FOR THIS FILE
|
|||
|
;
|
|||
|
ODMAIMG .EQU OIMG
|
|||
|
ODMAFLG .EQU OFLAGS
|
|||
|
****************************************************************************
|
|||
|
COLLISIONS:
|
|||
|
sleep 1
|
|||
|
callr ColScan0 ;JUST DO NORMAL SCAN
|
|||
|
jruc COLLISIONS
|
|||
|
|
|||
|
|
|||
|
ColScan0:
|
|||
|
;* COLLISION SCAN FOR OBJECTS ON SCREEN
|
|||
|
|
|||
|
move @WORLDTLX+16,A6,W ;WORD
|
|||
|
movi 400,A14 ;End of Scan area
|
|||
|
|
|||
|
SectorLp:
|
|||
|
move A6,A7 ;A7 Sector Xmin
|
|||
|
addi 128,A6 ;A6 Sector Xmax
|
|||
|
|
|||
|
subi 128,A14
|
|||
|
jrnn XmaxOk
|
|||
|
sub A14,A6
|
|||
|
clr A14
|
|||
|
XmaxOk:
|
|||
|
|
|||
|
MOVI OBJLST,A0 ;OBJECT LIST TO CHECK
|
|||
|
callr CScnRng
|
|||
|
|
|||
|
move A14,A14
|
|||
|
jrp SectorLp
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
CScnRng:
|
|||
|
;A0 ptr to OBJ LIST To SCAN
|
|||
|
;A6 Xmax
|
|||
|
;A7 Xmin
|
|||
|
;Scan OBJ list, any collideable OBJ overlapping Xmin-Xmax put on
|
|||
|
;either EList,PList or NList depending on class
|
|||
|
;Call ColLists with each pair of lists
|
|||
|
|
|||
|
mmtm SP,A6,A7,A14 ;NECESSARY?
|
|||
|
|
|||
|
;*** BUILD COLLISION LISTS ***
|
|||
|
movi PList,A9
|
|||
|
movi EList,A10
|
|||
|
movi NList,A11
|
|||
|
MkLists:
|
|||
|
move *A0,A0,L ;get next obj
|
|||
|
jrz GotLists
|
|||
|
|
|||
|
move *A0(OXPOS),A1,W
|
|||
|
|
|||
|
;*** OBJ CAN LIE ON max/min boundary, use unsigned compares
|
|||
|
cmp A6,A1
|
|||
|
jrhi MkLists
|
|||
|
move *A0(OSIZEX),A2,W
|
|||
|
add A2,A1
|
|||
|
cmp A7,A1
|
|||
|
jrlo MkLists
|
|||
|
jruc InXRng
|
|||
|
|
|||
|
InXRng:
|
|||
|
movb *A0(OFLAGS+B_NOCOLL-7),A2 ;Is object collideable
|
|||
|
jrn MkLists
|
|||
|
|
|||
|
|
|||
|
move *A0(OID),A2,W ;Check Class
|
|||
|
sll 16,A2
|
|||
|
srl 32-2,A2 ;only 2 class bits
|
|||
|
dec A2
|
|||
|
jrz AddP
|
|||
|
dec A2
|
|||
|
jrz AddE
|
|||
|
|
|||
|
;*** CLASS NEUTRAL
|
|||
|
move A0,*A11+,L ;INSERT OBJ on NList
|
|||
|
jruc MkLists
|
|||
|
AddE:
|
|||
|
;*** CLASS ENEMY
|
|||
|
move A0,*A10+,L ;INSERT OBJ on EList
|
|||
|
jruc MkLists
|
|||
|
AddP:
|
|||
|
;*** CLASS PLAYER
|
|||
|
move A0,*A9+,L ;INSERT OBJ on PList
|
|||
|
jruc MkLists
|
|||
|
|
|||
|
GotLists:
|
|||
|
;*** NULL TERMINATE EACH LIST ***
|
|||
|
clr A0
|
|||
|
move A0,*A9,L
|
|||
|
move A0,*A10,L
|
|||
|
move A0,*A11,L
|
|||
|
|
|||
|
;*** COLLIDE EACH PAIR OF LISTS ***
|
|||
|
|
|||
|
movi PList,A3
|
|||
|
move *A3,A0,L
|
|||
|
jrz NoPList
|
|||
|
|
|||
|
movi EList,A3 ;E/P
|
|||
|
movi PList,A4
|
|||
|
callr ColLists
|
|||
|
jrc ScnRngX
|
|||
|
movi NList,A3 ;N/P
|
|||
|
movi PList,A4
|
|||
|
callr ColLists
|
|||
|
jrc ScnRngX
|
|||
|
|
|||
|
NoPList:
|
|||
|
|
|||
|
;WHEN CHECKING NEUTRAL/ENEMY WAVES ONLY
|
|||
|
;FOR TANKS AGAINST HULKS!
|
|||
|
;ONLY FALL THROUGH WHEN WE NEED ENEMY TO ENEMY!
|
|||
|
|
|||
|
MOVB @ENON,A3
|
|||
|
JRZ NoNList
|
|||
|
MOVB @PCNT,A3
|
|||
|
; ANDI 07H,A3 ;03 FOR MORE ACCURACY
|
|||
|
ANDI 0FH,A3 ;03 FOR MORE ACCURACY
|
|||
|
|
|||
|
JRNZ NoNList
|
|||
|
movi EList,A3 ;E/N
|
|||
|
movi NList,A4
|
|||
|
callr ColLists
|
|||
|
|
|||
|
NoNList:
|
|||
|
MOVB @ECON,A6 ;0=NOT ON, 1=ENEMY TO ENEMY NEEDED!
|
|||
|
JRZ ScnRngX
|
|||
|
;NEED TO CHECK ENEMY AGAINST ENEMY CLASS! FALL INTO THIS!
|
|||
|
MOVI EList,A3
|
|||
|
MOVI EList,A4
|
|||
|
CALLR ColLists
|
|||
|
ScnRngX:
|
|||
|
mmfm SP,A6,A7,A14
|
|||
|
rets
|
|||
|
|
|||
|
SHORT2
|
|||
|
;PLAYER HAS BEEN COLLIDED WITH
|
|||
|
;TELL THIS COLLISION CHECK THAT PLAYER IS REALLY SHORTER THAN HE IS
|
|||
|
;THEN RETURN CARRY SET IF STILL A HIT, CARRY CLEAR IF THIS SHOULD NOT BE
|
|||
|
;A COLLISION.
|
|||
|
;A0=OBJECT THAT HIT PLAYER
|
|||
|
;A8=PLAYER LEGS IMAGE PTR
|
|||
|
MOVE *A8(OYPOS),A7,W ;A7 - OBJ1 Ymin
|
|||
|
move *A8(OSIZEY),A11,W ;A11 - OBJ1 Ymax
|
|||
|
SUBI 5,A11 ;SUBI 13 ;MAKE LEGS SHORTER IN LENGTH!
|
|||
|
add A7,A11
|
|||
|
;CHECK OBJS A0,A8 for intersection
|
|||
|
move *A0(OYPOS),A6,W
|
|||
|
cmp A11,A6
|
|||
|
jrgt CLRCR ;Y2Min > Y1Max
|
|||
|
move *A0(OSIZEY),A11,W
|
|||
|
add A11,A6
|
|||
|
cmp A7,A6
|
|||
|
jrlt CLRCR ;Y2Max < Y1Min
|
|||
|
SETC
|
|||
|
RETS
|
|||
|
;
|
|||
|
SHORT_PLYR
|
|||
|
;PLAYER HAS BEEN COLLIDED WITH
|
|||
|
;TELL THIS COLLISION CHECK THAT PLAYER IS REALLY SHORTER THAN HE IS
|
|||
|
;THEN RETURN CARRY SET IF STILL A HIT, CARRY CLEAR IF THIS SHOULD NOT BE
|
|||
|
;A COLLISION.
|
|||
|
;A0=OBJECT THAT HIT PLAYER
|
|||
|
;A8=PLAYER LEGS IMAGE PTR
|
|||
|
MOVE *A8(OYPOS),A7,W ;A7 - OBJ1 Ymin
|
|||
|
ADDI 3,A7 ;ADDI 3
|
|||
|
MOVE *A0(OID),A11,W
|
|||
|
ANDI 0FFFFH,A11
|
|||
|
CMPI CLSENMY|TYPORB,A11
|
|||
|
JRNE SP0
|
|||
|
SUBI 5,A7
|
|||
|
MOVE *A8(OSIZEY),A11,W ;A11 - OBJ1 Ymax
|
|||
|
SUBI 8,A11 ;MAKE LEGS SHORTER IN LENGTH!
|
|||
|
JRUC SP2
|
|||
|
SP0
|
|||
|
CMPI CLSNEUT|TYPMINE,A11
|
|||
|
JRNE SP1
|
|||
|
ADDI 12,A7
|
|||
|
MOVE *A8(OSIZEY),A11,W ;A11 - OBJ1 Ymax
|
|||
|
SUBI 21,A11 ;MAKE LEGS SHORTER IN LENGTH!
|
|||
|
JRUC SP2
|
|||
|
SP1
|
|||
|
move *A8(OSIZEY),A11,W ;A11 - OBJ1 Ymax
|
|||
|
SUBI 13,A11 ;SUBI 13 ;MAKE LEGS SHORTER IN LENGTH!
|
|||
|
SP2 add A7,A11
|
|||
|
;CHECK OBJS A0,A8 for intersection
|
|||
|
move *A0(OYPOS),A6,W
|
|||
|
cmp A11,A6
|
|||
|
jrgt CLRCR ;Y2Min > Y1Max
|
|||
|
move *A0(OSIZEY),A11,W
|
|||
|
add A11,A6
|
|||
|
cmp A7,A6
|
|||
|
jrlt CLRCR ;Y2Max < Y1Min
|
|||
|
|
|||
|
;NOW X CHECK
|
|||
|
|
|||
|
move *A8(OXPOS),A7,W ;A9 - OBJ1 Xmin
|
|||
|
ADDI 4,A7 ;4
|
|||
|
move *A8(OSIZEX),A11,W ;A10 - OBJ1 Xmax
|
|||
|
SUBI 4,A11 ;4
|
|||
|
add A7,A11
|
|||
|
move *A0(OXPOS),A6,W
|
|||
|
;USE SIGNED COMAPARES BECAUSE OBJS MAY LIE ON ZERO
|
|||
|
cmp A11,A6
|
|||
|
jrgt CLRCR ;X2Min > X1Max
|
|||
|
move *A0(OSIZEX),A11,W
|
|||
|
add A11,A6
|
|||
|
cmp A7,A6
|
|||
|
jrlt CLRCR ;X2Max < X1Min
|
|||
|
|
|||
|
;GOT A BOX INTERSECTION
|
|||
|
SETC
|
|||
|
RETS
|
|||
|
CLRCR CLRC
|
|||
|
RETS
|
|||
|
|
|||
|
ColLists:
|
|||
|
;*** COLLIDE OBJECTS ON LIST A3 with those on LIST A4
|
|||
|
;A3,A4 ptrs to null terminated tables of object ptrs
|
|||
|
;rets Carry Set if scan must be terminated
|
|||
|
move A4,B4
|
|||
|
CLstsLp0:
|
|||
|
move *A3+,A1,L
|
|||
|
jrz ScnDone
|
|||
|
|
|||
|
movb *A1(OFLAGS+B_INUSE-7),A14
|
|||
|
jrnn CLstsLp0
|
|||
|
|
|||
|
move B4,A4 ;load head of second list
|
|||
|
|
|||
|
;*** LOAD UP COORS OF OBJ FROM FIRST LIST
|
|||
|
move *A1(OYPOS),A7,W ;A7 - OBJ1 Ymin
|
|||
|
move *A1(OSIZEY),A11,W ;A11 - OBJ1 Ymax
|
|||
|
add A7,A11
|
|||
|
move *A1(OXPOS),A9,W ;A9 - OBJ1 Xmin
|
|||
|
move *A1(OSIZEX),A10,W ;A10 - OBJ1 Xmax
|
|||
|
add A9,A10
|
|||
|
|
|||
|
;****** OBJ IN A1 CAN'T LIE ACROSS max/min boundary *********
|
|||
|
PScnLp1:
|
|||
|
move *A4+,A2,L
|
|||
|
jrz CLstsLp0
|
|||
|
|
|||
|
movb *A2(OFLAGS+B_INUSE-7),A14
|
|||
|
jrnn PScnLp1
|
|||
|
|
|||
|
;CHECK OBJS A1,A2 for intersection
|
|||
|
move *A2(OYPOS),A6,W
|
|||
|
cmp A11,A6
|
|||
|
jrgt PScnLp1 ;Y2Min > Y1Max
|
|||
|
move *A2(OSIZEY),A14,W
|
|||
|
add A14,A6
|
|||
|
cmp A7,A6
|
|||
|
jrlt PScnLp1 ;Y2Max < Y1Min
|
|||
|
|
|||
|
move *A2(OXPOS),A6,W
|
|||
|
;USE SIGNED COMAPARES BECAUSE OBJS MAY LIE ON ZERO
|
|||
|
cmp A10,A6
|
|||
|
jrgt PScnLp1 ;X2Min > X1Max
|
|||
|
move *A2(OSIZEX),A14,W
|
|||
|
add A14,A6
|
|||
|
cmp A9,A6
|
|||
|
jrlt PScnLp1 ;X2Max < X1Min
|
|||
|
|
|||
|
;GOT A BOX INTERSECTION
|
|||
|
callr ColFuncs
|
|||
|
jrz PScnLp1
|
|||
|
;ADD THESE LINES BACK IF PIXSCAN IS USED IN GAME
|
|||
|
|
|||
|
movb *A1(OFLAGS+B_PIXSCAN-7),A14 ;Is PIXSCAN ON
|
|||
|
jrn DoPScn0
|
|||
|
movb *A2(OFLAGS+B_PIXSCAN-7),A14 ;Is PIXSCAN ON
|
|||
|
jrnn SkPxScn0
|
|||
|
DoPScn0:
|
|||
|
callr PIXSCANG
|
|||
|
jrnc PScnLp1
|
|||
|
SkPxScn0:
|
|||
|
;KILL TO MANY OBJECTS HERE?
|
|||
|
|
|||
|
move @OFREE,A6,L
|
|||
|
|
|||
|
move B1,B1
|
|||
|
jrz PObj2Col
|
|||
|
move A1,A8
|
|||
|
move A2,A0
|
|||
|
call B1
|
|||
|
|
|||
|
PObj2Col:
|
|||
|
move B2,B2
|
|||
|
jrz PCkFree
|
|||
|
move A2,A8
|
|||
|
move A1,A0
|
|||
|
call B2
|
|||
|
|
|||
|
PCkFree:
|
|||
|
move @OFREE,A8,L
|
|||
|
cmp A6,A8
|
|||
|
jreq PScnLp1 ;* IF SAME OBJ, Continue scan
|
|||
|
jruc CLstsLp0
|
|||
|
ScnDone:
|
|||
|
clrc
|
|||
|
|
|||
|
ColLstsX:
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
****************************************************************************
|
|||
|
ColFuncs:
|
|||
|
;A1,A2 ptrs to objects
|
|||
|
;returns B1 collision routine for obj A1
|
|||
|
;returns B2 collision routine for obj A2
|
|||
|
|
|||
|
mmtm SP,A3,A4
|
|||
|
callr ColFunc
|
|||
|
move B0,B1
|
|||
|
SWAP A1,A2
|
|||
|
callr ColFunc
|
|||
|
SWAP A1,A2
|
|||
|
move B0,B2
|
|||
|
or B1,B0 ;set z flag if both are zero
|
|||
|
mmfm SP,A3,A4
|
|||
|
|
|||
|
rets
|
|||
|
****************************************************************************
|
|||
|
|
|||
|
ColFunc:
|
|||
|
;return in B0 routine for obj A1 struck by obj A2
|
|||
|
movb *A1(OID+8),A3
|
|||
|
movb *A2(OID+8),A4
|
|||
|
sll 27,A3
|
|||
|
srl 17,A3 ;32 Long Word Align
|
|||
|
sll 27,A4
|
|||
|
srl 22,A4 ;Long Align
|
|||
|
add A4,A3
|
|||
|
addi TypeTbl,A3
|
|||
|
|
|||
|
|
|||
|
CMPI TBLEND,A3
|
|||
|
JRLO CONT
|
|||
|
.IF DEBUG
|
|||
|
LOCKUP
|
|||
|
EINT
|
|||
|
.ENDIF
|
|||
|
MOVI TypeTbl,a3
|
|||
|
|
|||
|
CONT
|
|||
|
|
|||
|
move *A3,A3,L
|
|||
|
jump A3
|
|||
|
|
|||
|
****************************************************************************
|
|||
|
* These are the COLLISION FUNCTIONS
|
|||
|
* A collision function is selected by the routine ColFunc
|
|||
|
* which uses the TYPE field of the victims OID to select a subtable
|
|||
|
* and indexes the subtable with the TYPE field of the killer.
|
|||
|
* This gives a ptr to a COLLISION FUNCTION which returns
|
|||
|
* the COLLISION ROUTINE to be called for the victim in B0.
|
|||
|
* The COLLISION FUNCS can destroy registers A0,A3,A4,A8
|
|||
|
****************************************************************************
|
|||
|
|
|||
|
TypeTbl:
|
|||
|
*** NULL
|
|||
|
;0000
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
|
|||
|
*** PLAYER
|
|||
|
;0100
|
|||
|
.LONG NULL, NULL, NULL, PLRB, PLOB, PLLZ, PLHU, NULL
|
|||
|
.LONG NULL, PLGL, PLCO, PLCH, NULL, NULL, PLTK, NULL
|
|||
|
.LONG PLFT, NULL, PLSN, NULL, NULL, PLCB, PLC2, PLMN
|
|||
|
.LONG PLMU, PLFF, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
|
|||
|
*** PLAYER BULLET
|
|||
|
;0200
|
|||
|
.LONG NULL, NULL, NULL, BLRB, BLOB, NULL, BLHU, NULL
|
|||
|
.LONG BLWL, BLGL, BLCO, BLCH, NULL, BLPR, BLTK, NULL
|
|||
|
.LONG BLFT, BLTS, BLSN, NULL, NULL, NULL, BLCB, NULL
|
|||
|
.LONG BLMU, BLFF, BLPI, NULL, NULL, NULL, NULL, NULL
|
|||
|
|
|||
|
;RBTA
|
|||
|
;0300
|
|||
|
.LONG NULL, RBPL, RBBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, RBCN, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
|
|||
|
*** ORB ENEMY (JARVIS)
|
|||
|
;0400
|
|||
|
.LONG NULL, OBPL, OBBL, NULL, OBOB, OBLZ, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, OBCN, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
|
|||
|
*** LAZER FROM ORB
|
|||
|
;0500
|
|||
|
.LONG NULL, NULL, NULL, NULL, LZOB, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
|
|||
|
*** HULKS
|
|||
|
;0600
|
|||
|
.LONG NULL, HUPL, HUBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, HUPR, HUTK, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
*** TEXT
|
|||
|
;0700
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0800
|
|||
|
;WALL MAN ENEMY
|
|||
|
.LONG NULL, NULL, WLBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0900
|
|||
|
;TYPE GALAGA ENEMY
|
|||
|
.LONG NULL, GLPL, GLBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, GLCN, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0A00
|
|||
|
;COBRA
|
|||
|
.LONG NULL, NULL, COBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0B00
|
|||
|
;CHASER
|
|||
|
.LONG NULL, CHPL, CHBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0C00
|
|||
|
;ICONS
|
|||
|
.LONG NULL, ICPL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0D00
|
|||
|
;CHAINSAW (ACTIVE POWER UP 1 OBJECT)
|
|||
|
.LONG NULL, NULL, NULL, CNRB, CNOB, NULL, CNHU, NULL
|
|||
|
.LONG NULL, CNGG, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG CNFT, CNTS, NULL, NULL, NULL, CNCB, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0E00
|
|||
|
;TANK
|
|||
|
.LONG NULL, TKPL, TKBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, TKTK, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;0F00
|
|||
|
;LASER (ACTIVE POWER UP 2 OBJECT)
|
|||
|
.LONG NULL, NULL, NULL, LSRB, NULL, NULL, LSHU, NULL
|
|||
|
.LONG NULL, LSGG, LSGG, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG LSFT, LSTS, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1000
|
|||
|
;FAT MAN
|
|||
|
.LONG NULL, FTPL, FTBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1100
|
|||
|
;TANK TORSO
|
|||
|
.LONG NULL, NULL, TSBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, TSCN, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1200
|
|||
|
;JACK SNAKE
|
|||
|
.LONG NULL, SNPL, SNBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1300
|
|||
|
;
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1400
|
|||
|
;
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1500
|
|||
|
;CANNON BALL
|
|||
|
;ALSO USED FOR FATMAN SHRAPNEL
|
|||
|
.LONG NULL, CBPL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, CBCN, NULL, CBLS
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1600
|
|||
|
;CANNON BALL THAT EXPLODES
|
|||
|
.LONG NULL, CBPL, CBBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1700
|
|||
|
;MINE TYPE ENEMY
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1800
|
|||
|
;MUTOID MAN
|
|||
|
.LONG NULL, MUPL, MUBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1900
|
|||
|
;FLATFACE
|
|||
|
.LONG NULL, FFPL, FFBL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
;1A00
|
|||
|
;PILE
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
.LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|||
|
TBLEND:
|
|||
|
*COBRA STUFF
|
|||
|
*COBRA HITS BULLET
|
|||
|
COBL
|
|||
|
MOVI COBBUL,B0
|
|||
|
RETS
|
|||
|
*
|
|||
|
*PLAYER HITS COBRA
|
|||
|
*A1=PLAYER
|
|||
|
*A2=COBRA
|
|||
|
*
|
|||
|
PLCO:
|
|||
|
MMTM SP,A3
|
|||
|
MOVE *A2(OID),A3,W
|
|||
|
ZEXT A3
|
|||
|
CMPI CLSENMY|TYPCOB|SUBCOBFLM,A3
|
|||
|
JREQ PLCO1
|
|||
|
SLL 24,A3
|
|||
|
SRL 24,A3
|
|||
|
CMPI 3,A3 ;CHECK VERTEBRA HEIGHT
|
|||
|
JRHI BLCONUL ;TOO HIGH ON SNAKE, NO COLLISION
|
|||
|
;CHECK TO SEE IF PLAYER HAS RINGS ON!
|
|||
|
; MOVE *A1(OID),A3
|
|||
|
; ANDI 07,A3
|
|||
|
; CMPI 03,A3
|
|||
|
; JREQ BLCONUL ;BR=PLAYER HAD RINGS ON!
|
|||
|
PLCO1
|
|||
|
MOVI KILL_PLYR,B0
|
|||
|
MMFM SP,A3
|
|||
|
RETS
|
|||
|
*
|
|||
|
*BULLET HITS COBRA
|
|||
|
*A1=BULLET
|
|||
|
*A2=COBRA
|
|||
|
*
|
|||
|
BLCO
|
|||
|
MMTM SP,A3
|
|||
|
MOVE *A2(OID),A3,W
|
|||
|
ZEXT A3,W
|
|||
|
CMPI CLSENMY|TYPCOB|SUBCOBHD,A3 ;CHECL OID FOR FLAME
|
|||
|
JRLS BLCOX ;NO ITS A HEAD OR BODY HIT
|
|||
|
BLCONUL
|
|||
|
CLR B0
|
|||
|
MMFM SP,A3
|
|||
|
RETS
|
|||
|
BLCOX
|
|||
|
MOVI KILL_BULL,B0 ;BLOW THE BULLET
|
|||
|
MMFM SP,A3
|
|||
|
RETS
|
|||
|
;
|
|||
|
*
|
|||
|
*GALAGA VECTORS
|
|||
|
*
|
|||
|
GLBL:
|
|||
|
MOVI GALBUL,B0 ;ORB HIT BY BULLET
|
|||
|
RETS
|
|||
|
|
|||
|
GLPL:
|
|||
|
;IF GAL HIT RINGS THEN KILL HIM
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF GAL IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ GLO
|
|||
|
PULL A1
|
|||
|
;GAL WILL DO NOTHING IF HIT PLYR
|
|||
|
CLR B0 ;DO NOTHING
|
|||
|
RETS
|
|||
|
|
|||
|
GLO PULL A1
|
|||
|
|
|||
|
GLCN: ;ORB CHAIN SAW BLADES
|
|||
|
MOVI GALKIL,B0 ;ORB HIT RINGS, KILL ORB
|
|||
|
RETS
|
|||
|
|
|||
|
;JACK SNAKES
|
|||
|
SNPL:
|
|||
|
;IF SNAKE HIT RINGS THEN KILL HIM
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF FATMAN IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ XH
|
|||
|
PULL A1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
XH PULL A1
|
|||
|
SNBL
|
|||
|
MOVI KILL_SNK,B0
|
|||
|
RETS
|
|||
|
|
|||
|
RBBL
|
|||
|
RBCN
|
|||
|
MOVI KILL_RBT,B0
|
|||
|
RETS
|
|||
|
RBPL:
|
|||
|
;IF ROBOT HIT RINGS THEN KILL HULK
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEEK IF HULK IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ KRB
|
|||
|
PULL A1
|
|||
|
; MOVI RBAT_PLYR,B0
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
KRB PULL A1
|
|||
|
MOVI KILL_RBT,B0
|
|||
|
RETS
|
|||
|
|
|||
|
BLPI
|
|||
|
MOVI KILL_BULLP,B0
|
|||
|
RETS
|
|||
|
KILL_BULLP
|
|||
|
MMTM SP,A1,A7
|
|||
|
MOVE *A8(OID),A0,W
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBGRND,A0
|
|||
|
JRNE KB0
|
|||
|
;MUST KILL SHADOW OF GRENADE ALSO!
|
|||
|
MOVE *A8(OPLINK),A0,L
|
|||
|
CALLA GETA9
|
|||
|
CALLA KILL ;KILLS PROCESS IN A0
|
|||
|
MOVE A9,A0
|
|||
|
CALLA DELOBJ
|
|||
|
JRUC KB
|
|||
|
|
|||
|
KB0 MOVE *A8(OPLINK),A0,L
|
|||
|
CALLA KILL ;KILLS PROCESS IN A0
|
|||
|
KB:
|
|||
|
MOVI 2,A10
|
|||
|
CREATE 0,REGEXP
|
|||
|
MOVI EXP1,A0
|
|||
|
CALLA ONESND
|
|||
|
MMFM SP,A1,A7
|
|||
|
RETS
|
|||
|
MUBL:
|
|||
|
MOVI MUT_HIT,B0
|
|||
|
RETS
|
|||
|
MUPL:
|
|||
|
;IF MUTOID HIT RINGS, TURN OFF RINGS!
|
|||
|
MMTM SP,A1,A3
|
|||
|
MOVE *A1(OID),A3
|
|||
|
ANDI 0FH,A3
|
|||
|
CMPI SUBSNK,A3
|
|||
|
JREQ KS
|
|||
|
CMPI SUBHD,A3
|
|||
|
JREQ NDA
|
|||
|
CMPI SUBARMR,A3
|
|||
|
JREQ MUP1
|
|||
|
CMPI SUBARML,A3
|
|||
|
JRNE MUP2
|
|||
|
MUP1
|
|||
|
;ARM HITTING PLAYER!
|
|||
|
MOVE *A1(OIMG),A3,L
|
|||
|
CMPI MARM6A,A3
|
|||
|
JREQ MUP2
|
|||
|
NDA CLR B0
|
|||
|
MMFM SP,A1,A3
|
|||
|
RETS
|
|||
|
KS
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF MUTOID IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JRNE NDA
|
|||
|
MOVI KIL_SNK,B0
|
|||
|
MMFM SP,A1,A3
|
|||
|
RETS
|
|||
|
MUP2
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF MUTOID IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ FHAA
|
|||
|
MMFM SP,A1,A3
|
|||
|
MOVI ZGRC,B0
|
|||
|
RETS
|
|||
|
|
|||
|
FHAA MMFM SP,A1,A3
|
|||
|
MOVI OFFRNG,B0
|
|||
|
RETS
|
|||
|
FFPL:
|
|||
|
;IF FACE HIT RINGS THEN KILL HIM
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
|
|||
|
;CHECK TO SEE IF FLATFACE IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ FHA
|
|||
|
PULL A1
|
|||
|
MOVI ZGRC,B0
|
|||
|
RETS
|
|||
|
|
|||
|
FHA PULL A1
|
|||
|
MOVI PUSHFC,B0
|
|||
|
RETS
|
|||
|
ZGRC
|
|||
|
;ZERO GRACE PERIOD FOR THIS PLAYER AFTER HITTING FACE WITHOUT RINGS ON!
|
|||
|
;A0=PLAYER IMAGE
|
|||
|
MMTM SP,A0,A1,A2,A3
|
|||
|
MOVE *A0(OPLINK),A0,L
|
|||
|
MOVB *A0(PNUM),A1
|
|||
|
;SCAN FOR RNGPID
|
|||
|
;A0=PLYR OPLINK
|
|||
|
;*A0(PNUM) IS THIS PLAYER # (1 OR 2)
|
|||
|
;IF FOUND, CHECK (MYPLYR) (1 OR 2) FOR MATCH AGAINST PNUM
|
|||
|
;IF FOUND, DO NOT ZERO DELYDET
|
|||
|
|
|||
|
MOVI ACTIVE,A2,L
|
|||
|
EXNXT:
|
|||
|
MOVE *A2,A2,L ;GET NEXT
|
|||
|
JREQ EXSC ;ALL DONE, NO MATCH
|
|||
|
MOVE *A2(PROCID),A3
|
|||
|
CMPI RNGPID,A3 ;RNDPID
|
|||
|
JRNE EXNXT ;NO
|
|||
|
MOVB *A2(MYPLYR),A3 ;PLAYER # MATCH
|
|||
|
CMP A3,A1
|
|||
|
JRNE EXNXT ;NO
|
|||
|
JRUC EXSCEX ;RING IS ON DON'T HARM HIM
|
|||
|
EXSC
|
|||
|
CLR A1 ;NO RING ON, CAN IT
|
|||
|
MOVE A1,*A0(DELYDET)
|
|||
|
EXSCEX
|
|||
|
MMFM SP,A0,A1,A2,A3
|
|||
|
RETS
|
|||
|
|
|||
|
NULL:
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
BLFF:
|
|||
|
PUSH A1
|
|||
|
MOVE *A1(OID),A1
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBSPEW,A1
|
|||
|
JRZ FLOAT
|
|||
|
PULL A1
|
|||
|
MOVI KILL_BULL,B0
|
|||
|
RETS
|
|||
|
FLOAT PULL A1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
FFBL:
|
|||
|
PUSH A2
|
|||
|
MOVE *A2(OID),A2
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBSPEW,A2
|
|||
|
JRZ FLOAT2
|
|||
|
PULL A2
|
|||
|
MOVI FACBUL,B0
|
|||
|
RETS
|
|||
|
FLOAT2 PULL A2
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
LZOB:
|
|||
|
;LZPL:
|
|||
|
MOVI KILL_LZR,B0
|
|||
|
RETS
|
|||
|
|
|||
|
OBOB:
|
|||
|
MOVI ORB_ORB,B0
|
|||
|
RETS
|
|||
|
|
|||
|
OBBL:
|
|||
|
MOVI ORBBUL,B0 ;ORB HIT BY BULLET
|
|||
|
RETS
|
|||
|
|
|||
|
*ORB HIT BY LAZER
|
|||
|
OBLZ:
|
|||
|
MOVI ORBLAZ,B0
|
|||
|
RETS
|
|||
|
|
|||
|
OBPL:
|
|||
|
;IF ORB HIT RINGS THEN KILL HIM
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF ORB IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ FHO
|
|||
|
PULL A1
|
|||
|
;ORB WILL DO NOTHING IF HIT PLYR
|
|||
|
CLR B0 ;DO NOTHING
|
|||
|
RETS
|
|||
|
FHO PULL A1
|
|||
|
OBCN: ;ORB CHAIN SAW BLADES
|
|||
|
MOVI KILL_O1,B0 ;ORB HIT RINGS, KILL ORB
|
|||
|
RETS
|
|||
|
|
|||
|
;
|
|||
|
WLBL:
|
|||
|
;IF GRENADE, KILL WALLMAN
|
|||
|
;OTHERWISE, DO NOTHING
|
|||
|
; PUSH A1
|
|||
|
; MOVE *A2(OID),A1,W
|
|||
|
; CMPI CLSPLYR|TYPPLBL|SUBGRND,A1
|
|||
|
; JRZ WH ;BR=KILL FAT
|
|||
|
; CMPI CLSPLYR|TYPPLBL|SUBPOD,A1
|
|||
|
; JRZ WH ;BR=KILL FAT
|
|||
|
; CMPI CLSPLYR|TYPPLBL|SUBNSTP,A1
|
|||
|
; JRZ WH ;BR=KILL FAT
|
|||
|
; PULL A1
|
|||
|
; CLR B0
|
|||
|
; RETS
|
|||
|
;WH
|
|||
|
; PULL A1
|
|||
|
MOVI KILL_WLMN,B0
|
|||
|
RETS
|
|||
|
;
|
|||
|
CBLS:
|
|||
|
CBCN:
|
|||
|
MOVI KILL_CBALL,B0
|
|||
|
RETS
|
|||
|
CBPL: ;PLAYER WILL KILL THIS CANNON BALL/SHRAPNEL IMAGE
|
|||
|
;IF IT HIT RINGS THEN KILL IT THOUGH
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEEK IF IT IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ FHZ
|
|||
|
;HITTING PLAYER
|
|||
|
PULL A1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
FHZ
|
|||
|
;HITTING RING
|
|||
|
PULL A1
|
|||
|
MOVI KILL_CBALL,B0
|
|||
|
RETS
|
|||
|
|
|||
|
CBBL: ;BULLETS CAN KILL THIS TYPE OF CBALL
|
|||
|
MOVI KILL_CBALL2,B0
|
|||
|
RETS
|
|||
|
ICPL:
|
|||
|
;ICON AND PLAYER 1 COLLIDE
|
|||
|
MMTM SP,A1,A2
|
|||
|
MOVE *A2(OID),A2
|
|||
|
;CHECK TO SEE IF OID SAYS THIS IS A RING
|
|||
|
ANDI 03,A2
|
|||
|
CMPI 3,A2
|
|||
|
JREQ CLRB
|
|||
|
MOVE *A1(OID),A1,W
|
|||
|
ANDI F_SUBT,A1
|
|||
|
SLL 5,A1
|
|||
|
ADDI ICONTBL,A1
|
|||
|
MOVE *A1,A1,L
|
|||
|
MOVE A1,B0
|
|||
|
MMFM SP,A1,A2
|
|||
|
RETS
|
|||
|
CLRB CLR B0
|
|||
|
MMFM SP,A1,A2
|
|||
|
RETS
|
|||
|
ICONTBL:
|
|||
|
.LONG POW1ON,POW2ON,SPRAYON,PODON,EXTRA,GRENON,RINGON,NSTPON,KEYON
|
|||
|
.LONG SHOEON,SMRTON,TPZ1,TPZ2,TPZ3,TCSH,TITM
|
|||
|
CNFT:
|
|||
|
MOVI CHAINHIT2,B0
|
|||
|
RETS
|
|||
|
CNHU:
|
|||
|
CNCB:
|
|||
|
CNTS:
|
|||
|
CNOB:
|
|||
|
CNRB
|
|||
|
CNGG
|
|||
|
MOVI CHAINHIT,B0
|
|||
|
RETS
|
|||
|
LSHU:
|
|||
|
LSFT:
|
|||
|
LSTS:
|
|||
|
LSRB
|
|||
|
LSGG
|
|||
|
MOVI LSHIT,B0
|
|||
|
RETS
|
|||
|
CHPL:
|
|||
|
;IF CHASER HIT RINGS THEN KILL IT
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEEK IF CHASER IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ FHC
|
|||
|
;HITTING PLAYER
|
|||
|
PULL A1
|
|||
|
MOVI KILL_CHSR,B0 ;KILL CHASER IN A MOMENT
|
|||
|
RETS
|
|||
|
FHC PULL A1
|
|||
|
MOVI KC2,B0 ;KILL CHASER FAST
|
|||
|
RETS
|
|||
|
CHBL:
|
|||
|
MOVI HIT_CHSR,B0
|
|||
|
RETS
|
|||
|
PLCH:
|
|||
|
MOVI KILL_PLYR,B0
|
|||
|
RETS
|
|||
|
PLMU:
|
|||
|
;IF MUTOID HIT RINGS, TURN OFF RINGS!
|
|||
|
MMTM SP,A1,A3
|
|||
|
MOVE *A2(OID),A3
|
|||
|
ANDI 0FH,A3
|
|||
|
CMPI SUBSNK,A3
|
|||
|
JREQ KS2
|
|||
|
CMPI SUBHD,A3
|
|||
|
JREQ NDA1
|
|||
|
CMPI SUBARMR,A3
|
|||
|
JREQ MUP1Z
|
|||
|
CMPI SUBARML,A3
|
|||
|
JRNE MUP2Z
|
|||
|
MUP1Z
|
|||
|
;ARM HITTING PLAYER!
|
|||
|
MOVE *A2(OIMG),A3,L
|
|||
|
CMPI MARM6A,A3
|
|||
|
JREQ MUP2Z
|
|||
|
NDA1 CLR B0
|
|||
|
MMFM SP,A1,A3
|
|||
|
RETS
|
|||
|
KS2 MOVE *A1(OID),A3
|
|||
|
ANDI 07,A3
|
|||
|
CMPI 03,A3
|
|||
|
JREQ NDA1
|
|||
|
MUP2Z:
|
|||
|
PUSH A0
|
|||
|
;MUTOID MAN LAUGHS AS PLYR DIES
|
|||
|
MOVB @PCNT,A0
|
|||
|
ANDI 01,A0
|
|||
|
SLL 5,A0
|
|||
|
ADDI PTBL,A0
|
|||
|
MOVE *A0,A0,L
|
|||
|
CALLA ONESND
|
|||
|
PULL A0
|
|||
|
|
|||
|
MOVI KILL_PLYR,B0
|
|||
|
MMFM SP,A1,A3
|
|||
|
RETS
|
|||
|
|
|||
|
PTBL .LONG HASND,HA2SND
|
|||
|
PTBL2 .LONG HASND,ONOSND,OUCH,AWWSND2
|
|||
|
|
|||
|
PLHU:
|
|||
|
PLTK:
|
|||
|
PLCB:
|
|||
|
PLC2:
|
|||
|
PLMN:
|
|||
|
PLFT:
|
|||
|
PLOB:
|
|||
|
PLLZ:
|
|||
|
PLRB
|
|||
|
PLGL:
|
|||
|
PLSN
|
|||
|
MOVI KILL_PLYR,B0
|
|||
|
RETS
|
|||
|
PLFF:
|
|||
|
PUSH A0
|
|||
|
MOVB @PCNT,A0
|
|||
|
ANDI 03,A0
|
|||
|
SLL 5,A0
|
|||
|
ADDI PTBL2,A0
|
|||
|
MOVE *A0,A0,L
|
|||
|
CALLA ONESND
|
|||
|
PULL A0
|
|||
|
MOVI KILL_PLYR,B0
|
|||
|
RETS
|
|||
|
|
|||
|
BLFT:
|
|||
|
;BULLET TO FAT
|
|||
|
;BULLET DEFLECT
|
|||
|
MOVI KILL_BULL,B0
|
|||
|
;MV_BULL
|
|||
|
RETS
|
|||
|
|
|||
|
BLTK:
|
|||
|
;DEFLECT BULLET
|
|||
|
MOVI KILL_BULLT,B0
|
|||
|
RETS
|
|||
|
BLTS: ;BULLET TORSO
|
|||
|
MOVI KILL_BULL,B0
|
|||
|
RETS
|
|||
|
; MOVI KILL_BULL,B0
|
|||
|
; MOVI MV_BULL,B0
|
|||
|
; RETS
|
|||
|
BLWL:
|
|||
|
;CHECK THIS BULLETS ID AND COMPARE TO GRENADE
|
|||
|
;IF IT IS, DON'T KILL_BULL!
|
|||
|
; PUSH A1
|
|||
|
; MOVE *A1(OID),A1,W
|
|||
|
; CMPI CLSPLYR|TYPPLBL|SUBGREN,A1
|
|||
|
; JRNE KBZ
|
|||
|
; CLR B0
|
|||
|
; PULL A1
|
|||
|
; RETS
|
|||
|
;KBZ:
|
|||
|
; PULL A1
|
|||
|
MOVI KILL_BULL,B0
|
|||
|
RETS
|
|||
|
BLHU:
|
|||
|
BLCH:
|
|||
|
BLPR:
|
|||
|
BLBU:
|
|||
|
BLOB:
|
|||
|
BLCB:
|
|||
|
BLRB
|
|||
|
BLSN
|
|||
|
BLGL
|
|||
|
;CHECK THIS BULLETS ID AND COMPARE TO NON STOPPING BULLET!
|
|||
|
;IF IT IS, DON'T KILL_BULL!
|
|||
|
PUSH A1
|
|||
|
MOVE *A1(OID),A1,W
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A1
|
|||
|
JRNE OKB
|
|||
|
CLR B0
|
|||
|
PULL A1
|
|||
|
RETS
|
|||
|
|
|||
|
OKB:
|
|||
|
PULL A1
|
|||
|
MOVI KILL_BULL,B0
|
|||
|
RETS
|
|||
|
BB:
|
|||
|
PULL A1
|
|||
|
MOVI EXP_BULL,B0
|
|||
|
RETS
|
|||
|
BB1:
|
|||
|
PULL A1
|
|||
|
MOVI EXP_BULL2,B0
|
|||
|
RETS
|
|||
|
BB10:
|
|||
|
MOVE *A1(OID),A1
|
|||
|
ANDI 0FFFFH,A1
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A1
|
|||
|
JRZ BB11
|
|||
|
PULL A1
|
|||
|
MOVI EXP_BULL2,B0
|
|||
|
RETS
|
|||
|
|
|||
|
BB11 PULL A1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
BLMU:
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A0
|
|||
|
ANDI 0FFFFH,A0
|
|||
|
CMPI CLSENMY|TYPMUT|SUBSNK,A0
|
|||
|
JREQ BB10
|
|||
|
MOVE *A1(OID),A1
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBLZR,A1
|
|||
|
JRZ MVB
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBSPEW,A1
|
|||
|
JRNZ BB
|
|||
|
PULL A1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
MVB
|
|||
|
PULL A1
|
|||
|
MOVI MV_BULL,B0
|
|||
|
RETS
|
|||
|
|
|||
|
FTBL:
|
|||
|
;IF NON STOPPING BULLET, KILL FATMAN
|
|||
|
;OTHERWISE, DO NOTHING
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A1
|
|||
|
JRZ FH0 ;BR=KILL FAT
|
|||
|
CMPI CLSPLYR|TYPPLBL|SUBSPEW,A1
|
|||
|
JRZ FH0 ;BR=KILL FAT
|
|||
|
;NOW PUSH FATMAN BACK IN DIR BULLET IS TRAVELING
|
|||
|
MOVI PUSH_FT,B0
|
|||
|
PULL A1
|
|||
|
RETS
|
|||
|
FH0 PULL A1
|
|||
|
MOVI YKIL_FT,B0
|
|||
|
RETS
|
|||
|
FTPL:
|
|||
|
;IF FATMAN HIT RINGS THEN KILL HIM
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF FATMAN IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ FH
|
|||
|
PULL A1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
FH PULL A1
|
|||
|
MOVI KILL_F1,B0
|
|||
|
RETS
|
|||
|
|
|||
|
HUPL:
|
|||
|
;IF HULK HIT RINGS THEN KILL HULK
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEEK IF HULK IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ KH
|
|||
|
PULL A1
|
|||
|
MOVI BAT_PLYR,B0
|
|||
|
RETS
|
|||
|
KH PULL A1
|
|||
|
MOVI KILL_HULK,B0
|
|||
|
RETS
|
|||
|
HUTK:
|
|||
|
MOVI KILL_H2,B0
|
|||
|
RETS
|
|||
|
HUBL:
|
|||
|
HUPR:
|
|||
|
MOVI KILL_HULK,B0
|
|||
|
RETS
|
|||
|
TKPL:
|
|||
|
;IF TANK HIT RINGS THEN KILL TANK
|
|||
|
PUSH A1
|
|||
|
MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF TANK IS HITTING RING NOT PLAYER
|
|||
|
ANDI 07,A1
|
|||
|
CMPI 03,A1
|
|||
|
JREQ KTK
|
|||
|
PULL A1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
KTK PULL A1
|
|||
|
MOVI KILL_TNKR,B0
|
|||
|
RETS
|
|||
|
TKBL:
|
|||
|
MOVI KILL_TNK,B0
|
|||
|
RETS
|
|||
|
TKTK:
|
|||
|
CMP A1,A2
|
|||
|
JRNE TKTK1
|
|||
|
CLR B0
|
|||
|
RETS
|
|||
|
TKTK1:
|
|||
|
MOVI TURN_TANK,B0
|
|||
|
RETS
|
|||
|
TSBL:
|
|||
|
TSCN:
|
|||
|
MOVI KILL_TORSO,B0
|
|||
|
RETS
|
|||
|
;TSPL:
|
|||
|
;IF TANK TORSO HIT RINGS THEN KILL TORSO
|
|||
|
; PUSH A1
|
|||
|
; MOVE *A2(OID),A1,W
|
|||
|
;CHECK TO SEE IF TANK TORSO IS HITTING RING NOT PLAYER
|
|||
|
; ANDI 07,A1
|
|||
|
; CMPI 03,A1
|
|||
|
; JREQ KTS
|
|||
|
; PULL A1
|
|||
|
; CLR B0
|
|||
|
; RETS
|
|||
|
;KTS PULL A1
|
|||
|
; MOVI KILL_TSOR,B0
|
|||
|
; RETS
|
|||
|
|
|||
|
|
|||
|
|
|||
|
****************************************************************************
|
|||
|
*
|
|||
|
*COLLISION ROUTINE
|
|||
|
*A1=OBJECT ONE
|
|||
|
*A2=OBJECT TWO
|
|||
|
*RETURNS: CS= COLLISION, CC= NO COLLISION
|
|||
|
*
|
|||
|
* CLOBBERS A14
|
|||
|
PIXSCAN:
|
|||
|
movb *A1(OFLAGS+B_PIXSCAN-7),A14 ;Is PIXSCAN ON
|
|||
|
jrn PIXSCANG
|
|||
|
movb *A2(OFLAGS+B_PIXSCAN-7),A14 ;Is PIXSCAN ON
|
|||
|
jrn PIXSCANG ;BR = NO PIXSCAN, JUST RETURN YES
|
|||
|
setc
|
|||
|
rets
|
|||
|
|
|||
|
*CREATE TIME SLICE WHILE LOCKING OUT INTERRUPTS
|
|||
|
PIXSCANG
|
|||
|
;REALLY? C'MON
|
|||
|
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13
|
|||
|
MMTM SP,B0,B1
|
|||
|
move A1,A0
|
|||
|
move A2,A8
|
|||
|
PUSHST
|
|||
|
DINT
|
|||
|
MOVE *A0(OIMG),A9,L ;GET IMAGE 0 POINTER
|
|||
|
MOVE *A8(OIMG),A7,L ;GET IMAGE 1 POINTER
|
|||
|
;SET UP OBJECT BOX ULX,ULY
|
|||
|
move *A0(OXPOS),A3,W
|
|||
|
move *A0(OYPOS),A14,W
|
|||
|
sll 16,A14
|
|||
|
movy A14,A3
|
|||
|
move *A8(OXPOS),A4,W
|
|||
|
move *A8(OYPOS),A14,W
|
|||
|
sll 16,A14
|
|||
|
movy A14,A4
|
|||
|
|
|||
|
MOVE *A0(OFLAGS),A6
|
|||
|
MOVE A6,B0 ;FLAGS FOR OBJECT 0
|
|||
|
MOVE *A8(OFLAGS),A6
|
|||
|
MOVE A6,B1 ;FLAGS OBJECT 1
|
|||
|
POPST
|
|||
|
|
|||
|
MOVE *A9(ISIZE),A5,L
|
|||
|
MOVE *A7(ISIZE),A6,L
|
|||
|
ADDXY A3,A5 ;NOW WE HAVE LRX0 AND LRY0
|
|||
|
ADDXY A4,A6 ;LRX1,LRY1
|
|||
|
CMPXY A6,A3 ;COMPARE (LRX1,LRY1) TO (TLX0,TLY0)
|
|||
|
JRXGE CSFAIL
|
|||
|
JRYGE CSFAIL
|
|||
|
CMPXY A4,A5 ;COMPARE (TLX1,TLY1) TO (LRX0,LRY0)
|
|||
|
JRXLE CSFAIL
|
|||
|
JRYLE CSFAIL
|
|||
|
MOVE A0,A10
|
|||
|
*
|
|||
|
*BOX HAS INTERSECTED
|
|||
|
*PERFORM PIXEL SCAN
|
|||
|
*A3=TLX0,TLY0
|
|||
|
*A4=TLX1,TLY1
|
|||
|
*A5=LRX0,LRX1
|
|||
|
*A6=LRX1,LRY1
|
|||
|
*A7=IMAGE 1 DATA HEADER POINTER
|
|||
|
*A8=IMAGE 1 OBJECT POINTER
|
|||
|
*A9=IMAGE 0 DATA HEADER POINTER
|
|||
|
*A10=IMAGE 0 OBJECT POINTER
|
|||
|
*B0=FLAGS OBJECT 0
|
|||
|
*B1=FLAGS OBJECT 1
|
|||
|
*
|
|||
|
*CALCULATE XOFF0,XOFF1,XSCAN
|
|||
|
*A11=XOFF0
|
|||
|
*A12=XOFF1
|
|||
|
*A13=XSCAN
|
|||
|
*
|
|||
|
MOVE A3,A2
|
|||
|
SUBXY A4,A2
|
|||
|
SEXT A2,W
|
|||
|
JRNN CLX1
|
|||
|
NEG A2
|
|||
|
MOVE A2,A11 ;OBJECT 1 TO THE RIGHT
|
|||
|
CLR A12
|
|||
|
MOVE A4,A13 ;RIGHTMOST TOP LEFT
|
|||
|
JRUC CLX2
|
|||
|
CLX1: ;OBJECT 0 TO THE RIGHT
|
|||
|
MOVE A2,A12
|
|||
|
CLR A11
|
|||
|
MOVE A3,A13 ;RIGHTMOST TOP LEFT
|
|||
|
CLX2:
|
|||
|
CMPXY A5,A6 ;FIND LEFTMOST LOWER RIGHT
|
|||
|
JRXN CLX3
|
|||
|
SUBXY A5,A13
|
|||
|
JRUC CLX4
|
|||
|
CLX3:
|
|||
|
SUBXY A6,A13
|
|||
|
CLX4:
|
|||
|
SEXT A13,W
|
|||
|
NEG A13
|
|||
|
|
|||
|
*CALCULATE YOFF0,YOFF1,YSCAN
|
|||
|
*A3=TLX0,TLY0
|
|||
|
*A4=TLX1,TLY1
|
|||
|
*A5=LRX0,LRX1
|
|||
|
*A6=LRX1,LRY1
|
|||
|
*COMPUTE:
|
|||
|
*A2=YOFF0
|
|||
|
*A3=YOFF1
|
|||
|
*A14=YSCAN
|
|||
|
SRA 16,A3 ;BLOW AWAY X COORDS
|
|||
|
SRA 16,A4
|
|||
|
SRA 16,A5
|
|||
|
SRA 16,A6
|
|||
|
MOVE A3,A2
|
|||
|
SUB A4,A2
|
|||
|
JRNN CLY1
|
|||
|
NEG A2
|
|||
|
CLR A3 ;OBJECT 1 TO THE RIGHT
|
|||
|
MOVE A4,A14 ;RIGHTMOST TOP LEFT
|
|||
|
JRUC CLY2
|
|||
|
CLY1: ;OBJECT 0 TO THE RIGHT
|
|||
|
MOVE A3,A14
|
|||
|
MOVE A2,A3
|
|||
|
CLR A2
|
|||
|
CLY2:
|
|||
|
CMP A5,A6 ;FIND LEFTMOST LOWER RIGHT
|
|||
|
JRN CLY3
|
|||
|
SUB A5,A14
|
|||
|
JRUC CLY4
|
|||
|
CLY3:
|
|||
|
SUB A6,A14
|
|||
|
CLY4:
|
|||
|
NEG A14
|
|||
|
*
|
|||
|
*A2=YOFF0
|
|||
|
*A3=YOFF1
|
|||
|
*A4=IMAGE SOURCE ADDRESS TEMP
|
|||
|
*A5=WIDTH TEMP
|
|||
|
*A7=IMAGE 1 DATA HEADER POINTER
|
|||
|
*A8=IMAGE 1 OBJECT POINTER
|
|||
|
*A9=IMAGE 0 DATA HEADER POINTER
|
|||
|
*A10=IMAGE 0 OBJECT POINTER
|
|||
|
*A11=XOFF0
|
|||
|
*A12=XOFF1
|
|||
|
*A13=XSCAN
|
|||
|
*A14=YSCAN
|
|||
|
*
|
|||
|
*CALCULATE OBJECT 0 STARTAD, HINC0, VINC0
|
|||
|
*
|
|||
|
MOVE *A9(ISAG),A4,L ;GET IMAGE SOURCE ADDRESS
|
|||
|
MOVE *A9(ISIZE),A5,W
|
|||
|
ADDK 3,A5 ;CORRECT ERRONEOUS WIDTH (THANX, WARREN)
|
|||
|
srl 2,A5
|
|||
|
sll 2,A5
|
|||
|
|
|||
|
*CHECK OBJECT 0 FLIPS
|
|||
|
*
|
|||
|
BTST B_FLIPH,B0
|
|||
|
JRNE CL0HF ;HORIZONTAL FLIP
|
|||
|
BTST B_FLIPV,B0
|
|||
|
JRNE CL0VF ;VERTICAL FLIP
|
|||
|
*
|
|||
|
*NO FLIP CASE
|
|||
|
*A2=HINC0=8 (BYTE AT A TIME)
|
|||
|
*A5=VINC0=W0-XSCAN
|
|||
|
*A4=STARTAD0=IMAGEAD0+(YOFF0 X W0) + XOFF
|
|||
|
*
|
|||
|
MOVE A5,A1 ;GET WIDTH
|
|||
|
MPYU A2,A1 ;MULT WIDTH X YOFF
|
|||
|
ADD A11,A1 ;ADD IN X OFFSET
|
|||
|
SLL 3,A1 ;CORRECT FOR BYTE ADDRESSING
|
|||
|
ADD A1,A4 ;ADD TO SOURCE ADDRESS
|
|||
|
MOVK 8,A2 ;HINC0
|
|||
|
SUB A13,A5 ;VINC0=W0-XSCAN
|
|||
|
SLL 3,A5 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
JRUC CLOBJ1
|
|||
|
*
|
|||
|
*HORIZONTAL FLIP
|
|||
|
*
|
|||
|
*A2=HINC0=-8
|
|||
|
*A5=VINC0=W0+XSCAN
|
|||
|
*A4=STARTAD0=IMAGEAD0+(YOFF0 X W0) + W0-XOFF0-1
|
|||
|
CL0HF BTST B_FLIPV,B0 ;VERT FLIP TOO?
|
|||
|
JRNE CL0HVF ;HORIZ AND VERT FLIP
|
|||
|
MOVE A5,A1 ;GET WIDTH
|
|||
|
MPYU A2,A1 ;MULT WIDTH X Y OFFSET
|
|||
|
ADD A5,A1 ;ADD IN WIDTH
|
|||
|
SUB A11,A1 ;SUBTRACT X OFFSET
|
|||
|
DEC A1 ;-1 MORE
|
|||
|
SLL 3,A1 ;CORRECT FOR BYTE ADDRESSING
|
|||
|
ADD A1,A4
|
|||
|
MOVI -8,A2 ;HINC0
|
|||
|
ADD A13,A5 ;VINC0=W0+XSCAN
|
|||
|
SLL 3,A5 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
JRUC CLOBJ1
|
|||
|
*
|
|||
|
*VERTICAL FLIP
|
|||
|
*
|
|||
|
*A2=HINC0=8
|
|||
|
*A5=VINC0=-W0-XSCAN
|
|||
|
*A4=STARTAD0=IMAGEAD0+(H0-YOFF0-1)W0+XOFF0
|
|||
|
CL0VF: MOVE *A9(ISIZE+>10),A1 ;GET HEIGHT
|
|||
|
SUB A2,A1 ;SUBTRACT YOFF0
|
|||
|
DEC A1
|
|||
|
MPYU A5,A1 ;MULTIPLY BY WIDTH
|
|||
|
ADD A11,A1 ;ADD IN X OFFSET
|
|||
|
SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
ADD A1,A4 ;ADD TO SOURCE ADDRESS
|
|||
|
NEG A5 ;-W0
|
|||
|
SUB A13,A5 ;-XSCAN
|
|||
|
SLL 3,A5 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
MOVK 8,A2 ;HINC0
|
|||
|
JRUC CLOBJ1
|
|||
|
*
|
|||
|
*VERTICAL AND HORIZONTAL FLIP
|
|||
|
*
|
|||
|
*A2=HINC0=-8
|
|||
|
*A5=VINC0=-W0-XSCAN
|
|||
|
*A4=STARTAD0=(H0-YOFF0-1)W0+W0-XOFF0-1
|
|||
|
CL0HVF: MOVE *A9(ISIZE+>10),A1 ;GET HEIGHT
|
|||
|
SUB A2,A1 ;SUBTRACT YOFF0
|
|||
|
DEC A1
|
|||
|
MPYU A5,A1 ;MULTIPLY BY WIDTH
|
|||
|
ADD A5,A1 ;ADD IN WIDTH (W0)
|
|||
|
SUB A11,A1 ;SUBTRACT XOFF0
|
|||
|
DEC A1
|
|||
|
SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
ADD A1,A4 ;ADD TO SOURCE ADDRESS
|
|||
|
NEG A5 ;-W0
|
|||
|
ADD A13,A5 ;+XSCAN
|
|||
|
SLL 3,A5 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
MOVI -8,A2 ;HINC0
|
|||
|
*
|
|||
|
*CALCULATE OBJECT 1 STARTAD, HJUMP, VJUMP
|
|||
|
*
|
|||
|
*
|
|||
|
*A2=HINC0
|
|||
|
*A3=YOFF1, HINC1
|
|||
|
*A4=STARTAD0
|
|||
|
*A5=VINC0
|
|||
|
*A6=STARTAD1
|
|||
|
*A7=IMAGE 1 DATA HEADER POINTER
|
|||
|
*A8=IMAGE 1 OBJECT POINTER
|
|||
|
*A9=IMAGE 0 DATA HEADER POINTER
|
|||
|
*A10=IMAGE 0 OBJECT POINTER
|
|||
|
*A11=W1, VINC1
|
|||
|
*A12=XOFF1
|
|||
|
*A13=XSCAN
|
|||
|
*A14=YSCAN
|
|||
|
CLOBJ1:
|
|||
|
MOVE *A7(ISAG),A6,L ;GET IMAGE SOURCE ADDRESS
|
|||
|
MOVE *A7(ISIZE),A11
|
|||
|
ADDK 3,A11 ;CORRECT ERRONEOUS WIDTH (THANX, WARREN)
|
|||
|
srl 2,A11
|
|||
|
sll 2,A11
|
|||
|
*
|
|||
|
*CHECK OBJECT 1 FLIPS
|
|||
|
*
|
|||
|
BTST B_FLIPH,B1
|
|||
|
JRNE CL1HF ;HORIZONTAL FLIP
|
|||
|
BTST B_FLIPV,B1
|
|||
|
JRNE CL1VF ;VERTICAL FLIP
|
|||
|
*
|
|||
|
*NO FLIP CASE
|
|||
|
*A3=HINC1=8 (BYTE AT A TIME)
|
|||
|
*A11=VINC1=W1-XSCAN
|
|||
|
*A6=STARTAD1=IMAGEAD1+(YOFF1 X W1) + XOFF1
|
|||
|
*
|
|||
|
MOVE A11,A1 ;GET WIDTH
|
|||
|
MPYU A3,A1 ;MULT WIDTH X YOFF
|
|||
|
ADD A12,A1 ;ADD IN X OFFSET
|
|||
|
SLL 3,A1 ;CORRECT FOR BYTE ADDRESSING
|
|||
|
ADD A1,A6 ;ADD TO SOURCE ADDRESS
|
|||
|
MOVK 8,A3 ;HINC1
|
|||
|
SUB A13,A11 ;VINC1=W1-XSCAN
|
|||
|
SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
JRUC CSH
|
|||
|
*
|
|||
|
*HORIZONTAL FLIP
|
|||
|
*
|
|||
|
*A3=HINC1=-8
|
|||
|
*A11=VINC1=W1+XSCAN
|
|||
|
*A6=STARTAD1=IMAGEAD1+(YOFF1 X W1) + W1-XOFF1-1
|
|||
|
CL1HF BTST B_FLIPV,B1 ;VERT FLIP TOO?
|
|||
|
JRNE CL1HVF ;HORIZ AND VERT FLIP
|
|||
|
MOVE A11,A1 ;GET WIDTH
|
|||
|
MPYU A3,A1 ;MULT WIDTH X Y OFFSET
|
|||
|
ADD A11,A1 ;ADD IN WIDTH
|
|||
|
SUB A12,A1 ;SUBTRACT X OFFSET
|
|||
|
DEC A1 ;-1 MORE
|
|||
|
SLL 3,A1 ;CORRECT FOR BYTE ADDRESSING
|
|||
|
ADD A1,A6
|
|||
|
MOVI -8,A3 ;HINC1
|
|||
|
ADD A13,A11 ;VINC1=W1+XSCAN
|
|||
|
SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
JRUC CSH
|
|||
|
*
|
|||
|
*VERTICAL FLIP
|
|||
|
*
|
|||
|
*A3=HINC1=8
|
|||
|
*A11=VINC1=-W1-XSCAN
|
|||
|
*A6=STARTAD1=IMAGEAD1+(H1-YOFF1-1)W1+XOFF1
|
|||
|
CL1VF: MOVE *A7(ISIZE+>10),A1 ;GET HEIGHT
|
|||
|
SUB A3,A1 ;SUBTRACT YOFF1
|
|||
|
DEC A1
|
|||
|
MPYU A11,A1 ;MULTIPLY BY WIDTH
|
|||
|
ADD A12,A1 ;ADD IN X OFFSET
|
|||
|
SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
ADD A1,A6 ;ADD TO SOURCE ADDRESS
|
|||
|
NEG A11 ;-W1
|
|||
|
SUB A13,A11 ;-XSCAN
|
|||
|
SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
MOVK 8,A3 ;HINC1
|
|||
|
JRUC CSH
|
|||
|
*
|
|||
|
*VERTICAL AND HORIZONTAL FLIP
|
|||
|
*
|
|||
|
*A3=HINC1=-8
|
|||
|
*A11=VINC1=-W1-XSCAN
|
|||
|
*A6=STARTAD1=(H1-YOFF1-1)W1+W1-XOFF1-1
|
|||
|
CL1HVF: MOVE *A7(ISIZE+>10),A1 ;GET HEIGHT
|
|||
|
SUB A3,A1 ;SUBTRACT YOFF1
|
|||
|
DEC A1
|
|||
|
MPYU A11,A1 ;MULTIPLY BY WIDTH
|
|||
|
ADD A11,A1 ;ADD IN WIDTH (W1)
|
|||
|
SUB A12,A1 ;SUBTRACT XOFF1
|
|||
|
DEC A1
|
|||
|
SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
ADD A1,A6 ;ADD TO SOURCE ADDRESS
|
|||
|
NEG A11 ;-W1
|
|||
|
ADD A13,A11 ;+XSCAN
|
|||
|
SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING
|
|||
|
MOVI -8,A3 ;HINC1
|
|||
|
*
|
|||
|
*SCAN COLLISION BOX AREA
|
|||
|
*
|
|||
|
*A0= TEMP DATA HOLDER
|
|||
|
*A1= WIDTH COUNTER XSCAN
|
|||
|
*A2=H INCREMENT IMAGE 0
|
|||
|
*A3=H INCREMENT IMAGE 1
|
|||
|
*A4=INDEX TO IMAGE 0
|
|||
|
*A5=V INCREMENT IMAGE 0
|
|||
|
*A6=INDEX TO IMAGE 1
|
|||
|
*A7=IMAGE 1 DATA HEADER POINTER
|
|||
|
*A8=IMAGE 1 OBJECT POINTER
|
|||
|
*A9=IMAGE 0 DATA HEADER POINTER
|
|||
|
*A10=IMAGE 0 OBJECT POINTER
|
|||
|
*A11=V INCREMENT IMAGE 1
|
|||
|
*A13=WIDTH COUNT XSCAN
|
|||
|
*A14=HEIGHT COUNT YSCAN
|
|||
|
*
|
|||
|
CSH:
|
|||
|
CMPI >80,A14 ;NO SCAN IF XSCAN, YSCAN VALUES OUT OF RANGE
|
|||
|
JRHS CSFAIL
|
|||
|
CMPI >80,A13
|
|||
|
JRHS CSFAIL
|
|||
|
PUSHST
|
|||
|
DINT ;STOP DMA FUCK
|
|||
|
MOVE @INTENB,A0,W
|
|||
|
ANDNI X1E,A0
|
|||
|
MOVE A0,@INTENB,W
|
|||
|
POPST
|
|||
|
CSH0:
|
|||
|
MOVE @DMACTRL,A0,W ;DMA BUSY?
|
|||
|
JRN CSH0 ;YES, WAIT
|
|||
|
CSH1:
|
|||
|
MOVE A13,A1 ;LOAD LINE COUNTDOWN HORIZ COUNTER
|
|||
|
CSHL: MOVB *A4,A0 ;CHECK IMAGE 0 CORRESPONDING NON ZEROES
|
|||
|
JREQ CSNXH
|
|||
|
MOVB *A6,A0 ;CHECK IMAGE 1
|
|||
|
JRNE CSHIT ;GOT A HIT
|
|||
|
CSNXH:
|
|||
|
ADD A2,A4 ;ADD HORIZ INCREMENTS HINC0
|
|||
|
ADD A3,A6 ;HINC1
|
|||
|
DSJS A1,CSHL ;LOOP UNTIL HOR LINE DONE
|
|||
|
|
|||
|
ADD A5,A4 ;ADD VERT INCREMENTS
|
|||
|
ADD A11,A6
|
|||
|
DSJS A14,CSH1 ;LOOP UNTIL VERT DONE
|
|||
|
CSFAIL:
|
|||
|
MOVE B13,B13
|
|||
|
JRZ CSFNODMA ;DON'T REACTIVATE DMA INTS
|
|||
|
PUSHST
|
|||
|
DINT
|
|||
|
MOVE @INTENB,A0,W
|
|||
|
ORI X1E,A0
|
|||
|
MOVE A0,@INTENB,W
|
|||
|
POPST
|
|||
|
**** EINT
|
|||
|
CSFNODMA
|
|||
|
CLRC
|
|||
|
JRUC CSHXXX
|
|||
|
CSHIT:
|
|||
|
MOVE B13,B13
|
|||
|
JRZ CSFLAGS ;DON'T REACTIVATE DMA INTS
|
|||
|
PUSHST
|
|||
|
DINT
|
|||
|
MOVE @INTENB,A0,W
|
|||
|
ORI X1E,A0
|
|||
|
MOVE A0,@INTENB,W
|
|||
|
POPST
|
|||
|
**** EINT
|
|||
|
CSFLAGS
|
|||
|
SETC
|
|||
|
CSHXXX:
|
|||
|
MMFM SP,B0,B1
|
|||
|
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13
|
|||
|
RETS
|
|||
|
****************************************************************************
|
|||
|
|
|||
|
|