	IFND	GRAPHICS_GELS_I
GRAPHICS_GELS_I SET	1
**
**	$Filename: graphics/gels.i $
**	$Release: 1.3 $
**
**	include file for AMIGA GELS (Graphics Elements) 
**
**	(C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
**	    All Rights Reserved
**

*------ VS_vSflags ---------------------------------------------------

*   ;-- user-set vSprite flags --
SUSERFLAGS  EQU $00FF	      ; mask of all user-settable vSprite-flags
    BITDEF  VS,VSPRITE,0      ; set if vSprite, clear if bob
    BITDEF  VS,SAVEBACK,1     ; set if background is to be saved/restored
    BITDEF  VS,OVERLAY,2      ; set to mask image of bob onto background
    BITDEF  VS,MUSTDRAW,3     ; set if vSprite absolutely must be drawn
*   ;-- system-set vSprite flags --
    BITDEF  VS,BACKSAVED,8    ; this bob's background has been saved
    BITDEF  VS,BOBUPDATE,9    ; temporary flag, useless to outside world
    BITDEF  VS,GELGONE,10     ; set if gel is completely clipped (offscreen)
    BITDEF  VS,VSOVERFLOW,11  ; vSprite overflow (if MUSTDRAW set we draw!)


*------ B_flags ------------------------------------------------------
*   ;-- these are the user flag bits --
BUSERFLAGS  EQU $00FF	      ; mask of all user-settable bob-flags
    BITDEF  B,SAVEBOB,0	      ; set to not erase bob
    BITDEF  B,BOBISCOMP,1     ; set to identify bob as animComp
*   ;-- these are the system flag bits --
    BITDEF  B,BWAITING,8      ; set while bob is waiting on 'after'
    BITDEF  B,BDRAWN,9	      ; set when bob is drawn this DrawG pass
    BITDEF  B,BOBSAWAY,10     ; set to initiate removal of bob
    BITDEF  B,BOBNIX,11	      ; set when bob is completely removed
    BITDEF  B,SAVEPRESERVE,12 ; for back-restore during double-buffer
    BITDEF  B,OUTSTEP,13      ; for double-clearing if double-buffer


*------ defines for the animation procedures -------------------------

ANFRACSIZE  EQU 6
ANIMHALF    EQU $0020
RINGTRIGGER EQU $0001

*------ macros --------------------------------------------------------
* these are GEL functions that are currently simple enough to exist as a
* definition.  It should not be assumed that this will always be the case

InitAnimate MACRO   * &animKey
       CLR.L   \1
       ENDM


RemBob	    MACRO   * &b
       OR.W    #BF_BOBSAWAY,b_BobFlags+\1
       ENDM

*------ VS : vSprite -------------------------------------------------
 STRUCTURE  VS,0    ; vSprite
*   -- SYSTEM VARIABLES --
*   GEL linked list forward/backward pointers sorted by y,x value
    APTR    vs_NextVSprite    ; struct *vSprite
    APTR    vs_PrevVSprite    ; struct *vSprite
*   GEL draw list constructed in the order the bobs are actually drawn, then
*   list is copied to clear list
*   must be here in vSprite for system boundary detection
    APTR    vs_DrawPath	      ; struct *vSprite: pointer of overlay drawing
    APTR    vs_ClearPath      ; struct *vSprite: pointer for overlay clearing
*   the vSprite positions are defined in (y,x) order to make sorting
*   sorting easier, since (y,x) as a long integer
    WORD    vs_Oldy	      ; previous position
    WORD    vs_Oldx	      ;
*   -- COMMON VARIABLES --
    WORD    vs_VSFlags	      ; vSprite flags
*   -- USER VARIABLES --
*    the vSprite positions are defined in (y,x) order to make sorting
*    easier, since (y,x) as a long integer
    WORD    vs_Y	      ; screen position
    WORD    vs_X
    WORD    vs_Height
    WORD    vs_Width	      ; number of words per row of image data
    WORD    vs_Depth	      ; number of planes of data
    WORD    vs_MeMask	      ; which types can collide with this vSprite
    WORD    vs_HitMask	      ; which types this vSprite can collide with
    APTR    vs_ImageData      ; *WORD pointer to vSprite image
*    borderLine is the one-dimensional logical OR of all
*    the vSprite bits, used for fast collision detection of edge
    APTR    vs_BorderLine     ; *WORD: logical OR of all vSprite bits
    APTR    vs_CollMask	      ; *WORD: similar to above except this is a 
*    matrix pointer to this vSprite's color definitions (not used by bobs)
    APTR    vs_SprColors      ; *WORD
    APTR    vs_VSBob	      ; struct *bob: points home if this vSprite is 
			      ;	 part of a bob
*    planePick flag:  set bit selects a plane from image, clear bit selects
*	  use of shadow mask for that plane
*    OnOff flag: if using shadow mask to fill plane, this bit (corresponding
*	  to bit in planePick) describes whether to fill with 0's or 1's
*    There are two uses for these flags:
*	       - if this is the vSprite of a bob, these flags describe how 
*		 the bob is to be drawn into memory
*	       - if this is a simple vSprite and the user intends on setting 
*		 the MUSTDRAW flag of the vSprite, these flags must be set 
*		 too to describe which color registers the user wants for 
*		 the image
    BYTE    vs_PlanePick
    BYTE    vs_PlaneOnOff
    LABEL   vs_SUserExt	      ; user definable
    LABEL   vs_SIZEOF


*------ BOB : bob ------------------------------------------------------

 STRUCTURE  BOB,0     ; bob: blitter object
*   -- COMMON VARIABLES --
    WORD    bob_BobFlags      ; general purpose flags (see definitions below)
*   -- USER VARIABLES --
    APTR    bob_SaveBuffer    ; *WORD pointer to the buffer for background 
*    save used by bobs for "cookie-cutting" and multi-plane masking
    APTR    bob_ImageShadow   ; *WORD
*    pointer to BOBs for sequenced drawing of bobs
*      for correct overlaying of multiple component animations
    APTR    bob_Before	      ; struct *bob: draw this bob before bob pointed
			      ; to by before
    APTR    bob_After	      ; struct *bob: draw this bob after bob pointed
			      ; to by after
    APTR    bob_BobVSprite    ; struct *vSprite: this bob's vSprite definition
    APTR    bob_BobComp	      ; struct *animComp: pointer to this bob's 
			      ; animComp def
    APTR    bob_DBuffer	      ; struct dBufPacket: pointer to this bob's 
			      ; dBuf packet
    LABEL   bob_BUserExt      ; bob user extension
    LABEL   bob_SIZEOF

*------ AC : animComp ------------------------------------------------

 STRUCTURE  AC,0    ; animComp
*   -- COMMON VARIABLES --
    WORD    ac_CompFlags      ; animComp flags for system & user
*    timer defines how long to keep this component active:
*      if set non-zero, timer decrements to zero then switches to nextSeq
*      if set to zero, animComp never switches
    WORD    ac_Timer
*   -- USER VARIABLES --
*    initial value for timer when the animComp is activated by the system
    WORD    ac_TimeSet
*    pointer to next and previous components of animation object
    APTR    ac_NextComp	      ; struct *animComp
    APTR    ac_PrevComp	      ; struct *animComp
*    pointer to component component definition of next image in sequence
    APTR    ac_NextSeq	      ; struct *animComp
    APTR    ac_PrevSeq	      ; struct *animComp
    APTR    ac_AnimCRoutine   ; address of special animation procedure
    WORD    ac_YTrans	      ; initial y translation (if this is a component)
    WORD    ac_XTrans	      ; initial x translation (if this is a component)
    APTR    ac_HeadOb	      ; struct *animOb
    APTR    ac_AnimBob	      ; struct *bob
    LABEL   ac_SIZE

*------ AO : animOb --------------------------------------------------

 STRUCTURE  AO,0    ; animOb
*   -- SYSTEM VARIABLES --
    APTR    ao_NextOb	      ; struct *animOb
    APTR    ao_PrevOb	      ; struct *animOb
*    number of calls to Animate this animOb has endured
    LONG    ao_Clock
    WORD    ao_AnOldY	      ; old y,x coordinates
    WORD    ao_AnOldX	      ;
*   -- COMMON VARIABLES --
    WORD    ao_AnY	      ; y,x coordinates of the animOb
    WORD    ao_AnX	      ;
*   -- USER VARIABLES --
    WORD    ao_YVel	      ; velocities of this object
    WORD    ao_XVel	      ;
    WORD    ao_XAccel	      ; accelerations of this object
    WORD    ao_YAccel	      ;	  !!! backwards !!!
    WORD    ao_RingYTrans     ; ring translation values
    WORD    ao_RingXTrans     ;
    APTR    ao_AnimORoutine   ; address of special animation procedure
    APTR    ao_HeadComp	      ; struct *animComp: pointer to first component
    LABEL   ao_AUserExt	      ; animOb user extension
    LABEL   ao_SIZEOF


*------ DBP : dBufPacket ---------------------------------------------
* dBufPacket defines the values needed to be saved across buffer to buffer
*   when in double-buffer mode

 STRUCTURE  DBP,0	      ; dBufPacket
    WORD    dbp_BufY	      ; save the other buffers screen coordinates
    WORD    dbp_BufX	      ;
    APTR    dbp_BufPath	      ; struct *vSprite: carry the draw path over
			      ; the gap
*    these pointers must be filled in by the user
*    pointer to other buffer's background save buffer
    APTR    dbp_BufBuffer     ; *WORD
*    pointer to other buffer's background plane pointers
    APTR    dbp_BufPlanes     ; **WORD
    LABEL   dbp_SIZEOF

	ENDC	; GRAPHICS_GELS_I
