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

Quick Research & Development Thread

106
Posts
15
Years
    • Seen May 29, 2019
    You would need to modify the games ASM code, which would be a pain and would be way too hard. And, the sprites would go outside the picture box in the status screen. In other words, it's really hard, and it's just not worth it.

    Ok, I thought it would involve ASM and it wouldn't be a case of just changing a few values. I never even thought about the box in the status screen though. It's just irritating having to resize sprites and them losing their quality because of it.

    Anyway, thanks for the swift reply.
     
    1,234
    Posts
    13
    Years
    • Seen Mar 10, 2013
    The GBA hardware will only draw sprites up to 64 x 64 pixels.

    Go any bigger and you'll have to work with tiles and tilemaps, which would be an absolute nightmare to both code in the first place and then implement for each Pokémon.
     

    HackMew

    Mewtwo Strikes Back
    1,314
    Posts
    17
    Years
    • Seen Oct 26, 2011
    Go any bigger and you'll have to work with tiles and tilemaps, which would be an absolute nightmare to both code in the first place and then implement for each Pokémon.

    No doubt it would be painful, but... you would only need a single tilemap for all the Pokémon. However, even if you succeeded, there would still be problems in the Pokédex etc. because the sprites weren't supposed to be bigger than 64x64 pixels.
     
    106
    Posts
    15
    Years
    • Seen May 29, 2019
    The GBA hardware will only draw sprites up to 64 x 64 pixels.

    Go any bigger and you'll have to work with tiles and tilemaps, which would be an absolute nightmare to both code in the first place and then implement for each Pokémon.

    No doubt it would be painful, but... you would only need a single tilemap for all the Pokémon. However, even if you succeeded, there would still be problems in the Pokédex etc. because the sprites weren't supposed to be bigger than 64x64 pixels.

    Ah I see why it's hard then...Could the pokédex problem be fixed by a gfx hack to make the box where they're shown bigger or do you mean they wouldn't show up properly? I take it that it would it be the same for the trainer sprites?

    I'll probably just leave it then and just resize any sprites I need to, but anyway, thank you all for the help, it's appreciated.
     
    Last edited:

    knizz

    192
    Posts
    16
    Years
    • Seen Oct 28, 2020
    In Pokemon Firered 825E074 contains the ping-pong animation for the arrows in the bag. Open in VBA Memory Viewer and play around. ;)
     

    knizz

    192
    Posts
    16
    Years
    • Seen Oct 28, 2020
    Controlling other characters on a map: Just write their id to 0x02037078+5. As always this is for Firered.
     

    sonic1

    ASM is my life now...
    77
    Posts
    15
    Years
  • If you want to always run without using button B, like in HG/SS, set 0x02037078 to 02. Warning: If you open 1 of the menu options, or have a battle or warp, the effect fades off and you have to set it again.
    VERSION: FIRERED

    Credits to you knizz, for the offset! Can you tell us what really that offset is?

    Controlling other characters on a map: Just write their id to 0x02037078+5. As always this is for Firered.

    Neat trick, i had this bug once in emerald and it only happened in a certain house opening the pokedex and always wondered how to do it.

    But controlling other persons in A-Map has some limitations in-game like the camera not moving, and the limits the person can go,etc.
     
    Last edited:

    altariaking

    Needs NO VMs...
    1,087
    Posts
    14
    Years
  • If you want to always run without using button B, like in HG/SS, set 0x02037078 to 02. Warning: If you open 1 of the menu options, or have a battle or warp, the effect fades off and you have to set it again.

    Credits to you knizz, for the offset! Can you tell us what really that offset is?


    Neat trick, i had this bug once in emerald and it only happened in a certain house opening the pokedex and always wondered how to do it.

    But controlling other persons in A-Map has some limitations in-game like the camera not moving, and the limits the person can go,etc.

    Interesting find 0_0
    This is or FireRed? I'll try and find the offset for Ruby after I finish my English essay xD
     

    sonic1

    ASM is my life now...
    77
    Posts
    15
    Years


  • Interesting find 0_0
    This is or FireRed? I'll try and find the offset for Ruby after I finish my English essay xD

    Sorry, i forgot to put the version. Yes, it is for firered, i work only with firered.

    Also, do you know why that happens? Check what happens to that value when you put the bike.
    Sidenote: Because it simulates the speed of a bike, its a bit faster than running.
     

    knizz

    192
    Posts
    16
    Years
    • Seen Oct 28, 2020
    02037078 is a structure that controls the movement of, and only of, the player. However it can be associated to any NPC on screen.

    The first two bits (0x03) of 02037078+0 determine the speed. 1 is normal. 2 is bike speed. 3 gives you a bike and changes itself to 2.

    No matter what you write to 02037078+1 it is set to 0 again. If the value was 2 before the reset you get a bike. If you change the bike-byte the NPC turns into the hero.

    02037078+2 and 02037078+3 behave like this:
    0 0 Nothing pressed
    0 0 Nothing pressed
    1 1 Pressed forward
    2 1 Pressed forward
    2 1 Pressed forward
    2 1 Pressed forward
    0 0 Nothing pressed
    2 1 Pressed forward
    2 1 Pressed forward
    0 0 Nothing pressed
    0 0 Nothing pressed
    1 1 Pressed forward
    2 1 Pressed forward
    2 1 Pressed forward

    I don't know about 02037078+4.
    02037078+5 sets the npc-id that is controlled by the keypad. (I wonder which numbers the npcs from connected maps have)
    02037078+6 locks all movement when set to 1

    More info about the NPCs is stored at 02036E38 in 16 0x24-byte long structures (Does that mean that there can't be more than 16 npcs in the overworld at the same time?!)
    0x00 bits 7 and 6 are set when this npc is talking
    0x01-0x0A unknown
    0x0B height
    0x0C-0x0F unknown
    0x10 from (coords)
    0x14 to (coords)
    0x18 unknown
    0x19 direction (in which the character actually looks)
    0x1A unknown
    0x1C direction (set when talked to but not always copied to 0x19)
    0x1E unknown
    0x20 direction (set after talk)
    0x21-0x23 unknown

    UPDATE: http://www.pokecommunity.com/showpost.php?p=6353380&postcount=2

    coordinates are saved as two halfwords (x and y)

    The code for moving uses a table to convert the direction to relative coordinates.
    Table: 083A64C8
    Function that uses the table above: 08063A20
    Function that uses the function above to move npcs: 0805C4F4

    Note that the table contains 9 and not 5 directions. Yes. Game Freak planned to have diagonally moving npcs.
     
    Last edited:

    colcolstyles

    Yours truly
    1,588
    Posts
    15
    Years
  • In a Fire Red ROM, there is a table of data located at the address '0x452c4c'. Each entry in this table contains two pieces of information. One is a pointer and the other is a 32-bit number (I assume this is to keep the alignment consistent). The pointer points to another table and the number specifies the size of that table. In one of these secondary tables, there are a number of entries (the exact number is specified by the number mentioned earlier), each of which are also composed of a pointer and a 32-bit number. These pointers point instead to a list of pokémon and the number dictates the length of that list.

    After a bit of research, I determined that the first table of pointers controls the classification of pokémon habitats (e.g., Grassland, Mountain, Rough-Terrain, etc.) as displayed in the PokéDex. The secondary tables specify which pokémon are in each Habitat and which pokémon appear on each "page" of the PokéDex (see the screenshots if you don't know what I mean). Let's look at an example. The first pointer at '0x452c4c' points to '0x4527d4' and is followed by the number '0x1b'. Thus, if you have a complete PokéDex, then there will be 27 ('0x1b' in decimal) pages of pokémon in the Grassland Habitat (the pointers are arranged in the order that they appear in-game, so Grassland comes first). The first pointer at '0x4527d4' points to '0x4524d0' and is followed by the number '0x4'. This means that the first four pokémon at that address are grouped onto one "PokéDex page". In this case, the numbers at that address (after reversing them) are '0x0013', '0x0014', '0x00a1', and '0x00a2', which correspond to Rattata, Raticate, Sentret, and Furret. So, if on the main PokéDex screen you select "Grassland Pokémon", you'll get a screen like this:
    Spoiler:


    But if we edit that data, we could get something like this:
    Spoiler:


    So let's say you replaced Machop (a Mountain Habitat pokémon) with a fakemon that you want to go in the Urban Habitat. You should first subtract one from the number of Mountain pokémon (Mountain is the sixth Habitat so the number would be found at '0x452c78') and add one to the number of Urban pokémon (Urban is the eigth Habitat so the number would be found at '0x452c88'). Then you would have to remove the entry for Machop's evolutionary family's page in the Mountain Habitat table and add it somewhere in the table for Urban Habitat pokémon.
     

    knizz

    192
    Posts
    16
    Years
    • Seen Oct 28, 2020
    Want? Yes. Can? No.
    Theres just a pile of structureless numbers and addresses.
     

    Sierraffinity

    Desperately trying to retire from ROM hacking
    1,069
    Posts
    16
    Years
  • Want? Yes. Can? No.
    Theres just a pile of structureless numbers and addresses.
    Is 0x083e to 0x083f an address range? (Because that would only be one byte long...)
    Or what is it? Where is it? How did you come to the conclusion that they're structureless?
    We need this in order to even know what you're talking about...
     
    219
    Posts
    16
    Years
  • Bugfixing save failed of Pokémon Mystery Dungeon: Explorers

    Cheat code for bugfixing the save failed of Pokémon Mystery Dungeon: Explorers of Sky

    Bugfix device includes:

    no$gba //needs to restart the game after using
    akrpg (thanks linoul for testing)
    ak+ (thanks tingyigg for testing)

    It's worth trying if meet this bug in other device

    cheat code:

    U version
    2204AA98 00000007
    2208380c 000000BF

    E version
    2204ADD0 00000007
    22083BA4 000000BF

    Give credits to enler, who allowed me to post here.
    Any problems please contact [email protected]
     

    Sierraffinity

    Desperately trying to retire from ROM hacking
    1,069
    Posts
    16
    Years
  • Tell me what is wrong with these images. I will explain what I am doing if someone can guess it, and I will explain my research, as well as who I did this with as well (Manipulation, don't say anything! :P). For more info, visit http://www.megaupload.com/?d=ACNYQ1VR and patch onto a Pokemon Diamond (U) Rom.
    pokemondiamondandpearlk.png

    rivalglitch.png
    By the name of the UPS file, I'm guessing you're making Diamond more like its demo version, probably the one in GameStop or something?
     

    colcolstyles

    Yours truly
    1,588
    Posts
    15
    Years
  • For anyone who's interested, at '0x078c1c' there is a 32-bit number (the default value is '0x00000a8b') which dictates the number of frames for which the titlescreen is displayed before resetting. The GBA operates at roughly 60 frames per second and '0xa8b' divided by 60 is 45 so the unedited titlescreen is displayed for 45 seconds. You can change that number (remember to reverse it) to lengthen or shorten the amount of time it takes for the titlescreen to reset.

    This is for Fire Red, by the way.
     
    Back
    Top