• 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!
  • Our weekly protagonist poll is now up! Vote for your favorite Conquest protagonist in the poll by clicking 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.

[ASM & Hex✓] Allow the Player to Run on Fortree/Pacifidlog Walkways in Emerald?

bitKoder

completely unreasonable
  • 36
    Posts
    8
    Years
    • Seen Apr 14, 2025
    It really bugs me that the player can't run along Fortree's plank walkways and Pacifidlog's floating pathways, so I'm wondering what I can do to fix it. I know Advance Map has a "tile editor" option that allows you to change the behaviour of a tile, meaning I could use that to allow the player to run along the walkways, but in changing the tile behaviour, the walkways' animations would be removed.
    So what I'm wondering is, how can I use ASM/Hex to allow the player to run on those tiles that don't normally allow running?
     
    It really bugs me that the player can't run along Fortree's plank walkways and Pacifidlog's floating pathways, so I'm wondering what I can do to fix it. I know Advance Map has a "tile editor" option that allows you to change the behaviour of a tile, meaning I could use that to allow the player to run along the walkways, but in changing the tile behaviour, the walkways' animations would be removed.
    So what I'm wondering is, how can I use ASM/Hex to allow the player to run on those tiles that don't normally allow running?

    If you nop out the function call (i.e. put 00 00 00 00) at 0808AF94 then there should be no restrictions on running anywhere.

    More specifically, putting four zeroes at 08119F2C should disable the Fortree platform running restriction (behaviour 0x78) and putting four zeroes at 080899E2 should disable the Pacifidlog restrictions (behaviours 0x74, 0x75, 0x76 and 0x77). Putting two zeroes at 080899D8 will disable the restriction on behaviour 0xA which is used for the ladders at Fortree as well as the non-animated bits at both Fortree and Pacifidlog.

    Nopping just 0808AF94 should be more than sufficient to fixing the no running, but it does much more including preventing running on tiles with behaviours 0x28 and 0x3 (don't know what those are for) as well as checking the map header for the no running byte. It also checks the players height (I can't think of where that is used).
     
    If you nop out the function call (i.e. put 00 00 00 00) at 0808AF94 then there should be no restrictions on running anywhere.

    More specifically, putting four zeroes at 08119F2C should disable the Fortree platform running restriction (behaviour 0x78) and putting four zeroes at 080899E2 should disable the Pacifidlog restrictions (behaviours 0x74, 0x75, 0x76 and 0x77). Putting two zeroes at 080899D8 will disable the restriction on behaviour 0xA which is used for the ladders at Fortree as well as the non-animated bits at both Fortree and Pacifidlog.

    Nopping just 0808AF94 should be more than sufficient to fixing the no running, but it does much more including preventing running on tiles with behaviours 0x28 and 0x3 (don't know what those are for) as well as checking the map header for the no running byte. It also checks the players height (I can't think of where that is used).

    Thanks for the help Touched! I think I'll just nop out the function call since I don't really like being restricted to walking in any area. I'll backup the ROM just in case though because I can see there quite easily being unexpected side effects when using such a method.

    By the way, how did you find out how to achieve this?
     
    Thanks for the help Touched! I think I'll just nop out the function call since I don't really like being restricted to walking in any area. I'll backup the ROM just in case though because I can see there quite easily being unexpected side effects when using such a method.

    By the way, how did you find out how to achieve this?

    I used IDA with the Emerald database (which I got from Dizzy). Basically there is a function that reads the behaviour byte for a given tile. I just figured out where that was and checked for places it was called and then compared the result to those behaviour bytes I listed (which I got from AdvancedMap). The function was actually helpfully named "is_tile_unrunnable".

    If you want to get into ASM, IDA is invaluable to find out this sort of stuff quickly. Eventually you get a feel for where everything is so you have reference points that you can use find other pieces of code quickly (e.g. the function that returns the behaviour byte for a tile is a reference point that I already knew the location/IDB name for).
     
    I used IDA with the Emerald database (which I got from Dizzy). Basically there is a function that reads the behaviour byte for a given tile. I just figured out where that was and checked for places it was called and then compared the result to those behaviour bytes I listed (which I got from AdvancedMap). The function was actually helpfully named "is_tile_unrunnable".

    If you want to get into ASM, IDA is invaluable to find out this sort of stuff quickly. Eventually you get a feel for where everything is so you have reference points that you can use find other pieces of code quickly (e.g. the function that returns the behaviour byte for a tile is a reference point that I already knew the location/IDB name for).

    Thanks, this information is really helpful. I've been trying to get into ASM for a little while now, and have been unsure as to how to do it. I'm very interested in using IDA for myself, but I don't know where to get it. Could you please point me in the right direction?
     
    I've just noticed that these offsets you have provided are 8 digits rather than 6. How do I convert them to the 6-digit hex offsets I can go to in the ROM file?
    The 8 digit address is from the GBA's perspective. In the GBA memory map the rom starts at 0x8000000, so to get the offset from the start of the file, simply subtract 0x8000000 from it.
     
    The 8 digit address is from the GBA's perspective. In the GBA memory map the rom starts at 0x8000000, so to get the offset from the start of the file, simply subtract 0x8000000 from it.

    If that is the case, then the first offset Touched mentioned (0808AF94) should simply be 08AF94, correct? However, when I replaced the bytes at 08AF94 with "00 00 00 00", the player couldn't run at all.
     
    If that is the case, then the first offset Touched mentioned (0808AF94) should simply be 08AF94, correct? However, when I replaced the bytes at 08AF94 with "00 00 00 00", the player couldn't run at all.

    My mistake. You need to place eight zero bytes at 0808AF94 (08AF94), not four.

    Thanks, this information is really helpful. I've been trying to get into ASM for a little while now, and have been unsure as to how to do it. I'm very interested in using IDA for myself, but I don't know where to get it. Could you please point me in the right direction?

    IDA is commercial software, so it would be against the rules to give you a link, but I can tell you that IDA 6.8 (with the HEX-Rays Decompiler plugin) was leaked, which is perfect for opening the IDBs (IDA databases) that are in my signature (Dizzy actually has a more up to date Emerald one).
     
    Back
    Top