;/*
sc RESOPT DATA=NEAR UCHAR CONSTLIB STREQ NMINC STRMERGE NOSTKCHK NOSTDIO OPTIMIZE OPTSIZE IGNORE=73 Plasma.c
slink from LIB:c.o Plasma.o to //Clients/Plasma LIB LIB:sc.lib LIB:amiga.lib /lib/client.lib SC SD NOICONS
delete Plasma.o
quit

 Plasma 1.0  (Client for BServer)

 Copyright © 1994-1995 
 Stefano Reksten and Luca Viola of 3AM - The Three Amigos!!!
 All rights reserved.
*/

#include <exec/types.h>
#include <exec/memory.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include <intuition/intuition.h>
#include <graphics/gfx.h>
#include <graphics/scale.h>

#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <clib/alib_protos.h>

#include "/include/client.h"

char *ver = "$VER: Plasma 1.2 "__AMIGADATE__;

struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct DisplayIDInformation *dinfo;

UBYTE plasmastd_cmap32[256][3] = {
 {0x00,0x00,0x00}, {0x00,0x00,0xFF},
 {0x00,0x00,0xFF}, {0x00,0x00,0xFF},
 {0x00,0x00,0xFF}, {0x00,0x00,0xFF},
 {0x00,0x11,0xEE}, {0x00,0x11,0xEE},
 {0x00,0x11,0xEE}, {0x00,0x11,0xEE},
 {0x00,0x11,0xEE}, {0x00,0x22,0xDD},
 {0x00,0x22,0xDD}, {0x00,0x22,0xDD},
 {0x00,0x22,0xDD}, {0x00,0x22,0xDD},
 {0x00,0x22,0xCC}, {0x00,0x33,0xCC},
 {0x00,0x33,0xCC}, {0x00,0x33,0xCC},
 {0x00,0x33,0xCC}, {0x00,0x33,0xCC},
 {0x00,0x44,0xBB}, {0x00,0x44,0xBB},
 {0x00,0x44,0xBB}, {0x00,0x44,0xBB},
 {0x00,0x44,0xBB}, {0x00,0x55,0xAA},
 {0x00,0x55,0xAA}, {0x00,0x55,0xAA},
 {0x00,0x55,0xAA}, {0x00,0x55,0xAA},
 {0x00,0x55,0xAA}, {0x00,0x66,0x99},
 {0x00,0x66,0x99}, {0x00,0x66,0x99},
 {0x00,0x66,0x99}, {0x00,0x66,0x99},
 {0x00,0x77,0x88}, {0x00,0x77,0x88},
 {0x00,0x77,0x88}, {0x00,0x77,0x88},
 {0x00,0x77,0x88}, {0x00,0x77,0x77},
 {0x00,0x88,0x77}, {0x00,0x88,0x77},
 {0x00,0x88,0x77}, {0x00,0x88,0x77},
 {0x00,0x88,0x77}, {0x00,0x99,0x66},
 {0x00,0x99,0x66}, {0x00,0x99,0x66},
 {0x00,0x99,0x66}, {0x00,0x99,0x66},
 {0x00,0xAA,0x55}, {0x00,0xAA,0x55},
 {0x00,0xAA,0x55}, {0x00,0xAA,0x55},
 {0x00,0xAA,0x55}, {0x00,0xAA,0x55},
 {0x00,0xBB,0x44}, {0x00,0xBB,0x44},
 {0x00,0xBB,0x44}, {0x00,0xBB,0x44},
 {0x00,0xBB,0x44}, {0x00,0xCC,0x33},
 {0x00,0xCC,0x33}, {0x00,0xCC,0x33},
 {0x00,0xCC,0x33}, {0x00,0xCC,0x33},
 {0x00,0xCC,0x22}, {0x00,0xDD,0x22},
 {0x00,0xDD,0x22}, {0x00,0xDD,0x22},
 {0x00,0xDD,0x22}, {0x00,0xDD,0x22},
 {0x00,0xEE,0x11}, {0x00,0xEE,0x11},
 {0x00,0xEE,0x11}, {0x00,0xEE,0x11},
 {0x00,0xEE,0x11}, {0x00,0xFF,0x00},
 {0x00,0xFF,0x00}, {0x00,0xFF,0x00},
 {0x00,0xFF,0x00}, {0x00,0xFF,0x00},
 {0x00,0xFF,0x00}, {0x00,0xFF,0x00},
 {0x00,0xFF,0x00}, {0x00,0xFF,0x00},
 {0x00,0xFF,0x00}, {0x11,0xEE,0x00},
 {0x11,0xEE,0x00}, {0x11,0xEE,0x00},
 {0x11,0xEE,0x00}, {0x11,0xEE,0x00},
 {0x22,0xDD,0x00}, {0x22,0xDD,0x00},
 {0x22,0xDD,0x00}, {0x22,0xDD,0x00},
 {0x22,0xDD,0x00}, {0x22,0xCC,0x00},
 {0x33,0xCC,0x00}, {0x33,0xCC,0x00},
 {0x33,0xCC,0x00}, {0x33,0xCC,0x00},
 {0x33,0xCC,0x00}, {0x44,0xBB,0x00},
 {0x44,0xBB,0x00}, {0x44,0xBB,0x00},
 {0x44,0xBB,0x00}, {0x44,0xBB,0x00},
 {0x55,0xAA,0x00}, {0x55,0xAA,0x00},
 {0x55,0xAA,0x00}, {0x55,0xAA,0x00},
 {0x55,0xAA,0x00}, {0x55,0xAA,0x00},
 {0x66,0x99,0x00}, {0x66,0x99,0x00},
 {0x66,0x99,0x00}, {0x66,0x99,0x00},
 {0x66,0x99,0x00}, {0x77,0x88,0x00},
 {0x77,0x88,0x00}, {0x77,0x88,0x00},
 {0x77,0x88,0x00}, {0x77,0x88,0x00},
 {0x77,0x77,0x00}, {0x88,0x77,0x00},
 {0x88,0x77,0x00}, {0x88,0x77,0x00},
 {0x88,0x77,0x00}, {0x88,0x77,0x00},
 {0x99,0x66,0x00}, {0x99,0x66,0x00},
 {0x99,0x66,0x00}, {0x99,0x66,0x00},
 {0x99,0x66,0x00}, {0xAA,0x55,0x00},
 {0xAA,0x55,0x00}, {0xAA,0x55,0x00},
 {0xAA,0x55,0x00}, {0xAA,0x55,0x00},
 {0xAA,0x55,0x00}, {0xBB,0x44,0x00},
 {0xBB,0x44,0x00}, {0xBB,0x44,0x00},
 {0xBB,0x44,0x00}, {0xBB,0x44,0x00},
 {0xCC,0x33,0x00}, {0xCC,0x33,0x00},
 {0xCC,0x33,0x00}, {0xCC,0x33,0x00},
 {0xCC,0x33,0x00}, {0xCC,0x22,0x00},
 {0xDD,0x22,0x00}, {0xDD,0x22,0x00},
 {0xDD,0x22,0x00}, {0xDD,0x22,0x00},
 {0xDD,0x22,0x00}, {0xEE,0x11,0x00},
 {0xEE,0x11,0x00}, {0xEE,0x11,0x00},
 {0xEE,0x11,0x00}, {0xEE,0x11,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xEE,0x00,0x11}, {0xEE,0x00,0x11},
 {0xEE,0x00,0x11}, {0xEE,0x00,0x11},
 {0xEE,0x00,0x11}, {0xDD,0x00,0x22},
 {0xDD,0x00,0x22}, {0xDD,0x00,0x22},
 {0xDD,0x00,0x22}, {0xDD,0x00,0x22},
 {0xCC,0x00,0x22}, {0xCC,0x00,0x33},
 {0xCC,0x00,0x33}, {0xCC,0x00,0x33},
 {0xCC,0x00,0x33}, {0xCC,0x00,0x33},
 {0xBB,0x00,0x44}, {0xBB,0x00,0x44},
 {0xBB,0x00,0x44}, {0xBB,0x00,0x44},
 {0xBB,0x00,0x44}, {0xAA,0x00,0x55},
 {0xAA,0x00,0x55}, {0xAA,0x00,0x55},
 {0xAA,0x00,0x55}, {0xAA,0x00,0x55},
 {0xAA,0x00,0x55}, {0x99,0x00,0x66},
 {0x99,0x00,0x66}, {0x99,0x00,0x66},
 {0x99,0x00,0x66}, {0x99,0x00,0x66},
 {0x88,0x00,0x77}, {0x88,0x00,0x77},
 {0x88,0x00,0x77}, {0x88,0x00,0x77},
 {0x88,0x00,0x77}, {0x77,0x00,0x77},
 {0x77,0x00,0x88}, {0x77,0x00,0x88},
 {0x77,0x00,0x88}, {0x77,0x00,0x88},
 {0x77,0x00,0x88}, {0x66,0x00,0x99},
 {0x66,0x00,0x99}, {0x66,0x00,0x99},
 {0x66,0x00,0x99}, {0x66,0x00,0x99},
 {0x55,0x00,0xAA}, {0x55,0x00,0xAA},
 {0x55,0x00,0xAA}, {0x55,0x00,0xAA},
 {0x55,0x00,0xAA}, {0x55,0x00,0xAA},
 {0x44,0x00,0xBB}, {0x44,0x00,0xBB},
 {0x44,0x00,0xBB}, {0x44,0x00,0xBB},
 {0x44,0x00,0xBB}, {0x33,0x00,0xCC},
 {0x33,0x00,0xCC}, {0x33,0x00,0xCC},
 {0x33,0x00,0xCC}, {0x33,0x00,0xCC},
 {0x22,0x00,0xCC}, {0x22,0x00,0xDD},
 {0x22,0x00,0xDD}, {0x22,0x00,0xDD},
 {0x22,0x00,0xDD}, {0x22,0x00,0xDD},
 {0x11,0x00,0xEE}, {0x11,0x00,0xEE},
 {0x11,0x00,0xEE}, {0x11,0x00,0xEE},
 {0x11,0x00,0xEE}, {0x00,0x00,0xFF},
 {0x00,0x00,0xFF}, {0x00,0x00,0xFF},
 {0x00,0x00,0xFF}, {0x00,0x00,0xFF}
 };

