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

Tutorial: How to change multichoice boxes (Fire Red)

JPAN

pokemon rom researcher
104
Posts
15
Years
  • Seen Jul 2, 2016
I come here today with a small tutorial on how to change the multi-choice options to the ones you need.
I will assume in this tutorial that you have at least an hex-editor and a way to find free space.
First of all, open your rom on any hex editor and go to offset 0x3e04b0. This is the pointer for the table containing all multi-choices.
Those pointers are laid out in this format:

xxxxxxxx yy000000

where
x = pointer
y = number of choices
If yy is greater than eight, the box will not display correctly, appearing only a small glitched box on its place.

View attachment 44629

At the adress pointed, there is a table with at least an equal number of pointers, adressing strings. The layout is similar to the previously presented, xxxxxxxx 00000000. Any different and the game crashes.

To make things easier, we'll use a script editor (in the picture, I used XSE) to compile the choice strings into the ROM.
View attachment 44630

Write the offsets where each string is stored and reverse them to pointer format (ex: 0x800015 becomes 15 00 80 08), then search for a place to put this list. You will need (8 x number of strings) bytes of free space.

Afterwards, insert the string offsets in the desired order, each pointer followed by eight zeros.
Finally, replace one of the existing multichoice pointers with your own. In the example, I chose multichoice 0x1 previously the Eevee and evolutions multichoice from Bill's dialog.
View attachment 44631

In the end, Using that set will result in one of these:
View attachment 44632

And so concludes this tutorial. Mind this tutorial limits you to the 65 existing in-game multichoices.

To add more Multichoice boxes, one can copy the existing table to another location and add choices there. Afterwards change the pointer at 0x09cb58 to the one your list is in. It will allow you to surpass the 0x40 limit on the multichoice command.

I hope this tutorial will help you with your hacking.
 
Last edited by a moderator:
224
Posts
16
Years
  • Seen Mar 8, 2016
I got lost here:

Afterwards, insert the string offsets in the desired order, each pointer followed by eight zeros.
Finally, replace one of the existing multichoice pointers with your own. In the example, I chose multichoice 0x1 previously the Eevee and evolutions multichoice from Bill's dialog.
I get how you compile the list into your rom, and then you make that into a pointer. Then you go to that pointer and see the script (list) you just compiled into your rom. And then what? I know how to replace multichoice pointers but I don't get what you mean by: "Insert the string offsets in the desired order, each followed by eight zeros."

Finally, do you know the multichoice table offset for Ruby?
 
Last edited:

Surf

...
1,196
Posts
15
Years
  • Age 29
  • Rust
  • Seen Jul 31, 2011
Is this used to add to a multi choice box or just changing the words
If so it's easier to use a text
 

JPAN

pokemon rom researcher
104
Posts
15
Years
  • Seen Jul 2, 2016
I don't get what you mean by: "Insert the string offsets in the desired order, each followed by eight zeros."

It might have been a little confusing, I admit. What I meant by that was, taking each string offset, place them one by one in the free space you found, on the format the game recognizes. For example:
The string you wish to insert first was at 800539, and the second one at 800582. After getting to the location, you would write
39 05 80 08 00 00 00 00 | 82 05 80 08 00 00 00 00

That was all I meant with that.

Finally, do you know the multichoice table offset for Ruby?

at 3cde00

Is this used to add to a multi choice box or just changing the words

This tutorial allows you to change the words and amount of anwsers on each box. To make more than the preset 65, you would have to change the pointer that indicates the location of the table.
I'm trying to do so as I post, and will update this treads with the awnsers.

Hope this has cleared your questions.
 
224
Posts
16
Years
  • Seen Mar 8, 2016
It might have been a little confusing, I admit. What I meant by that was, taking each string offset, place them one by one in the free space you found, on the format the game recognizes. For example:
The string you wish to insert first was at 800539, and the second one at 800582. After getting to the location, you would write
39 05 80 08 00 00 00 00 | 82 05 80 08 00 00 00 00

That was all I meant with that.



at 3cde00



