Seite 1 von 1

von C nach PB

Verfasst: 09.03.2006 10:21
von x_to
kann das bitte jemand mal übersetzen..??

der code nutzt die Allegro lib, aber die funktionen können ja mit PB funktionen ersetzt werden...
ich würde mich ja gern selbst ranmachen, aber nul lahnung von C... :oops:

Code: Alles auswählen

// #define ALLEGRO_STATICLINK

#include <allegro.h>
#include "tdgui.h"
#include <stdio.h>
#include <string.h>

volatile int target_game_time = 0;

int fsize;
FILE * file;

unsigned char * mem = 0;

#define scrW 800
#define scrH 600

#define hole 2
#define legend 9

int offset = 0;
//int offset = 1322704;
int blXSize = 320/8;
int blYSize = 200;
//int blYSize = 112;

int contin_save = 1;

int bits = 1;
//int bits = 8;

int skip = 0;
int skipmode = 0; // 0 = skip bytes after picture , 1 = skip bytes after each bitplane
char skipmoder;

bool reverse = false;
int mode = 0;
int palsearchmode = 2;

char pmoder[4] = { 'S', 'X', 'E', 'A' };

BITMAP * bitmap;

RGB pal[256];

int numX;
int numY;

bool zoom = false;

char goto_num[255];

int ttt=0;
int palfound = 0;

int bplorder[8] = {0,1,2,3,4,5,6,7};

char gotottt[256] = "Go To BYTE:";

DIALOG goto_dialog[] =
{
	/* (dialog proc)         (x)   (y)   (w)  (h)   (fg)(bg) (key)    (flags)  (d1)  (d2)    (dp) */
	{ d_billwin_proc,         0,    0,  180,  60,   255,  0,    0,         0,
																 BW_BUFFEREDUPDATE,    0,    gotottt },
		
	{ d_billbutton_proc,	100,   28,   70,  15,   255,  0,   27,    D_EXIT,    0,    0,    "DONE"},

	{ d_billedit_proc,		 10,   30,   70,  12,     0,  0,    0,         0,    8,    0,    goto_num },
	
	{ NULL,                   0,    0,    0,   0,     0,  0,    0,         0,    0,    0,    NULL }
};

char save_name[255] = "p.bmp";
char save_x[255] = "1";
char save_y[255] = "1";
char save_border[255] = "0";
char save_bcolor[255] = "253";

DIALOG save_dialog[] =
{
	/* (dialog proc)         (x)   (y)   (w)  (h)   (fg)(bg) (key)    (flags)  (d1)  (d2)    (dp) */
	{ d_billwin_proc,         0,    0,  320, 130,   255,  0,    0,         0,
																 BW_BUFFEREDUPDATE,    0,    "Save Picture(s)" },
		
	{ d_billbutton_proc,	210,  105,   70,  15,   255,  0,   27,    D_EXIT,    0,    0,    "EXIT"},
	
	{ d_billtext_proc,       10,   23,    0,   0,     0,  0,    0,         0,    0,    0,    "Filename:" },
	{ d_billedit_proc,		 90,   21,  220,  12,     0,  0,    0,         0,  200,    0,    save_name },

	{ d_billtext_proc,       10,   50,    0,   0,     0,  0,    0,         0,    0,    0,    "Pictures in X:" },
	{ d_billedit_proc,		130,   48,   40,  12,     0,  0,    0,         0,    8,    0,    save_x },
	
	{ d_billtext_proc,       10,   70,    0,   0,     0,  0,    0,         0,    0,    0,    "Pictures in Y:" },
	{ d_billedit_proc,		130,   68,   40,  12,     0,  0,    0,         0,    8,    0,    save_y },

	{ d_billtext_proc,      190,   40,    0,   0,     0,  0,    0,         0,    0,    0,    "Save Direction:" },
	{ d_billradio_proc,		190,   55,   60,  12,     0,  0,    0,D_SELECTED,    0,    0,    "Left -> Right" },
	{ d_billradio_proc,		190,   70,   60,  12,     0,  0,    0,         0,    0,    0,    "Up -> Down" },

	{ d_billbutton_proc,	 40,  105,   70,  15,   255,  0,   27,    D_EXIT,    0,    0,    "SAVE"},

	{ d_billtext_proc,       10,   90,    0,   0,     0,  0,    0,         0,    0,    0,    "Border Around:" },
	{ d_billedit_proc,		130,   88,   40,  12,     0,  0,    0,         0,    8,    0,    save_border },
	
	{ d_billtext_proc,      185,   90,    0,   0,     0,  0,    0,         0,    0,    0,    "Colour:" },
	{ d_billedit_proc,		250,   88,   40,  12,     0,  0,    0,         0,    8,    0,    save_bcolor },
	
	{ NULL,                   0,    0,    0,   0,     0,  0,    0,         0,    0,    0,    NULL }
};