UBYTE clouds_cmap32[256][3] = {
 {0x00,0x00,0x00}, {0xEE,0xEE,0xFF},
 {0xEE,0xEE,0xFF}, {0xEE,0xFF,0xFF},
 {0xEE,0xFF,0xFF}, {0xEE,0xFF,0xFF},
 {0xEE,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xEE,0xFF,0xFF},
 {0xEE,0xFF,0xFF}, {0xEE,0xFF,0xFF},
 {0xEE,0xFF,0xFF}, {0xEE,0xFF,0xFF},
 {0xEE,0xFF,0xFF}, {0xEE,0xFF,0xFF},
 {0xDD,0xEE,0xFF}, {0xDD,0xEE,0xFF},
 {0xDD,0xEE,0xFF}, {0xDD,0xEE,0xFF},
 {0xDD,0xEE,0xFF}, {0xDD,0xEE,0xFF},
 {0xDD,0xEE,0xFF}, {0xDD,0xEE,0xFF},
 {0xCC,0xEE,0xFF}, {0xCC,0xEE,0xFF},
 {0xCC,0xEE,0xFF}, {0xCC,0xEE,0xFF},
 {0xCC,0xEE,0xFF}, {0xCC,0xEE,0xFF},
 {0xCC,0xDD,0xFF}, {0xBB,0xDD,0xFF},
 {0xBB,0xDD,0xFF}, {0xBB,0xDD,0xFF},
 {0xBB,0xDD,0xFF}, {0xBB,0xDD,0xFF},
 {0xBB,0xDD,0xFF}, {0xBB,0xDD,0xFF},
 {0xBB,0xDD,0xFF}, {0xAA,0xDD,0xFF},
 {0xAA,0xDD,0xFF}, {0xAA,0xDD,0xFF},
 {0xAA,0xDD,0xFF}, {0xAA,0xDD,0xFF},
 {0xAA,0xCC,0xFF}, {0xAA,0xCC,0xFF},
 {0x99,0xCC,0xFF}, {0x99,0xCC,0xFF},
 {0x99,0xCC,0xFF}, {0x99,0xCC,0xFF},
 {0x99,0xCC,0xFF}, {0x99,0xCC,0xFF},
 {0x99,0xCC,0xFF}, {0x99,0xCC,0xFF},
 {0x88,0xCC,0xFF}, {0x88,0xCC,0xFF},
 {0x88,0xCC,0xFF}, {0x88,0xCC,0xFF},
 {0x88,0xCC,0xFF}, {0x88,0xBB,0xFF},
 {0x88,0xBB,0xFF}, {0x77,0xBB,0xFF},
 {0x77,0xBB,0xFF}, {0x77,0xBB,0xFF},
 {0x77,0xBB,0xFF}, {0x77,0xBB,0xFF},
 {0x77,0xBB,0xFF}, {0x77,0xBB,0xFF},
 {0x77,0xBB,0xFF}, {0x66,0xBB,0xFF},
 {0x66,0xBB,0xFF}, {0x66,0xBB,0xFF},
 {0x66,0xBB,0xFF}, {0x66,0xAA,0xFF},
 {0x66,0xAA,0xFF}, {0x66,0xAA,0xFF},
 {0x55,0xAA,0xFF}, {0x55,0xAA,0xFF},
 {0x55,0xAA,0xFF}, {0x55,0xAA,0xFF},
 {0x55,0xAA,0xFF}, {0x55,0xAA,0xFF},
 {0x55,0xAA,0xFF}, {0x55,0xAA,0xFF},
 {0x44,0xAA,0xFF}, {0x44,0xAA,0xFF},
 {0x44,0xAA,0xFF}, {0x44,0x99,0xFF},
 {0x44,0x99,0xFF}, {0x44,0x99,0xFF},
 {0x44,0x99,0xFF}, {0x33,0x99,0xFF},
 {0x33,0x99,0xFF}, {0x33,0x99,0xFF},
 {0x33,0x99,0xFF}, {0x33,0x99,0xFF},
 {0x33,0x99,0xFF}, {0x33,0x99,0xFF},
 {0x33,0x99,0xFF}, {0x22,0x99,0xFF},
 {0x22,0x99,0xFF}, {0x22,0x99,0xFF},
 {0x22,0x88,0xFF}, {0x22,0x88,0xFF},
 {0x22,0x88,0xFF}, {0x22,0x88,0xFF},
 {0x11,0x88,0xFF}, {0x11,0x88,0xFF},
 {0x11,0x88,0xFF}, {0x11,0x88,0xFF},
 {0x11,0x88,0xFF}, {0x11,0x88,0xFF},
 {0x11,0x88,0xFF}, {0x11,0x88,0xFF},
 {0x00,0x88,0xFF}, {0x00,0x88,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x00,0x77,0xFF},
 {0x00,0x77,0xFF}, {0x11,0x88,0xFF},
 {0x11,0x88,0xFF}, {0x11,0x88,0xFF},
 {0x11,0x88,0xFF}, {0x11,0x88,0xFF},
 {0x11,0x88,0xFF}, {0x22,0x88,0xFF},
 {0x22,0x88,0xFF}, {0x22,0x88,0xFF},
 {0x22,0x88,0xFF}, {0x22,0x88,0xFF},
 {0x22,0x99,0xFF}, {0x33,0x99,0xFF},
 {0x33,0x99,0xFF}, {0x33,0x99,0xFF},
 {0x33,0x99,0xFF}, {0x33,0x99,0xFF},
 {0x33,0x99,0xFF}, {0x44,0x99,0xFF},
 {0x44,0x99,0xFF}, {0x44,0x99,0xFF},
 {0x44,0x99,0xFF}, {0x44,0xAA,0xFF},
 {0x55,0xAA,0xFF}, {0x55,0xAA,0xFF},
 {0x55,0xAA,0xFF}, {0x55,0xAA,0xFF},
 {0x55,0xAA,0xFF}, {0x55,0xAA,0xFF},
 {0x66,0xAA,0xFF}, {0x66,0xAA,0xFF},
 {0x66,0xAA,0xFF}, {0x66,0xAA,0xFF},
 {0x66,0xBB,0xFF}, {0x66,0xBB,0xFF},
 {0x77,0xBB,0xFF}, {0x77,0xBB,0xFF},
 {0x77,0xBB,0xFF}, {0x77,0xBB,0xFF},
 {0x77,0xBB,0xFF}, {0x77,0xBB,0xFF},
 {0x88,0xBB,0xFF}, {0x88,0xBB,0xFF},
 {0x88,0xBB,0xFF}, {0x88,0xCC,0xFF},
 {0x88,0xCC,0xFF}, {0x99,0xCC,0xFF},
 {0x99,0xCC,0xFF}, {0x99,0xCC,0xFF},
 {0x99,0xCC,0xFF}, {0x99,0xCC,0xFF},
 {0x99,0xCC,0xFF}, {0xAA,0xCC,0xFF},
 {0xAA,0xCC,0xFF}, {0xAA,0xCC,0xFF},
 {0xAA,0xDD,0xFF}, {0xAA,0xDD,0xFF},
 {0xAA,0xDD,0xFF}, {0xBB,0xDD,0xFF},
 {0xBB,0xDD,0xFF}, {0xBB,0xDD,0xFF},
 {0xBB,0xDD,0xFF}, {0xBB,0xDD,0xFF},
 {0xBB,0xDD,0xFF}, {0xCC,0xDD,0xFF},
 {0xCC,0xDD,0xFF}, {0xCC,0xEE,0xFF},
 {0xCC,0xEE,0xFF}, {0xCC,0xEE,0xFF},
 {0xCC,0xEE,0xFF}, {0xDD,0xEE,0xFF},
 {0xDD,0xEE,0xFF}, {0xDD,0xEE,0xFF},
 {0xDD,0xEE,0xFF}, {0xDD,0xEE,0xFF}
 };

