Fire Emblem Three Houses Randomizer Custom Build

First of all, this is an edited version of Blyvern’s Fire Emblem Three Houses Randomizer V1.0.1.
Credit goes to Blyvern and I’ve recieved his ok to publish this.

The idea here is that I wanted an even more random FE3H experience than the previous randomizer could provide. So therefore, I decided to improve upon the randomizer!

Available Randomizations

Class Randomization

  • Class stat boosts
  • Mounting stat boosts
  • Class growths
  • Class stat bases
  • Unit typing
  • Movement types
  • Class proficiencies
  • Certification requirements
  • Default equipped abilities
  • Class abilities
  • Class mastery
  • Adjutant type
  • Exp yield
  • Mount model
  • Battle Animations
  • Class tier level
  • Monster barrier
  • Latent abilities

Weapon/Spell/Turret/Gambit/Staggering Blow Randomization

  • Status effect infliction
  • Effectiveness
  • Stats
  • Special properties (double attack, phys/mag damage, ignoring def/res, leave at 1HP)
  • Area of effect for gambits

Combat Art Randomization

  • Stats
  • Combat art effect
  • Effectiveness
  • Durability Cost

Battalion Randomization

  • Endurance
  • Stat boosts
  • Gambit

Character Randomization

  • Asset Swaps
  • Model data
  • Age
  • Birthday date
  • Out of combat animation set
  • Height
  • Crest(s)
  • Personal ability
  • Support bonuses
  • Recruitment requirements
  • Stat caps
  • Stat bases
  • Stat growths
  • Generic learnset
  • Combat art learnset
  • Budding talent(s)
  • Spell learnsets
  • Ability learnset
  • Skill profiencies
  • Start class
  • Pre certified classes
  • Starting inventories
  • Faculty training skills
  • Seminar skills
  • Default skill goals
  • Starting ranks
  • Choir proficiency
  • Cooking proficiency
  • Meal preferences
  • Gift preferences
  • Group task proficiencies

Calendar Randomization

  • Rare monster sighting events
  • Freeday options
  • Cafeteria events
  • Choir events
  • Garden events
  • Fishing events

Monastery Randomization

  • Meal ingredients and category
  • Fishing rewards
  • Gardening rewards
  • Cultivation costs
  • Saint statue restoration costs
  • Saint statue perks
  • Influencer costs
  • Quest rewards
  • Armory stock and prices
  • Item shop stock and prices
  • Battalion guild stock and prices
  • Merchant stocks and prices
  • Anna’s shop stock and prices
  • Pagan altar stock and prices
  • Blacksmith repair costs
  • Blacksmith forging costs and requirements
  • Blacksmith forging paths

Group Task Randomization

  • Rewards
  • Skill trained

Professor Level Randomization

  • Lecture exp reward
  • Exp requirement
  • Monthly gold fund
  • Lecture point total
  • Battle point total
  • Number of adjutants
  • Activity point total

Map Randomization

  • Units’ classes
  • Units’ weapons
  • Units’ inventories
  • Units’ item drops
  • Units’ unique ability sets
  • Units’ battalions
  • Units’ combat arts
  • Units’ extra spells
  • Units’ spawn positions
  • Chest items

BGM Randomization

  • Shuffle BGM

Text Randomization

  • Shuffle Menu Text
  • Shuffle Quest/Monastery Text
  • Shuffle Group Task Text
  • Shuffle Guide/Tip Text
  • Shuffle Battle Quote Text
  • Shuffle Story Text

Other Options

  • Remove weapon restrictions for classes
  • Move special classes to advanced classes
  • Set units to scale on the map
  • Remove gender restrictions for classes
  • Remove character stat caps
  • Give all classes battle animations for every weapon.
  • Unlock master classes from the start
  • Add additional enemies to every map
  • Max out the number of deployment slots on every map.
  • Adjust level scaling with a multiplier.
  • Amplify the maddening difficulty.
  • QoL text changes.
About the Randomizer


This is what the randomizer will look like upon starting the application. Almost all controls are disabled except for in the “Load Files” section to the left. You need to load some of the files (preferably all the files) in order to configure the randomizer.


Many of the controls are laid out in table structures like this. As you can see, each label at the top marks a column containing two input fields per row. These input fields are each table cell’s minimum and maximum values respectively, which are used as boundaries in randomization. For instance, when randomizing classdata with the default settings shown above, the magic bases for intermediate classes will be random numbers from 6 to 10.

image
Speaking of default values, those are the values already loaded in the input fields by default. These values are either based on values already found in game, or my own recommendations.

