View Single Post
  #4    
Old December 11th, 2010 (12:12 PM).
Lin Lin is offline
JohtoMap/ZOLE Creator
 
Join Date: Jul 2007
Nature: Adamant
Posts: 51
Send a message via Windows Live Messenger to Lin
Quote originally posted by miksy91:
Looks pretty amazing indeed :)

Here are some suggestions:

You could add support for Yellow as well. The map header locations are different but I've made a complete list of them including the event data for some of them.
If you want, I can PM the list for ya.

You could also make it so that it displays the pokemon in "wild pokemon changer" -menu in alphabetical system instead of the way they're shown in the game.
And for wild pokemon menu, also include the location of start of the grass pokemon data so that it could be repointed easily.

"Map name editing (Although... Not as important as the rest of the stuff)"
I'd say, don't include that feature. It can be done so easily without any editor so if you can't do something as simple as that, you really shouldn't be hacking 1st gen in the first place. I myself had hard time learning how pointers worked and afterwards, how to change the locations of events in yellow.

By the way, where did you find the start of "town map events" data ?
I mean, the way you change the locations of different maps shown in town map.
Thank you, the first bit of feedback I've actually received. I'll look into yellow support; it should be pretty easy to add. As for the wild Pokemon editor, it displays Pokemon how the Pokedex displays them. I can't really change it because the combobox and way things are displayed depends on a table in the ROM, which I use, so it'll have to be like that.

As for the town map data, it's very simple. I did a quick debug using BGB and found it. The maps the town map marker uses are at 0x70F11 (+ the selected spot). Next, the table for the X/Y locations and name pointer... Well, I'll just give you the code...

Code:
			int x = 0, y = 0;
			byte map = gb.ReadByte(0x70F11 + (int)nTownMap.Value);
			nMap.Value = map;
			int namePointer = 0;
			if (map <= 0x25)
			{
				gb.BufferLocation = 0x71313 + map * 3;
				byte location = gb.ReadByte();
				x = (location & 0xF) * 8 + 12;
				y = (location >> 4) * 8 + 4;
				namePointer = gb.ReadByte() + ((gb.ReadByte() - 0x40) * 0x100);
			}
			else
			{
				gb.BufferLocation = 0x71382;
				while (true)
				{
					if (gb.ReadByte() > map)
					{
						byte location = gb.ReadByte();
						x = (location & 0xF) * 8 + 12;
						y = (location >> 4) * 8 + 4;
						namePointer = gb.ReadByte() + ((gb.ReadByte() - 0x40) * 0x100);
						break;
					}
					else
						gb.BufferLocation += 3;
				}
			}
Anything looking like gb.ReadByte() + ((gb.ReadByte() - 0x40) * 0x100); means it's a traditional pointer. Hope it helps.
__________________
Hiidoran is one of the most helpful people on here
Reply With Quote