UBYTE explosion_cmap32[256][3] = {
 {0x00,0x00,0x00}, {0x33,0x33,0x33},
 {0x44,0x33,0x33}, {0x44,0x33,0x33},
 {0x44,0x33,0x33}, {0x55,0x33,0x33},
 {0x55,0x33,0x33}, {0x66,0x33,0x33},
 {0x66,0x33,0x33}, {0x66,0x33,0x33},
 {0x77,0x22,0x22}, {0x77,0x22,0x22},
 {0x88,0x22,0x22}, {0x88,0x22,0x22},
 {0x88,0x22,0x22}, {0x99,0x22,0x22},
 {0x99,0x22,0x22}, {0x99,0x22,0x22},
 {0xAA,0x11,0x11}, {0xAA,0x11,0x11},
 {0xBB,0x11,0x11}, {0xBB,0x11,0x11},
 {0xBB,0x11,0x11}, {0xCC,0x11,0x11},
 {0xCC,0x11,0x11}, {0xDD,0x11,0x11},
 {0xDD,0x00,0x00}, {0xDD,0x00,0x00},
 {0xEE,0x00,0x00}, {0xEE,0x00,0x00},
 {0xEE,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x11,0x00},
 {0xFF,0x11,0x00}, {0xFF,0x22,0x00},
 {0xFF,0x22,0x00}, {0xFF,0x33,0x00},
 {0xFF,0x33,0x00}, {0xFF,0x44,0x00},
 {0xFF,0x44,0x00}, {0xFF,0x55,0x00},
 {0xFF,0x55,0x00}, {0xFF,0x66,0x00},
 {0xFF,0x66,0x00}, {0xFF,0x77,0x00},
 {0xFF,0x77,0x00}, {0xFF,0x88,0x00},
 {0xFF,0x88,0x00}, {0xFF,0x99,0x00},
 {0xFF,0x99,0x00}, {0xFF,0xAA,0x00},
 {0xFF,0xAA,0x00}, {0xFF,0xBB,0x00},
 {0xFF,0xBB,0x00}, {0xFF,0xCC,0x00},
 {0xFF,0xCC,0x00}, {0xFF,0xDD,0x00},
 {0xFF,0xDD,0x00}, {0xFF,0xEE,0x00},
 {0xFF,0xEE,0x00}, {0xFF,0xFF,0x00},
 {0xFF,0xFF,0x00}, {0xFF,0xFF,0x00},
 {0xFF,0xFF,0x00}, {0xFF,0xFF,0x11},
 {0xFF,0xFF,0x11}, {0xFF,0xFF,0x22},
 {0xFF,0xFF,0x22}, {0xFF,0xFF,0x33},
 {0xFF,0xFF,0x33}, {0xFF,0xFF,0x44},
 {0xFF,0xFF,0x44}, {0xFF,0xFF,0x55},
 {0xFF,0xFF,0x55}, {0xFF,0xFF,0x66},
 {0xFF,0xFF,0x66}, {0xFF,0xFF,0x77},
 {0xFF,0xFF,0x77}, {0xFF,0xFF,0x88},
 {0xFF,0xFF,0x88}, {0xFF,0xFF,0x99},
 {0xFF,0xFF,0x99}, {0xFF,0xFF,0xAA},
 {0xFF,0xFF,0xAA}, {0xFF,0xFF,0xBB},
 {0xFF,0xFF,0xBB}, {0xFF,0xFF,0xCC},
 {0xFF,0xFF,0xCC}, {0xFF,0xFF,0xDD},
 {0xFF,0xFF,0xDD}, {0xFF,0xFF,0xEE},
 {0xFF,0xFF,0xEE}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xEE},
 {0xFF,0xFF,0xEE}, {0xFF,0xFF,0xEE},
 {0xFF,0xEE,0xEE}, {0xFF,0xEE,0xDD},
 {0xFF,0xEE,0xDD}, {0xFF,0xEE,0xDD},
 {0xFF,0xEE,0xDD}, {0xFF,0xEE,0xCC},
 {0xFF,0xEE,0xCC}, {0xFF,0xEE,0xCC},
 {0xFF,0xDD,0xCC}, {0xFF,0xDD,0xBB},
 {0xFF,0xDD,0xBB}, {0xFF,0xDD,0xBB},
 {0xFF,0xDD,0xBB}, {0xFF,0xDD,0xAA},
 {0xFF,0xDD,0xAA}, {0xFF,0xDD,0xAA},
 {0xFF,0xCC,0xAA}, {0xFF,0xCC,0x99},
 {0xFF,0xCC,0x99}, {0xFF,0xCC,0x99},
 {0xFF,0xCC,0x99}, {0xFF,0xCC,0x88},
 {0xFF,0xCC,0x88}, {0xFF,0xCC,0x88},
 {0xFF,0xBB,0x88}, {0xFF,0xBB,0x77},
 {0xFF,0xBB,0x77}, {0xFF,0xBB,0x77},
 {0xFF,0xBB,0x77}, {0xFF,0xBB,0x66},
 {0xFF,0xBB,0x66}, {0xFF,0xAA,0x66},
 {0xFF,0xAA,0x66}, {0xFF,0xAA,0x55},
 {0xFF,0xAA,0x55}, {0xFF,0xAA,0x55},
 {0xFF,0xAA,0x55}, {0xFF,0xAA,0x44},
 {0xFF,0xAA,0x44}, {0xFF,0x99,0x44},
 {0xFF,0x99,0x44}, {0xFF,0x99,0x33},
 {0xFF,0x99,0x33}, {0xFF,0x99,0x33},
 {0xFF,0x99,0x33}, {0xFF,0x99,0x22},
 {0xFF,0x99,0x22}, {0xFF,0x88,0x22},
 {0xFF,0x88,0x22}, {0xFF,0x88,0x11},
 {0xFF,0x88,0x11}, {0xFF,0x88,0x11},
 {0xFF,0x88,0x11}, {0xFF,0x88,0x00},
 {0xFF,0x88,0x00}, {0xFF,0x77,0x00},
 {0xFF,0x77,0x00}, {0xFF,0x77,0x00},
 {0xFF,0x77,0x00}, {0xFF,0x77,0x00},
 {0xFF,0x66,0x00}, {0xFF,0x66,0x00},
 {0xFF,0x66,0x00}, {0xFF,0x66,0x00},
 {0xFF,0x55,0x00}, {0xFF,0x55,0x00},
 {0xFF,0x55,0x00}, {0xFF,0x55,0x00},
 {0xFF,0x44,0x00}, {0xFF,0x44,0x00},
 {0xFF,0x44,0x00}, {0xFF,0x44,0x00},
 {0xFF,0x33,0x00}, {0xFF,0x33,0x00},
 {0xFF,0x33,0x00}, {0xFF,0x33,0x00},
 {0xFF,0x33,0x00}, {0xFF,0x22,0x00},
 {0xFF,0x22,0x00}, {0xFF,0x22,0x00},
 {0xFF,0x22,0x00}, {0xFF,0x11,0x00},
 {0xFF,0x11,0x00}, {0xFF,0x11,0x00},
 {0xFF,0x11,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xFF,0x00,0x00}, {0xFF,0x00,0x00},
 {0xEE,0x00,0x00}, {0xEE,0x00,0x00},
 {0xEE,0x00,0x00}, {0xEE,0x00,0x00},
 {0xEE,0x00,0x00}, {0xEE,0x00,0x00},
 {0xDD,0x00,0x00}, {0xDD,0x00,0x00},
 {0xDD,0x00,0x00}, {0xDD,0x00,0x00},
 {0xDD,0x00,0x00}, {0xCC,0x00,0x00},
 {0xCC,0x00,0x00}, {0xCC,0x00,0x00},
 {0xCC,0x00,0x00}, {0xCC,0x00,0x00},
 {0xCC,0x00,0x00}, {0xBB,0x00,0x00},
 {0xBB,0x00,0x00}, {0xBB,0x00,0x00},
 {0xBB,0x00,0x00}, {0xBB,0x00,0x00},
 {0xAA,0x00,0x00}, {0xAA,0x00,0x00},
 {0xAA,0x00,0x00}, {0xAA,0x00,0x00},
 {0xAA,0x00,0x00}, {0xAA,0x00,0x00},
 {0x99,0x00,0x00}, {0x99,0x00,0x00},
 {0x99,0x00,0x00}, {0x99,0x00,0x00},
 {0x88,0x00,0x00}, {0x88,0x00,0x00},
 {0x88,0x11,0x11}, {0x88,0x11,0x11},
 {0x88,0x11,0x11}, {0x77,0x11,0x11},
 {0x77,0x11,0x11}, {0x77,0x11,0x11},
 {0x77,0x11,0x11}, {0x77,0x11,0x11},
 {0x66,0x22,0x22}, {0x66,0x22,0x22},
 {0x66,0x22,0x22}, {0x66,0x22,0x22},
 {0x66,0x22,0x22}, {0x55,0x22,0x22},
 {0x55,0x22,0x22}, {0x55,0x22,0x22},
 {0x55,0x33,0x33}, {0x55,0x33,0x33},
 {0x44,0x33,0x33}, {0x44,0x33,0x33},
 {0x44,0x33,0x33}, {0x44,0x33,0x33},
 {0x33,0x33,0x33}, {0x33,0x33,0x33}
 };