int getpixelcol(int pos, int x, int y)
{
	bool bit[8];
	int p;
	int byte1;
	int bit1;
	int nn;
	int bitn;

	for (int i=0; i < 8; i++)
	{
		bit[i]=false;
	}

	for (i=0; i < bits; i++)
	{
		switch (mode)
		{
		case 0:
			// Amiga type bitplanes
			p = pos+(blXSize*blYSize)*(i);
			nn = x+(y*(blXSize*8));
			break;
		case 1:
			// ST Type bitplanes
			p = pos+blXSize*(i);
			nn = x+(bits*y*(blXSize*8));
			break;
		case 2:
			// mode == 2	// Amiga Sprite !!!
			if (i < 2)
			{
				p = pos+blXSize*(i);
				nn = x+((2*y)*(blXSize*8));
			}
			else
			{
				p = pos+blXSize*(i-2)+(blYSize*blXSize)*2;
				nn = x+((2*y)*(blXSize*8));
			}
			break;
		case 3:
			// mode == 3 // CPC gfx for Bat-Man / HoH
			p = pos+(x/8)+i;
			nn = x+((2*y)*(blXSize*8));
			break;
		case 4:
			//  mode ==4 // CPC gfx for Ultimate games
			p = pos+(x/4)+(blXSize*y*2);
			nn = (i*4)+x%4;
			break;
		}
		if (skipmode == 1)
		{
			p+=skip*i;
		}
		byte1 = nn/8;
		bit1 = 7-(nn%8);
		if (reverse)
		{
			bitn = (bits-i)-1;
		}
		else
		{
			bitn = i;
		}
		if (p+byte1 < fsize)
		{
			if (mem[p+byte1] & (1 << bit1))
			{
				bit[bitn] = true;
			}
			else
			{
				bit[bitn] = false;
			}
		}
		else
		{
			bit[bitn] = false;
		}
	}
	int col = 0;
	for (i=0; i < bits; i++)
	{
		if (bit[bplorder[i]])
		{
			col+=1<<i;
		}
	}
	return col;
}

void drawbitmap(BITMAP * bmp, int pos, int xx, int yy)
{
	for (int x = 0; x < blXSize*8; x ++)
	{
		for (int y = 0; y < blYSize; y++)
		{
			putpixel(bmp, xx+x, yy+y, getpixelcol(pos, x, y));
		}
	}
}

void drawstuff()
{
	int xx, yy;

	int pos = offset;

	for (int y=0; y < numY; y++)
	{
		for (int x=0; x < numX; x++)
		{
			xx = x*(blXSize*8+hole);
			yy = legend+y*(blYSize+hole);

			drawbitmap(bitmap, pos, xx, yy);
//			pos+=((blXSize*blYSize)*bits)+skip;
			if (skipmode == 0)
			{
				pos+=((blXSize*blYSize)*bits)+skip;
			}
			else
			{
				pos+=((blXSize*blYSize+skip)*bits);
			}
		}
	}
}

void draw_zoom()
{
	int xx, yy;
	
	xx = scrW-(blXSize*8*2+4);
	yy = scrH-(blYSize*2+4);

	if (xx < scrW/2)
	{
		xx = scrW/2;
	}
	if (yy < scrH/2)
	{
		yy = scrH/2;
	}
	stretch_blit(bitmap, bitmap, 0, legend, blXSize*8, blYSize, xx+2, yy+2, blXSize*8*2, blYSize*2);
	rect(bitmap,xx,yy,scrW-1,scrH-1,makecol(0,0,255));
	rect(bitmap,xx+1,yy+1,scrW-2,scrH-2,253);
}

