/**
 **
 **  Ultima 4 Tools by Otmar Lendl (lendl@cosy.sbg.ac.at)
 **
 **	Use and redistribution of this program is free.
 **	Please send any modifications to me.
 **
 **		Share and Enjoy !
 **
 **/

#include <stdio.h>
#define BPROW  (32*32*8)    /* one row of blocks */

unsigned char cols[256][3] = {
	{ 0, 72, 190 },{ 64, 107, 210 },{ 57, 154, 245 },{ 62, 228, 192 },
	/* ocean	water/river	shallow water		swamp */
	{ 27, 169, 86 },{ 30, 148, 32 },{ 40, 116, 80 },{ 100, 100, 100 },
	/* plains	bushland	forrest      		hills */
	{ 10, 10, 10 },{ 255, 0, 255 },{ 255, 255, 0 },{ 255, 100, 255 },
	/* mountains	dungeon		towns		castles */
	{ 200, 200, 0 },{ 255, 130, 0 },{ 255, 150, 0 },{ 255, 130, 0 },
	/* village	------ castle of Lord British ------- */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },  /* 16 -- */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 100, 60 },
					  /* bridge */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 200, 200, 0 },{ 255, 40, 140 },{ 0, 0, 0 },
	/*		magincia     shrine      */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },  /* 32 -- */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },  /* 48 -- */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 255, 255, 255 },{ 0, 0, 0 },{ 0, 0, 0 },
		/*  Ankh (on mountain) */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },  /* 64 -- */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 255, 100, 100 },{ 0, 0, 0 },
				/* volcano */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 255, 160, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	/* lava */
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },{ 0, 0, 0 },
	};
unsigned char buff[128];
unsigned char row[BPROW];

main()
{
 char filen[]="world.map";
 int sy,x,y,i,blknum,offset,count;
 FILE *fh;

 fh = fopen(filen,"rb");
 if ( fh==NULL) exit(10);

 fputs("\n Ultima IV Landscape-Converter (c) Otmar Lendl 1993 !\n",stderr);

 printf("P3\n# Ultima IV Map. Converter written by lendl@cosy.sbg.ac.at\n");
 printf("256 256\n255\n");
 count = 0;
 for(y=0;y<8;y++)		/* Schleife ueber die y ! */
	{
	if (fread(row,1,BPROW,fh) != BPROW )
		{
		puts("\nFile error !!!! \n");
		exit(20);
		}
	for(sy=0;sy<32;sy++)
		{
		for(x=0;x<256;x++)
			{
			blknum = (x /32);
			offset= blknum*32*32+sy*32 + (x&31);
			i = row[offset];
			printf( (++count % 5) ? "%3d %3d %3d "
				: "%3d %3d %3d\n",
				cols[i][0],cols[i][1],cols[i][2]);
			}
		}
	}
 printf("\n");
}