UBYTE terraform_cmap32[256][3] = {
 {0x00,0x00,0x00}, {0xFF,0xFF,0xFF},
 {0xFF,0xEE,0xEE}, {0xFF,0xDD,0xCC},
 {0xFF,0xCC,0xAA}, {0xEE,0xBB,0x88},
 {0xEE,0xBB,0x77}, {0xEE,0xAA,0x55},
 {0xEE,0x99,0x33}, {0xDD,0x88,0x22},
 {0xDD,0x88,0x22}, {0xDD,0x88,0x22},
 {0xCC,0x88,0x11}, {0xCC,0x88,0x11},
 {0xCC,0x88,0x11}, {0xCC,0x88,0x11},
 {0xBB,0x88,0x11}, {0xBB,0x88,0x11},
 {0xBB,0x88,0x11}, {0xAA,0x88,0x11},
 {0xAA,0x88,0x11}, {0xAA,0x88,0x11},
 {0xAA,0x88,0x11}, {0x99,0x88,0x11},
 {0x99,0x88,0x11}, {0x99,0x88,0x11},
 {0x88,0x77,0x11}, {0x88,0x77,0x11},
 {0x88,0x88,0x11}, {0x88,0x88,0x11},
 {0x88,0x88,0x11}, {0x88,0x88,0x11},
 {0x88,0x99,0x22}, {0x88,0x99,0x22},
 {0x88,0x99,0x22}, {0x88,0x99,0x22},
 {0x88,0x99,0x22}, {0x88,0xAA,0x33},
 {0x88,0xAA,0x33}, {0x88,0xAA,0x33},
 {0x88,0xAA,0x33}, {0x77,0xAA,0x33},
 {0x77,0xBB,0x44}, {0x77,0xBB,0x44},
 {0x66,0x99,0x55}, {0x55,0x88,0x66},
 {0x44,0x66,0x77}, {0x33,0x44,0x88},
 {0x22,0x33,0x99}, {0x11,0x11,0xAA},
 {0x00,0x00,0xAA}, {0x00,0x00,0xBB},
 {0x00,0x00,0xBB}, {0x00,0x00,0xBB},
 {0x00,0x00,0xBB}, {0x00,0x11,0xBB},
 {0x00,0x11,0xBB}, {0x00,0x11,0xBB},
 {0x00,0x11,0xBB}, {0x00,0x22,0xBB},
 {0x00,0x22,0xBB}, {0x00,0x22,0xBB},
 {0x11,0x22,0xBB}, {0x11,0x33,0xCC},
 {0x11,0x33,0xCC}, {0x11,0x33,0xCC},
 {0x11,0x33,0xCC}, {0x11,0x44,0xCC},
 {0x11,0x44,0xCC}, {0x11,0x44,0xCC},
 {0x11,0x44,0xCC}, {0x11,0x55,0xCC},
 {0x11,0x55,0xCC}, {0x11,0x55,0xCC},
 {0x11,0x55,0xCC}, {0x22,0x55,0xDD},
 {0x22,0x66,0xDD}, {0x22,0x66,0xDD},
 {0x22,0x66,0xDD}, {0x22,0x66,0xDD},
 {0x22,0x77,0xDD}, {0x22,0x77,0xDD},
 {0x22,0x77,0xDD}, {0x22,0x77,0xDD},
 {0x22,0x88,0xDD}, {0x22,0x88,0xDD},
 {0x22,0x88,0xDD}, {0x33,0x88,0xEE},
 {0x33,0x99,0xEE}, {0x33,0x99,0xEE},
 {0x33,0x99,0xEE}, {0x33,0x99,0xEE},
 {0x33,0xAA,0xEE}, {0x33,0xAA,0xEE},
 {0x33,0xAA,0xEE}, {0x33,0xAA,0xEE},
 {0x44,0xAA,0xBB}, {0x44,0xAA,0x88},
 {0x55,0xAA,0x55}, {0x55,0xAA,0x22},
 {0x55,0xAA,0x33}, {0x55,0xAA,0x33},
 {0x55,0xAA,0x33}, {0x55,0xAA,0x33},
 {0x55,0xAA,0x33}, {0x66,0xAA,0x33},
 {0x66,0xAA,0x33}, {0x66,0xAA,0x33},
 {0x66,0xAA,0x33}, {0x66,0xBB,0x33},
 {0x66,0xBB,0x33}, {0x66,0xBB,0x33},
 {0x66,0xBB,0x33}, {0x66,0xBB,0x33},
 {0x66,0xBB,0x33}, {0x77,0xBB,0x33},
 {0x77,0xBB,0x33}, {0x77,0xBB,0x33},
 {0x77,0xBB,0x33}, {0x77,0xBB,0x33},
 {0x77,0xBB,0x33}, {0x77,0xBB,0x33},
 {0x77,0xBB,0x33}, {0x77,0xBB,0x33},
 {0x77,0xBB,0x33}, {0x88,0xBB,0x33},
 {0x88,0xBB,0x33}, {0x88,0xBB,0x33},
 {0x88,0xBB,0x33}, {0x88,0xBB,0x33},
 {0x88,0xBB,0x33}, {0x88,0xBB,0x33},
 {0x88,0xBB,0x33}, {0x88,0xBB,0x33},
 {0x88,0xBB,0x33}, {0x99,0xBB,0x33},
 {0x99,0xBB,0x33}, {0x99,0xBB,0x44},
 {0x99,0xBB,0x44}, {0x99,0xCC,0x44},
 {0x99,0xCC,0x44}, {0x99,0xCC,0x44},
 {0x99,0xCC,0x44}, {0x99,0xCC,0x44},
 {0x99,0xCC,0x44}, {0xAA,0xCC,0x44},
 {0xAA,0xCC,0x44}, {0xAA,0xCC,0x44},
 {0xAA,0xCC,0x44}, {0xAA,0xCC,0x44},
 {0xAA,0xCC,0x44}, {0xAA,0xCC,0x44},
 {0xAA,0xCC,0x44}, {0xAA,0xCC,0x44},
 {0xAA,0xCC,0x44}, {0xAA,0xCC,0x44},
 {0xBB,0xCC,0x44}, {0xBB,0xCC,0x44},
 {0xBB,0xCC,0x44}, {0xBB,0xCC,0x44},
 {0xBB,0xCC,0x44}, {0xBB,0xCC,0x44},
 {0xBB,0xCC,0x44}, {0xBB,0xCC,0x44},
 {0xBB,0xCC,0x44}, {0xBB,0xCC,0x44},
 {0xCC,0xCC,0x44}, {0xCC,0xCC,0x44},
 {0xCC,0xDD,0x44}, {0xCC,0xDD,0x44},
 {0xCC,0xDD,0x44}, {0xCC,0xDD,0x44},
 {0xCC,0xDD,0x44}, {0xCC,0xDD,0x55},
 {0xCC,0xDD,0x55}, {0xCC,0xDD,0x55},
 {0xDD,0xDD,0x55}, {0xDD,0xDD,0x55},
 {0xDD,0xDD,0x55}, {0xDD,0xDD,0x55},
 {0xDD,0xDD,0x55}, {0xDD,0xDD,0x55},
 {0xDD,0xDD,0x55}, {0xDD,0xDD,0x55},
 {0xDD,0xDD,0x55}, {0xDD,0xDD,0x55},
 {0xEE,0xDD,0x55}, {0xEE,0xDD,0x55},
 {0xEE,0xDD,0x55}, {0xEE,0xDD,0x55},
 {0xEE,0xDD,0x55}, {0xEE,0xDD,0x55},
 {0xEE,0xDD,0x55}, {0xEE,0xDD,0x55},
 {0xEE,0xDD,0x55}, {0xEE,0xDD,0x44},
 {0xEE,0xDD,0x44}, {0xEE,0xCC,0x44},
 {0xEE,0xCC,0x44}, {0xEE,0xCC,0x44},
 {0xEE,0xCC,0x44}, {0xEE,0xCC,0x44},
 {0xEE,0xCC,0x44}, {0xEE,0xCC,0x33},
 {0xEE,0xCC,0x33}, {0xEE,0xCC,0x33},
 {0xEE,0xBB,0x33}, {0xEE,0xBB,0x33},
 {0xEE,0xBB,0x33}, {0xEE,0xBB,0x33},
 {0xEE,0xBB,0x33}, {0xEE,0xBB,0x22},
 {0xEE,0xBB,0x22}, {0xEE,0xBB,0x22},
 {0xEE,0xBB,0x22}, {0xEE,0xBB,0x22},
 {0xEE,0xBB,0x22}, {0xEE,0xAA,0x22},
 {0xEE,0xAA,0x22}, {0xEE,0xAA,0x22},
 {0xEE,0xAA,0x22}, {0xEE,0xAA,0x22},
 {0xEE,0xAA,0x22}, {0xEE,0xAA,0x22},
 {0xEE,0xAA,0x22}, {0xEE,0x99,0x11},
 {0xEE,0x99,0x11}, {0xEE,0x99,0x11},
 {0xEE,0x99,0x11}, {0xDD,0x99,0x11},
 {0xDD,0x88,0x11}, {0xDD,0x88,0x11},
 {0xDD,0x88,0x11}, {0xDD,0x88,0x11},
 {0xDD,0x77,0x00}, {0xDD,0x77,0x00},
 {0xDD,0x77,0x00}, {0xDD,0x77,0x11},
 {0xDD,0x88,0x22}, {0xDD,0x88,0x22},
 {0xEE,0x99,0x33}, {0xEE,0x99,0x44},
 {0xEE,0x99,0x55}, {0xEE,0xAA,0x66},
 {0xEE,0xAA,0x66}, {0xEE,0xBB,0x77},
 {0xEE,0xBB,0x88}, {0xEE,0xCC,0x99},
 {0xEE,0xCC,0xAA}, {0xFF,0xDD,0xAA},
 {0xFF,0xDD,0xBB}, {0xFF,0xDD,0xCC},
 {0xFF,0xEE,0xDD}, {0xFF,0xEE,0xEE},
 {0xFF,0xFF,0xEE}, {0xFF,0xFF,0xFF}
 };