void refresh()
{
	clear_to_color(bitmap, 253);

	text_mode(-1);

	numX = scrW/(blXSize*8+hole);
	numY = (scrH-legend)/(blYSize+hole);
	
	if (numX == 0)
	{
		numX = 1;
	}
	if (numY == 0)
	{
		numY= 1;
	}
	char rev;
	if (reverse)
	{
		rev = 'R';
	}
	else
	{
		rev = 'N';
	}

	char moder[3];
	switch (mode)
	{
	case 0:
		strcpy(moder, "AM");
		break;
	case 1:
		strcpy(moder, "ST");
		break;
	case 2:
		strcpy(moder, "SP");
		break;
	case 3:
		strcpy(moder, "C+");
		break;
	case 4:
		strcpy(moder, "C-");
		break;
	}
	if (skipmode == 0)
	{
		skipmoder = 'P';
	}
	else
	{
		skipmoder = 'B';
	}
	textprintf(bitmap, font, 0, 0, 254, "Off:%7i Siz: X:%4i Y:%4i Bit:%i Vis.X:%2i Y:%2i Pal%c:%7i Mode:%s Skip-%c:%4i Order:%c %i%i%i%i%i%i%i%i", offset,blXSize*8, blYSize, bits, numX, numY, pmoder[palsearchmode], palfound, moder, skipmoder, skip, rev,
		bplorder[7], bplorder[6], bplorder[5], bplorder[4], bplorder[3], bplorder[2], bplorder[1], bplorder[0] );
	
	drawstuff();

	if (zoom)
	{
		draw_zoom();
	}

	blit(bitmap, screen, 0, 0, 0, 0, scrW, scrH);		
}

void genpal()
{
	srand(1);
	for (int i=0; i < 256; i++)
	{
		pal[i].r = rand()%64;
		pal[i].g = rand()%64;
		pal[i].b = rand()%64;
	}
	pal[1].r = pal[1].g = pal[1].b = 0;
	pal[0].r = pal[0].g = pal[0].b = 63;
	pal[254].r = pal[254].g = pal[254].b = 0;
	pal[253].r = pal[253].g = pal[253].b = 50;
	pal[253].b = 53;
}
int parse_number(char * str)
{
	int t;

	if (str[0] == 0)
	{
		return 0;
	}
	sscanf(str, "%d", &t);
	return t;
}

void goto_bye()
{
	sprintf(gotottt, "Go To BYTE:");

	sprintf(goto_num, "%i", offset);
	unscare_mouse();
	
	init_moveable(goto_dialog);

	show_mouse(screen);

	do_dialog (goto_dialog, 0);
	
	shutdown_moveable(goto_dialog);

	scare_mouse();

	offset = parse_number(goto_num);
}

void skip_bye()
{
	sprintf(gotottt, "Skip Value:");
	
	sprintf(goto_num, "%i", offset);
	unscare_mouse();
	
	init_moveable(goto_dialog);
	
	show_mouse(screen);
	
	do_dialog (goto_dialog, 0);
	
	shutdown_moveable(goto_dialog);
	
	scare_mouse();
	
	skip = parse_number(goto_num);
}

void prepare_save_name()
{
	char temp[256];
	char temp2[256];
	int t;
	bool ok;

	strcpy(temp, save_name);
	t = strlen(temp);

	while (t >= 0 && temp[t] != '.')
	{
		t--;
	}
	temp[t] = 0;
	ok = false;
	if (t > 3)
	{
		if (temp[t-1] >= '0' && temp[t-1] <= '9' &&
			temp[t-2] >= '0' && temp[t-2] <= '9' &&
			temp[t-3] >= '0' && temp[t-3] <= '9')
		{
			ok = true;
		}
	}
	if (!ok)
	{
		strcat(temp, "000.bmp");
		contin_save = 1;
	}
	else
	{
		sprintf(temp2, "%03i.bmp", contin_save);
		temp[t-3] = 0;
		strcat(temp, temp2);
		contin_save++;
	}
	strcpy(save_name,temp);
}

