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 >
Text File  |  1991-06-10  |  10KB  |  353 lines

  1. {
  2.     GELS.i for PCQ Pascal
  3.  
  4.     include file for AMIGA GELS (Graphics Elements) 
  5. }
  6.  
  7.  
  8. const
  9.  
  10. { VSprite flags }
  11. { user-set VSprite flags: }
  12.  
  13.     SUSERFLAGS    = $00FF;    { mask of all user-settable VSprite-flags }
  14.     VSPRITE_f    = $0001;    { set if VSprite, clear if Bob }
  15.                 { VSPRITE had to be changed for name conflict }
  16.     SAVEBACK    = $0002;    { set if background is to be saved/restored }
  17.     OVERLAY    = $0004;    { set to mask image of Bob onto background }
  18.     MUSTDRAW    = $0008;    { set if VSprite absolutely must be drawn }
  19.  
  20. { system-set VSprite flags: }
  21.  
  22.     BACKSAVED    = $0100;    { this Bob's background has been saved }
  23.     BOBUPDATE    = $0200;    { temporary flag, useless to outside world }
  24.     GELGONE    = $0400;    { set if gel is completely clipped (offscreen) }
  25.     VSOVERFLOW    = $0800;    { VSprite overflow (if MUSTDRAW set we draw!) }
  26.  
  27. { Bob flags }
  28. { these are the user flag bits }
  29.  
  30.     BUSERFLAGS    = $00FF;    { mask of all user-settable Bob-flags }
  31.     SAVEBOB    = $0001;    { set to not erase Bob }
  32.     BOBISCOMP    = $0002;    { set to identify Bob as AnimComp }
  33.  
  34. { these are the system flag bits }
  35.  
  36.     BWAITING    = $0100;    { set while Bob is waiting on 'after' }
  37.     BDRAWN    = $0200;    { set when Bob is drawn this DrawG pass}
  38.     BOBSAWAY    = $0400;    { set to initiate removal of Bob }
  39.     BOBNIX    = $0800;    { set when Bob is completely removed }
  40.     SAVEPRESERVE = $1000;    { for back-restore during double-buffer}
  41.     OUTSTEP    = $2000;    { for double-clearing if double-buffer }
  42.  
  43. { defines for the animation procedures }
  44.  
  45.     ANFRACSIZE    = 6;
  46.     ANIMHALF    = $0020;
  47.     RINGTRIGGER    = $0001;
  48.  
  49.  
  50. { UserStuff definitions
  51.  *  the user can define these to be a single variable or a sub-structure
  52.  *  if undefined by the user, the system turns these into innocuous variables
  53.  *  see the manual for a thorough definition of the UserStuff definitions
  54.  *
  55.     Note: because PCQ Pascal has no equivalent to #ifdef, these
  56.     will have to be redefined some other way.
  57.  }
  58.  
  59. type
  60.     VUserStuff    = SHORT;    { Sprite user stuff }
  61.     BUserStuff    = SHORT;    { Bob user stuff }
  62.     AUserStuff  = SHORT;    { AnimOb user stuff }
  63.  
  64.  
  65.  
  66.  
  67. {********************** GEL STRUCTURES **********************************}
  68.  
  69.     VSprite = Record
  70. {
  71. { --------------------- SYSTEM VARIABLES ------------------------------- }
  72. { GEL linked list forward/backward pointers sorted by y,x value }
  73.  
  74.     NextVSprite    : ^VSprite;
  75.     PrevVSprite    : ^VSprite;
  76.  
  77. { GEL draw list constructed in the order the Bobs are actually drawn, then
  78.  *  list is copied to clear list
  79.  *  must be here in VSprite for system boundary detection
  80.  }
  81.  
  82.     DrawPath    : ^VSprite;    { pointer of overlay drawing }
  83.     ClearPath    : ^VSprite;    { pointer for overlay clearing }
  84.  
  85. { the VSprite positions are defined in (y,x) order to make sorting
  86.  *  sorting easier, since (y,x) as a long integer
  87.  }
  88.  
  89.     OldY, OldX    : Short;    { previous position }
  90.  
  91. { --------------------- COMMON VARIABLES --------------------------------- }
  92.  
  93.     Flags        : Short;    { VSprite flags }
  94.  
  95.  
  96. { --------------------- USER VARIABLES ----------------------------------- }
  97. { the VSprite positions are defined in (y,x) order to make sorting
  98.  *  sorting easier, since (y,x) as a long integer
  99.  }
  100.  
  101.     Y, X        : Short;    { screen position }
  102.  
  103.     Height    : Short;
  104.     Width    : Short;    { number of words per row of image data }
  105.     Depth    : Short;    { number of planes of data }
  106.  
  107.     MeMask    : Short;    { which types can collide with this VSprite}
  108.     HitMask    : Short;    { which types this VSprite can collide with}
  109.  
  110.     ImageData    : Address;    { pointer to VSprite image }
  111.  
  112. { borderLine is the one-dimensional logical OR of all
  113.  *  the VSprite bits, used for fast collision detection of edge
  114.  }
  115.  
  116.     BorderLine    : Address; { logical OR of all VSprite bits }
  117.     CollMask    : Address; { similar to above except this is a matrix }
  118.  
  119. { pointer to this VSprite's color definitions (not used by Bobs) }
  120.  
  121.     SprColors    : Address;
  122.  
  123.     VSBob    : Address;    { (BobPtr) points home if this VSprite
  124.                    is part of a Bob }
  125.  
  126. { planePick flag:  set bit selects a plane from image, clear bit selects
  127.  *  use of shadow mask for that plane
  128.  * OnOff flag: if using shadow mask to fill plane, this bit (corresponding
  129.  *  to bit in planePick) describes whether to fill with 0's or 1's
  130.  * There are two uses for these flags:
  131.  *    - if this is the VSprite of a Bob, these flags describe how the Bob
  132.  *      is to be drawn into memory
  133.  *    - if this is a simple VSprite and the user intends on setting the
  134.  *      MUSTDRAW flag of the VSprite, these flags must be set too to describe
  135.  *      which color registers the user wants for the image
  136.  }
  137.  
  138.     PlanePick    : Byte;
  139.     PlaneOnOff    : Byte;
  140.  
  141.     VUserExt    : VUserStuff;    { user definable:  see note above }
  142.     end;
  143.     VSpritePtr = ^VSprite;
  144.  
  145.  
  146.  
  147.  
  148. { dBufPacket defines the values needed to be saved across buffer to buffer
  149.  *  when in double-buffer mode
  150.  }
  151.  
  152.     DBufPacket = record
  153.     BufY,
  154.     BufX    : Short;    { save other buffers screen coordinates }
  155.     BufPath    : VSpritePtr;    { carry the draw path over the gap }
  156.  
  157. { these pointers must be filled in by the user }
  158. { pointer to other buffer's background save buffer }
  159.  
  160.     BufBuffer : Address;
  161.     end;
  162.     DBufPacketPtr = ^DBufPacket;
  163.  
  164.  
  165.  
  166.  
  167.  
  168.     Bob = record
  169. { blitter-objects }
  170. {
  171. { --------------------- SYSTEM VARIABLES --------------------------------- }
  172.  
  173. { --------------------- COMMON VARIABLES --------------------------------- }
  174.  
  175.     Flags    : Short; { general purpose flags (see definitions below) }
  176.  
  177. { --------------------- USER VARIABLES ----------------------------------- }
  178.  
  179.     SaveBuffer : Address;    { pointer to the buffer for background save }
  180.  
  181. { used by Bobs for "cookie-cutting" and multi-plane masking }
  182.  
  183.     ImageShadow : Address;
  184.  
  185. { pointer to BOBs for sequenced drawing of Bobs
  186.  *  for correct overlaying of multiple component animations
  187.  }
  188.     Before    : ^Bob;    { draw this Bob before Bob pointed to by before }
  189.     After    : ^Bob;    { draw this Bob after Bob pointed to by after }
  190.  
  191.     BobVSprite : VSpritePtr;    { this Bob's VSprite definition }
  192.  
  193.     BobComp    : Address; { (AnimCompPtr) pointer to this Bob's AnimComp def }
  194.  
  195.     DBuffer    : DBufPacketPtr;    { pointer to this Bob's dBuf packet }
  196.  
  197.     BUserExt : BUserStuff;    { Bob user extension }
  198.     end;
  199.     BobPtr = ^Bob;
  200.  
  201.  
  202.     AnimComp = record
  203. {
  204. { --------------------- SYSTEM VARIABLES --------------------------------- }
  205.  
  206. { --------------------- COMMON VARIABLES --------------------------------- }
  207.  
  208.     Flags    : Short;    { AnimComp flags for system & user }
  209.  
  210. { timer defines how long to keep this component active:
  211.  *  if set non-zero, timer decrements to zero then switches to nextSeq
  212.  *  if set to zero, AnimComp never switches
  213.  }
  214.  
  215.     Timer    : Short;
  216.  
  217. { --------------------- USER VARIABLES ----------------------------------- }
  218. { initial value for timer when the AnimComp is activated by the system }
  219.  
  220.     TimeSet    : Short;
  221.  
  222. { pointer to next and previous components of animation object }
  223.  
  224.     NextComp    : ^AnimComp;
  225.     PrevComp    : ^AnimComp;
  226.  
  227. { pointer to component component definition of next image in sequence }
  228.  
  229.     NextSeq    : ^AnimComp;
  230.     PrevSeq    : ^AnimComp;
  231.  
  232.     AnimCRoutine : Address;    { address of special animation procedure }
  233.  
  234.     YTrans    : Short; { initial y translation (if this is a component) }
  235.     XTrans    : Short; { initial x translation (if this is a component) }
  236.  
  237.     HeadOb    : Address; { AnimObPtr }
  238.  
  239.     AnimBob    : BobPtr;
  240.     end;
  241.     AnimCompPtr = ^AnimComp;
  242.  
  243.  
  244.     AnimOb = record
  245. {
  246. { --------------------- SYSTEM VARIABLES --------------------------------- }
  247.  
  248.     NextOb,
  249.     PrevOb    : ^AnimOb;
  250.  
  251. { number of calls to Animate this AnimOb has endured }
  252.  
  253.     Clock    : Integer;
  254.  
  255.     AnOldY,
  256.     AnOldX    : Short;    { old y,x coordinates }
  257.  
  258. { --------------------- COMMON VARIABLES --------------------------------- }
  259.  
  260.     AnY,
  261.     AnX    : Short;    { y,x coordinates of the AnimOb }
  262.  
  263. { --------------------- USER VARIABLES ----------------------------------- }
  264.  
  265.     YVel,
  266.     XVel    : Short;    { velocities of this object }
  267.     YAccel,
  268.     XAccel    : Short;    { accelerations of this object }
  269.  
  270.     RingYTrans,
  271.     RingXTrans    : Short;    { ring translation values }
  272.  
  273.     AnimORoutine    : Address;    { address of special animation 
  274.                       procedure }
  275.  
  276.     HeadComp    : AnimCompPtr;    { pointer to first component }
  277.  
  278.     AUserExt    : AUserStuff;        { AnimOb user extension }
  279.     end;
  280.     AnimObPtr = ^AnimOb;
  281.  
  282.  
  283.  
  284. { ************************************************************************ }
  285.  
  286. const
  287.  
  288.     B2NORM    = 0;
  289.     B2SWAP    = 1;
  290.     B2BOBBER    = 2;
  291.  
  292. { ************************************************************************ }
  293.  
  294. type
  295.  
  296. { a structure to contain the 16 collision procedure addresses }
  297.  
  298.     collTable = Array [0..15] of Address;
  299.     collTablePtr = ^collTable;
  300.  
  301. Procedure AddAnimOb(anOb, anKey : AnimObPtr; rp : Address);
  302.     External;            { rp is a RastPortPtr }
  303.  
  304. Procedure AddBob(Bob : BobPtr; rp : Address); { rp is a RastPortPtr }
  305.     External;
  306.  
  307. Procedure AddVSprite(vs : VSpritePtr; rp : Address); { rp is a RastPortPtr }
  308.     External;
  309.  
  310. Procedure Animate(anKey : AnimObPtr; rp : Address); { rp is a RastPortPtr }
  311.     External;
  312.  
  313. Procedure DoCollision(rp : Address); { rp is a RastPortPtr }
  314.     External;
  315.  
  316. Procedure DrawGList(rp : Address; vp : Address);
  317.     External;    { rp is a RastPortPtr }
  318.         { vp is a ViewPortPtr }
  319.  
  320.  
  321. Procedure FreeGBuffers(anOb : AnimObPtr; rp : Address; db : Boolean);
  322.     External;
  323.  
  324. Function GetGBuffers(anOb : AnimObPtr; rp : Address; db : Boolean): Boolean;
  325.     External;
  326.  
  327. Procedure InitGels(head, tail : VSpritePtr; GInfo : Address);
  328.     External;    { GInfo is a GelsInfoPtr }
  329.  
  330. Procedure InitGMasks(anOb : AnimObPtr);
  331.     External;
  332.  
  333. Procedure InitMasks(vs : VSpritePtr);
  334.     External;
  335.  
  336. Procedure RemBob(bob : BobPtr);
  337.     External;
  338.  
  339. Procedure RemIBob(bob : BobPtr; rp : Address; vp : Address);
  340.     External;    { rp is a RastPortPtr }
  341.         { vp is a ViewPortPtr }
  342.  
  343. Procedure RemVSprite(vs : VSpritePtr);
  344.     External;
  345.  
  346. Procedure SetCollision(num : Integer; routine : Address; GInfo : Address);
  347.     External;    { routine is a procedure }
  348.         { GInfo is a GelsInfoPtr }
  349.  
  350. Procedure SortGList(rp : Address);    { rp is a RastPortPtr }
  351.     External;
  352.  
  353.