This tutorial allows you to change the words and amount of anwsers on each box. To make more than the preset 65, you would have to change the pointer that indicates the location of the table.
I'm trying to do so as I post, and will update this treads with the awnsers.

Hope this has cleared your questions.

Ok, so if I took your example of Choice 1, Choice 2, Choice 3, etc.
I would list the strings in the following order:
F0 00 80 08 00 00 00 00 1E 02 80 08 00 00 00 00 29 02 80 08 00 00 00 00 etc... Because those are the pointers to the word/script of "Choice 1, Choice 2, and Choice 3" in XSE in your screenshot.
Then after that I edit the pointer in any multi choice I want to edit right to the place where I entered those strings, correct?

Oh, and to extend the table I think would be pretty simply like any other table. I think you would just copy the entire table, past it in a place with free space like 0x801000. Then, you would search for B0043E08 (Pointer to the table reversed), and all the pointers that are exactly like that pointer you find change to 00108008, because that's where you put your new table. Then you can just add on to the table from there.
 

Master_Track

ROM Reaverz Scripter
916
Posts
16
Years
Ok, so if I took your example of Choice 1, Choice 2, Choice 3, etc.
I would list the strings in the following order:
F0 00 80 08 00 00 00 00 1E 02 80 08 00 00 00 00 29 02 80 08 00 00 00 00 etc... Because those are the pointers to the word/script of "Choice 1, Choice 2, and Choice 3" in XSE in your screenshot.
Then after that I edit the pointer in any multi choice I want to edit right to the place where I entered those strings, correct?
correct!

Nice made tutorial, and I've got no problems with understanding anything ;)
Good job there :cool:
 
12
Posts
15
Years
  • Seen Jul 1, 2009
Reviving thread out of desperate need.

I am a noobish failure and I need to ask: can you further explain "compiling strings into the rom"? Do I write it exactly as is in the picture example and just click compile without specifying anything else?

If you can give me a short explanation on all of those parts, thankyou so much. Also, extremely dumb question: if I were to change the name-select box at the beginning of the rom, which offset am I to go to or was I supposed to find it somewhere?
 
74
Posts
12
Years
  • Seen Nov 3, 2019
I tried this tutorial....Why it dosent work...When I test multi choice my screen become to black only left me(Red) at the screen.Then I walk 1 step after become back normal.Please help me!

PS:Sorry my very bad english.

EDIT:Oopps,your tutorial is work!!!!I think is me do wrong things,I try more 1 time that work!Thank you very much!:)
 
Last edited:
10,078
Posts
15
Years
  • Age 32
  • UK
  • Seen Oct 17, 2023
Somewhere in this tutorial I keep messing up :S


First I wrote out my XSE script

#dynamic 0x800000

#org @Choice1
= Yellow Beach

#org @Choice2
= Capital City

Giving me the offsets: 8186AA and 8199B0, which I then ordered into the bytes AA 86 81 08 00 00 00 00 B0 99 81 08 00 00 00 00.

I then inserted that string into 0x72EE94

Then over the Hall of Fame multibox selection I typed 94 EE 72 08 02 00 00 00

However when used in game by scripting:

...preparemsg 0x8819A46 '"In which area of the Golden Isles\..."
waitmsg
multichoice 0x0 0x0 0x3 0x0...

No box comes up (if changed to 0x4 then the multibox appears, but then obviously that has different options).

Any advice? Where have I gone wrong in this tutorial :S
 
24
Posts
12
Years
  • Seen Apr 29, 2012
If you use this method to insert another multichoice table, how would you bring about those multichoice boxes via command? Does it just continue past the normal amount?
 

klingt

Living Poetry
13
Posts
9
Years
  • Age 37
  • Seen Jan 15, 2015
I just extended my table on fr, was a pain. Isn't there an easier option, and how wide can these be?
 

klingt

Living Poetry
13
Posts
9
Years
  • Age 37
  • Seen Jan 15, 2015
yea but does it change the possible result of a choice or the number of choices available in each box. I need 100 choices in one box
 
Back
Top