// gc3.java - Convert 16x14 bit icon to BMP file with good artifacting rendition
// Used to convert Diecom's Gates of Delirium icons into 
// BMP files for game maps.  
// John Riddle 6-21-06
// v0.5
// v2.5 update 7/31/06 - artifacting tweak
// Usage java gc filename
// File extensions are automatically taken care of.
// Save raw binary data as .raw file
// Pulls BMP header from 24bitbmpheader.raw, must be present.
// K = black, W = white, O = orange, R = red, B = blue, T = turqoise
// Uses a derivative of the MESS artifacting

import java.io.*;
import java.lang.*;
import java.util.*;
import java.math.BigInteger;

public class gc3 {

public static void main(String[] args) throws IOException {

	  String fn1 = args[0];
	  
        byte[] test1 = new byte[55];
        FileInputStream in = new FileInputStream("24bitbmpheader.raw");
        FileOutputStream out = new FileOutputStream(fn1 + ".bmp");

	  in.read(test1, 1, 54);
        out.write(test1, 1, 54);
        in.close();
  
        ArrayList artifactcolors = new ArrayList(256);

int i=-1;
i += 1; artifactcolors.add(i,  "WWWWWWWW");//255
i += 1; artifactcolors.add(i,  "WWWWWWWK");  
i += 1; artifactcolors.add(i,  "WWWWWTBB");
i += 1; artifactcolors.add(i,  "WWWWWTKK");
i += 1; artifactcolors.add(i,  "WWWWWOWW");
i += 1; artifactcolors.add(i,  "WWWWWOOR");//250
i += 1; artifactcolors.add(i,  "WWWWWKKT");
i += 1; artifactcolors.add(i,  "WWWWWKKK");
i += 1; artifactcolors.add(i,  "WWWTBTWW");
i += 1; artifactcolors.add(i,  "WWWTBWWK");
i += 1; artifactcolors.add(i,  "WWWTBBBB");
i += 1; artifactcolors.add(i,  "WWWTBBKK");
i += 1; artifactcolors.add(i,  "WWWTKKWW");
i += 1; artifactcolors.add(i,  "WWWTKKOR");
i += 1; artifactcolors.add(i,  "WWWTKKKT");
i += 1; artifactcolors.add(i,  "WWWTKKKK");//240
i += 1; artifactcolors.add(i,  "WWWOWWWW");
i += 1; artifactcolors.add(i,  "WWWOWWWK");
i += 1; artifactcolors.add(i,  "WWWOWWBB");
i += 1; artifactcolors.add(i,  "WWWOWWKK");
i += 1; artifactcolors.add(i,  "WWWOOOWW");
i += 1; artifactcolors.add(i,  "WWWOOOOR");
i += 1; artifactcolors.add(i,  "WWWOOKKT");
i += 1; artifactcolors.add(i,  "WWWOORKK");
i += 1; artifactcolors.add(i,  "WWWKKTWW");
i += 1; artifactcolors.add(i,  "WWWKKWWK");//230
i += 1; artifactcolors.add(i,  "WWWKKTBB");
i += 1; artifactcolors.add(i,  "WWWKKTKK");
i += 1; artifactcolors.add(i,  "WWWKKKWW");
i += 1; artifactcolors.add(i,  "WWWKKROR");
i += 1; artifactcolors.add(i,  "WWWKKKKT");
i += 1; artifactcolors.add(i,  "WWWKKKKK");
i += 1; artifactcolors.add(i,  "WWBTWWWW");
i += 1; artifactcolors.add(i,  "WWBTWWWK");
i += 1; artifactcolors.add(i,  "WWBTWWBB");
i += 1; artifactcolors.add(i,  "WWBTWWKK");//220 
i += 1; artifactcolors.add(i,  "WWBWWOWW");
i += 1; artifactcolors.add(i,  "WWBWWOOR");
i += 1; artifactcolors.add(i,  "WWBWWKKT");
i += 1; artifactcolors.add(i,  "WWBWWKKK");
i += 1; artifactcolors.add(i,  "WWBBBTWW");
i += 1; artifactcolors.add(i,  "WWBBBWWK");
i += 1; artifactcolors.add(i,  "WWBBBBBB");
i += 1; artifactcolors.add(i,  "WWBBBBBK");
i += 1; artifactcolors.add(i,  "WWBBKKWW");
i += 1; artifactcolors.add(i,  "WWBBKKOR");//210 
i += 1; artifactcolors.add(i,  "WWBBKKKT");
i += 1; artifactcolors.add(i,  "WWBBKKKK");
i += 1; artifactcolors.add(i,  "WWKKWWWW");
i += 1; artifactcolors.add(i,  "WWKKWWWK");
i += 1; artifactcolors.add(i,  "WWKKWWBB");
i += 1; artifactcolors.add(i,  "WWKKWWKK");
i += 1; artifactcolors.add(i,  "WWKKOOWW");
i += 1; artifactcolors.add(i,  "WWKKOOOR");
i += 1; artifactcolors.add(i,  "WWKKOKKT");
i += 1; artifactcolors.add(i,  "WWKKORKK");//200
i += 1; artifactcolors.add(i,  "WWKKKTWW");
i += 1; artifactcolors.add(i,  "WWKKKWWK");
i += 1; artifactcolors.add(i,  "WWKKKTBB");
i += 1; artifactcolors.add(i,  "WWKKKBKK");
i += 1; artifactcolors.add(i,  "WWKKKKWW");
i += 1; artifactcolors.add(i,  "WWKKKROR");
i += 1; artifactcolors.add(i,  "WWKKKKKT");
i += 1; artifactcolors.add(i,  "WWKKKKKK");
i += 1; artifactcolors.add(i,  "OOWWWWWW");
i += 1; artifactcolors.add(i,  "OOWWWWWK");//190 
i += 1; artifactcolors.add(i,  "OOWWWTBB");
i += 1; artifactcolors.add(i,  "OOWWWTKK");
i += 1; artifactcolors.add(i,  "OOWWWOWW");
i += 1; artifactcolors.add(i,  "OOWWWOOR");
i += 1; artifactcolors.add(i,  "OOWWWKKT");
i += 1; artifactcolors.add(i,  "OOWWWKKK");
i += 1; artifactcolors.add(i,  "OOWWBTWW");
i += 1; artifactcolors.add(i,  "OOWWBWWK");
i += 1; artifactcolors.add(i,  "OOWWBBBB");
i += 1; artifactcolors.add(i,  "OOWWBBKK");//180
i += 1; artifactcolors.add(i,  "OOWWKKWW");
i += 1; artifactcolors.add(i,  "OOWWKKOR");
i += 1; artifactcolors.add(i,  "OOWWKKKT");
i += 1; artifactcolors.add(i,  "OOWWKKKK");
i += 1; artifactcolors.add(i,  "OOOOWWWW");
i += 1; artifactcolors.add(i,  "OOOOWWWK");
i += 1; artifactcolors.add(i,  "OOOOWWBB");
i += 1; artifactcolors.add(i,  "OOOOWWKK");
i += 1; artifactcolors.add(i,  "OOOOOOWW");
i += 1; artifactcolors.add(i,  "OOOOOOOR");//170
i += 1; artifactcolors.add(i,  "OOOOOKKT");
i += 1; artifactcolors.add(i,  "OOOOOORK");
i += 1; artifactcolors.add(i,  "OOOKKTWW");
i += 1; artifactcolors.add(i,  "OOOKKWWK");
i += 1; artifactcolors.add(i,  "OOOKKTBB");
i += 1; artifactcolors.add(i,  "OOOKKTKK");
i += 1; artifactcolors.add(i,  "OOORKKWW");
i += 1; artifactcolors.add(i,  "OOORKROR");
i += 1; artifactcolors.add(i,  "OOORKKKT");
i += 1; artifactcolors.add(i,  "OOORKKKK");//160
i += 1; artifactcolors.add(i,  "OKKTWWWW");
i += 1; artifactcolors.add(i,  "OKKTWWWK");
i += 1; artifactcolors.add(i,  "OKKTWWBB");
i += 1; artifactcolors.add(i,  "OKKTWWKK");
i += 1; artifactcolors.add(i,  "OKKTWOWW");
i += 1; artifactcolors.add(i,  "OKKTWOOR");
i += 1; artifactcolors.add(i,  "OKKTWKKT");
i += 1; artifactcolors.add(i,  "OKKTWKKK");
i += 1; artifactcolors.add(i,  "OKKTBTWW");
i += 1; artifactcolors.add(i,  "OKKTBWWK");//150 
i += 1; artifactcolors.add(i,  "OKKTBBBB");
i += 1; artifactcolors.add(i,  "OKKTBBKK");
i += 1; artifactcolors.add(i,  "OKKTKKWW");
i += 1; artifactcolors.add(i,  "OKKTKKOR");
i += 1; artifactcolors.add(i,  "OKKTKKKT");
i += 1; artifactcolors.add(i,  "OKKTKKKK");
i += 1; artifactcolors.add(i,  "ORKKWWWW");
i += 1; artifactcolors.add(i,  "ORKKWWWK");
i += 1; artifactcolors.add(i,  "ORKKWWBB");
i += 1; artifactcolors.add(i,  "ORKKWWKK"); //140
i += 1; artifactcolors.add(i,  "ORKROOWW");
i += 1; artifactcolors.add(i,  "ORKROOOR");
i += 1; artifactcolors.add(i,  "ORKRORRT");
i += 1; artifactcolors.add(i,  "ORKRORKK");
i += 1; artifactcolors.add(i,  "ORKKKTWW");
i += 1; artifactcolors.add(i,  "ORKKKWWK");
i += 1; artifactcolors.add(i,  "ORKKKTBB");
i += 1; artifactcolors.add(i,  "ORKKKTKK");
i += 1; artifactcolors.add(i,  "ORKKKKWW");
i += 1; artifactcolors.add(i,  "ORKKKROR");//130
i += 1; artifactcolors.add(i,  "ORKKKKKT");
i += 1; artifactcolors.add(i,  "ORKKKKKK");
i += 1; artifactcolors.add(i,  "BTWWWWWW");
i += 1; artifactcolors.add(i,  "BTWWWWWK");
i += 1; artifactcolors.add(i,  "BTWWWTBB");
i += 1; artifactcolors.add(i,  "BTWWWTKK");
i += 1; artifactcolors.add(i,  "BTWWWOWW");
i += 1; artifactcolors.add(i,  "BTWWWOOR");
i += 1; artifactcolors.add(i,  "BTWWWKKT");
i += 1; artifactcolors.add(i,  "BTWWWKKK");//120
i += 1; artifactcolors.add(i,  "BTWWBTWW");
i += 1; artifactcolors.add(i,  "BTWWBWWK");
i += 1; artifactcolors.add(i,  "BTWWBBBB");
i += 1; artifactcolors.add(i,  "BTWWBBKK");
i += 1; artifactcolors.add(i,  "BTWWKKWW");
i += 1; artifactcolors.add(i,  "BTWWKKOR");
i += 1; artifactcolors.add(i,  "BTWWKKKT");
i += 1; artifactcolors.add(i,  "BTWWKKKK");
i += 1; artifactcolors.add(i,  "BWWOWWWW");
i += 1; artifactcolors.add(i,  "BWWOWWWK");//110 
i += 1; artifactcolors.add(i,  "BWWOWWBB");
i += 1; artifactcolors.add(i,  "BWWOWWKK");
i += 1; artifactcolors.add(i,  "BWWOOOWW");
i += 1; artifactcolors.add(i,  "BWWOOOOR");
i += 1; artifactcolors.add(i,  "BWWOOKKT");
i += 1; artifactcolors.add(i,  "BWWOORKK");
i += 1; artifactcolors.add(i,  "BWWKKTWW");
i += 1; artifactcolors.add(i,  "BWWKKWWK");
i += 1; artifactcolors.add(i,  "BWWKKTBB");
i += 1; artifactcolors.add(i,  "BWWKKTKK");//100 
i += 1; artifactcolors.add(i,  "BWWKKKWW");
i += 1; artifactcolors.add(i,  "BWWKKROR");
i += 1; artifactcolors.add(i,  "BWWKKKKT");
i += 1; artifactcolors.add(i,  "BWWKKKKK");
i += 1; artifactcolors.add(i,  "BBBTWWWW");
i += 1; artifactcolors.add(i,  "BBBTWWWK");
i += 1; artifactcolors.add(i,  "BBBTWWBB");
i += 1; artifactcolors.add(i,  "BBBTWWKK");
i += 1; artifactcolors.add(i,  "BBBWWOWW");
i += 1; artifactcolors.add(i,  "BBBWWOOR"); //90
i += 1; artifactcolors.add(i,  "BBBWWKKT");
i += 1; artifactcolors.add(i,  "BBBWWKKK");
i += 1; artifactcolors.add(i,  "BBBBBTWW");
i += 1; artifactcolors.add(i,  "BBBBBWWK");
i += 1; artifactcolors.add(i,  "BBBBBBBB");
i += 1; artifactcolors.add(i,  "BBBBBBKK");
i += 1; artifactcolors.add(i,  "BBBBKKWW");
i += 1; artifactcolors.add(i,  "BBBBKKOR");
i += 1; artifactcolors.add(i,  "BBBBKKKT");
i += 1; artifactcolors.add(i,  "BBBBKKKK");//80
i += 1; artifactcolors.add(i,  "BBKKWWWW");
i += 1; artifactcolors.add(i,  "BBKKWWWK");
i += 1; artifactcolors.add(i,  "BBKKWWTT");
i += 1; artifactcolors.add(i,  "BBKKWWKK");
i += 1; artifactcolors.add(i,  "BBKKOOWW");
i += 1; artifactcolors.add(i,  "BBKKOOOR");
i += 1; artifactcolors.add(i,  "BBKKOKKT");
i += 1; artifactcolors.add(i,  "BBKKORKK");
i += 1; artifactcolors.add(i,  "BBKKKTWW");
i += 1; artifactcolors.add(i,  "BBKKKWWK");//70 
i += 1; artifactcolors.add(i,  "BBKKKTBB");
i += 1; artifactcolors.add(i,  "BBKKKTKK");
i += 1; artifactcolors.add(i,  "BBKKKKWW");
i += 1; artifactcolors.add(i,  "BBKKKROR");
i += 1; artifactcolors.add(i,  "BBKKKKKT");
i += 1; artifactcolors.add(i,  "BBKKKKKK");
i += 1; artifactcolors.add(i,  "KKWWWWWW");
i += 1; artifactcolors.add(i,  "KKWWWWWK");
i += 1; artifactcolors.add(i,  "KKWWWTBB");
i += 1; artifactcolors.add(i,  "KKWWWTKK");//60
i += 1; artifactcolors.add(i,  "KKWWWOWW");
i += 1; artifactcolors.add(i,  "KKWWWOOR");
i += 1; artifactcolors.add(i,  "KKWWWKKT");
i += 1; artifactcolors.add(i,  "KKWWWKKK");
i += 1; artifactcolors.add(i,  "KKWWBTWW");
i += 1; artifactcolors.add(i,  "KKWWBWWK");
i += 1; artifactcolors.add(i,  "KKWWBBBB");
i += 1; artifactcolors.add(i,  "KKWWBBKK");
i += 1; artifactcolors.add(i,  "KKWWKKWW");
i += 1; artifactcolors.add(i,  "KKWWKKOR");//50
i += 1; artifactcolors.add(i,  "KKWWKKKT");
i += 1; artifactcolors.add(i,  "KKWWKKKK");
i += 1; artifactcolors.add(i,  "KKOOWWWW");
i += 1; artifactcolors.add(i,  "KKOOWWWK");
i += 1; artifactcolors.add(i,  "KKOOWWBB");
i += 1; artifactcolors.add(i,  "KKOOWWKK");
i += 1; artifactcolors.add(i,  "KKOOOOWW");
i += 1; artifactcolors.add(i,  "KKOOOOOR");
i += 1; artifactcolors.add(i,  "KKOOOKKT");
i += 1; artifactcolors.add(i,  "KKOOORKK");//40
i += 1; artifactcolors.add(i,  "KKOKKTWW");
i += 1; artifactcolors.add(i,  "KKOKKWWK");
i += 1; artifactcolors.add(i,  "KKOKKTBB");
i += 1; artifactcolors.add(i,  "KKOKKTKK");
i += 1; artifactcolors.add(i,  "KKORKKWW");
i += 1; artifactcolors.add(i,  "KKORKROR");
i += 1; artifactcolors.add(i,  "KKORKKKT");
i += 1; artifactcolors.add(i,  "KKORKKKK");
i += 1; artifactcolors.add(i,  "KKKTWWWW");
i += 1; artifactcolors.add(i,  "KKKTWWWK");//30
i += 1; artifactcolors.add(i,  "KKKTWWBB");
i += 1; artifactcolors.add(i,  "KKKTWWKK");
i += 1; artifactcolors.add(i,  "KKKWWOWW");
i += 1; artifactcolors.add(i,  "KKKWWOOR");
i += 1; artifactcolors.add(i,  "KKKWWKKT");
i += 1; artifactcolors.add(i,  "KKKWWKKK");
i += 1; artifactcolors.add(i,  "KKKTBTWW");
i += 1; artifactcolors.add(i,  "KKKTBWWK");
i += 1; artifactcolors.add(i,  "KKKTBBBB");
i += 1; artifactcolors.add(i,  "KKKTBBKK");//20
i += 1; artifactcolors.add(i,  "KKKTKKWW");
i += 1; artifactcolors.add(i,  "KKKTKKOR");
i += 1; artifactcolors.add(i,  "KKKTKKKT");
i += 1; artifactcolors.add(i,  "KKKTKKKK");
i += 1; artifactcolors.add(i,  "KKKKWWWW");
i += 1; artifactcolors.add(i,  "KKKKWWWK");
i += 1; artifactcolors.add(i,  "KKKKWWBB");
i += 1; artifactcolors.add(i,  "KKKKWWKK");
i += 1; artifactcolors.add(i,  "KKKROOWW");
i += 1; artifactcolors.add(i,  "KKKROOOR");//10
i += 1; artifactcolors.add(i,  "KKKROKKT");
i += 1; artifactcolors.add(i,  "KKKRORKK");
i += 1; artifactcolors.add(i,  "KKKKKTTW");
i += 1; artifactcolors.add(i,  "KKKKKWWK");
i += 1; artifactcolors.add(i,  "KKKKKTBB");
i += 1; artifactcolors.add(i,  "KKKKKTKK");
i += 1; artifactcolors.add(i,  "KKKKKKWW");
i += 1; artifactcolors.add(i,  "KKKKKROR");
i += 1; artifactcolors.add(i,  "KKKKKKKT");
i += 1; artifactcolors.add(i,  "KKKKKKKK");//0

  
int size = artifactcolors.size();
//System.out.println(size);


	  FileInputStream in2 = new FileInputStream(fn1 + ".raw");

	  byte[] test2 = new byte[29];
	  in2.read(test2, 1, 28);

	byte[] black = new byte[3];
	byte[] white = new byte[3];
	byte[] blue = new byte[3];
	byte[] red = new byte[3];
	byte[] turq = new byte[3];
	byte[] orange = new byte[3];

	short c0 = 38;
	short c1 = 113;
	short c2 = 251;

	Short color0= new Short(c0);
	Short color1= new Short(c1);
	Short color2= new Short(c2);

	byte blue0 = color0.byteValue();
	byte blue1 = color1.byteValue();
	byte blue2 = color2.byteValue();

	c0 = 39;
	c1 = 213;
	c2 = 250;

	color0= new Short(c0);
	color1= new Short(c1);
	color2= new Short(c2);

	byte turq0 = color0.byteValue();
	byte turq1 = color1.byteValue();
	byte turq2 = color2.byteValue();

	c0 = 221;
	c1 = 125;
	c2 = 68;

	color0= new Short(c0);
	color1= new Short(c1);
	color2= new Short(c2);

	byte orange0 = color0.byteValue();
	byte orange1 = color1.byteValue();
	byte orange2 = color2.byteValue();

	c0 = 210;
	c1 = 45;
	c2 = 45;

	color0= new Short(c0);
	color1= new Short(c1);
	color2= new Short(c2);

	byte red0 = color0.byteValue();
	byte red1 = color1.byteValue();
	byte red2 = color2.byteValue();

	c0 = 255;

	color0= new Short(c0);

	byte white0 = color0.byteValue();

     	c0 = 0;

	color0= new Short(c0);

	byte black0 = color0.byteValue();

	blue[0] = blue2;
	blue[1] = blue1;
	blue[2] = blue0;

	turq[0] = turq2;
	turq[1] = turq1;
	turq[2] = turq0;

	orange[0] = orange2;
	orange[1] = orange1;
	orange[2] = orange0;

	red[0] = red2;
	red[1] = red1;
	red[2] = red0;
	
	black[0] = black0;
	black[1] = black0;
	black[2] = black0;

	white[0] = white0;
	white[1] = white0;
	white[2] = white0;


	i = 27;

	  while (i > 0) 
		{

		int test3 = test2[i] & 0xff;
		int test4 = test2[i+1] & 0xff;
//		System.out.println(test3);
		test3 = 255 - test3;
		test4 = 255 - test4;
		
	
		String art = (String) artifactcolors.get(test3);

		char char1;		
		for (int l = 0; l < 8; l++) 
			{
			char1 = art.charAt(l);


			switch (char1) {
				case 'K': out.write(black);
				break;
				case 'W': out.write(white);
				break;
				case 'O': out.write(orange);
				break;
				case 'R': out.write(red);
				break;
				case 'B': out.write(blue);
				break;
				case 'T': out.write(turq);
				break;

				}
			}		
		art = (String) artifactcolors.get(test4);

		for (int m = 0; m < 8; m++) 
			{
			char1 = art.charAt(m);


			switch (char1) {
				case 'K': out.write(black);
				break;
				case 'W': out.write(white);
				break;
				case 'O': out.write(orange);
				break;
				case 'R': out.write(red);
				break;
				case 'B': out.write(blue);
				break;
				case 'T': out.write(turq);
				break;

				}
			}		


//		System.out.println(art);
//		out.write(test2, i, 3);
//		i = i - 3;	
		i -= 2;
		}
		
	  in2.close();
        out.close();
    }
}
