• 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.

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

bitKoder

completely unreasonable
  • 36
    Posts
    7
    Years
    • Seen Feb 28, 2024
    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?
     

    Touched

    Resident ASMAGICIAN
  • 625
    Posts
    9
    Years
    • Age 122
    • Seen Feb 1, 2018
    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).
     

    bitKoder

    completely unreasonable
  • 36
    Posts
    7
    Years
    • Seen Feb 28, 2024
    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?
     

    Touched

    Resident ASMAGICIAN
  • 625
    Posts
    9
    Years
    • Age 122
    • Seen Feb 1, 2018
    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).
     

    bitKoder

    completely unreasonable
  • 36
    Posts
    7
    Years
    • Seen Feb 28, 2024
    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?
     

    bitKoder

    completely unreasonable
  • 36
    Posts
    7
    Years
    • Seen Feb 28, 2024
    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.

    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?
     
  • 2
    Posts
    11
    Years
    • Seen May 1, 2017
    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.
     

    bitKoder

    completely unreasonable
  • 36
    Posts
    7
    Years
    • Seen Feb 28, 2024
    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.
     

    Touched

    Resident ASMAGICIAN
  • 625
    Posts
    9
    Years
    • Age 122
    • Seen Feb 1, 2018
    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