FE_Builder_GBA -- If you have any questions, attach report7z

Does “character custom animation table” say things to this part?
Or are you talking about Custom Animation Patch?

Perhaps, you seem to be talking about the Custom Animation Patch.

After securing space, please click the link of Anime.

Then you will see this screen, so please make settings for each type of weapon and each special weapon.
In existing, there is two motion, has sword motion and no weapons motion(item).
If you want to set a lot more, please click on the Extends List enclosed with a green frame and secure additional space.

Normally, class battle animation refers to pointer of class setting.
The Custom Animation Patch will overwrite the specified pointer on the condition specified by you.
Therefore, different animations can be displayed under specified conditions.

For example, if you have two SwordMaster, you want to assign a dedicated SwordMaster animation to one unit.

When I read your post, I thought like just wanting to change the animation in certain weapons.
If that is the case, I think that it is possible without using Custom Animation.

If you only want to display a special animation only for a specific weapon, you can do with the function of vanilla.
For example, please set as follows.
eirika will ride a horse only when equipped with Slim Sword.

I meant the Modern Character Growths (Growth = Character Growth + Class Growth) patch. How do I undo the effects of installing it because uninstalling it doesn’t do anything.

Thank you for explaining this! now it works :slight_smile:

I see.
Please update FEBuilderGBA to the latest version.
If you still have problems that can not be uninstalled, please send me report.7z.

I tested with ver 20180731.23, but I could uninstall it.

DrawUTF8


This is a patch that displays UTF-8 in FE8U or FE7U.
This patch can theoretically support up to UTF-32.
So you should be able to display all languages on the Earth.
However, since FEBuilderGBA is written in C#, C# has UTF-16 restrictions, it has not been fully tested for UTF-32 yet.

Please use the latest version of FEBuilderGBA (ver 20180731.23 , or later).
Since it is a new patch, if you have a bug please contact me.

How to use.
Adapt the DrawUTF 8 Patch.

Edit your favorite character string.
Let’s change the “Load” of the class name this time.
Let’s change “Load” to the Japanese name “ロード”.


Please apply Anti-Huffman Patch. (It will be displayed only once for the first time)

Well, for now let’s start the game by pressing the F5 key.

Wow, they are buggy.
This is because fonts do not exist.
Let’s install fonts before posting this image to Amusing ROMhacking Glitches Thread.

There are two ways to install fonts. (There are three practical methods)

Method 1. The easiest way
Menu -> Tool -> ROM translation tool

Please press the button on the bottom screen (Import Font) without changing anything.
Automatically creates missing fonts using OS fonts.

Let’s restart the game with F5 key, again.

This time it will be displayed correctly.
バンザイ! Banzai!
If you do not have Japanese fonts installed, please download the font from google’s notofu project etc.

Method 2. How to define each one manually

From the detail menu, select Font.
Here you can change the font one by one.

This time, it is a three character string “ロード”, so you need to import it three times.
There are two kinds of fonts, item font and serif font used for dialogue.
The status screen is drawn with item font.

Please search by “ロ”.

We get an error saying there is no font.

Here, you can draw your own font and import it, but since it is troublesome, let’s create it automatically.
By pressing the Automatic Generation button, fonts are automatically created using OS fonts.

If you do not like the automatically created font, press the Export button and it will be saved as png.
Fonts are treated as 4 color PNG data.

You can now create a font in the “ロ” portion of “ロード”.
Please install fonts for the remaining “ー” and “ド” as well.

Let’s restart the game with F5 key.
It will be displayed correctly.

