home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMIGA PD 1
/
AMIGA-PD-1.iso
/
Programme_zum_Heft
/
Programmieren
/
Kurztests
/
PascalPCQ
/
Include
/
Graphics
/
GELS.i
< prev
next >
Wrap
Text File
|
1991-06-10
|
10KB
|
353 lines
{
GELS.i for PCQ Pascal
include file for AMIGA GELS (Graphics Elements)
}
const
{ VSprite flags }
{ user-set VSprite flags: }
SUSERFLAGS = $00FF; { mask of all user-settable VSprite-flags }
VSPRITE_f = $0001; { set if VSprite, clear if Bob }
{ VSPRITE had to be changed for name conflict }
SAVEBACK = $0002; { set if background is to be saved/restored }
OVERLAY = $0004; { set to mask image of Bob onto background }
MUSTDRAW = $0008; { set if VSprite absolutely must be drawn }
{ system-set VSprite flags: }
BACKSAVED = $0100; { this Bob's background has been saved }
BOBUPDATE = $0200; { temporary flag, useless to outside world }
GELGONE = $0400; { set if gel is completely clipped (offscreen) }
VSOVERFLOW = $0800; { VSprite overflow (if MUSTDRAW set we draw!) }
{ Bob flags }
{ these are the user flag bits }
BUSERFLAGS = $00FF; { mask of all user-settable Bob-flags }
SAVEBOB = $0001; { set to not erase Bob }
BOBISCOMP = $0002; { set to identify Bob as AnimComp }
{ these are the system flag bits }
BWAITING = $0100; { set while Bob is waiting on 'after' }
BDRAWN = $0200; { set when Bob is drawn this DrawG pass}
BOBSAWAY = $0400; { set to initiate removal of Bob }
BOBNIX = $0800; { set when Bob is completely removed }
SAVEPRESERVE = $1000; { for back-restore during double-buffer}
OUTSTEP = $2000; { for double-clearing if double-buffer }
{ defines for the animation procedures }
ANFRACSIZE = 6;
ANIMHALF = $0020;
RINGTRIGGER = $0001;
{ 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
*
Note: because PCQ Pascal has no equivalent to #ifdef, these
will have to be redefined some other way.
}
type
VUserStuff = SHORT; { Sprite user stuff }
BUserStuff = SHORT; { Bob user stuff }
AUserStuff = SHORT; { AnimOb user stuff }
{********************** GEL STRUCTURES **********************************}
VSprite = Record
{
{ --------------------- SYSTEM VARIABLES ------------------------------- }
{ GEL linked list forward/backward pointers sorted by y,x value }
NextVSprite : ^VSprite;
PrevVSprite : ^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
}
DrawPath : ^VSprite; { pointer of overlay drawing }
ClearPath : ^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
}
OldY, OldX : Short; { previous position }
{ --------------------- COMMON VARIABLES --------------------------------- }
Flags : Short; { 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
}
Y, X : Short; { screen position }
Height : Short;
Width : Short; { number of words per row of image data }
Depth : Short; { number of planes of data }
MeMask : Short; { which types can collide with this VSprite}
HitMask : Short; { which types this VSprite can collide with}
ImageData : Address; { pointer to VSprite image }
{ borderLine is the one-dimensional logical OR of all
* the VSprite bits, used for fast collision detection of edge
}
BorderLine : Address; { logical OR of all VSprite bits }
CollMask : Address; { similar to above except this is a matrix }
{ pointer to this VSprite's color definitions (not used by Bobs) }
SprColors : Address;
VSBob : Address; { (BobPtr) 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
}
PlanePick : Byte;
PlaneOnOff : Byte;
VUserExt : VUserStuff; { user definable: see note above }
end;
VSpritePtr = ^VSprite;
{ dBufPacket defines the values needed to be saved across buffer to buffer
* when in double-buffer mode
}
DBufPacket = record
BufY,
BufX : Short; { save other buffers screen coordinates }
BufPath : VSpritePtr; { carry the draw path over the gap }
{ these pointers must be filled in by the user }
{ pointer to other buffer's background save buffer }
BufBuffer : Address;
end;
DBufPacketPtr = ^DBufPacket;
Bob = record
{ blitter-objects }
{
{ --------------------- SYSTEM VARIABLES --------------------------------- }
{ --------------------- COMMON VARIABLES --------------------------------- }
Flags : Short; { general purpose flags (see definitions below) }
{ --------------------- USER VARIABLES ----------------------------------- }
SaveBuffer : Address; { pointer to the buffer for background save }
{ used by Bobs for "cookie-cutting" and multi-plane masking }
ImageShadow : Address;
{ pointer to BOBs for sequenced drawing of Bobs
* for correct overlaying of multiple component animations
}
Before : ^Bob; { draw this Bob before Bob pointed to by before }
After : ^Bob; { draw this Bob after Bob pointed to by after }
BobVSprite : VSpritePtr; { this Bob's VSprite definition }
BobComp : Address; { (AnimCompPtr) pointer to this Bob's AnimComp def }
DBuffer : DBufPacketPtr; { pointer to this Bob's dBuf packet }
BUserExt : BUserStuff; { Bob user extension }
end;
BobPtr = ^Bob;
AnimComp = record
{
{ --------------------- SYSTEM VARIABLES --------------------------------- }
{ --------------------- COMMON VARIABLES --------------------------------- }
Flags : Short; { 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
}
Timer : Short;
{ --------------------- USER VARIABLES ----------------------------------- }
{ initial value for timer when the AnimComp is activated by the system }
TimeSet : Short;
{ pointer to next and previous components of animation object }
NextComp : ^AnimComp;
PrevComp : ^AnimComp;
{ pointer to component component definition of next image in sequence }
NextSeq : ^AnimComp;
PrevSeq : ^AnimComp;
AnimCRoutine : Address; { address of special animation procedure }
YTrans : Short; { initial y translation (if this is a component) }
XTrans : Short; { initial x translation (if this is a component) }
HeadOb : Address; { AnimObPtr }
AnimBob : BobPtr;
end;
AnimCompPtr = ^AnimComp;
AnimOb = record
{
{ --------------------- SYSTEM VARIABLES --------------------------------- }
NextOb,
PrevOb : ^AnimOb;
{ number of calls to Animate this AnimOb has endured }
Clock : Integer;
AnOldY,
AnOldX : Short; { old y,x coordinates }
{ --------------------- COMMON VARIABLES --------------------------------- }
AnY,
AnX : Short; { y,x coordinates of the AnimOb }
{ --------------------- USER VARIABLES ----------------------------------- }
YVel,
XVel : Short; { velocities of this object }
YAccel,
XAccel : Short; { accelerations of this object }
RingYTrans,
RingXTrans : Short; { ring translation values }
AnimORoutine : Address; { address of special animation
procedure }
HeadComp : AnimCompPtr; { pointer to first component }
AUserExt : AUserStuff; { AnimOb user extension }
end;
AnimObPtr = ^AnimOb;
{ ************************************************************************ }
const
B2NORM = 0;
B2SWAP = 1;
B2BOBBER = 2;
{ ************************************************************************ }
type
{ a structure to contain the 16 collision procedure addresses }
collTable = Array [0..15] of Address;
collTablePtr = ^collTable;
Procedure AddAnimOb(anOb, anKey : AnimObPtr; rp : Address);
External; { rp is a RastPortPtr }
Procedure AddBob(Bob : BobPtr; rp : Address); { rp is a RastPortPtr }
External;
Procedure AddVSprite(vs : VSpritePtr; rp : Address); { rp is a RastPortPtr }
External;
Procedure Animate(anKey : AnimObPtr; rp : Address); { rp is a RastPortPtr }
External;
Procedure DoCollision(rp : Address); { rp is a RastPortPtr }
External;
Procedure DrawGList(rp : Address; vp : Address);
External; { rp is a RastPortPtr }
{ vp is a ViewPortPtr }
Procedure FreeGBuffers(anOb : AnimObPtr; rp : Address; db : Boolean);
External;
Function GetGBuffers(anOb : AnimObPtr; rp : Address; db : Boolean): Boolean;
External;
Procedure InitGels(head, tail : VSpritePtr; GInfo : Address);
External; { GInfo is a GelsInfoPtr }
Procedure InitGMasks(anOb : AnimObPtr);
External;
Procedure InitMasks(vs : VSpritePtr);
External;
Procedure RemBob(bob : BobPtr);
External;
Procedure RemIBob(bob : BobPtr; rp : Address; vp : Address);
External; { rp is a RastPortPtr }
{ vp is a ViewPortPtr }
Procedure RemVSprite(vs : VSpritePtr);
External;
Procedure SetCollision(num : Integer; routine : Address; GInfo : Address);
External; { routine is a procedure }
{ GInfo is a GelsInfoPtr }
Procedure SortGList(rp : Address); { rp is a RastPortPtr }
External;