#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 */