void save(bool cont)
{
	int t;
	char tempn[256];

	if (cont)
	{
		prepare_save_name();
	}

	unscare_mouse();
	
	init_moveable(save_dialog);
	
	show_mouse(screen);
	
	t = do_dialog (save_dialog, 0);
	
	shutdown_moveable(save_dialog);
	
	scare_mouse();

	if (t != 1)
	{
		int numX = parse_number(save_x);
		int numY = parse_number(save_y);
		int border = parse_number(save_border);
		int bcolor = parse_number(save_bcolor);
		if (numX < 1)
		{
			numX = 1;
		}
		if (numY < 1)
		{
			numY = 1;
		}
		bool direction = false;
		if (save_dialog[9].flags & D_SELECTED)
		{
			direction = true;
		}
		int xs = (blXSize*8+border)*numX;
		int ys = (blYSize+border)*numY;

		BITMAP * temp = create_bitmap(xs, ys);

		clear_to_color(temp, bcolor);

		int xx, yy;		
		int pos = offset;

		if (!direction)
		{
			for (int x=0; x < numX; x++)
			{
				for (int y=0; y < numY; y++)
				{
					xx = x*(blXSize*8+border);
					yy = y*(blYSize+border);
					
					drawbitmap(temp, pos, xx, yy);
					pos+=(blXSize*blYSize)*bits+skip;
				}
			}
		}
		else
		{
			for (int y=0; y < numY; y++)
			{
				for (int x=0; x < numX; x++)
				{
					xx = x*(blXSize*8+border);
					yy = y*(blYSize+border);
					
					drawbitmap(temp, pos, xx, yy);
					pos+=(blXSize*blYSize)*bits+skip;
				}
			}
		}

		if (exists(save_name))
		{
			if ( billalert("Question!",
				"This file already exists !",
				"Do you want to overwrite it ?",
				"NO", "YES", 27, 0) == 2)
			{
				save_bmp(save_name, temp, pal);		
				destroy_bitmap(temp);
			}
			return;
		}
		save_bmp(save_name, temp, pal);		
		destroy_bitmap(temp);
	}
}

void grab_uae()
{
	// Simpler method to find palettes !
	bool found = false;
	while (!found && ttt < fsize-64)
	{
		if (mem[ttt] == 0x01 && mem[ttt+1] == 0x80 && mem[ttt+4] == 0x01 && mem[ttt+5] == 0x82)
		{
			found = true;
			palfound = ttt;
			int c1, c2;
			int r,g,b;
			for (int i=0; i < 32; i++)
			{
				c1 = mem[ttt+2+i*4];
				c2 = mem[ttt+3+i*4];
				r = (c1&0x0f)<<2;
				g = (c2&0xf0)>>2;
				b = (c2&0x0f)<<2;
				
				pal[i].r = r;
				pal[i].g = g;
				pal[i].b = b;
			}
			set_pallete(pal);			
		}
		ttt++;
	}
	if (!found)
	{
		ttt = 0;
	}
}

void grab_uae2()
{
	// More advanced method to find palettes !
	bool colfound[32];
	bool nomorecols = false;
	int foundcolors = 0;
	
	for (int i=0; i < 32; i++)
	{
		colfound[i] = false;
	}
	bool found = false;
	while (!found && ttt < fsize-64)
	{
		if (mem[ttt+0] == 0x01 && mem[ttt+1] >= 0x80 && mem[ttt+1] <=0x9f &&
			mem[ttt+4] == 0x01 && mem[ttt+5] >= 0x80 && mem[ttt+5] <=0x9f &&
			mem[ttt+8] == 0x01 && mem[ttt+9] >= 0x80 && mem[ttt+9] <=0x9f &&
			mem[ttt+12] == 0x01 && mem[ttt+13] >= 0x80 && mem[ttt+13] <=0x9f)
		{
			found = true;
			palfound = ttt;
			int c1, c2;
			int r,g,b;
			
			int i=0;
			int colind = 0;
			bool ended = false;

			while (ttt+(i*4) < fsize-2 && !ended)
			{
				if (mem[ttt+(i*4)+0] == 0xff && mem[ttt+(i*4)+1] == 0xff)
				{
					ended = true;
				}
				else
				{
					if (mem[ttt+1+(i*4)] >= 0x80 && mem[ttt+1+(i*4)] <= 0xbf)
					{
						colind = (mem[ttt+1+(i*4)]-0x80)>>1;
						if (!colfound[colind])
						{
							colfound[colind] = true;
							c1 = mem[ttt+2+(i*4)];
							c2 = mem[ttt+3+(i*4)];
							r = (c1&0x0f)<<2;
							g = (c2&0xf0)>>2;
							b = (c2&0x0f)<<2;
							
							pal[colind].r = r;
							pal[colind].g = g;
							pal[colind].b = b;
							if (!nomorecols)
							{
								foundcolors+=4;
							}
						}
						else
						{
							nomorecols = true;
						}
					}
					else
					{
						nomorecols = true;
					}
				}
				i++;
			}
			set_pallete(pal);			
		}
		if (foundcolors > 0)
		{
			ttt+=foundcolors;
		}
		else
		{
			ttt++;
		}
	}
	if (!found)
	{
		ttt = 0;
	}
}

