• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Turn Gen. IV interiors into 3D

Spiky-Eared Pichu

NDS Hacker/Researcher
257
Posts
14
Years
  • Seen Oct 2, 2019
Annoyed by the fact Gen. IV interiors (houses, shops and other buildings) are in 2D? Want to change that permanently and without a cheat device? If you want to do that, then this is your tutorial!

What you need:

  • A Generation IV Pokémon game (Diamond, Pearl, Platinum, HeartGold* or Soulsilver*)
  • DSLazy or another DS ROM unpacker/packer.
  • An Hex Editor (I'll be using HexWorkshop).
*Pokémon HeartGold and SoulSilver are unsupported at the moment. They use the same system for the 2D maps as DPPt, but they are more protected. I'll update the thread when possible.

Preparations:

Open your ROM with DSLazy (or the software you use with ROMs) and unpack your game to a folder.

Instructions:

Open the folder where you extracted the ROM. It should have two folders, "Overlay" and "Data"/"Root", as well as many .bin files. We are going to use arm9.bin to edit the 2D maps. Here's how Pokémon Diamond looks when extracted:

step1qa.png


Now open the file with your Hex Editor. You'll see lots of bytes. The data we want to edit starts at:

  • Pokémon Diamond and Pearl: 0xEEDC0 (or search for "70013B031200E803E803FFFF", it's the first coincidence)
  • Pokémon Platinum: 0xE6020 (or search for "910181031700E803E803FFFF", it's the first coincidence)
  • Pokémon HeartGold and SoulSilver: Unknown (not even sure if they are in arm9.bin)
This is how it appears in Diamond (cursor at the start of the section):

headersdiamond.png


Now that you have the start of the section we want to edit, take a look at these bytes in this picture (Pokémon Diamond, shouldn't be difficult to find the same in Platinum):

diamondlocation.png


The second byte of those grups (sometimes 00, sometimes 04) is what we have to edit (adjust the view of the program to see the bytes more clearly). Those bytes tell the game which type of camera to use in each map, and for some reason GameFreak decided to employ a 2D-like camera inside the buildings during Generation IV. The maps are all 3D!!!

So, to change the camera to the standard 3D angle used outdoors, you have to replace all the bytes that are "04" with "00". But be careful, change only that column or you'll screw up the game!!! Also, there are a lot of maps (the picture only shows the first ones), so you'll have to replace a lot of data.

When you're done (remember to stop when the section ends, you'll know because the bytes change to random things), save the file. Repack your ROM with the software you're using, and enjoy!


Here's a sample of the result (ignore Brendan, it's a picture from my hack), as well as a picture from Diamond showing an unmodified interior (thanks to Pokémon Wikia for it):

mapcamera.png
Day-Care_Checker_1.png



If you have any problems, please post here so I can help. Also, I'll try to have HeartGold and SoulSilver available as soon as possible.
 
Last edited:

Pingouin_7

Guest
0
Posts
Amazing, I'll do that on a copy of Diamond, this'll make it more interesting to play.
 

Lord Varion

Guess who's back?
2,642
Posts
15
Years
  • Age 29
  • Seen Jan 6, 2015
It shouldn't be to hard to find for Heart Gold/ Soul Silver right?
The Goldenrod underground uses 3-D so can't you see the hex code for that ... and do it to the rest ... |: (you can tell I don't hex much)
 

Pingouin_7

Guest
0
Posts
I'm wondering, though, we are supposed to stop as soon as it changes from 0004 to (I think it was 17C0), even though there are more 0004 after it?
 

Spiky-Eared Pichu

NDS Hacker/Researcher
257
Posts
14
Years
  • Seen Oct 2, 2019
@Nintendork15 It doesn't matter if the Goldenrod's Unerground is in 3D, because HGSS have data structured similarly to DPPt when it comes to define camera. Even BW still follow the pattern (a bit modified, though). The only problem I have is finding the file that stores that data in HGSS.

@Pingouin_7 If it changes to another value but it then changes again to 0004 and the rest of lines still follow a "pattern", go ahead and change more.
 

Pingouin_7

Guest
0
Posts
I changed the other values to 00 and it now works everywhere. Thanks!
 

Full Metal

C(++) Developer.
810
Posts
16
Years
This is a nice find and everything, but why does this work, and how did you figure it out? That could help us figure out / find the info for HG / SS, could it not?
 

Spiky-Eared Pichu

NDS Hacker/Researcher
257
Posts
14
Years
  • Seen Oct 2, 2019
This works because ALL the maps in Gen. IV are 3D, there are no 2D maps. The same way there's a byte that tells the game which music to play in a map, there's one that sets the camera type.

If you want to help, it's better to start analyzing the RAM while playing. Comparing the bytes that change between maps and so, you'll end up finding how they are stored, so you can then look for them in the ROM. It's a bit hard to explain :)

@Link_971 Feel free to implement it. But please give me credit (although I think it's already there, as the translator).
 
Last edited:

Spiky-Eared Pichu

NDS Hacker/Researcher
257
Posts
14
Years
  • Seen Oct 2, 2019
Yes, you can manipulate the camera at any map by this method, you just need to know what to write there (and for now I only know these values).

But by taking a look at all the strings and identifying each map, it'll be really easy to discover the values.
 
245
Posts
19
Years
  • Age 34
  • Seen Aug 5, 2022
i dunno if it just a case of I don't remember what the original looks like but I don't see anything different could you post a before and after picture?
 
52
Posts
16
Years
Here are some file offsets arm9.bin flight zones, which are 4 bytes.
First two bytes are Coordinate X and the second two bytes are Coordinate Y:

0xF222C: Pueblo Hojaverde (Twinleaf Town)
0xF223C: Pueblo Arena (Sandgem Town)
0xF224C: Pueblo Aromaflor (Floaroma Town)
0xF225C: Pueblo Sosiego (Solaceon Town)
0xF226C: Pueblo Caelestis (Celestic Town)
0xF227C: Ciudad Jubileo (Jubilife City)
0xF228C: Ciudad Canal (Canalave City)
0xF229C: Ciudad Pirita (Oreburgh City)
0xF22AC: Ciudad Vetusta (Eterna City)
0xF22BC: Ciudad Corazón (Hearthome City)
0xF22CC: Ciudad Pradera (Pastoria City)
0xF22DC: Ciudad Rocavelo (Veilstone City)
0xF22EC: Ciudad Marina (Sunyshore City)
0xF22FC: Ciudad Puntaneva (Snowpoint City)
0xF230C: Liga Pokémon: Sur (Pokemon League: South)
0xF231C: Zona de combate (Fight Area)
0xF232C: Zona Sobrevivir (Survival Area)
0xF233C: Zona Descanso (Resort Area)
0xF234C: Parque Compi (Pal Park)
0xF235C: Liga Pokémon: Norte (Pokemon League: North)
 

Spiky-Eared Pichu

NDS Hacker/Researcher
257
Posts
14
Years
  • Seen Oct 2, 2019
@Team Fail Well, if the 00 and 04 values match what I teach in this tutorial, then this means the values from that cheat will probably work.
 
52
Posts
16
Years
Here I show you pictures of how they would be changing the bytes from 00 to 0F:

00
Camara00.png


01
Camara01.png


02
Camara02.png


03
Camara03.png


04
Camara04.png


05
Camara05.png


06
Camara06.png


07
Camara07.png


08
Camara08.png


09
Camara09.png


0A
Camara0A.png


0B
Camara0B.png


0C
Camara0C.png


0D
Camara0D.png


0E
Camara0E.png


0F
Camara0F.png
 

Full Metal

C(++) Developer.
810
Posts
16
Years
You know what this smells like to me?
I would bet that there is an array / table of a structure containing x/y/z co-ordinates that are relative to the player for the camera. Perhaps somebody with a NDS debugger, and a ROM could set a break on read for one of these values and test? Then we could make our own. (:
 
Back
Top