Writing a Program for loading Maps

Forum closed. All further discussion to be discussed at https://github.com/OpenKore/

Moderator: Moderators

sli
Perl Monk
Perl Monk
Posts: 810
Joined: 04 Apr 2008, 17:26
Noob?: No

Re: Writing a Program for loading Maps

#11 Post by sli »

Have you considered that the values might be in reverse endian?

For example, you say you're getting 3,000 million textures (3 billion). The maximum value of four bytes is 4,294,967,295 (that is, FF FF FF FF). Not too far from 3 billion. In fact, 3 billion in hex is B2 D0 5E 00. However, if you reverse it (00 5E D0 B2) you get 6,213,810. The reason I point this out is because while 00 00 00 01 is only 1, 01 00 00 00 is 16,777,216.

In short: try reversing your four byte texture count buffer and see what you get. If it works, you'll want to make sure you reverse ALL numerical values.

(Look, guys! I didn't flame or anything! I ran into this problem when hacking ZSNES save states back when I was like... 14. I kept wondering why Ness had 6,144 HP at level 1.)
cs : ee : realist
KingXs
Noob
Noob
Posts: 5
Joined: 11 Jul 2008, 09:08
Noob?: Yes

Re: Writing a Program for loading Maps

#12 Post by KingXs »

Hm it doesnt seem to be this either...

Look I got some Screens

ImageImage

The first one is when I try to get the texture count.
There you may see that the Size is changing aswell and the Bitmaps aren't correctly displayed anymore

In the second one you see that I removed the texture count and the Size and Bitmaps are correctly displayed again.

The code is here:

Code: Select all


char* buffer;
	unsigned int count;


	ifstream File("data\\payon.rsw");
	ifstream GND("data\\payon.gnd");
	ifstream GAT("data\\payon.gat");
	streamoff curpos = 0;

// Header
	GND.seekg(0);
	buffer=new char[4];
	GND.read(buffer,4);
	curpos += 4;
	cout<<"Header : "<<buffer<<endl;
	delete buffer;

	// Version
	//GND.seekg(curpos);
	//buffer=new char[2];
	//GND.read(buffer,2);
	curpos += 2;
	//cout<<"Version : "<<*((char*)buffer)<<endl;
	//delete buffer;

	// Size X
	GND.seekg(curpos);
	buffer=new char[4];
	GND.read(buffer,4);
	curpos += 4;
	cout<<"Size X : "<<*((int*)buffer)<<endl;
	delete buffer;

	// Size Y
	GND.seekg(curpos);
	buffer=new char[4];
	GND.read(buffer,4);
	curpos += 4;
	cout<<"Size Y : "<<*((int*)buffer)<<endl;
	delete buffer;

	// Proportion
	GND.seekg(curpos);
	buffer=new char[4];
	GND.read(buffer,4);
	curpos += 4;
	cout<<"Proportion : "<<*((float*)buffer)<<endl;
	delete buffer;

	// Count
	//GND.seekg(18);
	//buffer=new char[4];
	//GND.read(buffer,4);
	curpos += 4;
	//cout<<"Count : "<<*((int*)buffer)<<endl;
	//delete buffer;

	// Size
	GND.seekg(22);
	buffer=new char[4];
	GND.read(buffer,4);
	curpos += 4;
	cout<<"Size : "<<*((int*)buffer)<<endl;
	delete buffer;

	//Textures
	for (int i=0;i<26;i++){
		GND.seekg(curpos);
		buffer=new char[40];
		GND.read(buffer,40);
		curpos += 80;
		cout<<"Bitmap : "<<buffer<<endl;
		delete buffer;
	}

	GND.seekg(2106);
	buffer=new char[4];
	GND.read(buffer,4);
	curpos += 4;
	cout<<"Header : "<<*((int*)buffer)<<endl;
	delete buffer;

	GND.seekg(3236096);
	buffer=new char[4];
	GND.read(buffer,4);
	curpos += 4;
	cout<<"Header : "<<*((int*)buffer)<<endl;
	delete buffer;

	curpos=0;
	
	// Header
	File.seekg(0);
	buffer=new char[7];
	File.read(buffer,7);
	curpos += 6;
	cout<<"Header : "<<buffer<<endl;
	delete buffer;

	// Ini
	File.seekg(curpos);
	buffer=new char[40];
	File.read(buffer,40);
	curpos += 40;
	cout<<"Ini : "<<*((int*)buffer)<<endl;
	delete buffer;

	// GND
	File.seekg(curpos);
	buffer=new char[40];
	File.read(buffer,40);
	curpos += 40;
	cout<<"GND : "<<buffer<<endl;
	delete buffer;

	// GAT
	File.seekg(curpos);
	buffer=new char[40];
	File.read(buffer,40);
	curpos += 40;
	cout<<"GAT : "<<buffer<<endl;
	delete buffer;

	// SRC File Alpha only
	File.seekg(curpos);
	buffer=new char[40];
	File.read(buffer,40);
	curpos += 40;
	cout<<"SRC : "<<buffer<<endl;
	delete buffer;

	// Height
	File.seekg(curpos);
	buffer=new char[40];
	File.read(buffer,40);
	curpos += 4;
	cout<<"Height : "<<*((float*)buffer)<<endl;
	delete buffer;

	// Type
	File.seekg(curpos);
	buffer=new char[4];
	File.read(buffer,4);
	curpos += 4;
	cout<<"Type : "<<*((int*)buffer)<<endl;
	delete buffer;

	// Amplitude
	File.seekg(curpos);
	buffer=new char[4];
	File.read(buffer,4);
	curpos += 4;
	cout<<"Amplitude : "<<*((float*)buffer)<<endl;
	delete buffer;

	// Phase
	File.seekg(curpos);
	buffer=new char[4];
	File.read(buffer,4);
	curpos += 4;
	cout<<"Phase : "<<*((float*)buffer)<<endl;
	delete buffer;

	// Surface Curve Level
	File.seekg(curpos);
	buffer=new char[40];
	File.read(buffer,4);
	curpos += 4;
	cout<<"Surface Curve Level : "<<*((float*)buffer)<<endl;
	delete buffer;

	// Texture Ciclyng
	File.seekg(curpos);
	buffer=new char[4];
	File.read(buffer,4);
	curpos += 4;
	cout<<"Texture Ciclyng : "<<*((float*)buffer)<<endl;
	delete buffer;

	// Texture Ciclyng
	File.seekg(curpos);
	buffer=new char[4];
	File.read(buffer,4);
	curpos += 4;
	cout<<"Texture Ciclyng : "<<*((int*)buffer)<<endl;
	delete buffer;

	// Objects Count
	File.seekg(242);
	buffer=new char[4];
	File.read(buffer,4);
	curpos += 4;
	count=*((int*)buffer);
	cout<<"Objects Count : "<<*((int*)buffer)<<endl;
	delete buffer;

...