Skip to content

Latest commit

 

History

History
272 lines (206 loc) · 8.84 KB

File metadata and controls

272 lines (206 loc) · 8.84 KB
#ifndef	GRAPHICS_GELS_H
#define	GRAPHICS_GELS_H
/*
**	$Filename: graphics/gels.h $
**	$Release: 2.04 Includes, V37.4 $
**	$Revision: 37.0 $
**	$Date: 91/01/07 $
**
**	include file for AMIGA GELS (Graphics Elements)
**
**	(C) Copyright 1985-1999 Amiga, Inc.
**	    All Rights Reserved
*/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

/* VSprite flags */
/* user-set VSprite flags: */
#define SUSERFLAGS  0x00FF    /* mask of all user-settable VSprite-flags */
#define VSPRITE     0x0001    /* set if VSprite, clear if Bob */
#define SAVEBACK    0x0002    /* set if background is to be saved/restored */
#define OVERLAY     0x0004    /* set to mask image of Bob onto background */
#define MUSTDRAW    0x0008    /* set if VSprite absolutely must be drawn */
/* system-set VSprite flags: */
#define BACKSAVED   0x0100    /* this Bob's background has been saved */
#define BOBUPDATE   0x0200    /* temporary flag, useless to outside world */
#define GELGONE     0x0400    /* set if gel is completely clipped (offscreen) */
#define VSOVERFLOW  0x0800    /* VSprite overflow (if MUSTDRAW set we draw!) */

/* Bob flags */
/* these are the user flag bits */
#define BUSERFLAGS  0x00FF    /* mask of all user-settable Bob-flags */
#define SAVEBOB     0x0001    /* set to not erase Bob */
#define BOBISCOMP   0x0002    /* set to identify Bob as AnimComp */
/* these are the system flag bits */
#define BWAITING    0x0100    /* set while Bob is waiting on 'after' */
#define BDRAWN	    0x0200    /* set when Bob is drawn this DrawG pass*/
#define BOBSAWAY    0x0400    /* set to initiate removal of Bob */
#define BOBNIX	    0x0800    /* set when Bob is completely removed */
#define SAVEPRESERVE 0x1000   /* for back-restore during double-buffer*/
#define OUTSTEP     0x2000    /* for double-clearing if double-buffer */

/* defines for the animation procedures */
#define ANFRACSIZE  6
#define ANIMHALF    0x0020
#define RINGTRIGGER 0x0001


/* UserStuff definitions
*  the user can define these to be a single variable or a sub-structure
*  if undefined by the user, the system turns these into innocuous variables
*  see the manual for a thorough definition of the UserStuff definitions
*
*/
#ifndef VUserStuff	      /* VSprite user stuff */
#define VUserStuff WORD
#endif

#ifndef BUserStuff	      /* Bob user stuff */
#define BUserStuff WORD
#endif

#ifndef AUserStuff	      /* AnimOb user stuff */
#define AUserStuff WORD
#endif




/*********************** GEL STRUCTURES ***********************************/

struct VSprite
{
/* --------------------- SYSTEM VARIABLES ------------------------------- */
/* GEL linked list forward/backward pointers sorted by y,x value */
struct VSprite   *NextVSprite;
struct VSprite   *PrevVSprite;

/* 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
*/
struct VSprite   *DrawPath;     /* pointer of overlay drawing */
struct VSprite   *ClearPath;    /* 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 OldY, OldX;	      /* previous position */

/* --------------------- COMMON VARIABLES --------------------------------- */
WORD Flags;	      /* VSprite flags */


/* --------------------- USER VARIABLES ----------------------------------- */
/* the VSprite positions are defined in (y,x) order to make sorting
*  sorting easier, since (y,x) as a long integer
*/
WORD Y, X;		      /* screen position */

WORD Height;
WORD Width;	      /* number of words per row of image data */
WORD Depth;	      /* number of planes of data */

WORD MeMask;	      /* which types can collide with this VSprite*/
WORD HitMask;	      /* which types this VSprite can collide with*/

WORD *ImageData;	      /* pointer to VSprite image */

/* borderLine is the one-dimensional logical OR of all
*  the VSprite bits, used for fast collision detection of edge
*/
WORD *BorderLine;	      /* logical OR of all VSprite bits */
WORD *CollMask;	      /* similar to above except this is a matrix */

/* pointer to this VSprite's color definitions (not used by Bobs) */
WORD *SprColors;

struct Bob *VSBob;	      /* 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 PlanePick;
BYTE PlaneOnOff;

VUserStuff VUserExt;      /* user definable:  see note above */
};

