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
|
|||
|
|