Each piece of text in GBAFE is tied to a text ID up to 0xFFFF. This text contains a number of control codes that determine extra data such as loading and moving faces.
Text editing requires the Anti-Huffman Patch to be installed. This is included with the FE8 Essential Fixes, or as part of the FEditor Autopatches for EA if you are using FE7.
Formatting Text Text is converted into binary data using a text parser.
We will be using the parser included with Event Assembler, but we will make the process much simpler by using textprocess.exe to do all the hard work for us.
Here is a very simple example of a text file called
# 0x212 RubyName Ruby[X]
There are three parts to each text entry. First,
# 0x212 is a text ID. It
happens to be the text ID that refers to Eirika's name.
The second part is an optional definition. In other words, when I need to
refer to this text ID later on, I can use
RubyName and Event Assembler will
understand that to mean this text ID. If you leave out the definition, you can
still refer to it by the number
The final part is the actual text. You can see that we are changing Eirika's
name to Ruby. Finally we end the text with the control code
[X]. This is a
special code that tells the game where the text stops.
Now, let's look at something a little more complicated.
# 0x903 [OpenFarLeft][LoadFace][0x02][0x01] Hello, how are you?[A] As for me, I'm talking[NL] words at you![A][X]
The positions from left (flip for the right side):
[LoadFace][0x02][0x01] is used to load up portrait number 0x02. If you have
more than 0xFF portraits, the higher digit carries over to the [0x01], e.g.
portrait 0x17F would be
[LoadFace][0x7F][0x02]. You only need
a portrait is actually being loaded. Otherwise, you can simply use
[Open(position)] to make the face at that position active.
Textprocess.exe works by dragging a text file onto the exe. It then converts
this text file for EA insertion and generates an installer file that you
#include in your buildfile.
This textfile contains all of the text changes you want to make. For
example, we can take the two previous text changes and put them in a single
document, which I've called
# 0x212 RubyName Ruby[X] # 0x903 [OpenFarLeft][LoadFace][0x02][0x01] Hello, how are you?[A] As for me, I'm talking[NL] words at you![A][X]
But wait, why is it called a buildfile?
You guessed it, you can
#include other text files! Let's take a look at one
of the text buildfiles I used for a simple one chapter hack:
#include "DQText.txt" #include "PrologueText.txt" #include "MiscText.txt"
You'll notice there aren't any actual text entries here, those are all split into separate text files for organization. Peeking at PrologueText.txt, we can see things like:
#0x664 BrownBoxPrologue 1 year ago[X] #0x665 BrownBoxPrologue2 Present day[X] # 0x1a2 Prologue_Objective_Long Survive[X] #0x19d Prologue_Goal_Window Survive[X]
Now you may have noticed something else this has in common with an event buildfile - whenever we process the text, it's always the same file.
Know what that means? We can add it to MAKEHACK.cmd!
Here's an example from my own:
cd %~dp0 copy FE8_clean.gba FE_Hack.gba cd "%~dp0Tables" c2ea "%~dp0FE8_clean.gba" cd "%~dp0Text" textprocess_v2 text_buildfile.txt cd "%~dp0Event Assembler" Core A FE8 "-output:%~dp0FE_Hack.gba" "-input:%~dp0ROM Buildfile.event" pause