• 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

Derlo

Tired....
135
Posts
16
Years
Storage System (Bill's PC)

Was trying to find a way to decrease the number of boxs in Storage System (Bill's PC) to use the free RAM for some routines.
I found a routine in 0x04c0a0 that loads at 0x02029314 the beginning of the spaces of Boxs.
However I could not find the limiting amount of boxs going from 01-14.
If someone can help find a way to let only active 10 boxs would greatly help!
 
3
Posts
9
Years
  • Age 36
  • Seen Sep 10, 2014
How is generation 1 block tile membership stored in RAM?

Hi folks, I'm having quite a lot of success decoding the pokemon map from RAM, I've managed to dump block ID's for pallet town starting at about 0xC6EA, and I've also managed to decode the collision data (finally, this took ages to work out - just tile IDs). But what is really bugging me is I've not yet found out how to decode which 4 tiles make up a block. Map editors and tools can read the ROM, but I'm trying to work out the location in RAM. I'm sure it's been found - does anyone know?
 

Shiny Quagsire

I'm Still Alive, Elsewhere
697
Posts
14
Years
Hi folks, I'm having quite a lot of success decoding the pokemon map from RAM, I've managed to dump block ID's for pallet town starting at about 0xC6EA, and I've also managed to decode the collision data (finally, this took ages to work out - just tile IDs). But what is really bugging me is I've not yet found out how to decode which 4 tiles make up a block. Map editors and tools can read the ROM, but I'm trying to work out the location in RAM. I'm sure it's been found - does anyone know?

It's not done in the RAM, unless you (technically) count the VRAM. If you look at the map viewer you can see exactly the location of each tile in each layer. Of course then you have to find which of the 3 layers it's in and then properly format it, but from my 3 layer tile hack I did I'm fairly sure there's no sort of buffer in RAM anywhere.

EDIT: Might have derped up a bit (thought you were talking about Gen III), although I'm fairly certain that it is applicable still. Chances are it's unlikely that they have the entire map tilemap buffered, but I could be wrong considering it's Yellow and not Gen III.
 
Last edited:

Sierraffinity

Desperately trying to retire from ROM hacking
1,069
Posts
16
Years
It's not done in the RAM, unless you (technically) count the VRAM. If you look at the map viewer you can see exactly the location of each tile in each layer. Of course then you have to find which of the 3 layers it's in and then properly format it, but from my 3 layer tile hack I did I'm fairly sure there's no sort of buffer in RAM anywhere.
Looking at his post history and that RAM offset he posted, I'm pretty sure he's talking about Yellow.
 

Danny0317

Fluorite's back, brah
1,067
Posts
10
Years
  • Age 24
  • Seen Nov 19, 2023
(EM)

Flag 88b = player is on bike and can't dismount (thanks Touched for telling me to test it :D)

0x1ad5d8 = pointer to script for not having an item registered in bag. Repoint and make your own script and you can have stuff like this :)
2Udx8.jpg
 
135
Posts
10
Years
  • Age 35
  • Seen Mar 10, 2024
Ditto's unique ability to breed with everything despite being genderless is a property of its egg group, but it won't actually produce the right eggs if you give something outside of slot x84 the Ditto egg group- you'll just get a bunch of Bulbasaur if there's no female involved. To fix this, change the byte at x4062A from x84 to the slot you want to behave like Ditto.
There is a typographical error in this paragraph - the offset should be x4602A.

In addition, I've gone through and found the equivalent Emerald offsets for this stuff.
Ditto's unique ability to breed with everything despite being genderless is a property of its egg group, but it won't actually produce the right eggs if you give something outside of slot x84 the Ditto egg group- you'll just get a bunch of Bulbasaur if there's no female involved. To fix this, change the byte at x70816 from x84 to the slot you want to behave like Ditto.

While I'm pointing out breeding quirks that are of no use to anyone:

An egg that would hatch as the byte at x70858 (normally x1D, female nidoran) has a 50% chance to instead hatch as the byte at x7086E (normally x20, male nidoran).

Furthermore, an egg that would normally hatch as the word at x708C4 (normally x183, Illumise) has a 50% chance of hatching as twice the byte at x70888 (normally xC1, half of Volbeat's index number).

Volbeat and male Nidoran family members do not produce their female counterparts when breeding with Ditto in Gen 3.

There's a second Ditto check at x70894 - this one doesn't affect the child's species but it probably is important for inheritance.

If an egg would hatch to be double the byte at x7074C (xB4, half of Wynaut's index number) and a parent is not holding the item at x7077C and x70780 (xDD, Lax Incense), the baby will become the byte at x70784 (xCA, Wobbuffet).

If an egg would hatch to be double the byte at x70754 (xAF, half of Azurill's index number) and a parent is not holding the item at x70792 and x70796 (xDC, Sea Incense), the baby will become the byte at x7079A (xB7, Marill).

Azurill's index number is constructed a second time at 7078A- I'm not exactly sure *why* it's needed but if the baby's index number doesn't match it the game won't consider changing it to a Marill.
 

Le pug

Creator of Pokémon: Discovery / Fat Kid
870
Posts
10
Years
Skip Birch Intro for Pokemon Emerald​

It'll skip the entire intro, except there is a 1 second start-up in beginning. My advice for you is to edit to where no song is playing for the intro and the top colors above birch are blackened and it'll look like nothing was ever there. Otherwise, figure out how to take that little part out since it hasn't been found yet.

Go to 0x308AC and replace the B1 08 03 08 to 31 16 03 08 and you're set! That's it!

Here's a gif of it in use for Pokemon: Fat Kid
hr0zDhQ.gif



Credit goes to Touched.​
 

Touched

Resident ASMAGICIAN
625
Posts
9
Years
  • Age 122
  • Seen Feb 1, 2018
Skip Birch Intro for Pokemon Emerald​

It'll skip the entire intro, except there is a 1 second start-up in beginning. My advice for you is to edit to where no song is playing for the intro and the top colors above birch are blackened and it'll look like nothing was ever there. Otherwise, figure out how to take that little part out since it hasn't been found yet.

Go to 0x308AC and replace the B1 08 03 08 to 31 16 03 08 and you're set! That's it!

Here's a gif of it in use for Pokemon: Fat Kid
hr0zDhQ.gif



Credit goes to Touched.​

In addition to changing that pointer, you can:

Disable Music
08030872: 00

Disable Background
08030882: 00 00 00 00

This will not set the player's name. It will just be blank.
 
205
Posts
9
Years
  • Age 37
  • Seen Jul 26, 2021
Wow thats great, i always disliked the Intro! However it would be good, if there would be another way to name the player.
 

Touched

Resident ASMAGICIAN
625
Posts
9
Years
  • Age 122
  • Seen Feb 1, 2018
There is

Code:
.text
.align 2
.thumb_func

main:
	push {lr}
	ldr r0, player_data
	ldr r0, [r0]
	ldr r1, chosen_name
	bl strcpy
	pop {pc}

strcpy:
	ldr r2, =(0x08008BA0 + 1)
	bx r2

.align 2
player_data: .word 0x03005D90
chosen_name: .word 0xDEADBEEF

That's untested, but you can callasm that, set the pointer that says 0xDEADBEEF to the pointer to a name of your choice (in Emerald). It must be 7 characters long and end in FF.
 

Danny0317

Fluorite's back, brah
1,067
Posts
10
Years
  • Age 24
  • Seen Nov 19, 2023
Since this isn't big enough for a tutorial, I guess I'll post it here. If you wanna remove the thing in EM where Prof shows you a pokemon, and says, this is a pokemon, for some reason, then do this:
Write FF FF FF 09 at 30A20. (that disables the msgbox in the intro, and the animation. Next, go to introeditor (I think it was) and make the pokemon that birch sends out a (?). Lastly, make that image transparent with the tool of your choice. The reason you have to do that is because the Pokemon shows up after naming yourself, so technically it'll be there, but transparent.
 

Le pug

Creator of Pokémon: Discovery / Fat Kid
870
Posts
10
Years
THIS IS FOR EMERALD ONLY. So I don't have the actual ASM file anymore but credit goes to shinyquag for this one for helping me figure out how to get this to work.

So if you're like me and you want to add or remove menu items from the start menu, like how I removed the player's name from this screenie:
ZZW4j.jpg


you need to copy and CTRL B WRITE the following bytes to 0x9F53A:
Code:
00 20 00 00 00 00 01 20 00 00 00 00 02 20 FF F7 B2 FF 03 20 00 00 00 00 05 20 FF F7 AC FF 06 20 FF F7 A9 FF 07 20 FF F7 A6 FF 01 BC 00 47 00 B5 01 20 FF F7 A0 FF 02 20 FF F7 9D FF 0A 48 FE F7 0A F9 00 06 00 0E 01 28 02 D1 03 20 FF F7 93 FF 09 20 FF F7 90 FF 06 20 FF F7 8D FF 07 20 FF F7 8A FF 01 BC 00 47 62 08 00 00 00 B5 01 20 FF F7 82 FF 02 20 FF F7 7F FF 0A 48 FE F7 EC F8 00 06 00 0E 01 28 02 D1 03 20 FF F7 75 FF 04 20 FF F7 72 FF 06 20 FF F7 6F FF 07 20 FF F7 6C FF 01 BC 00 47 62 08 00 00 00 B5 00 20 FF F7 64 FF 01 20 FF F7 61 FF 04 20 FF F7 5E FF 06 20 FF F7 5B FF 07 20 FF F7 58 FF 01 BC 00 47 00 B5 01 20 FF F7 52 FF 0C 20 FF F7 4F FF 04 20 FF F7 4C FF 0A 20 FF F7 49 FF 0B 20 FF F7 46 FF 06 20 FF F7 43 FF 07 20 FF F7 40 FF 01 BC 00 47 00 B5 01 20 FF F7 3A FF 04 20 FF F7 37 FF 06 20 FF F7 34 FF 07 20 FF F7 31 FF 01 BC 00 47 00 00 30 B5 83 B0 15 4C 16 48 63 F7 90 FE 20 70 20 78 64 F7 92 F8 20 78 00 21 F7 F0 C6 FE 11 48 12 49 09 78 01 22 02 23 69 F7 21 FB 10 4D 10 49 28 1C 69 F7 2C FC 20 78 01 21 00 91 FF 21 01 91 00 21 02 91 01 21 2A 1C 00 23 64 F7 98 FF 20 78 02 21 63 F7 D8 FF 03 B0 30 BC 01 BC 00 47 0C 76 03 02 08 05 51 08 C4 1C 02 02 4C A0 03 02 C4 1F 02 02 FF E6 5E 08 30 B5 83 B0 04 48 00 68 04 49 40 18 00 88 07 28 0A D1 03 4C 03 48 09 E0 90 5D 00 03 B2 0C 00 00 0D 76 03 02 38 05 51 08 18 4C 19 48 63 F7 44 FE 20 70 16 4C 20 78 64 F7 45 F8 20 78 00 21 F7 F0 79 FE 14 48 14 4A 15 49 09 68 15 4B C9 18 09 88 89 00 89 18 09 68 69 F7 3F FA 12 4D 12 49 28 1C 69 F7 DA FB 20 78 01 21 00 91 FF 21 01 91 00 21 02 91 01 21 2A 1C 00 23 64 F7 46 FF 20 78 02 21 63 F7 86 FF 03 B0 30 BC 01 BC 00 47 0D 76 03 02 30 05 51 08 C4 1C 02 02 10 05 51 08 90 5D 00 03 B2 0C 00 00 C4 1F 02 02 16 E7 5E 08 10 B5 00 00 00 20 00 28 0B D0 0E 4C 20 78 00 21 F8 F0 74 FC 20 78 02 21 63 F7 64 FF 20 78 63 F7 EF FE 0A F1 53 FB 00 06 00 28 07 D0 06 4C 20 78 00 21 F8 F0 63 FC 20 78 63 F7 E2 FE 10 BC 01 BC 00 47 00 00 0C 76 03 02 0D 76 03 02 F0 B5 57 46 4E 46 45 46 E0 B4 83 B0 80 46 0E 1C 02 78 11 48 81 46 11 49 8A 46 11 48 12 06 14 16 25 18 28 78 C3 00 48 46 04 30 18 18 01 68 0D 48 17 1C 81 42 18 D1 F8 F0 07 F9 00 06 00 0E 29 78 C9 00 49 44 09 68 23 01 09 33 1B 04 1B 0C 08 22 FA F0 08 FC 20 E0 00 00 40 05 51 08 C4 1F 02 02 10 76 03 02 8D FC 09 08 49 46 58 18 01 68 50 46 69 F7 56 FB F8 F0 E8 F8 00 06 00 0E 21 01 09 31 09 06 09 0E 00 91 FF 21 01 91 00 21 02 91 01 21 52 46 08 23 64 F7 BC FE 80 20 40 04 39 18 0A 0E 09 16 05 48 00 78 81 42 08 DA 01 3E 00 2E B4 D1 41 46 0A 70 00 20 04 E0 0F 76 03 02 40 46 02 70 01 20 03 B0 38 BC 98 46 A1 46 AA 46 F0 BC 02 BC 08 47 00 00 10 B5 83 B0 05 48 00 21 41 56 02 1C 05 29 73 D8 88 00 03 49 40 18 00 68 87 46 00 00 19 76 03 02 B8 F8 09 08 D0 F8 09 08 D8 F8 09 08 E4 F8 09 08 0C F9 09 08 30 F9 09 08 4C F9 09 08 10 78 01 30 10 70 59 E0 FF F7 B2 FD 00 49 2F E0 19 76 03 02 F7 F0 5E FD 06 48 00 78 F8 F0 6A F8 00 06 00 0E 00 21 F7 F0 81 FD 03 49 00 20 48 70 1E E0 00 00 0F 76 03 02 19 76 03 02 00 00 00 20

Now what this will do will allow to call to the battle frontier menu and bag via setflag 0x88C. Obviously to cancel out the effects go back to the standard menu, use clearflag 0x88C.


**This used to have the ability to use clearflag 0x860 etc to remove the items like Save or Exit, etc but I don't have the ASM anymore so I can only provide this as it removes the Player slot and PokeNav, Pokemon, and PokeDex menu items. Sorry! Feel free to research and post the fixings of that.
 
Last edited:
114
Posts
12
Years
  • Seen Aug 29, 2017
Would it be possible to have a pokemon evolve by gender in 3rd gen?...I wanted to make wurmple evolve on level 7 based on gender instead of personality values but noticed that in editors such as G3HS it doesn't exist...
 
27
Posts
10
Years
  • Age 43
  • Seen Jan 5, 2017
Does anyone know how the game generates pokemons for a wild battle?
 
252
Posts
10
Years
  • Age 27
  • Seen Jul 6, 2019
Rough Skin in Gen 3 makes the attacker lose 1/16 of its maximum hp, while gen 4 and beyond makes the attacker lose 1/8. To fix this in Emerald, go to 0x433CE and change 00 09 to C0 08.
EDIT: To do this for Firered, do the same thing at 0x1AADA
 
Last edited:

AkameTheBulbasaur

Akame Marukawa of Iyotono
409
Posts
10
Years
Does anyone here know anything about Dynamic Pokemon Levels (where the levels of trainers and/or wild pokemon change depending only our own Pokemon levels)?

I've seen a few older hacks that have used it, but so far I can't find anything documenting how they implemented it.
 
1,323
Posts
16
Years
  • Seen Dec 9, 2023
(for Emerald) These offsets determine how many Pokémon show up in the Hoenn dex:
xBC8FE - amount you want
xBC926 - amount you want
xC0890 - amount you want minus one
You can only have up to 255 in the regional dex.

I'm sure there's some limiters related to the Summary screen and the Save screen that I've possibly missed but I can't confirm it right now.
 

Kenny1

On a break from Rom hacking, to improve other skil
86
Posts
10
Years
  • Age 23
  • Seen Nov 6, 2017
I'm not completely sure if this is known already,I haven't seen it, only for FireRed, But I think I found the table for Emerald which points to the ASM for the script commands. I'm not completely certain, but I think it is this: 081DB67C
Could you guys, who are better at hacking Emerald verify this?
Or tell me that it has already been found so that I can delete this post.
 
Last edited:
5,256
Posts
16
Years
trainerbattle 0x2 is not the same as trainerbattle 0x1, unlike what I've seen posted in some places. 0x2 will continue the script after the battle but also with encounter music, whereas 0x1 does not play any encounter music.
 
Last edited:
Back
Top