image
Some input fields are marked with a (%), and thus represents a probability. Note that there is a relevant distinction in the phrasing “Chance of Randomizing”, which indicates the probability of changing, and “Chance of Effectiveness” in this case, which indicates the probability of having this certain trait.

image
Some values aren’t fit to be randomized using constant boundaries. If all weapon ranges were to be assigned random numbers from 1 to 15, then the game would be very different. So in these cases, values are defined as random deviations from old values. Being that there is many ways to do so, I’ve implemented four diffent methods of deviating for those that are extra picky about these randomizations. Each of the four options have a tooltip explaining how they work, but for most people simply leaving it at the “Binomial” option should be good enough.

image
On another note, if you decide to randomize freeday options, know that there will always be at least one freeday option available each week. If you set the probability of locking options to above 75%, I’ve made it so there’s always only one option open. It’s for those who are interested in that kind of a challenge or are just that indecisive…

image
The way the inventories of enemies and NPCs work is as such: each unit either has the class’ default inventory consisting only of a weapon, or a custom unique inventory determined in the map data. Only units with unique inventories can hold items and have item drops. Therefore, the effective chance of any unit having, for example, an item drop is actually the chance of having a unique inventory multiplied with the chance of having an item drop. This means that with the default values shown above, the chance of any unit having an item drop is 1%. (10% * 10%) This only applies to the chances of units havng equipment, items and item drops.

image
Unfortunately, some data added in DLCs is not supported in the randomizer and will therefore not be randomized. This affects BGM, maps and quests added in DLC.

image
There are some things worth mentioning regarding text randomization. First of all, only english text gets changed. Furthermore, text related to menus is stored in msgdata.bin, so those get harder to navigate should you randomize it. Similarly, lecture questions become harder to get correct if you randomize scrdata.bin. Lastly, the “Keep String Lengths” toggle is what keeps the game somewhat presentable, even after jumbling the sheer quantity of text data in this game. Randomizing without restricting string lengths might also break the game at times, so I can’t really say I recommend it.



image
image
image







In case you wonder what available QoL text changes there are, and what matching text to randomization means, I’ve put some sample screenshots above. The idea is to make it so you don’t have to look up the changelog or online guides while playing and increase overall immersion. From top to bottom: Class description displays growth rate bonuses, Class tier description displays randomized level requirement, Weapon description displays randomized attributes, Combat art description displays randomized function, Battalion description displays base stat bonuses, Character info screen diplays growth rates and gift preferences, Gift description displays gift preferences, Saint statue restoration menu displays randomized perks, Lost item description displays owner, Simplified tea time topic choices, Good lecture answer marked with a “+”, Story text displays asset swapped name.

How to Use

  1. Make sure you have version 1.2.0 of Fire Emblem Three Houses.

  2. Get ahold of the “.bin” files you wish to randomize:

  • fixed_act_data.bin
  • fixed_classdata.bin
  • fixed_data.bin
  • fixed_groupworkdata.bin
  • fixed_growthdata.bin
  • fixed_lobby_activity.bin
  • fixed_lobby_common.bin
  • fixed_lobby_quest.bin
  • fixed_persondata.bin
  • fixed_scenario.bin
  • fixed_presentdata.bin
  • fixed_shopdata.bin (all twelve found in romfs\patch4\nx\data)
  • fixed_calendardata.bin (found in romfs\patch3\nx\data)
  • BGM.ktsl2stbin (found in romfs\nx\sound)
  • msgdata.bin
  • scrdata.bin
  • tuscrdata.bin
  • btlscrdata.bin (all four found in romfs\patch4\common\common)
  • gwscrdata.bin (found in romfs\patch1\common\common)
  • DATA1.bin (found in romfs)
  1. Make sure you have a backup of DATA1.bin before you randomize it. This file is a big one, and therefore will just be edited rather than saved as a new file. Load the files you want to randomize in the randomizer, then adjust any number of options to better suit the way you want the files to be randomized.

  2. You can toggle the “Generate Changelog” checkbox and/or set a seed if you wish, then click “Randomize and save” to save your new files in another directory. You usually don’t want to overwrite the extracted rom. If you chose to randomize DATA1.bin, you will also get prompted to save two extra files: INFO0.bin and INFO2.bin. Their purpose is to ensure changes in DATA1.bin don’t get overwritten and are both found in romfs\patch4.

  3. Rebuild your new randomized rom using these newly randomized files! (LayeredFS or something? I dunno, I’m not a rom doctor)

