von C nach PB

Fragen zu allen anderen Programmiersprachen.
x_to
Beiträge: 16
Registriert: 24.08.2005 21:20
Kontaktdaten:

von C nach PB

Beitrag 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
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Die ganzen IncludeFiles müssen auch übersetzt werden...

KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Frage: Was tut der Code überhaupt?
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
x_to
Beiträge: 16
Registriert: 24.08.2005 21:20
Kontaktdaten:

Beitrag 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)
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag 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
x_to
Beiträge: 16
Registriert: 24.08.2005 21:20
Kontaktdaten:

Beitrag 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
Antworten