int find_chunk(char * name)
{
	int pos = 0;
	int add = 0;
	int len2;
	while (pos < fsize)
	{
		if (!memcmp(name, &mem[pos], 4))
		{
			// found
			return pos;
		}
		add = mem[pos+4]*256*256*256+mem[pos+5]*256*256+mem[pos+6]*256+mem[pos+7]+4;
		pos += add;
		/* alignment */
		len2 = add & 3;
		pos -= len2;
		
	}
	return -1;
}

void grab_uae3()
{
	// Grab the palette from the snapshot
	int pos;
	pos = find_chunk("CHIP");
	if (pos != -1)
	{
		palfound = pos+4+8+4+0x0180 - (64 + 12*8);
		for (int i=0; i < 63; i++)
		{
			int c1, c2;
			int r,g,b;

			c1 = mem[palfound+i*2];
			c2 = mem[palfound+i*2+1];
			r = (c1&0x0f)<<2;
			g = (c2&0xf0)>>2;
			b = (c2&0x0f)<<2;
			
			pal[i].r = r;
			pal[i].g = g;
			pal[i].b = b;
		}
		set_pallete(pal);			
	}
}

void grab_uae3aga()
{
	// Grab the AGA palette from the snapshot
	int pos;
	pos = find_chunk("AGAC");
	if (pos != -1)
	{
		palfound = pos+8+4;
		for (int i=0; i < 256; i++)
		{
			int r,g,b;

			r = mem[palfound+i*4+1];
			g = mem[palfound+i*4+2];
			b = mem[palfound+i*4+3];

			pal[i].r = r>>2;
			pal[i].g = g>>2;
			pal[i].b = b>>2;
		}
		set_pallete(pal);			
	}
}


void getpalettefile()
{
	BITMAP * t;

	FILE * f;
	char buf[255] = "";
	int ret = billfile_select("Select BMP file", buf, "bmp");
	if (ret != 0)
	{
		f = fopen(buf, "rt");
		if (f != NULL)
		{
			t = load_bmp(buf, pal);
			if (t != NULL)
			{
				set_pallete(pal);	
				destroy_bitmap(t);				
			}
		}
	}
}