UBYTE sea_cmap32[256][3] = {
 {0x00,0x00,0x00}, {0x00,0x99,0xDD},
 {0x00,0x99,0xDD}, {0x00,0x99,0xDD},
 {0x00,0x99,0xDD}, {0x00,0x99,0xDD},
 {0x00,0x99,0xDD}, {0x00,0x99,0xDD},
 {0x00,0x99,0xDD}, {0x00,0x99,0xEE},
 {0x00,0xAA,0xEE}, {0x00,0xAA,0xEE},
 {0x00,0xAA,0xEE}, {0x00,0xAA,0xEE},
 {0x00,0xAA,0xEE}, {0x22,0xBB,0xCC},
 {0x44,0xBB,0xAA}, {0x66,0xCC,0x88},
 {0x99,0xDD,0x66}, {0xBB,0xEE,0x44},
 {0xDD,0xFF,0x22}, {0xFF,0xFF,0x00},
 {0xFF,0xFF,0x00}, {0xEE,0xEE,0x00},
 {0xDD,0xDD,0x00}, {0xDD,0xDD,0x00},
 {0xCC,0xCC,0x00}, {0xCC,0xCC,0x00},
 {0xBB,0xBB,0x00}, {0xAA,0xAA,0x00},
 {0xAA,0xAA,0x00}, {0x99,0x99,0x00},
 {0x88,0x88,0x00}, {0x88,0x88,0x00},
 {0x77,0x77,0x00}, {0x77,0x77,0x00},
 {0x66,0x66,0x00}, {0x55,0x55,0x00},
 {0x55,0x55,0x00}, {0x44,0x44,0x00},
 {0x33,0x33,0x00}, {0x33,0x33,0x00},
 {0x22,0x22,0x00}, {0x22,0x22,0x00},
 {0x11,0x11,0x00}, {0x00,0x00,0x00},
 {0x00,0x00,0x00}, {0x11,0x11,0x00},
 {0x22,0x22,0x00}, {0x33,0x33,0x00},
 {0x44,0x44,0x00}, {0x55,0x55,0x00},
 {0x66,0x66,0x00}, {0x77,0x77,0x00},
 {0x88,0x88,0x00}, {0x88,0x88,0x00},
 {0x99,0x99,0x00}, {0xAA,0xAA,0x00},
 {0xBB,0xBB,0x00}, {0xCC,0xCC,0x00},
 {0xDD,0xDD,0x00}, {0xEE,0xEE,0x00},
 {0xFF,0xFF,0x00}, {0xFF,0xFF,0x00},
 {0xEE,0xEE,0x00}, {0xDD,0xDD,0x00},
 {0xDD,0xDD,0x00}, {0xCC,0xCC,0x00},
 {0xBB,0xBB,0x00}, {0xBB,0xBB,0x00},
 {0xAA,0xAA,0x00}, {0x99,0x99,0x00},
 {0x99,0x99,0x00}, {0x88,0x88,0x00},
 {0x77,0x77,0x00}, {0x77,0x77,0x00},
 {0x66,0x66,0x00}, {0x55,0x55,0x00},
 {0x44,0x44,0x00}, {0x44,0x44,0x00},
 {0x33,0x33,0x00}, {0x22,0x22,0x00},
 {0x22,0x22,0x00}, {0x11,0x11,0x00},
 {0x00,0x00,0x00}, {0x00,0x00,0x00},
 {0x00,0x00,0x00}, {0x00,0x00,0x00},
 {0x00,0x00,0x00}, {0x00,0x00,0x00},
 {0x00,0x00,0x00}, {0x11,0x11,0x11},
 {0x11,0x11,0x11}, {0x11,0x11,0x11},
 {0x11,0x11,0x11}, {0x11,0x11,0x11},
 {0x11,0x11,0x11}, {0x22,0x22,0x22},
 {0x22,0x22,0x22}, {0x22,0x22,0x22},
 {0x22,0x22,0x22}, {0x22,0x22,0x22},
 {0x33,0x33,0x33}, {0x33,0x33,0x33},
 {0x33,0x33,0x33}, {0x33,0x33,0x33},
 {0x33,0x33,0x33}, {0x33,0x33,0x33},
 {0x44,0x44,0x44}, {0x44,0x44,0x44},
 {0x44,0x44,0x44}, {0x44,0x44,0x44},
 {0x44,0x44,0x44}, {0x55,0x55,0x55},
 {0x55,0x55,0x55}, {0x55,0x55,0x55},
 {0x55,0x55,0x55}, {0x55,0x55,0x55},
 {0x55,0x55,0x55}, {0x66,0x66,0x66},
 {0x66,0x66,0x66}, {0x66,0x66,0x66},
 {0x66,0x66,0x66}, {0x66,0x66,0x66},
 {0x77,0x77,0x77}, {0x77,0x77,0x77},
 {0x77,0x77,0x77}, {0x77,0x77,0x77},
 {0x77,0x77,0x77}, {0x77,0x77,0x77},
 {0x88,0x88,0x88}, {0x88,0x88,0x88},
 {0x88,0x88,0x88}, {0x88,0x88,0x88},
 {0x88,0x88,0x88}, {0x88,0x88,0x88},
 {0x99,0x99,0x99}, {0x99,0x99,0x99},
 {0x99,0x99,0x99}, {0x99,0x99,0x99},
 {0x99,0x99,0x99}, {0xAA,0xAA,0xAA},
 {0xAA,0xAA,0xAA}, {0xAA,0xAA,0xAA},
 {0xAA,0xAA,0xAA}, {0xAA,0xAA,0xAA},
 {0xAA,0xAA,0xAA}, {0xBB,0xBB,0xBB},
 {0xBB,0xBB,0xBB}, {0xBB,0xBB,0xBB},
 {0xBB,0xBB,0xBB}, {0xBB,0xBB,0xBB},
 {0xCC,0xCC,0xCC}, {0xCC,0xCC,0xCC},
 {0xCC,0xCC,0xCC}, {0xCC,0xCC,0xCC},
 {0xCC,0xCC,0xCC}, {0xCC,0xCC,0xCC},
 {0xDD,0xDD,0xDD}, {0xDD,0xDD,0xDD},
 {0xDD,0xDD,0xDD}, {0xDD,0xDD,0xDD},
 {0xDD,0xDD,0xDD}, {0xEE,0xEE,0xEE},
 {0xEE,0xEE,0xEE}, {0xEE,0xEE,0xEE},
 {0xEE,0xEE,0xEE}, {0xEE,0xEE,0xEE},
 {0xEE,0xEE,0xEE}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF},
 {0x00,0x11,0x22}, {0x00,0x11,0x22},
 {0x00,0x22,0x33}, {0x00,0x22,0x33},
 {0x00,0x22,0x33}, {0x00,0x22,0x33},
 {0x00,0x22,0x33}, {0x00,0x22,0x33},
 {0x00,0x22,0x33}, {0x00,0x22,0x33},
 {0x00,0x22,0x44}, {0x00,0x22,0x44},
 {0x00,0x22,0x44}, {0x00,0x33,0x44},
 {0x00,0x33,0x44}, {0x00,0x33,0x44},
 {0x00,0x33,0x44}, {0x00,0x33,0x44},
 {0x00,0x33,0x55}, {0x00,0x33,0x55},
 {0x00,0x33,0x55}, {0x00,0x33,0x55},
 {0x00,0x33,0x55}, {0x00,0x33,0x55},
 {0x00,0x44,0x55}, {0x00,0x44,0x55},
 {0x00,0x44,0x66}, {0x00,0x44,0x66},
 {0x00,0x44,0x66}, {0x00,0x44,0x66},
 {0x00,0x44,0x66}, {0x00,0x44,0x66},
 {0x00,0x44,0x66}, {0x00,0x44,0x66},
 {0x00,0x44,0x77}, {0x00,0x55,0x77},
 {0x00,0x55,0x77}, {0x00,0x55,0x77},
 {0x00,0x55,0x77}, {0x00,0x55,0x77},
 {0x00,0x55,0x77}, {0x00,0x55,0x77},
 {0x00,0x55,0x88}, {0x00,0x55,0x88},
 {0x00,0x55,0x88}, {0x00,0x55,0x88},
 {0x00,0x55,0x88}, {0x00,0x66,0x88},
 {0x00,0x66,0x88}, {0x00,0x66,0x88},
 {0x00,0x66,0x99}, {0x00,0x66,0x99},
 {0x00,0x66,0x99}, {0x00,0x66,0x99},
 {0x00,0x66,0x99}, {0x00,0x66,0x99},
 {0x00,0x66,0x99}, {0x00,0x66,0x99},
 {0x00,0x77,0xAA}, {0x00,0x77,0xAA},
 {0x00,0x77,0xAA}, {0x00,0x77,0xAA},
 {0x00,0x77,0xAA}, {0x00,0x77,0xAA},
 {0x00,0x77,0xAA}, {0x00,0x77,0xAA},
 {0x00,0x77,0xBB}, {0x00,0x77,0xBB},
 {0x00,0x77,0xBB}, {0x00,0x88,0xBB},
 {0x00,0x88,0xBB}, {0x00,0x88,0xBB},
 {0x00,0x88,0xBB}, {0x00,0x88,0xBB},
 {0x00,0x88,0xCC}, {0x00,0x88,0xCC},
 {0x00,0x88,0xCC}, {0x00,0x88,0xCC},
 {0x00,0x88,0xCC}, {0x00,0x88,0xCC},
 {0x00,0x99,0xCC}, {0x00,0x99,0xCC}
 };

