/*
** AGA FloodFill Demo
** -------------------
**
** A demo of how you should use the FLOOD raster command.
**
** To exit the demo, press the left mouse button.
*/

#include <exec/memory.h>
#include <proto/games.h>
#include <proto/exec.h>

struct GMSBase *GMSBase;
extern struct ExecBase *SysBase;

#define AMT_PLANES 7

ULONG Palette[] =
{
  0x000000,0xFFFFFF,0xFAF5F2,0xFAE8E7,0xEEDED5,0xE8D4C8,0xDDC0AF,0xD7B5A2,
  0xD1AC96,0xDCA491,0xCBA38B,0xC5997E,0xBD8E74,0xB5846A,0xAD7A5F,0xA57056,
  0x9D674D,0x955D44,0x8C533B,0x844B34,0x7C432D,0x743B26,0x6C3320,0x642D1B,
  0x5C2616,0x532010,0x4A1D0C,0x411A09,0x381606,0x2F1204,0x260F02,0x1D0C00,
  0xAC783A,0xA67139,0xA06C39,0x986638,0x995F36,0x906037,0x8C5C36,0x945733,
  0x865735,0x905030,0x7E5133,0x8D4B2E,0x764B31,0x6E4630,0x8A462D,0x64412B,
  0x5D3D27,0x593A24,0x543822,0x50351F,0x4B341D,0x47301A,0x592218,0x402D17,
  0x382813,0x3B2007,0x302310,0x2B200D,0x331100,0x430907,0x3C0504,0x2E0202,
  0xB48038,0xB7743D,0xAE6350,0xA85D4A,0xA35644,0x9E503E,0x994A39,0x944534,
  0x9F4336,0x8E3F30,0x87412B,0x87382A,0x823628,0x803226,0x792C21,0x72251C,
  0xE1AB98,0xDBA28C,0xD79C89,0xD29582,0xCD8D7A,0xC88672,0xC27E6B,0xBD7764,
  0xB8705D,0xB36A57,0xBB5244,0xAD4A3D,0xC8594A,0x7F7444,0x847D49,0x67271E,
  0x6C2219,0x651D15,0x5E1711,0x57130E,0x500F0B,0x4A0C09,0x350303,0x270000,
  0x89874E,0x8C8E53,0x8C9358,0x8E9D62,0xC6904A,0x9AA467,0xCD9E51,0xAFAE6F,
  0xE3D765,0xD5AE58,0xBCAD78,0xC1AC7C,0xCBAA82,0xD5A588,0xEAA09B,0xECA7A2,
  0xEDADA9,0xEFB5B1,0xF0BBB8,0xF2C2BF,0xF4CBC8,0xF5D1CF,0xF7D9D7,0xFDF7F7
};


ULONG RasterList[] =
{
  WAITLINE(0),
  FLOOD,
  RASTEND
};

struct GameScreen GameScreen =
{
  GSV1,             /* Structure version */
  0,0,0,            /* Screen_Mem1,2,3 */
  0,                /* ScreenLink */
  Palette,          /* Adress of palette */
  RasterList,       /* Address of rasterlist */
  0,                /* Amount of colours */
  320,256,          /* Screen Width and Height */
  320/8,256,        /* Picture Width/8 and Height */
  AMT_PLANES,       /* Amount of bitplanes */
  0,0,              /* Top Of Screen Offset, X/Y */
  0,0,              /* X/Y counters (for scrolling) */
  0,                /* Special attributes */
  LORES|COL24BIT,   /* Screen mode */
  INTERLEAVED,      /* Screen type */
  0                 /* Reserved */
};

/*=========================================================================*/

void main(void)
{
   int i;

   if (GMSBase = (struct GMSBase *) OpenLibrary("games.library", 0)) {
      SetUserPrefs(0);
      if (Add_Screen(&GameScreen) == NULL) {
         SmartLoad("GAMESLIB:data/Yattering128.pak",GameScreen.MemPtr1,0,NULL);
         Show_Screen(&GameScreen);

         for (i=0; i<256; i++) {
             Wait_OSVBL();
             RasterList[0] += 1;
             Update_RasterList(&GameScreen);
         }

         Wait_LMB();

         i = 0;
         do {
            Wait_OSVBL();
            i = PaletteToColour(&GameScreen,i,2,0,128,&Palette,0x000000);
         } while (i != 0);

         Delete_Screen(&GameScreen);
      }
      CloseLibrary((struct Library *)GMSBase);
   }
}

/*=========================================================================*/

