• 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

xGal

Mhm
241
Posts
12
Years
400 replies!!!!!!! So, what you guys say about completely custom prebattle mugshots?
 

redriders180

Mastermind of Pokemon Glazed
314
Posts
13
Years
Just a little random thing, in Emerald, editing the byte at 0x08070978 and 0x08071414 will change the level an egg will hatch at. This works for stuff given by the giveegg command, as well as from the Day-Care.
 

daniilS

busy trying to do stuff not done yet
409
Posts
10
Years
  • Age 24
  • Seen Jan 29, 2024
The offsets 0x02023C5D and 0x02023C5E control the opponent Pokémon's primary and secondary type, respectively.
Changing them will also change attack effectiveness, and probably also catch rates of balls like the net ball.
 

Sliter

Gaijin Trainer
74
Posts
10
Years
I'm with some problens to translate text from platinum, is there any way to export the text files from platinum in separated files for each .bin file in pl_msg.narc ?
getting in .bin with crystal title I couldn't find a way to open/convert them to xml or editable text
With thenewpoketext I can only get all the game text in one file(And it make my oldy pc frooze when I want to open), should be better if I could get them apart, like we can see in some editors like in SDSME or Ds text editor but I can't export/import them from there, there's any way?
 

KosmoF

Diehard Pokemon Fanatic
19
Posts
15
Years
So editing the Pokemon that is released by the Professor in the games is easy, and I think possible with some tools. However, the cry does not change. Here are some changes that need to be made to change the cry of this Pokemon.

FireRed:
Code:
0812FB38: 02 48
0812FB42: 30 BD XX XX 00 00

Do I need to use a Hex Editor to locate the above code? I was trying to find it in Hex Workshop but it doesn't find it when I searched; I've never used Hex Editors so I'm not sure if I'm doing something wrong.
 

GOLDstandard

Eclectic
51
Posts
10
Years
Does anybody know how LinkandZelda put the snowy weather effect into Liquid Crystal? I've looked, and can't find anybody that knows how. I hope it's just a limiting byte located somewhere that requires just a simple change
 

GOLDstandard

Eclectic
51
Posts
10
Years
No, not the constant tiny snowflakes one, the one that has three snowflakes falling. I know how to apply the volcanic ash snow haha. They made it work for longer than three snowflakes which is something I've never seen done.
 

Shiny Quagsire

I'm Still Alive, Elsewhere
697
Posts
14
Years
No, not the constant tiny snowflakes one, the one that has three snowflakes falling. I know how to apply the volcanic ash snow haha. They made it work for longer than three snowflakes which is something I've never seen done.

I'm pretty sure it's just a limiter, but it could be something a bit more complicated for all we know.
 
No, not the constant tiny snowflakes one, the one that has three snowflakes falling. I know how to apply the volcanic ash snow haha. They made it work for longer than three snowflakes which is something I've never seen done.

I haven't used that weather in quite a while (like years) but, if I remember right, the weather is continuous if you walk onto the map from a connection. If I'm remembering, it's the warp that limits it to three snowflakes only.

Actually, scratch that, it seems that walking onto the map makes the snowflakes last a few seconds longer than when warping, but that's it. Also, it looks like the darkening effect of it lasts longer-than-average (well, compared to the other weathers, I guess) when walking onto a map that has regular weather set. But what would make the visual snow effect last longer when walking onto a map than when warping onto it?
 

Telinc1

Weirdo Extraordinaire
168
Posts
10
Years
All right, I've got something here that most of you (a.k.a 90% of you) will find useless. This is actually useful if you are using the second floor of the Pokémon Centre in your hack. I personally am, however I have edited the map to remove the Union Room, as even VBA-Link can't simulate the Wireless Adapter properly. As a result, I have moved the Direct Corner, so when exiting from the Colosseum room/Trade room the little door thing appears in the wrong position. After a bit of searching, I found out that the script ran exactly after the big door closes behind you is at 0x081BB34F. Or, if you're just interested in the setmaptile command, it is at 0x081BC03E. I hope that this is helpful to at least one hacker who isn't me.

Edit: Oh yeah, I forgot to clarify that these are actual scripts that can be edited with XSE.
 

kearnseyboy6

Aussie's Toughest Mudder
300
Posts
15
Years
  • Seen Jun 22, 2019
Here is a little BW script that checks as you ride past the daycare man. Just place it on a script tile (var = 4001):

Spoiler:
 