#define Plot(x,y,c) 	{ SetAPen( rp,c ); WritePixel( rp,x,y ); }
#define GetPixel(x,y) 	ReadPixel( rp,x,y )

struct RastPort		*rp=NULL;
struct BitMap		*bitmap=NULL;
struct Screen *scr;
ULONG cmap[256][3];
BOOL aga = TRUE;
UWORD maxcols = 64;
UBYTE depth = 6;


void ChooseAndSetPalette( UBYTE brightness )
{
int i;
UBYTE (*tmap)[3];

switch( time( NULL ) % 5 )
	{
	case 0:
			tmap = plasmastd_cmap32;
			break;
	case 1:
			tmap = clouds_cmap32;
			break;
	case 2:
			tmap = explosion_cmap32;
			break;
	case 3:
			tmap = terraform_cmap32;
			break;
	case 4:
			tmap = sea_cmap32;
			break;
	}

if ( aga )
	for( i = 0; i < 256; i++ )
		{
		cmap[i][0] = ( tmap[i][0] * brightness / 100 ) << 24;
		cmap[i][1] = ( tmap[i][1] * brightness / 100 ) << 24;
		cmap[i][2] = ( tmap[i][2] * brightness / 100 ) << 24;
		if ( i < 64 )
			SetRGB32( &scr->ViewPort, i, cmap[i][0], cmap[i][1], cmap[i][2] );
		}
else
	for( i = 0; i < 256; i++ )
		{
		cmap[i][0] = ( (tmap[i][0] >> 4) * brightness / 100 );
		cmap[i][1] = ( (tmap[i][1] >> 4) * brightness / 100 );
		cmap[i][2] = ( (tmap[i][2] >> 4) * brightness / 100 );
		if ( i < 32 )
			SetRGB4( &scr->ViewPort, i, cmap[i][0], cmap[i][1], cmap[i][2] );
		}
}