Update(s)

  • Polished up the randomizer and fixed some weird camera angles caused by random class typing. The camera now functions properly for all classes, regardless of whether they used to be mounted units or not! Also: Randomized Mount Models!!
  • Added BGM Randomization as an experimental feature! Loading the associated BGM.ktsl2stbin file is optional because the random music fails to load sometimes.
  • Added the “Generate Changelog” feature back into the randomizer! Don’t spoil yourself too much, now…
  • Increased the number of randomization controls from 0 to 1000+. You can now choose what to randomize in addition to how it’s randomized!
  • Included the Gatekeeper in asset swaps due to popular demand. And yeah, fixed a lot of bugs.
  • Included a toggle to fix animation sets so that every class type can use every weapon type properly, and of course, you can now randomize battle animations.
  • Added a bunch of features tied to the randomization of monastery activities, shops, group tasks and quests. You can even randomize the perks of professor levels and saint statues!
  • Added battle map randomization. This includes the randomization of units’ classes, inventories, abilities, etc. You will also be able to randomize chest items and spawn positions of units. Adding a couple extra enemies is possible too!
  • Added a funny feature where you can max out the number of deployment slots on every map.
  • Added text randomization. No, I’m serious. Also, there’s now a function to swap out names in the story text so that they match any asset swaps.
  • Added level and exp scaling customization along with more support for changing game text in accordance with randomization. There’s also an option to change text for QoL purposes.

Download

(Last update: 14 August 2021)

Lastly, a tip jar for the generous:
https://www.gofundme.com/f/ttsby-appreciation-and-support

8 Likes

this is awesome, thanks for sharing this!

3 Likes

This is litterly just three houses on drugs

1 Like

Just found out how to give mounts and animations to classes. The randomizer now gives mounts to mounted classes, as well as fitting animations. The heavy armor units, riding units and flying units actually act like the class types they are, now! :+1:

Put in a bunch more work on the randomizer. Now, it can generate you a changelog! (again)

Hey there, I know you don’t plan on making any sort of gui for adjustable parameters, but out of curiosity is there any way to go in and adjust them/turn them on and off manually myself? I don’t mind tedium, I’m just not familiar enough with coding to know if it’s possible.

1 Like

Yeah, that is very possible! As long as you can access the source code, you can edit how the randomizer works to your heart’s content. Here’s the source code. (outdated) Open the .sln file in Microsoft Visual Studio to start editing.

3 Likes

Awesome, thank you!

1 Like

is it possible that this could changed in the future? it would be really handy if you could manually change stuff around like how it worked with Blyvern’s old one

1 Like

At first I wasn’t planning on it, seeing that Blyvern was already working on an update for the randomizer, which would be adding many more features. However, at some point he had a major setback, which is part of why I decided to post this custom build in the first place. Putting time into a branch of his project, which is going to be updated anyway, seems a tad superfluous…

its going to be updated anyway? can you elaborate? I’m asking because I want to make another run at a randomized run. But the custom build had a lot more features than I had intended myself, lol.

1 Like

Well, I suppose there is a demand for it, so I might as well. Probably gonna take a while to get going though, as I still have yet to learn how to program a GUI… Guess I have some work to do :+1:

The worst case scenario is just replacing things that I don’t want randomized with the vanilla data files. But yeah a UI would go a long way haha

1 Like

Alright, just updated the randomizer. If anyone encounter any bugs or whatnot, you can just dm me on this site. :+1:

This looks awesome! How do we get these ‘.bin’ files?

Homebrew your switch and dump the game. You’ll then be able to locate the files in the extracted rom.

The randomizer has been updated once again. I don’t know what left in the game is worth randomizing at this point, but I’m very much open for suggestions if anyone wants a certain feature!

I have had some issues with an error popping up when randomizing. I was able to reliably replicate the bug with a fresh download, fresh bin dumps. Looks like just some off by one array error.

  1. Load at least fixed_classdata.bin and fixed_persondata.bin
  2. Go to character randomization, enable Random Starting Ranks and Base On Proficiencies. (The feature works fine without Base On Proficiencies)
  3. Randomize and save, it should pop up with an error.

I swear I had this feature enabled on a different run, so if you can’t replicate it might just be a corrupted bin file or something. Love the randomizer, having a ton of fun!

1 Like

Fixed! When basing the random starting ranks on proficiencies with classdata.bin loaded, the randomizer also takes into account the certification requirements of any pre-certified classes the units may have. I simply forgot to account for when the pre-certified classes aren’t randomized, which ended up causing an error. Thank you for the heads-up!

1 Like

I’m not sure how much this is still being worked on, but the ability to set Adjutant amounts to a specific level or just bring them up to a fixed value (for example, 9 or something?) would be lovely if possible. I’d like to be able to train a large amount of my randomized units and swap them in and out.

1 Like