• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Our weekly protagonist poll is now up! Vote for your favorite Conquest protagonist in the poll by clicking here.
  • 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.

Adding in custom battle messages

Smeargle

Illusory
  • 160
    Posts
    12
    Years
    Hello everyone, today I will teach everyone how to truelly make their hacks unique by replacing the generic in-battle messages.
    This is my first tutorial so forgive me if anything may be hard to follow, I will work on fixing anything that may hinder the learning process.​

    Before I begin I need to credit bugmania for discovering 0xD7360, without this I would not have been able to follow it and find where the all the battle messages that they game has had locked away. I would also like to credit LocksmithArmy for his table on "pokemon characters" that made decoding and writing new battle messages so much easier. (the chart can be found in step 1)

    Alright now lets get started shall we.
    To start with let me share the information I have gathered while researching:

    3FB218 -- 3FEA26 are where all battle messages, this includes EVERY message you have ever seen in battle. It can be a lot of ground to cover.. But I will be giving a few tricks as to how to find specific messages quickly.

    3FDF3C -- 3FE513 are where a good some of pointers related to battle messages are stored, but not all of them. Why is this important? Well lets say you wanted to add a bigger message than the game already has inputted. You would have to re-point your new message to somewhere with a bit more space.


    Step One: Learning Letters and Commands​
    Spoiler:


    Step Two: Finding and Following a message​
    Spoiler:



    Step Three: Re-pointing your message​
    Spoiler:



    Step Four: Lets Write​
    Spoiler:


    Thats all, super easy stuff. I hope my tutorial wasn't to confusing, please help out each other in the comments if I am not around to do so.
    Credit would be much appreciated if you include this in your hack
    thanks,
    Smeeeeargle


    Edit: Eventually I will be providing a tool for easy translation. Its already half done, but I haven't had much time to finish it lately.​
     
    Last edited:
    Nice little tutorial!
    This is my first tutorial so forgive me if anything may be hard to follow, I will work on fixing anything that may hinder the learning process.
    Don't worry about this, your tutorial was very easy to follow and straightforward.
    It's something small, but this should help people who want to expand their messages larger than what A-text limits them to.
     
    Once I find the time I will add a table of all the more important message offsets.
    I really was hoping to add all that stuff originally but I have had no time as of late.
     
    Interesting research. I'm wondering what, personally, you had down as an idea to use this for? I hope it could be used for a feature similar to the one implemented in Platinum where the foe comes back into the screen to have a chat with you.
     
    Interesting research. I'm wondering what, personally, you had down as an idea to use this for? I hope it could be used for a feature similar to the one implemented in Platinum where the foe comes back into the screen to have a chat with you.

    This can be used for a wide range of thing, alone without ASM it simply replacing messages.
    However if someone was to get creative they could with a little assembly they could for sure add, special messages like "Oh! A shadow pokemon!" if one was to make a Colloseum or XD remake.
    If someone were to make a custom status affect, its in battle message can now be added to the game. With the information provided, if someone went back and traced a status effect they could even have the game ask if you'd like to use a status healer for the next turn.

    This information is a big chunk of the pokemon game considering how many battles we enter. Now that the information is out their its time for the community to make the real magic happen. Behind these messages is quite a bit of information to explore :)
     
    Good and useful tutorial. Thanks.
    Nice tutorial......really easy to follow


    Great to hear that, come summer I will be including a tool that will translate English to hex to speed the overall process up.

    I would also like to point out that these letters and characters are not solely used for in-battle messages. You can use these find a lot of the games text, and then trace the text back to their actual functions :)
     
    Last edited:
    Great to hear that, come summer I will be including a tool that will translate English to hex to speed the overall process up.

    I would also like to point out that these letters and characters are not solely used for in-battle messages. You can use these find a lot of the games text, and then trace the text back to their actual functions :)

    I would be waiting for your tool ....hope its released as soon as possible.
     
    I would be waiting for your tool ....hope its released as soon as possible.

    I already have the main part of done, It translates english to Hex perfectly. But for whatever reason it gets a bit buggy when you try to translate Hex to English. I won't be finishing it until may though, I've got a lot of art projects I put off that I need to finish.
     
    I already have the main part of done, It translates english to Hex perfectly. But for whatever reason it gets a bit buggy when you try to translate Hex to English. I won't be finishing it until may though, I've got a lot of art projects I put off that I need to finish.

    By the way.....do you know at which offset is the defeating message located
    Like bulbasaur fainted or something like that?;)
     
    Thank you for this information. I was wondering how to change the descriptions of attacks, because I added 27 new attacks to Pokemon Emerald and couldn't change their descriptions. With this, I finally know which numbers to use for my new descriptions. Thanks for the help!
     
    By the way.....do you know at which offset is the defeating message located
    Like bulbasaur fainted or something like that?;)

    Yup, you can find that at 3FB40E-3FB419.
    should look like this: FD 10 FE DA D5 DD E2 E8 D9 D8 AB FB FF

    Here are a few message pointers straight out of my notes as well.
    If you have any others you can't seem to find just let me know :)

    3FCC8A -- ## = begins to store escape messages
    3FCC74 - 88 = It's super effective
    3FCBE4 -- F3 = A critical hit!
    3FB31F -- 2D = Stop(space)learning/n/v01?

    3FB2B6 -- D0 = \v00(space)is(space)trying(space)to(newline)learn(space)\v01.\p\x
    3FB2FC -- 3FB31F = delete(space)a(space)move(space)to(space)make(newline)room(space)for(space)\v01?\x
    3FB2D1 -- FB = But,(space)/v00(space)cannot(space)learn(newline)more(space)than(space)four(space)moves.\p\


    3FB2A7 -- B5 = learned\n\v01
    3FB291 -- A3 = grew(space)to(new line)LV.\v(data)!
    3FB262 -- 6F = (2F)(double space)gained /v À <---- gained exp
    3FD274 -- 78 = EXP. (space)
    3FD279 -- 7E = Points!
    3FB252 -- 60 = (pokemon), come back!
    3Fd57E -- 81 = used <---- attacks
     
    Yup, you can find that at 3FB40E-3FB419.
    should look like this: FD 10 FE DA D5 DD E2 E8 D9 D8 AB FB FF

    Here are a few message pointers straight out of my notes as well.
    If you have any others you can't seem to find just let me know :)

    3FCC8A -- ## = begins to store escape messages
    3FCC74 - 88 = It's super effective
    3FCBE4 -- F3 = A critical hit!
    3FB31F -- 2D = Stop(space)learning/n/v01?

    3FB2B6 -- D0 = \v00(space)is(space)trying(space)to(newline)learn(space)\v01.\p\x
    3FB2FC -- 3FB31F = delete(space)a(space)move(space)to(space)make(newline)room(space)for(space)\v01?\x
    3FB2D1 -- FB = But,(space)/v00(space)cannot(space)learn(newline)more(space)than(space)four(space)moves.\p\


    3FB2A7 -- B5 = learned\n\v01
    3FB291 -- A3 = grew(space)to(new line)LV.\v(data)!
    3FB262 -- 6F = (2F)(double space)gained /v À <---- gained exp
    3FD274 -- 78 = EXP. (space)
    3FD279 -- 7E = Points!
    3FB252 -- 60 = (pokemon), come back!
    3Fd57E -- 81 = used <---- attacks

    Thank you very much for it..........
     
    Is there any way to manipulate this in a script ... to which the bytes can be changed at the offsets by some command and then changed back at the end of the script?
     
    Hi Smeargle, i have a question
    If you have special message like:

    - [Trainer] would like to battle
    - [Trainer] is about to use [Pokemon]
    - Will [player] change Pokemon?

    The [Trainer], [Pokemon], and [Player] word, how to search them? What hex code of it? Or we just ignore it and search "... would like to battle"?
    Thanks before
     
    Hi Smeargle, i have a question
    If you have special message like:

    - [Trainer] would like to battle
    - [Trainer] is about to use [Pokemon]
    - Will [player] change Pokemon?

    The [Trainer], [Pokemon], and [Player] word, how to search them? What hex code of it? Or we just ignore it and search "... would like to battle"?
    Thanks before

    For trainers there is two words: trainer class and name. Class's code is FD 1C and name's code is FD 1D. So full trainer name code is FD 1C 00 FD 1D.
    For Pokemon code is FD 0F, and for attacks - FD 01

    FB=\p - new line
    FD=\v - calls on data (like when learning a new attack or leveling up)
    FE=\n - new page

    You are wrong here. FB is new page, and FE is new line.
     
    if i want to put: A wild "nature" "pokemon specie" appear!!!
    how can i do it???? especialy the code for the nature
     
    Hey guys, i need a help...I'm trying to replace the following text:
    [Trainer] is about to use [Pokemon]... for something like: [Trainer] is about to call the next pokémon...
    I've sucess at remove the "[Trainer] is about to use [Pokemon]..." message, but...the battle skipped the part of "...Will [player] change Pokemon? [YES/NO]" I deduced which all this is a single script, but, i need support to keep the part of "...Will [player] change Pokemon? [YES/NO]" I must re-write all the script in a free space? If "yes" is the answer...How i can put the data part of "[Trainer]" and "[Player]" and the "[YES/NO]" at the script? (Sorry if was a noob question, im beginner haha :v) I'll try to see here, but a answer is welcome =)

    * Great tutorial, easy to understand and very explained. :)
     
    Last edited:
    Back
    Top