void CyclePalette( void )
{
int i;
UBYTE index = 0, curr_idx;

while( STILL_BLANKING )
	{
	WaitTOF();
	for( i = 1; i < maxcols; i++ )
		{
		curr_idx = index + i;
		if ( !curr_idx )
			curr_idx = 1;
		if ( aga )
			SetRGB32( &scr->ViewPort, i, cmap[curr_idx][0], cmap[curr_idx][1], cmap[curr_idx][2] );
		else
			SetRGB4( &scr->ViewPort, i, cmap[curr_idx][0], cmap[curr_idx][1], cmap[curr_idx][2] );
		}
	index++;
	if ( !index )
		index = 1;
	}
}


void New_Col( int xa, int ya, int x, int y, int xb, int yb, int color )
{
color = RangeRand( color << 1 ) - color;
color += ( GetPixel( xa, ya ) + GetPixel( xb, yb ) + 1 ) >> 1;
if ( color < 1 )
	color = 1;
else if ( color > maxcols - 1 )
	color = maxcols - 1;
if ( !GetPixel( x, y ) )
	Plot( x, y, color );
}


BOOL cont = TRUE;

void Sub_Divide( int x1, int y1, int x2, int y2 )
{
register int x, y, color,diffx,diffy ;

if ( cont && (!STILL_BLANKING) )
	cont = FALSE;

if( cont && !((x2-x1<2)&&(y2-y1<2)) )
	{
	x = ( x1 + x2 ) >> 1;
	y = ( y1 + y2 ) >> 1;
	diffx = ( x2 - x1 ) >> 1;
	diffy = ( y2 - y1 ) >> 1;
	color = diffx + diffy;
	New_Col( x1, y1, x, y1, x2, y1, color );
	New_Col( x2, y1, x2, y, x2, y2, color );
	New_Col( x1, y2, x, y2, x2, y2, color );
	New_Col( x1, y1, x1, y, x1, y2, color );
	color = ( GetPixel( x1, y1 ) + GetPixel( x2, y1 ) +
	       GetPixel( x2, y2 ) + GetPixel( x1, y2 ) + 2 ) >> 2;
	Plot( x, y, color );
	Sub_Divide( x1, y1, x, y );
	Sub_Divide( x, y1, x2, y );
	Sub_Divide( x, y, x2, y2 );
	Sub_Divide( x1, y, x, y2 );
	}
}