Last edited:

RichterSnipes

Not even a nibble...
513
Posts
12
Years
  • Age 30
  • USA
  • Seen Dec 1, 2023
The (Un)Used Item Obtained Fanfare
For BPRE v1.0

People who've played FR/LG know that the Level Up fanfare also plays any time you obtain an item (unless specified in a scripted event). The offsets that make that so are at 1A6765 and 1A6769. The former's value is that of the tune that plays whenever the XSE parameters MSG_FIND or MSG_OBTAIN functions are called (also, if one finds a hidden item). The latter value is the same, but only applies if the item is a TM or HM.

Both locations have their bytes as 01 01 in the ROM, which corresponds to song 0x101, the Level Up fanfare. You can change these values to refer to whatever tune you'd like. For the sake of making things feel a bit more correct, let's have the former location use the Item Obtained fanfare (0x102) and the latter location use the TM/HM Obtained fanfare (0x105). For this, change the line of bytes from 1A6763 to 1A676A from

Code:
03 31 01 01 03 31 01 01
to

Code:
03 31 [B]02 01[/B] 03 31 [B]05 01[/B]
Note that this doesn't apply to events that play tunes that are defined in the scripts themselves, like with XSE's "fanfare" command.
 

Shiny Quagsire

I'm Still Alive, Elsewhere
697
Posts
14
Years
The (Un)Used Item Obtained Fanfare
For BPRE v1.0

People who've played FR/LG know that the Level Up fanfare also plays any time you obtain an item (unless specified in a scripted event). The offsets that make that so are at 1A6765 and 1A6769. The former's value is that of the tune that plays whenever the XSE parameters MSG_FIND or MSG_OBTAIN functions are called (also, if one finds a hidden item). The latter value is the same, but only applies if the item is a TM or HM.

Both locations have their bytes as 01 01 in the ROM, which corresponds to song 0x101, the Level Up fanfare. You can change these values to refer to whatever tune you'd like. For the sake of making things feel a bit more correct, let's have the former location use the Item Obtained fanfare (0x102) and the latter location use the TM/HM Obtained fanfare (0x105). For this, change the line of bytes from 1A6763 to 1A676A from

Code:
03 31 01 01 03 31 01 01
to

Code:
03 31 [B]02 01[/B] 03 31 [B]05 01[/B]
Note that this doesn't apply to events that play tunes that are defined in the scripts themselves, like with XSE's "fanfare" command.

Nice find, I remember seeing a post a while back that did this via script and I can't help but remember thinking how much better it would be if it were done via ASM.
 
3,830
Posts
13
Years
  • Age 26
  • OH
  • Seen Feb 26, 2024
Reusable TMs in Emerald

So I was taking a peek through good old reseach and development today when I saw a cute little post about resuable TMs. You know, making TMs act like HMs. After seeing that it had been found on Ruby and FireRed, I thought, why not find it one Emerald? So I did.

To do this little bad boy, go to 0x1B6EE0 in your Emerald ROM and change the A9 there to 90.
Simple as that!

Here's a tiny little explanation for those wondering.

First, 0x1B6EE0 is this little section of code called when a TM or HM is being used. For simplicity's sake, I'll show what is relevant:

Code:
081B6EE0: 20A9 mov r0, #0xA9
081B6EE2: 0040 lsl r0, r0, #0x1
081B6EE4: 4284 cmp r4, r0
081B6EE6: bhi $081B6EF0

What it does, is first take the number A9, and put it in r0. Then, it takes r0 and left shifts it 1. This is the same as multiplying by 2 (A9 << 1 = A9 * 2 = 152). If one was to look at any item editor, they would see that this is the index of TM50 in Emerald. Then, this new value is compared to r4, which has the index of the TM/HM being used. If this number higher, the game knows that an HM was used, so it goes to the relevant area to keep it.

This is where we come in. What we want the game to think is that all TMs are the same as HMs. So, what we need to do is change the index it looks for into the index for the first TM, rather than the first HM. So looking at the items, TM01's index is 121. Dividing this by 2 gives 90, so that is why we put 90. The only downside to doing this really is that item 120 is included in this check, which doesn't matter because it's not a TM anyway (it's the Devon Goods). So there ya have it!
 
1,323
Posts
16
Years
  • Seen Dec 9, 2023
I made a script that will allow you to choose how many Pokemon you need to have registered in order to receive a diploma.

