bookofholsety: (Default)
[personal profile] bookofholsety
my friend, main man and living saint, zane avernathy, has prepared a statement in response to a recent article about fire emblem: thracia 776 published by vice. since he has no social media presence, i am posting it on his behalf

out of respect for him, i will not be sharing my opinions on anything to do with the matter at this time.




Hello, I go by Zane Avernathy online and I'm the person whose research and effort is the foundation for both Kirb's translation and Project Exile. Both projects are built from the same source, tools, and information that I had passed to Kirb in August 2017. Since then I have continued to provide solutions to both projects in the form of tools, information, and files.

I am deeply saddened that I haven't been given any1 mention in the article. Normally I prefer to stay under the radar but this isn't the first time being excluded from an article involving my work2 has left me feeling like a ghost. To quote Aesop Rock:

"You don't wanna be overlooked
Yeah but you don't wanna be looked over too much"




Since I began working on Fire Emblem 5 back in February of 2017 I've been essentially on my own. I started with a few scattered documents and tools about the SNES Fire Emblems from people like Twilkitri and Pukachi along with a collection of things gathered by Lamia. I was armed with a debugging emulator  and wonderful resources such as fullsnes and 6502.org. I set out to learn as much as I could about this mysterious game that people felt was cursed.

Allow me to set the record straight about Thracia 776: The quality of the game's code is on par with other Fire Emblem games. There are fantastically clever things within this game. Notable examples include the wild compression system (with what I can only assume is a hand-optimized decompressor), a powerful multitasking system, and a full-featured scripting language for handling events within chapters. All of these should come as no surprise for someone familiar with the previous game as all of these are present within it, too. This is because both FE4 and FE5 are built from much of the same code.

I think most of the fear that FE5 instills comes from one thing: Hacking it means that you're all alone and you must figure it all out from scratch. Spaghetti or not, there is just too much on this plate for a single person to eat.

The article talks a lot about hardships faced by people who have worked with FE5 but doesn't give much detail into how they were solved or who solved them. That's understandable, I suppose, because a great many of them were things that I did. Let's talk about a few things brought up in the article.




Take one common problem with fan localizations: the sheer efficiency of Japanese. You can say a lot more with fewer characters in Japanese than English. Naturally, the game’s dialogue boxes were specifically programmed with Japanese in mind, not English. When a localizer drops the dialogue translated into English, there A) might not be space for the dialogue to fit, and B) if you go over the programmed character limit, the game could crash.

Space is always an issue if you're trying to keep the ROM its original 4MB size. The article mentions ROM expansion later, where the size of the game is doubled to provide ample space to fill with things. Placing text one after the other in this free space is essentially automatic and doesn't require any effort unless a single conversation happens to cross a ROM bank boundary3 in which case you move it to the next bank and keep going.

There's also no character limit for dialogue (or really menu text, which uses a completely different system down to the encoding). A piece of dialogue that goes over the horizontal size of the text boxes simply corrupts other graphical tiles as it wraps, and a piece of dialogue can have as many lines as it wants as long as it doesn't cross a ROM bank boundary. (As a note, dialogue in FE5 isn't compressed unlike the dialogue in GBA Fire Emblem games, which totally could cause issues if the decompressed text was larger than the buffer they're decompressed to).

Really, the only way you'd cause a crash with your text is:
a) You forgot the terminator, and the game continues reading well beyond where you intended it to stop.
b) You didn't set the pointer to the text correctly.
c) You accidentally overwrote whatever text was being pointed to and the resulting garbage did something bad such as calling code that wasn't code.
d) You put the text in a ROM bank that the code reading it didn't expect.4
e) You overwrote something that was supposed to come next because you didn't move the text to free space.


The script was only one part of the equation, though; it’s not as simple as copying and pasting English. You need a tool to get the text in there. Remember, Thracia 776 is built on “spaghetti code,” partially because it was released twice—once as part of a unique rewritable cartridge program Nintendo had in Japan called “Nintendo Power,” later as its own cartridge. Interpreting the code of a game built in another language, with no one who worked on it around to explain how it works, is hard enough. This was an even messier game to manage.

I'll reiterate that the part about spaghetti code simply isn't true. Having the game being written originally in another language doesn't matter at all, the resultant ROM image is a jumble of machine code and data. Interpreting this code is done by disassembling these compiled segments into human-readable 65816 assembly and reading that. There's no Japanese here.

