• 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?".
  • Forum moderator applications are now open! Click here for details.
  • Welcome to PokéCommunity! Register now and join one of the best places on the 'net to talk Pokémon and more! Community members will not see the bottom screen advertisements.
  • Want to share your adventures playing Pokémon?
    Check out our new Travel Journals forum for sharing playthroughs of ROM Hacks, Fan Games, and other Pokémon content!
  • IMPORTANT: Following a takedown request, the following hacks have been delisted from PokéCommunity:

    • Pokémon Glazed
    • Pokémon: Giratina Strikes Back
    • Pokémon Flora Sky
    • Pokémon Stranded
    The downloads and discussion threads for these hacks will no longer be accessible, and staff will be unable to return questions regarding accessing this content.

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