#ifndef GRAPHICS_GELS_H
#define GRAPHICS_GELS_H
#define SUSERFLAGS  0x00FF
#define VSPRITE     0x0001
#define SAVEBACK    0x0002
#define OVERLAY     0x0004
#define MUSTDRAW    0x0008
#define BACKSAVED   0x0100
#define BOBUPDATE   0x0200
#define GELGONE     0x0400
#define VSOVERFLOW  0x0800
#define BUSERFLAGS  0x00FF
#define SAVEBOB     0x0001
#define BOBISCOMP   0x0002
#define BWAITING    0x0100
#define BDRAWN      0x0200
#define BOBSAWAY    0x0400
#define BOBNIX      0x0800
#define SAVEPRESERVE 0x1000
#define OUTSTEP     0x2000
#define ANFRACSIZE  6
#define ANIMHALF    0x0020
#define RINGTRIGGER 0x0001
#ifndef VUserStuff
#define VUserStuff SHORT
#endif
#ifndef BUserStuff
#define BUserStuff SHORT
#endif
#ifndef AUserStuff
#define AUserStuff SHORT
#endif
struct VSprite
{
    struct VSprite   *NextVSprite;
    struct VSprite   *PrevVSprite;
    struct VSprite   *DrawPath;
    struct VSprite   *ClearPath;
    WORD OldY, OldX;
    WORD Flags;
    WORD Y, X;
    WORD Height;
    WORD Width;
    WORD Depth;
    WORD MeMask;
    WORD HitMask;
    WORD *ImageData;
    WORD *BorderLine;
    WORD *CollMask;
    WORD *SprColors;
    struct Bob *VSBob;
    BYTE PlanePick;
    BYTE PlaneOnOff;
    VUserStuff VUserExt;
};
struct Bob
{
    WORD Flags;
    WORD *SaveBuffer;
    WORD *ImageShadow;
    struct Bob *Before;
    struct Bob *After;
    struct VSprite   *BobVSprite;
    struct AnimComp  *BobComp;
    struct DBufPacket *DBuffer;
    BUserStuff BUserExt;
};
struct AnimComp
{
    WORD Flags;
    WORD Timer;
    WORD TimeSet;
    struct AnimComp  *NextComp;
    struct AnimComp  *PrevComp;
    struct AnimComp  *NextSeq;
    struct AnimComp  *PrevSeq;
    WORD (*AnimCRoutine)();
    WORD YTrans;
    WORD XTrans;
    struct AnimOb    *HeadOb;
    struct Bob       *AnimBob;
};
struct AnimOb
{
    struct AnimOb    *NextOb, *PrevOb;
    LONG Clock;
    WORD AnOldY, AnOldX;
    WORD AnY, AnX;
    WORD YVel, XVel;
    WORD YAccel, XAccel;
    WORD RingYTrans, RingXTrans;
    WORD (*AnimORoutine)();
    struct AnimComp  *HeadComp;
    AUserStuff AUserExt;
};
struct DBufPacket
{
    WORD BufY, BufX;
    struct VSprite   *BufPath;
    WORD *BufBuffer;
};
#define InitAnimate(animKey) {*(animKey) = NULL;}
#define RemBob(b) {(b)->Flags |= BOBSAWAY;}
#define B2NORM      0
#define B2SWAP      1
#define B2BOBBER    2
struct collTable
{
    int (*collPtrs[16])();
};
#endif