struct Bob
/* blitter-objects */
{
/* --------------------- SYSTEM VARIABLES --------------------------------- */

/* --------------------- COMMON VARIABLES --------------------------------- */
WORD Flags;	/* general purpose flags (see definitions below) */

/* --------------------- USER VARIABLES ----------------------------------- */
WORD *SaveBuffer;	/* pointer to the buffer for background save */

/* used by Bobs for "cookie-cutting" and multi-plane masking */
WORD *ImageShadow;

/* pointer to BOBs for sequenced drawing of Bobs
*  for correct overlaying of multiple component animations
*/
struct Bob *Before; /* draw this Bob before Bob pointed to by before */
struct Bob *After;	/* draw this Bob after Bob pointed to by after */

struct VSprite   *BobVSprite;   /* this Bob's VSprite definition */

struct AnimComp  *BobComp;	    /* pointer to this Bob's AnimComp def */

struct DBufPacket *DBuffer;     /* pointer to this Bob's dBuf packet */

BUserStuff BUserExt;	    /* Bob user extension */
};

struct AnimComp
{
/* --------------------- SYSTEM VARIABLES --------------------------------- */

/* --------------------- COMMON VARIABLES --------------------------------- */
WORD Flags;		    /* 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 Timer;

/* --------------------- USER VARIABLES ----------------------------------- */
/* initial value for timer when the AnimComp is activated by the system */
WORD TimeSet;

/* pointer to next and previous components of animation object */
struct AnimComp  *NextComp;
struct AnimComp  *PrevComp;

/* pointer to component component definition of next image in sequence */
struct AnimComp  *NextSeq;
struct AnimComp  *PrevSeq;

WORD (*AnimCRoutine)(); /* address of special animation procedure */

WORD YTrans;     /* initial y translation (if this is a component) */
WORD XTrans;     /* initial x translation (if this is a component) */

struct AnimOb    *HeadOb;

struct Bob	     *AnimBob;
};

struct AnimOb
{
/* --------------------- SYSTEM VARIABLES --------------------------------- */
struct AnimOb    *NextOb, *PrevOb;

/* number of calls to Animate this AnimOb has endured */
LONG Clock;

WORD AnOldY, AnOldX;	    /* old y,x coordinates */

/* --------------------- COMMON VARIABLES --------------------------------- */
WORD AnY, AnX;		    /* y,x coordinates of the AnimOb */

/* --------------------- USER VARIABLES ----------------------------------- */
WORD YVel, XVel;		    /* velocities of this object */
WORD YAccel, XAccel;	    /* accelerations of this object */

WORD RingYTrans, RingXTrans;    /* ring translation values */

WORD (*AnimORoutine)();	    /* address of special animation
procedure */

struct AnimComp  *HeadComp;     /* pointer to first component */

AUserStuff AUserExt;	    /* AnimOb user extension */
};

/* dBufPacket defines the values needed to be saved across buffer to buffer
*  when in double-buffer mode
*/
struct DBufPacket
{
WORD BufY, BufX;		    /* save the other buffers screen coordinates */
struct VSprite   *BufPath;	    /* carry the draw path over the gap */

/* these pointers must be filled in by the user */
/* pointer to other buffer's background save buffer */
WORD *BufBuffer;
};



/* ************************************************************************ */

/* 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
*/
#define InitAnimate(animKey) {*(animKey) = NULL;}
#define RemBob(b) {(b)->Flags |= BOBSAWAY;}


/* ************************************************************************ */

#define B2NORM	    0
#define B2SWAP	    1
#define B2BOBBER    2

/* ************************************************************************ */

/* a structure to contain the 16 collision procedure addresses */
struct collTable
{
int (*collPtrs[16])();
};

#endif	/* GRAPHICS_GELS_H */