How to create a detailed map of Pokémon 4th Generation Games

pokemon-fourth-generation

I was looking to create a complete map of Pokémon Platinum and SoulSilver similar to this one for Red and Blue:

(but without all the Pokémon on it)

Best Answer

Making a map for Generation IV Pokémon games

What you're talking about is absolutely possible! It's not especially easy, however.

Perspective

Unlike in generations I-III, there is no "manual" approach. In those earlier generations (with some exceptions in Gen III - animated tiles, rain, pseudo-shaders, etc.), one possibility is to play the game normally on emulator, and take a screenshot every now and then, splicing the screenshots together in post. Generation IV, however, uses a skewed 3D perspective (see the preceding image) and even 3D models - buildings, for example. This means screenshots do not work for making a map. The only possible approach is to do it the automated way - programming galore.

So how do you do it?

Your goal is basically to write a program that, given the ROM of a Gen IV game, outputs a complete map (or, at least, large parts of a complete map you'll put together in post) of the game. Without further ado, let's get started.

The grand programming part

First of all, you're going to have to parse the map format used in DPPt and HGSS. This format is of course very arcane, and normally it would take a lot of reverse-engineering (super fun!) to figure out. However, you're in luck! Some great people over at PokéCommunity and gbatemp have done that work already! They even provide tools to extract the maps, which are open-source. This is great, since it means you can modify the code to make it generate images instead of putting up an editing front-end. Doing that, or perhaps rather only reusing the map loading parts, you'll avoid having to write the low-level stuff (in particular I feel for the poor person who had to write "LibNDSFormats").

Once you have the map in 3D, what you need to do is render it from above in a way which satisfies two criteria. The first is that the camera needs to be orthographic. Basically this means the image will have no perspective, and everything will be 1:1 and straight. Indoors, perspective is already ortographic, so those areas shouldn't pose too much of a problem. It doesn't have to be completely from above, either, as long as it makes overview easy. In fact, the same angle as in-game may work well - try some different ways to see what works best. The second is that all tiles should be rendered 1:1 - that is, 1 pixel in a tile should always be 1 pixel on the map.

This rendering business isn't entirely black-and-white, either. In fact, an alternate approach may be to render the tile map separately in 2D first, and then the 3D models with an angled ortographic camera. That approach might be easier, but... it might also not be, depending on how the tiles are handled. At this point I'm just spouting ideas, though.

If you decide to render the 3D models from above (which probably won't look very good, but you never know), some may have to be replaced by your program, as they were only ever made to be seen from one angle. Trees, for example, may pose a problem. It'll take some fiddling around with, in any case.

The manual part

Once you've generated images for all the different contiguous places in the game, there's still a bit of work to be done. Assuming you haven't written some convoluted layout logic based on where doors lead and all that jazz, you'll have to splice the different maps together to form a concise whole. Caves, for example, will have to be put in cut-ins like the ones in the map you posted. Same with indoor locations. This splicing just consists of a bit of Photoshop, though, and should pose the least amount of trouble compared to the previous parts.

And that's it!

Once you've spliced your parts together, you've got a complete orthographic map of the game. Good luck with the project, if you decide to do it! It's a doozy for sure, but don't forget it's absolutely doable.