• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Which Pokémon Masters protagonist do you like most? Let us know by casting a vote in our Masters favorite protagonist poll here!
  • 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
    15
    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:

    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    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):

    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    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):

    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    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):

    [PokeCommunity.com] Turn Gen. IV interiors into 3D
    [PokeCommunity.com] Turn Gen. IV interiors into 3D



    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:
    Amazing, I'll do that on a copy of Diamond, this'll make it more interesting to play.
     
    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)
     
    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?
     
    @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.
     
    I changed the other values to 00 and it now works everywhere. Thanks!
     
    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?
     
    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:
    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.
     
    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)
     
    Here I show you pictures of how they would be changing the bytes from 00 to 0F:

    00
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    01
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    02
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    03
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    04
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    05
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    06
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    07
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    08
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    09
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    0A
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    0B
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    0C
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    0D
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    0E
    [PokeCommunity.com] Turn Gen. IV interiors into 3D


    0F
    [PokeCommunity.com] Turn Gen. IV interiors into 3D
     

    I think this one is the best. It's not completely birds-eye-view, unlike traditional Pokemon games, but its really cool. It'd be neat if there was a hack like that.
     
    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