Code:
#dynamic 0x800000
//notes
//[buffer1] = the requirement number
//[buffer3] = how many kinds you currently have

#org @main
lock
faceplayer
call @check
msgbox @msg1 MSG_YESNO
compare LASTRESULT 0x0
if 0x1 goto @noyoumaynot
setvar 0x8004 0x0
special2 LASTRESULT 0xD4 //places on var 0x8005 # of Pokemon that you've seen, and on var 0x8006 # of Pokemon that you've caught
buffernumber 0x2 0x8006 //no idea
call @check
compare 0x8006 0xD2 //the second argument should be the amount of Pokemon you're checking for
if 0x0 goto @notmetreq
msgbox @msg4 MSG_KEEPOPEN
waitmsg
pause 0x3C
special 0x187
compare LASTRESULT 0x2
if 0x1 goto @idk
special 0x108
waitstate
release
end

#org @idk
release
end


#org @check
buffernumber 0x0 0xD2 //the second argument should be the amount of Pokemon you're checking for
return

#org @noyoumaynot
msgbox @msg2 MSG_KEEPOPEN
release
end

#org @notmetreq
msgbox @msg3 MSG_KEEPOPEN
release
end

#org @msg1
= Is that right?\pI'm the game designer!\pFilling up your Pokédex is tough,\nbut don't quit!\pMay I check your Pokédex now?

#org @msg2
= No? Well alright then.\pBut if you fill it out completely,\nplease show me!

#org @msg3
= So you've recorded data on [buffer3]\ndifferent Pokémon species[.]\pBut there are more in the Kanto\nregion! I'm sure of it!\pCome show me again when you've\nfound more!

#org @msg4
= So you've recorded data on [buffer3]\ndifferent Pokémon species[.]\pWow! Excellent!\pYou completed your Pokédex!\nCongratulations!\l[.]

You'll notice that for every time I made a comment saying:
//the second argument should be the amount of Pokemon you're checking for
,
my second argument is 0xD2.
0xD2 is hex for 210, which is the amount of Pokemon in my hack's Pokedex.

So say, if your hack had a Pokedex of 251 Pokemon, then you would put the number 0xFB instead. The game will then check if you have that many Pokemon registered in your Pokedex, and if the number matches, it will reward you with a diploma.

For some reason it only shows the National Dex diploma which could be a problem if your hack as a regional dex AND a national dex, but it could be solved simply by altering the tilemap. There's also a hack to have it display any image+text combo you want so it's really not a problem.
 
1,323
Posts
16
Years
  • Seen Dec 9, 2023
In FireRed, 0x0807F938 controls what level the ghost Marowak battle is. The script on the map doesn't actually determine the level even though it may look like it - if you modify the wildbattle command in the script to a different level, the Ghost/Marowak will still be Lv30 no matter what you do. To change the level, you have to change the byte at 0x0807F938, which is part of the routine that controls the ghost battle.

1_zps6be2b382.png


The offset for the whole routine is 0x0807F904.
 

DoesntKnowHowToPlay

Tiny Umbrella with Lots and Lots of Good
265
Posts
12
Years
  • Seen Feb 24, 2024
The Pickup table in FR is at x250848. Each entry is four bytes- the first two are the index number of an item, the latter two are the odds of the item being obtained plus the value for the previous item.

For example, to interpret the vanilla FR table:

8B 00 0F 00 = 15% (xF = 15) chance of Oran Berry (item x8B)
85 00 19 00 = 10% (x19 - x0F = xA, 10) chance of Cheri Berry (item x85)
86 00 23 00 = 10% (x23 - x19 = xA, 10) chance of Chesto Berry (item x86)
87 00 2D 00 = 10% (x2D - x23 = xA, 10) chance of Cheri Berry (item x87)
88 00 37 00 = 10% (x37 - x2D = xA, 10) chance of Rawst Berry (item x88)
89 00 41 00 = 10% (x41 - x37 = xA, 10) chance of Aspear Berry (item x89)
8C 00 4B 00 = 10% (x4B - x41 = xA, 10) chance of Persim Berry (item x8C)
2A 01 50 00 = 5% (x50 - x4B = x5) chance of TM10 (item x12A)
45 00 55 00 = 5% (x55 - x50 = x5) chance of PP Up (item x45)

...etc. The code responsible for reading this table (and checking if you have pickup, and rolling to see if it even activates at all) starts at x2ce48 (which is also battle script command xE5).
 
Last edited:
Back
Top