万歳! Banzai \((^0^)/

that’s all.
Now you can now display all languages on the planet in the game.

For FE8J, FE7J, FE6, it is quite difficult to convert to UTF-8 because data has already been created with SJIS character code.
Also, FE8EU and FE7EU are probably difficult because they are made with LAT1.
This is possible because FE8U and FE7U are alphabets that do not conflict with UTF-8.

Below this is contents for fe hackers who are interested in character codes.

The UTF-8 encoding method is not described in this document.
Please see other document or wikipedia etc.

Well, this patch breaks one UTF-8 rule.
In UTF-8, 0x80 must be represented as a character in the middle of multi-byte.
However, 0x80 is used in large quantities in the existing ROM.

For example, @0080@000A [MoveFarLeft]

Therefore, with this patch, only 0x80 ignores UTF-8 rules.
If the beginning of the character code is 0x80, it is evaluated as one letter of the escape sequence.

About the Text data structure.

Character data is stored using UTF-8 text as it is, using Anti-Huffman.
However, as explained above, only 0x80 is used as an exception.

The character string “ロード” is stored as follows.
E3 83 AD E3 83 BC E3 83 89 00 00

This is as follows.

E3 83 AD //ロ
E3 83 BC //ー
E3 83 89 //ド
00 00    //null term.

About the Font data structure.

FE’s font data is hash + list structure for Japanese SJIS.
However, in English-speaking countries and LAT 1, since only a single byte is used, it actually becomes hash.

struct font
{
	void*	next_pointer;		//+0x0 Japanese ROM only. Otherwise it is null.
	byte	sjis2byte;			//+0x4 Japanese ROM only. Otherwise it is 0.
	byte	width;				//+0x5 The width of the font.
	byte	unk1;				//+0x6 Fixed 00.
	byte	unk2;				//+0x7 Fixed 00.
	byte	bitmap4color[64];	//+0x8 Bitmap 4 colors.
}; sizeof() == 72(0x48)

Therefore, I restored the structure of Japanese hash + list and extended it to UTF - 8.
Also, because there was a vacant byte, I used it to express UTF-32.

uint utf32 = 0xbeefbeef;
byte moji1 = (utf32 & 0xff);
byte moji2 = ((utf32>> 8) & 0xff);
byte moji3 = ((utf32>>16) & 0xff);
byte moji4 = ((utf32>>24) & 0xff);

struct font* font = FontTable[moji1];
while(font != null)
{
	if ( font->sjis2byte == moji2 
	  && font->unk1 == moji3  
	  && font->unk2 == moji4  
	  )
	{// found!
		return font;
	}
	font = font->next_pointer;
}
return NOT_FOUND;
7 Likes

I will fix DrawUTF8 patch.
I’m not confident about the moji 3 and moji 4 sections that are recording in reverse.
This part is always 0x00 0x00 unless to use UTF-32, so I can not test it.
I should not make a strange implementation of the parts that can not be tested.

There was also a bug in FE7U , the length of the speech bubble was not displayed correctly.
I will also fix it.

The update solved my problem of the Modern Character Growth patch. Thanks

1 Like

Hello! I’m still fairly new to hacking and just made my account for FEU! I applied the skills patch to a FE8rom I’ve been hacking, and all works well when I start a new game. But if I continue from a save file that has already been started, I’m at chapter 14, it seems to scamble everyone’s class skills.
Everyone’s personal skills are fine. Is there anyway around this, is this a known glitch or did I just mess something up?

Probably just the skill patch that messes with old save files. You probably have to start over.

I want to reproduce that state, please send me report. 7z.
It can be created from MENU -> File -> Create Report Issue.

Upload the created file somewhere and tell me the link.

@7743 Is it possible for me to create hidden items / desert treasure with FEBuilder?

How do I remove the path split after chapter 8?

Since there was a bug, please use ver 20180802.22 or later.

Treasures of the desert can be created by “Range Condition” of “Alwyas Condition”.
Please add an area to “Alwyas Condition”.
Then select “Range Condition”.

Please set the flag.
If you do not do it, you will be able to pick up treasure again and again.
Please use an empty temporary flag area such as 0x10.

Specify coordinates.
This time we will set up on the other side.

Click New Event.

You can write your own event from the beginning, but it is a hassle.
The treasure of the desert is registered in the template, so please use it.

Please check the event(click the Event).

By default, 0x88 Master Seal can be picked up.
Double click and change to your favorite item.

Please start the game and check the operation.
Since items are picked up randomly, please let wait the unit several times.
(I picked it up the item at the second turn.)

1 Like

It is easy to turn off the root branch, but afterwards your modification will cause problems.
The root branch is in this subroutine of the 0x38 Castle Frelia on Start Event.

Branching is implemented in this ASM.
You either fix the results of this routine,
You should modify the event.

But there are things to be done with care.
That is, you need to enter the correct value in “Editon”.

0202BCF0	@ChapterData	Area of the stage.	{U}
@ChapterData@1B	byte	  Editon Prologe=0x1,Eirika=0x2,Ephraim=0x3

That is, it is recorded in 1 byte of 0x0202BCF0 + 0x1B = 0x202BD0B.

In this branch event result, the edited data is confirmed.
Until then, Prologe = 0x1.

In the latter stage (Ch 17 River of Regrets or later), the event is subroutineized.
At that time, referring to the edited data, the following writing style is frequently done.

if (0x202BD0B == Eirika){ } else { }

If you forget to edit the edited data, it will behave oddly.

1 Like

Thanks

Quick Question, Previous to me using Febuilder I had My Class list repointed. Febuilder does know the new adress, but not the size, It only shows 100 classes, but I have 134 working classes. How do I make Febuilder Know the True Size of my class table?
ROM is FE7US

Make sure that the ID (+ 0x04) of the 100th class table is not 0.
To determine how many data there are, decide by searching the table.
Clear termination data is not defined for FE.
Even if it reads data, if it is data that does not make sense, it is recognized as termination data.
In the case of classes, ID (+ 0x04) is evaluated.
The first data is ID == 0, but after that it should increase according to the number of data.
It is recognized as invalid data that this data is 0.

        , (int i, uint addr) =>
        {//読込最大値検索
            if (i == 0)
            {
                return true;
            }
            uint no = Program.ROM.u8(addr + 4);
            return (no != 0);
        }

So, I’m not sure if i did something wrong or what because I applied the new apparently not buggy class expansion patch but my class list isn’t expanded.

So I don’t know what to do.

Please create support.7z on Menu -> File -> Create Report Issue, and send it to me.
With support.7z, I can reproduce your problem.