Hello to all you fine folks here at FEUniverse! I hope that I can learn a lot about FE hacking, and I can’t wait to read around the site more, but that’s for later! I won’t waste too much time getting into my questions, but basically, I haven’t touched the hacking scene for FE in literal years. The last thing I remember learning how to do was basic stat editing in Nightmare. Thanks to me coming back to the GBA games, I stumbled upon FEBuilderGBA, had flashbacks to the “old days” of when I first learned about hacking, and immediately jumped into things.
My skill set in hacking boils down to “guy who kinda knows how to do some of the basic stuff in FEBuilder and kinda sorta remembers some of Nightmare.”
You can maybe see where this is going. So, when I started hitting brick walls when I was experimenting, I began to look around for help. First I went to reddit, then serenes forest, and then eventually I was pointed here! Great, now, let’s get into things
While I’m very new to hacking in general, I have figured out the basics of FEBuilder, and I partially remember some of the Nightmare editor, and I have some general questions, but also some specific questions I hope you guys can help me with.
Are the number of characters, number of classes, and the maximum number of supports per character locked to their set values?
In FE8, two things jumped out at me upon my experimentation that I couldn’t figure out how to edit. The first being the number of characters the game has, and the number of supports a character can have. I did, however, see a post somewhere on this site about changing the maximum number of supports, but I couldn’t find it when I looked again (ugh) and its driving me wild.
To me, the way the game’s memory works is heretical, vile black magic, but what I do understand is that it seems like some parts of the memory are more “flexible” than other parts, is this true?
I have come to this conclusion because, in at least FEEditor, if I want to add more characters to the list, there’s no way that I’ve found that you can do that, you have to fill in the already set slots, which are all used (it seems) for some purpose. But, if I want to add more items to the game, the editor literally just has a button to (I think) allocate more memory to create more slots for items.
Regarding how FE8’s memory works, can somebody explain it a little or link me to a already created topic that can help me understand better? I don’t need to know literally every detail, but some idea of what exactly is going on would be very nice.
Regarding the problems I had while experimenting, which was basically just me trying to create and add more playable characters to the game, is this one of those things I’m going to have to get into the more advanced stuff, or am I just missing something? I have a feeling I’ll get the answers I’m looking for, I’m just a little worried about the rabbit hole I might be jumping down lol
Thanks in advance for any help you can offer, and please let me know if I’m doing anything wrong, as I’m (again) literally just joining the site, and I’d like to follow the rules!
Welcome! I’ll try to answer your questions in order.
Characters max at 0xFF. If you want to extend that you’d need quite an overhaul. You can extend classes to 0xFF (default is 0x7F), but you need some form of save data expansion patch - there are several available. I’m not sure if you mean supports as in characters to support with, or number of conversations per save. If the former, then nothing exists publicly that I know of. You can read more about it here, though it’s pretty technical so judging by what you say of your skill level it may not be of much use.
A lot of what you describe here is dependent on the length of the vanilla tables - I’m not sure how familiar you are with hexadecimal, but the same code used to read up to 0xCD (the vanilla item table length) could be used to read values up to 0xFF. Going from 0xFF (the length of the vanilla character table) to 0x100 would require an extra byte to be read and thus the vanilla code would fail to do so. In essence, expanding one is as trivial as adding more table entries while the other would require large amounts of system overhauling.
Understanding what you’re looking at in memory is very dependent on context. The easiest to understand by humans is tables since values are rather easily read and interpreted. I am unaware of any guides on the subject in particular, but the given memory locations by FEBuilder are an amazing tool for learning. Most people are more intent on letting FEBuilder write the data for them, but it also tells you exactly what’s going on - if you know where to look for it.
All hacks override previous data for characters. I have yet to see anyone attempt to expand the character table, and for good reason - there’s no value to it. The vanilla table is over 200 entries in length which is more than enough. If you have a project with more characters than that, I would love to see it however.
If you’re looking for unused character slots in FE8, I believe the ones just named ‘Enemy’ with no description can be safely overwritten. If you want to expand the class table, look into ExpandedModularSave (might be called ExModularSave in Febuilder, if you’re using that) - it’ll let you do so with no problems.
Asking about ‘memory’… What you’re really asking about is tables, I believe. Character tables, class tables, etc.
What happens with most tables is that: in the vanilla game, they’re only just as long as they need to be. If you just add new data onto the end, you’d destroy whatever comes right after that table in the ROM. So what we do is copy them to a free location in the ROM (and change the pointers to point to the new table), so we can add more data to the end. This is what FEBuilder does for you when you click extend list. But there is a limitation to this (Pikmin already explained it).
Save expansion shouldn’t be necessary for expanding the character table. Actually, I think the character table already has 0xFF entries because Wall and Snag occupy the last slots, though I haven’t looked at the vanilla character table in a while. Mine is repointed and has worked just fine without save expansion.
If you’re wanting extra supports, don’t mind my self shill of my Support Rework, but it’s probably not what you want and not very compatible with FEB. My point is the only reason this drastically changes how supports are handled is that it stores character IDs instead of using a support reference table. Thus, changing vanilla system to handle more would be really hard due to RAM character data size limitations. (The link Pikmin posted goes into this in detail.)
For the class table, there’s a patch you need to use to expand it on top of repointing it. There are issues with FEB’s version of this seems to have issues, but this one is updated to have no ill side effects.
When I say repointing I mean moving the table to a new location because the old table doesn’t have enough space allocated for it. You copy the old table and copy it to free space, then you find all pointers to the old table and change them to the new table. Luckily for you, FEBuiler’s “Extended List” feature automates this for you.
When you say memory, I assume you mean ROM. RAM is probably more heretical than ROM. There isn’t much restriction on where things are placed in memory (with the exception of functions within bl range of one another, but that’s an ASM thing). The memory you see is entirely dependent on what it’s designed to be interpreted as. There’s a lot of documentation out there but here’s a glimpse of what one could consider “mapping the ROM” with logged functions and data (credit @StanH doc). Probably too much info, but you can look up offsets if you’re curious.
By the way, if you have any specific questions or bugs, hop on the Discord server. Just about all of us are on there ready to answer questions.
Thanks for all the answers and information, you gave me everything I asked for and plenty more lol! I really appreciate all the links and the great explanations, and I look forward to expanding my knowledge of FEGBA hacking!
You guys are awesome, thanks so much for the help!