int main(int argc, char *argv[])
{

	install_allegro(SYSTEM_AUTODETECT, &errno, atexit);

	
	install_mouse();
	if(install_keyboard())
	{
		allegro_exit();
		allegro_message("Error installing keyboard handler.\nExiting");
		return -1;
	}
	set_color_depth(8);
	if(0 > set_gfx_mode(GFX_DIRECTX_WIN, scrW, scrH, 0, 0))
	{
		allegro_exit();
		allegro_message("Error setting graphics mode.\nExiting");
		return -1;
	}
	genpal();
	
	set_pallete(pal);	
	
	bill_init();
	//		bill_init_smallpal(17);		
	set_gui_mode(1);

	char buf[255] = "";
	
	if (argc < 2)
	{
		billfile_select("Select file", buf, NULL);
	}
	else
	{
		strcpy(buf, argv[1]);
	}
	file = fopen(buf, "rb");
	if (file != NULL)
	{
		fsize = file_size(buf);
		if (fsize !=0)
		{
			mem = (unsigned char *) malloc(fsize);
			if (mem != 0)
			{
				fread((void *) mem, 1, fsize, file);
			}
		}
	}
	
	if (mem != 0)
	{
		bitmap = create_bitmap(scrW, scrH);		
		
		int keyp = 0;
	
		centre_dialog(goto_dialog);
		centre_dialog(save_dialog);
		
		while (keyp != KEY_ESC)
		{
			refresh();
			keyp = readkey();
			keyp>>=8;
			if (keyp >= KEY_0 && keyp <= KEY_8)
			{
				int nn = keyp-KEY_0;
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					bplorder[nn]--;
					if (bplorder[nn] < 0)
					{
						bplorder[nn]=7;
					}
				}
				else
				{
					bplorder[nn]++;
					if (bplorder[nn] > 7)
					{
						bplorder[nn]=0;
					}
				}
			}
			int modeskip = 1;
			if (mode == 1)
			{
				modeskip = bits;
			}
			switch(keyp)
			{
			case KEY_B:
				pal[0].r = pal[0].b = 63;
				pal[0].g = 0;
				set_pallete(pal);	
				break;
			case KEY_MINUS:
				if (bplorder[0]>0)
				{
					bplorder[0]--;
				}
				else
				{
					bplorder[0]=7;
				}
				break;
			case KEY_UP:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					if (offset >= (blXSize*8*modeskip) )
					{
						offset-=blXSize*8*modeskip;
					}
				}
				else
				{
					if (offset >= blXSize*modeskip )
					{
						offset-=blXSize*modeskip;
					}
				}
				break;
			case KEY_DOWN:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					if (offset < (fsize-blXSize*8*modeskip))
					{
						offset+=blXSize*8*modeskip;
					}
				}
				else
				{
					if (offset < fsize-(blXSize*modeskip))
					{
						offset+=blXSize*modeskip;
					}
				}
				break;
			case KEY_LEFT:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					if (offset >= (blXSize*blYSize*bits)+skip )
					{
						offset-=(blXSize*blYSize*bits)+skip;
					}
				}
				else
				{
					if (offset > 0)
					{
						offset--;
					}
				}
				break;
			case KEY_RIGHT:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					if (offset < fsize-((blXSize*blYSize*bits)+skip))
					{
						offset+=(blXSize*blYSize*bits)+skip;
					}
				}
				else
				{
					if (offset < fsize)
					{
						offset++;
					}
				}
				break;
			case KEY_E:
				if (bits < 8)
				{
					bits++;
				}
				break;
			case KEY_D:
				if (bits > 1)
				{
					bits--;
				}
				break;
			case KEY_W:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					blYSize+=8;
				}
				else
				{
					blYSize++;
				}
				break;
			case KEY_S:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					if (blYSize > 9)
					{
						blYSize-=8;
					}
				}
				else
				{
					if (blYSize > 1)
					{
						blYSize--;
					}
				}
				break;
			case KEY_Q:
				blXSize++;
				break;
			case KEY_A:
				if (blXSize > 1)
				{
					blXSize--;
				}
				break;
			case KEY_G:
				goto_bye();
				break;				
			case KEY_H:
				skip_bye();
				break;
				
			case KEY_P:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					save(true);
				}
				else
				{
					save(false);
				}
				break;
			case KEY_L:
				switch (palsearchmode)
				{
				case 0:
					grab_uae();
					break;
				case 1:
					grab_uae2();
					break;
				case 2:
					grab_uae3();
					break;
				case 3:
					grab_uae3aga();
					break;
				}
				break;
			case KEY_J:
				ttt = palfound;
				switch (palsearchmode)
				{
				case 0:
					grab_uae();
					break;
				case 1:
					grab_uae2();
					break;
				case 2:
					grab_uae3();
					break;
				case 3:
					grab_uae3aga();
					break;
				}
				break;
			case KEY_K:
				genpal();				
				set_pallete(pal);	
				break;
			case KEY_U:
				zoom = !zoom;
				break;
			case KEY_R:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					skip+=8;
				}
				else
				{
					skip++;
				}
				break;
			case KEY_F:
				if (key[KEY_LSHIFT] || key[KEY_RSHIFT])
				{
					if (skip > 7)
					{
						skip-=8;
					}
				}
				else
				{
					if (skip > 0)
					{
						skip--;
					}
				}
				break;
			case KEY_N:
				reverse = !reverse;
				break;
			case KEY_M:
				mode+=1;
				if (mode == 5)
				{
					mode = 0;
				}
				break;
			case KEY_Z:
				palsearchmode+=1;
				if (palsearchmode == 4)
				{
					palsearchmode = 0;
				}
				break;
			case KEY_C:
				getpalettefile();
				break;
			case KEY_X:
				if (skipmode == 0)
				{
					skipmode = 1;
				}
				else
				{
					skipmode = 0;
				}
				break;
			}
			clear_keybuf();
		}

		destroy_bitmap(bitmap);
		free (mem);
	}
	return 0;
}
END_OF_MAIN()
danke im vorraus

