• 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