One of the things I'm most proud of is the menu text. Changing the dialogue font and writing custom dialogue is trivial: Insert a new image over the old one, edit the character width table, and start typing your text. The hardest part is probably going through and figuring out all of the text control codes. Menu text on the other hand is brutal and you're fighting limited VRAM space, the awkward width of letters, and hundreds of different strings. I tried my best to make minimal changes to Thracia 776's implementation of Shift JIS, creating a tool that crams two characters per tile width. The idea alternative would be a variable width font, like the dialogue system, but that would be a tall order and this was one of the first things I had done.

I've also spent an enormous amount of time trying to explain things to anybody who has asked me for help, such as Kirb and Cirosan.



This is where old efforts paid off. Brittain tracked down Kirb, the fan who’d tried to create a patch using an existing localization but gave up on the “translation patch killer” chapter, handed over their ancient source code. After a few nights of banging their head against the wall until the early hours of the morning, Brittain made sense of it, and got past the chapter.

(The reason that chapter is so hard is because it’s a sequence where a dozens of different scenarios can play out, depending on the player’s actions, requiring the translation of many, many tiny pieces of text. Because the game’s code looks like nonsense, it’s incredibly hard to tell where that text should go without breaking the game. That’s why everyone gave up.)

Yep! Chapter 5's a mess, but none of it is really 'code'. The event script for the chapter contains a snake of conditional checks and various bits of dialogue, but the real issue here is that nobody took the time to learn the game's scripting language. Here's a good opportunity to give a shoutout to StanH whose help and fantastic custom-built tool TEA made it much easier to interpret event scripts. By the later stages of PE I'm quite certain I knew enough about the event language to rip all of the game's events.




I'd be more than happy to talk more about any of the things I've done and seen while working with this jewel of a game, but that wasn't supposed to be the purpose of this. I spent a huge amount of time working for these people, often being asked questions just to do the research on the spot and have a solution. Things eventually became too much for me--during both Kirb's attempt and then during Project Exile's.

With Kirb, I felt that they were much too quick to soak the fame of translating Thracia 776 while avoiding acknowledging my part in it and I stopped answering questions.

With Project Exile, my issue was that being on call for their project left me with little time to pursue the things I wanted to do. I spent much of my free time working on someone else's project. This is my hobby and when things were more stressful than soothing I said my goodbyes to the Project Exile discord. The questions didn't stop, though. It was clear that I was pivotal to the project and I certainly couldn't just disappear or risk killing the project.

And, to tell you the truth, it's one of my greatest fears that anyone might instead remember me as the person who selfishly killed their hopes of an English Thracia 776.




1 Actually, the article mentions my work indirectly by calling me a troll:

That was 2007, and it’s at this point things get blurry and hard to track, but for the most part, people begrudgingly accept the Shaya translation as canon. It gets to the point where people tease attempts to update or fix Shaya’s work, but in service of trolling the community, like the time someone uploaded a “new” version with all the in-game commands changed to “wait.”

The user who made this video, which is gameplay from an April 1st teaser of my menu translation project that would see its full release in the following month, posted it to someone else's translation project thread. They credited the other project's author for the work, too.

Within the Fire Emblem fangame community (at least, in the circles I frequent such as Serenes Forest and Fire Emblem Universe) it's very common for fangame authors to publish teasers, joke projects, or even full-blown releases on April 1st.

2 Project Exile has been featured in multiple places before such as in an interview on Serenes Forest and an article on Nintendo Life which both include only a brief mention of me via the same quote from Project Exile's thread.

3 Like many older systems, the SNES splits the ROM image into chunks called banks. Reading contiguous data across a bank boundary can be tedious and slow, so FE5 is really only equipped to do this with compressed data (The decompressor has to check after every compressed byte read to see if it has crossed a bank boundary.) You might want to check out this for more information.

4 Some pieces of text are pointed to using 'short' pointers that refer to something within a specific bank. The bank being accessed is up to the code that's fetching a pointer to the text. In the vanilla game text of this sort is grouped in a contiguous block, but that doesn't stop a hacker from causing a mismatch.
Page generated Jul. 7th, 2025 01:35 am
Powered by Dreamwidth Studios