void Plasma( void )
{
UWORD swidth, sheight;
struct Rectangle *rect;
UBYTE brightness;
ULONG displayID;

rect = GETTXTOSCANRECT(dinfo);

swidth = RECTANGLEWIDTH(rect);
sheight = RECTANGLEHEIGHT(rect);
brightness = GETBRIGHTNESS(dinfo);

displayID = DISPLAYID(dinfo);

if ( !CheckAA() )
	{
	aga = FALSE;
	maxcols = 32;
	depth = 5;
	if (displayID & SUPERHIRES)
		{
		displayID &= ~SUPERHIRES;
		swidth >>= 2;
		}
	else if (displayID & HIRES)
		{
		displayID &= ~HIRES;
		swidth >>= 1;
		}
	}

if ( scr = OpenScreenTags( NULL,
	SA_DisplayID, displayID,
	SA_Depth, depth,
	SA_Width, swidth,
	SA_Height, sheight,
	SA_Quiet, TRUE,
	TAG_END ) )
	{
	rp = &scr->RastPort;
	bitmap = scr->RastPort.BitMap;

	SpritesOff();

	ChooseAndSetPalette( brightness );

	SetRast( &scr->RastPort, 0 );
	Plot( 0, 0, RangeRand( maxcols - 2 ) + 1 );
	Plot( swidth - 1, 0, RangeRand( maxcols - 2 ) + 1 );
	Plot( swidth - 1, sheight - 1, RangeRand( maxcols - 2 ) + 1 );
	Plot( 0, sheight - 1, RangeRand( maxcols - 2 ) + 1 );
	Sub_Divide( 0, 0, swidth - 1, sheight - 1 );
	if ( cont )
		CyclePalette();

	CloseScreen( scr );
	SpritesOn();
	}
else
	SendClientMsg( ACTION_FAILED );
}


extern ULONG RangeSeed;

void __main( char *line )
{
if ( IntuitionBase = (struct IntuitionBase *)OpenLibrary( "intuition.library", 37L ) )
	{
	if ( GfxBase = (struct GfxBase *)OpenLibrary( "graphics.library", 37L ) )
		{
		if ( dinfo = OpenCommunication() )
			{
			RangeSeed = (ULONG)time( 0L );
			Plasma();
			CloseCommunication( dinfo );
			}
		CloseLibrary( (struct Library *)GfxBase );
		}
	CloseLibrary( (struct Library *)IntuitionBase );
	}
}