Verfasst: 09.03.2006 15:13
von KeyKon
Die ganzen IncludeFiles müssen auch übersetzt werden...

KeyKon

Verfasst: 09.03.2006 15:14
von 125
Frage: Was tut der Code überhaupt?

Verfasst: 09.03.2006 15:34
von ts-soft
benutzt Allegro: http://alleg.sourceforge.net/index.de.html
Das bedeutet die Übersetzung bringt nur was, wenn es einen Wrapper für die
Lib gibt.

Verfasst: 09.03.2006 15:41
von x_to
das ist der source von diesem tool..
http://retrospec.sgn.net/game-links.php?link=gfxrip

die allegro wird nur genutzt für die grafikausgabe und tastaturabfrage...

ausgenommen davon ist es eigentlich reiner C Code...
ich entferne mal alles unwichtige was man mit PB realisieren kann und dann schauen wir mal weiter...

die sache ist nur daß ich zu dem tool, das momentan nur tastaturgesteuert ist eine GUI hinzufügen wollte...

aber zu reinen testzwecken wollte ich mal schauen ob es unter PB auch schnell genug läuft...ein kollege hat es schon zu einem VB umgeschrieben aber leider läuft das im schneckentempo...
sollte es mit PB schneller laufen, dann kann man VB langsam wirklich in die tonne treten... :)

aber ich denke C ist dort trotzdem ungeschlagen.... 8)

Verfasst: 09.03.2006 17:17
von armada
x_to hat geschrieben:das ist der source von diesem tool..
http://retrospec.sgn.net/game-links.php?link=gfxrip

die allegro wird nur genutzt für die grafikausgabe und tastaturabfrage...

ausgenommen davon ist es eigentlich reiner C Code...
ich entferne mal alles unwichtige was man mit PB realisieren kann und dann schauen wir mal weiter...

die sache ist nur daß ich zu dem tool, das momentan nur tastaturgesteuert ist eine GUI hinzufügen wollte...

aber zu reinen testzwecken wollte ich mal schauen ob es unter PB auch schnell genug läuft...ein kollege hat es schon zu einem VB umgeschrieben aber leider läuft das im schneckentempo...
sollte es mit PB schneller laufen, dann kann man VB langsam wirklich in die tonne treten... :)

aber ich denke C ist dort trotzdem ungeschlagen.... 8)
ich hab das mal bei mir getestet...c is in rechenoperationen genauso schnell wie pb...und vb :lol: da is sogar die tonne zu schade^^

aber jetzt was macht das ding...hab keine lust mich durch 100te zeilen source zu lesen

Verfasst: 09.03.2006 19:07
von x_to
mit dem teil kann man memory dumps vom amiga laden und aus diesen dann die zur zeit im speicher befindlichen grafiken rippen.

die dumps oder besser savestates kann man mit Winuae erstellen.
am anfang sieht man nur lauter kleine schwarze punkte, mehr nicht...jeder einzelne punkt stellt ein gesetztes bit in der datei dar. d.h. die datei kann man "sichtbar" machen.
die grafiken sind auf dem amiga ja bekanntlich in bitplanes aufgeteilt und mit dem tool kann man je nach gewünschter farbtiefe die planes übereinander packen...
wenn man die einzelnen grafiken dann gefunden hat bietet es noch die möglichkeit nach einer geeigneten palette zu suchen. in vielen fällen funktioniert das auch wunderbar.
außerdem kann man durch die datei scrollen, einzelne bitplanes um einige bytes verschieben, zusätzlich zoomen, etc...
das programm selbst ist schon eine feine sache, allerdings fehlt eine geeignete GUI... :cry:

um mal einen eindruck davon zu bekommen hier mal eine seite mit bereits gerippten grafiken:

http://ipdb.ath.cx/_pubtest/tagl/

sinn der ganzen sache ist es anderen hobbyprogrammierern remakes alter spiele mit den vorhandenen sprites etwas zu bieten...
ich selbst erstelle anhand von tiles (die mit diesem tool erstellt worden sind) und den savestates spielekarten für unsere Datenbank HOL.

http://hol.abime.net

z.b. konnte ich die 11 maps von turrican 2 innerhalb einer stunde erstellen :)

http://hol.abime.net/1535/gamemap