777 lines
20 KiB
Plaintext
777 lines
20 KiB
Plaintext
STOPOBJS STOPOBJS
|
||
|
||
Description: Zero velocities of all objects on OBJLST
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: none
|
||
|
||
Returns: none
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
STOPOBJS
|
||
MMTM SP,A0,A1
|
||
CLR A0
|
||
MOVI OBJLST,A1
|
||
SOBJS1
|
||
MOVE *A1,A1,L
|
||
JREQ SOBJSX
|
||
MOVE A0,*A1(OXVEL),L
|
||
MOVE A0,*A1(OYVEL),L
|
||
MOVE A0,*A1(OZVEL),L
|
||
JRUC SOBJS1
|
||
SOBJSX
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
SHADST SHADST
|
||
|
||
Description: Start a shadow
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A8 --> object to shadow
|
||
|
||
Returns: A0 --> shadow obj (zero if no shadow was created)
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
*START A SHADOW
|
||
*INPUTS
|
||
*A8=OBJECT TO SHADOW
|
||
*RETURNS:
|
||
*A0=PTR TO SHADOW, OR 0 IF NO SHADOW WAS CREATED
|
||
*
|
||
SHADST:
|
||
MMTM SP,A1
|
||
CALLR GETOBJ
|
||
JREQ SHADSTX ;NONE AVAIL
|
||
CALLR SHADCPY
|
||
SHADSTG
|
||
MOVI DUMCOLL,A1
|
||
MOVE A1,*A0(OCVECT),L ;DUMMY COLLISION
|
||
CALLR INSOBJ
|
||
MOVI OID_SHAD,A1,W
|
||
MOVE A1,*A0(OID),W ;SET ID
|
||
MOVI >FDFD0000,A1
|
||
MOVE A1,*A0(OPAL),L ;SET PALLETTE,COLOR
|
||
MOVE A8,*A0(OSHAD),L ;LINK TO SHADOWED OBJECT
|
||
MOVE A0,*A8(OSHAD),L ;LINK TO SHADOW
|
||
SHADSTX:
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
DFRMGRND DFRMGRND
|
||
|
||
Description: Calculate an objects distance from the ground
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A8 --> object
|
||
|
||
Returns: A1 = distance from the ground
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
*
|
||
*CALC DISTANCE FROM GROUND
|
||
*A8=OBJECT
|
||
*A1 RET WITH HT ABOVE GROUND
|
||
*
|
||
DFRMGRND
|
||
PUSH A2
|
||
MOVE *A8(OSIZEY),A2,W
|
||
MOVE *A8(OYPOS),A1,W
|
||
ADD A2,A1
|
||
NEG A1
|
||
MMFM SP,A2
|
||
RETS
|
||
|
||
GETOBJ GETOBJ
|
||
|
||
Description: Get a free object block for use
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: none
|
||
|
||
Returns: A0 --> object block
|
||
Z bit set if no blocks were available
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GETOBJ - GET A FREE OBJECT BLOCK FOR USE *
|
||
* RETURNS *
|
||
* A0 = PTR TO OBJECT BLOCK *
|
||
* IF NO BLOCKS WERE AVAILABLE THEN THE Z FLAG IS SET *
|
||
* *
|
||
**************************************************************************
|
||
GETOBJ:
|
||
MMTM SP,A1,A2
|
||
MOVE @OFREE,A0,L ; pointer to next available obj block
|
||
jreq getox
|
||
move *A0,A2,L
|
||
move A2,@OFREE,L ; adjust pointer to free list
|
||
CLR A2 ; CLEAR OUT THE SHIT
|
||
MOVI (OBSIZ/16)-2,A1
|
||
ADDK 32,A0
|
||
SRL 1,A1
|
||
JRNC GETOBJ1
|
||
MOVE A2,*A0+,W
|
||
GETOBJ1
|
||
MOVE A2,*A0+,L
|
||
DSJS A1,GETOBJ1
|
||
SUBI OBSIZ,A0 ;RESTORE A0, SET NON ZERO FLAG
|
||
getox:
|
||
MMFM SP,A1,A2 ;DONT SCREW UP Z-FLAG
|
||
RETS
|
||
|
||
FREEOBJ FREEOBJ
|
||
|
||
Description: Put an object block back on the FREE list
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 --> object block
|
||
|
||
Returns: none
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
FREEOBJ
|
||
PUSH A2
|
||
MOVE @OFREE,A2,L
|
||
MOVE A2,*A0,L
|
||
MOVE A0,@OFREE,L ;BLOCK IS ON FREE LIST NOW
|
||
PULL A2
|
||
RETS
|
||
|
||
INSOBJ INSOBJ
|
||
|
||
Description: Insert an object block onto the OBJECT LIST
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 --> object block
|
||
|
||
Returns: none
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
*INSERT FOREGROUND OBJECT
|
||
INSOBJ:
|
||
mmtm sp,a1,a2,a3,a4,a5
|
||
movi OBJLST,a4
|
||
INSOBJ0:
|
||
move *A0(OZVAL),A1,L ; GET Z POSITION
|
||
MOVE *A0(OYVAL),A5,L ; GET Y POSITION
|
||
ins_loop:
|
||
move a4,a2 ; ptr to PREV in a2
|
||
move *a2,a4,L ; ptr to NEXT in a4
|
||
jreq INS_AT_END ; bra if at end of list
|
||
MOVE *A4(OZVAL),A3,L ; ZPOS in A3
|
||
CMP A3,A1
|
||
jrgt ins_loop
|
||
JRLT INS_AT_END
|
||
|
||
MOVE *A4(OYVAL),A3,L ;TEST Y POSITION
|
||
CMP A3,A5
|
||
JRGT ins_loop
|
||
INS_AT_END:
|
||
move a4,*a0,L ; put NEXT link in new block
|
||
move a0,*a2,L ; put link to new in PREV block
|
||
mmfm sp,a1,a2,a3,a4,a5
|
||
rets
|
||
|
||
DELOBJ DELOBJ
|
||
|
||
Description: Delete an object block from the object list
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 --> object block to delete
|
||
|
||
Returns: none
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
*DELETE FOREGROUND OBJECT
|
||
DELOBJ:
|
||
MMTM SP,A0,A2,A3,A4,A8
|
||
MOVI OBJLST,A4
|
||
del_loop:
|
||
move a4,a2 ; ptr to PREV in a2
|
||
move *a2,a4,L ; ptr to NEXT in a4
|
||
JRNZ DEL_CHK
|
||
LOCKUP
|
||
* CALLERR 5 ;REPORT THE PROBLEM
|
||
JRUC DELOBJX
|
||
***no_del:
|
||
*** jreq no_del ; ERROR if at end of list (HANG UP)
|
||
DEL_CHK
|
||
cmp a4,a0
|
||
jrne del_loop
|
||
|
||
move *a0,*a2,L ; put NEXT link in PREV block
|
||
move @OFREE,a2,L
|
||
move a2,*a0,L
|
||
move a0,@OFREE,L ; Return deleted block to free stack
|
||
|
||
DELOBJX
|
||
MMFM SP,A0,A2,A3,A4,A8
|
||
RETS
|
||
|
||
KILOBJ KILOBJ
|
||
|
||
Description: Kill a class from the object list
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 = object id (16 bits)
|
||
A1 = mask (16 bits)
|
||
|
||
Returns: none
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
*KILL A CLASS FROM THE OBJECT LIST
|
||
KILOBJ:
|
||
MMTM SP,A0,A2,A3,A4,A5
|
||
MOVI OBJLST,A2,L
|
||
|
||
KILGEN
|
||
AND A1,A0 ;FORM MATCH
|
||
|
||
KILOBP:
|
||
MOVE A2,A3 ;SAVE PREVIOUS
|
||
MOVE *A2,A2,L ;GET NEXT
|
||
JREQ KILOBX ;ALL DONE
|
||
MOVE *A2(OID),A4
|
||
AND A1,A4 ;CAN DONT CARE BITS
|
||
CMP A0,A4 ;MATCH?
|
||
JRNE KILOBP ;NO
|
||
|
||
MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST
|
||
MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START
|
||
MOVE A5,*A2,L
|
||
MOVE A2,@OFREE,L ;POINT FREE TO CELL
|
||
MOVE A3,A2
|
||
JRUC KILOBP ;KILL THE REST
|
||
KILOBX:
|
||
MMFM SP,A0,A2,A3,A4,A5
|
||
RETS
|
||
|
||
EXISTOBJ EXISTOBJ
|
||
|
||
Description: Does an object from a certain class exist ?
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 = object ID (16 bits)
|
||
A1 = mask bits (16 bits, where 0 = DONT CARE)
|
||
|
||
Returns: A0 --> object (Z bit clear)
|
||
A0 = 0 means there is no object (Z bit set)
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
EXISTOBJ:
|
||
MMTM SP,A2,A3
|
||
SEXT A0
|
||
MOVI OBJLST,A2,L
|
||
AND A1,A0 ;FORM MATCH
|
||
EXISTOBP:
|
||
MOVE *A2,A2,L ;GET NEXT
|
||
JREQ EXISTOBX ;ALL DONE
|
||
MOVE *A2(OID),A3,W
|
||
AND A1,A3 ;CAN DONT CARE BITS
|
||
CMP A0,A3 ;MATCH?
|
||
JRNE EXISTOBP ;NO
|
||
EXISTOBX:
|
||
MOVE A2,A0
|
||
MMFM SP,A2,A3
|
||
RETS
|
||
|
||
MAKOBJ MAKOBJ
|
||
|
||
Description: Handy way to create an object
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: a14 --> initialization table
|
||
|
||
Returns: Z bit clear = success !!
|
||
Z bit set = failure
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
*
|
||
*MAKE AN OBJECT
|
||
*RETURN(S)
|
||
*A0 = OBJECT BLOCK PTR
|
||
*A14 = POINTS TO THE INITIALIZATION TABLE
|
||
*
|
||
MAKOBJ CALLA GETOBJ
|
||
JRZ MAKOBX ;NONE LEFT
|
||
CALLR STFOBJ
|
||
CALLR INSOBJ
|
||
MOVE A0,A0 ;RETURN NON-ZERO
|
||
MAKOBX RETS
|
||
|
||
GETSCRNREL GETSCRNREL
|
||
|
||
Description: Get screen relative X,Y coordinates of an object
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 --> object block
|
||
|
||
Returns: A1 = x relative value (32 bits)
|
||
A2 = y relative value (32 bits)
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT *
|
||
* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE *
|
||
* WORLD ABSOLUTE. *
|
||
* A0 = PTR TO THE OBJECT BLOCK *
|
||
* RETURNS *
|
||
* A1 = X SCREEN RELATIVE, 32 BITS *
|
||
* A2 = Y SCREEN RELATIVE, 32 BITS *
|
||
* *
|
||
**************************************************************************
|
||
GSCRNREL
|
||
PUSH A5
|
||
MOVE @WORLDTLX,A5,L
|
||
MOVE *A0(OXVAL),A1,L
|
||
SUB A5,A1
|
||
MOVE @WORLDTLY,A5,L
|
||
MOVE *A0(OYVAL),A2,L
|
||
SUB A5,A2
|
||
PULL A5
|
||
RETS
|
||
|
||
SCRNRELV SCRNRELV
|
||
|
||
Description: Make X and Y velocities of an object releative to the screen
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 --> object
|
||
|
||
Returns: none
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE *
|
||
* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT *
|
||
* SCROLL RATE DOESN'T AFFECT THEM. *
|
||
* A0 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
SCRNRELV
|
||
MMTM SP,A1,A5
|
||
MOVE @SCROLLX,A5,L
|
||
MOVE *A0(OXVEL),A1,L
|
||
ADD A5,A1
|
||
MOVE A1,*A0(OXVEL),L
|
||
MOVE @SCROLLY,A5,L
|
||
MOVE *A0(OYVEL),A1,L
|
||
ADD A5,A1
|
||
MOVE A1,*A0(OYVEL),L
|
||
MMFM SP,A1,A5
|
||
RETS
|
||
|
||
GANISAG GANISAG
|
||
|
||
Description: Adjust current object image with respect to its animation
|
||
point and flip flags.
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 --> object block
|
||
A2 = new OYVAL
|
||
A3 = new OXVAL
|
||
A4 = new flags
|
||
|
||
Returns: A2 = adjusted OYVAL
|
||
A3 = adjusted OXVAL
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GANISAG - ADJUST CURRENT OBJECT IMAGE WITH RESPECT TO IT'S *
|
||
* ANIMATION PNT. AND FLIP FLAGS *
|
||
* NOTE: CALL ONLY AFTER INITIALIZING WITH STFOBJ, OR SOMETHING. *
|
||
* A0 = PTR TO OBJECT BLOCK *
|
||
* A2 = NEW OYVAL *
|
||
* A3 = NEW OXVAL *
|
||
* A4 = NEW FLAGS *
|
||
* RETURNS *
|
||
* A2 = ADJUSTED OYVAL *
|
||
* A3 = ADJUSTED OXVAL *
|
||
* *
|
||
**************************************************************************
|
||
GANISAG
|
||
MMTM SP,A1,A4,A6,A7
|
||
MMTM SP,A2,A3
|
||
MOVE *A0(OIMG),A1,L
|
||
CALLR GSAGOF
|
||
MOVE A3,*A0(OSAG),L
|
||
MOVE A2,*A0(OSIZE),L
|
||
MOVE A4,*A0(OFLAGS),L
|
||
CALLR GANIOF
|
||
MMFM SP,A2,A3
|
||
SUB A6,A3
|
||
SUB A7,A2 ;ADJUST UPPER LEFT CORNER
|
||
MOVE A3,*A0(OXVAL),L
|
||
MOVE A2,*A0(OYVAL),L
|
||
MMFM SP,A1,A4,A6,A7
|
||
RETS
|
||
|
||
STRTOBJ STRTOBJ
|
||
|
||
Description: Create an object using an initialization table
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A0 ---> object block
|
||
A14 --> initialization table
|
||
|
||
Returns: A14 --> end of the initialization table
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
**************************************************************************
|
||
* *
|
||
* STRTOBJ - START AN OBJECT USING AN INITIALIZATION TABLE *
|
||
* A0 = PTR TO THE IMAGE *
|
||
* A14 = PTR TO INIT. TABLE *
|
||
* *
|
||
* START OBJECT INIT. TABLE FORMAT *
|
||
* .WORD X,Y,Z *
|
||
* .LONG OIMG,OZSIZ,OCVECT *
|
||
* .WORD OFLAGS,OID *
|
||
* *
|
||
* RETURNS A14 = POINTING TO WORD AFTER INIT TAB *
|
||
* *
|
||
**************************************************************************
|
||
STRTOBJ
|
||
MMTM SP,A1,A2,A3,A4,A6,A7,A9,A10
|
||
MOVE *A14+,A9,W ;GET OXPOS
|
||
SLL 16,A9 ;CONVERT TO OXVAL
|
||
MOVE *A14+,A10,W ;GET OYPOS
|
||
SLL 16,A10 ;CONVERT TO OYVAL
|
||
MOVE *A14+,A1,W
|
||
MOVE A1,*A0(OZPOS),W
|
||
JRUC STFOBJ0
|
||
|
||
GSAGOF GSAGOF
|
||
|
||
Description: Get SAG for an object
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A1 --> OIMG
|
||
A4 = flags
|
||
|
||
Returns: A2 = new OSIZE
|
||
A3 = new SAG
|
||
A4 = new offset:flags
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
GSAGOF:
|
||
MMTM SP,A5,A6,A7
|
||
ZEXT A4,W ;ZERO OFFSET IN A4
|
||
MOVE *A1(ISAG),A3,L ;GET TOP LEFT SAG
|
||
MOVE *A1(ISIZE),A2,L
|
||
CLR A5
|
||
MOVX A2,A5
|
||
ADDK 3,A5 ;ADJUST HOR SIZE FOR MORSEL
|
||
SRL 2,A5
|
||
SLL 2,A5
|
||
MOVX A5,A2
|
||
SLL 3,A5 ;ADJUST FOR BYTE ADDRESS
|
||
|
||
*HORIZONTAL FLIP CASE
|
||
GSAGH:
|
||
BTST B_FLIPH,A4
|
||
JREQ GSAGV ;NO H FLIP, TRY VERT FLIP
|
||
MOVE A5,A6
|
||
SUBK 8,A6
|
||
ADD A6,A3 ;ADD THS-1 TO SAG
|
||
|
||
MOVX A2,A6
|
||
SLL 1,A6
|
||
DEC A6 ;2*THS-1 TO OFFSET
|
||
SLL 16,A6 ;ADJUST FOR B16-31
|
||
ADDXY A6,A4
|
||
|
||
*VERTICAL FLIP CASE
|
||
GSAGV:
|
||
BTST B_FLIPV,A4
|
||
JREQ GSAGX ;NO VERT FLIP
|
||
MOVY A2,A6 ;GET HEIGHT
|
||
SRL 16,A6
|
||
DEC A6 ;FIRST ENTRY LAST ROW
|
||
MOVE A5,A7 ;GET THS
|
||
MPYS A6,A7 ;THS*(TVS-1)
|
||
ADD A7,A3 ;ADD TO SAG
|
||
|
||
MOVX A2,A6
|
||
SLL 1,A6
|
||
NEG A6 ;-2*THS
|
||
SLL 16,A6 ;ADJUST FOR B16-31
|
||
ADDXY A6,A4 ;ADD TO OFFSET
|
||
GSAGX:
|
||
MMFM SP,A5,A6,A7
|
||
RETS
|
||
|
||
ANI ANI
|
||
|
||
Description: Animation Subroutine
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A1 = new image pointer
|
||
A4 = new flags
|
||
A8 = object structure to be updated
|
||
|
||
Returns: none
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
ANI0: ;ENTRY FOR NO REPEAT CHECK
|
||
MMTM SP,A0,A2,A3,A4,A5,A6,A7,A9,A11
|
||
CLR A11
|
||
MOVE *A8(OFLAGS),A5,W
|
||
MOVE *A8(OIMG),A2,L
|
||
JRUC ANIG1
|
||
ANI:
|
||
MMTM SP,A0,A2,A3,A4,A5,A6,A7,A9,A11
|
||
CLR A11
|
||
ANIG
|
||
MOVE *A8(OFLAGS),A5,W
|
||
MOVE *A8(OIMG),A3,L
|
||
CMP A1,A3
|
||
JRNE ANIG1 ; BR = NOT THE SAME IMAGE AS LAST TIME
|
||
|
||
ZEXT A4
|
||
ZEXT A5
|
||
CMP A4,A5
|
||
JREQ ANIG2 ;BR = EVERY THING IS THE SAME
|
||
ANIG1
|
||
SWAP A4,A5
|
||
SWAP A1,A3
|
||
MOVE *A8(OSIZE),A2,L
|
||
CALLR GANIOF ;GET OLD ANIMATION OFFSET
|
||
MMTM SP,A6,A7
|
||
MOVE A5,A4 ;NEW OFLAGS
|
||
MOVE A3,A1 ;NEW OIMG
|
||
|
||
CALLR GSAGOF ;GET SAG, OFFSET, HW
|
||
CALLR GANIOF ;GET NEW ANIMATION OFFSET
|
||
MMFM SP,A0,A5 ;BRING BACK OLD ANIMATION DELTA
|
||
SUB A6,A0 ;SUBTRACT NEW FROM OLD
|
||
SUB A7,A5
|
||
|
||
MOVE A8,A9 ;GET PUSH ADDRESS OF OFLAGS,OSAG,OSIZE
|
||
ADDI OFLAGS+>60,A9
|
||
CLR A7
|
||
MOVE A7,*A8(OXCLIP),W ;CLEAR PRECLIP
|
||
MMTM A9,A2,A3,A4 ;BLOW THIS STUFF OUT
|
||
MOVE A1,*A8(OIMG),L
|
||
|
||
MOVE *A8(OYVAL),A6,L
|
||
ADD A5,A6 ;ADJUST OYVAL, OXVAL FOR DELTA X
|
||
MOVE A6,*A8(OYVAL),L
|
||
MOVE *A8(OXVAL),A7,L
|
||
ADD A0,A7
|
||
MOVE A7,*A8(OXVAL),L
|
||
|
||
MOVE *A8(OSHAD),A0,L
|
||
JREQ ANINSHD ;BR = NO SHADOWS HERE
|
||
|
||
MOVE A11,A11 ;CHECK A11
|
||
JREQ ANISHAD
|
||
CALLR SHADCPY2 ;SHADOW FOR PART 2
|
||
JRUC ANINSHD
|
||
ANISHAD
|
||
CALLR SHADCPY ;SHADOW FOR PART 1
|
||
ANINSHD
|
||
ANIGX
|
||
MMFM SP,A0,A2,A3,A4,A5,A6,A7,A9,A11
|
||
RETS
|
||
|
||
ANIG2
|
||
MOVE *A8(OSHAD),A0,L
|
||
JREQ ANINSHD ;BR = NO SHADOWS HERE
|
||
|
||
* MOVE *A8(OZVEL),*A0(OYVEL),L
|
||
MOVE *A8(OZVEL),*A0(OZVEL),L
|
||
MOVE *A8(OXVEL),*A0(OXVEL),L ;COPY JUST THE VELOCITIES
|
||
|
||
JRUC ANIGX
|
||
|
||
GETANIXY GETANIXY
|
||
|
||
Description: Get the X and Y positions of an objects animation point
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A8 --> object block
|
||
|
||
Returns: A2 = animation point X value
|
||
A3 = animation point Y value
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GETANIXY - GET THE X AND Y POSITIONS OF AN OBJECTS ANIMATION *
|
||
* POINT. *
|
||
* A8 = OBLOCK PTR. *
|
||
* RETURNS *
|
||
* A2 = APOINT OYVAL, 32 BITS *
|
||
* A3 = APOINT OXVAL, 32 BITS *
|
||
* *
|
||
**************************************************************************
|
||
GETANIXY
|
||
MMTM SP,A1,A4,A6,A7
|
||
MOVE *A8(OIMG),A1,L
|
||
MOVE *A8(OSIZE),A2,L
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLR GANIOF
|
||
MOVE *A8(OXVAL),A3,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
ADD A6,A3
|
||
ADD A7,A2
|
||
MMFM SP,A1,A4,A6,A7
|
||
RETS
|
||
|
||
GANIOF GANIOF
|
||
|
||
Description: Get animation offset
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Input: A1 = OIMG
|
||
A2 = H:W
|
||
A4 = OFLAGS
|
||
|
||
Returns: A6 = X animation offset*64k
|
||
A7 = Y animation offset*64k
|
||
|
||
Found in: NDSP1.ASM
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Comments:
|
||
|
||
*
|
||
*GET ANIMATION OFFSET
|
||
*A1=OIMG, A2=H:W, A4=OFLAGS
|
||
*
|
||
*OUTPUT:
|
||
*A6=X ANIMATION OFFSET X 64K
|
||
*A7=Y ANIMATION OFFSET X 64K
|
||
GANIOF:
|
||
MMTM SP,A2,A3
|
||
MOVE *A1(IANIOFF),A6,L
|
||
CLR A7 ;MAKE SURE A7 IS 0
|
||
MOVY A6,A7
|
||
SLL 16,A6 ;MOVE TO UPPER WORD
|
||
SUBI >00010001,A2 ;ADJUST FOR -1
|
||
CLR A3
|
||
MOVY A2,A3
|
||
SLL 16,A2 ;MOVE TO UPPER WORD
|
||
BTST B_FLIPH,A4
|
||
JRZ GANI1
|
||
NEG A6
|
||
ADD A2,A6 ;SUB THS-1 FOR H-FLIP
|
||
GANI1:
|
||
BTST B_FLIPV,A4
|
||
JRZ GANI2
|
||
NEG A7
|
||
ADD A3,A7 ;SUB TVS-1 FOR V-FLIP
|
||
GANI2:
|
||
MMFM SP,A2,A3
|
||
RETS
|
||
|