FINAL FANTASY IX

FINAL FANTASY IX

View Stats:
Tirlititi Aug 2, 2019 @ 12:59pm
The Randomizer tool is out
Hi,
There's a Randomizer included in the latest release of my tool (Hades Workshop[forums.qhimm.com]).
For people who don't know what a Randomizer is: that's a tool made to alter a game in a random way, which often results in strange playthroughs and completly different from normal ones. It is not restricted to Final Fantasy IX at all and there's a list of Randomizers for different games here[www.debigare.com] for instance (I learned their existence myself with the Randomizer tool for FFX, because I'm kind of a FF guy apparently).

It is a kind of tool that people from the speedrunning scene usually enjoy as they are used to finish the games fast and it provides diversity in their runs (a few games even have speedrunning categories for them).

So, in my program Hades Workshop, it is relatively simple to use the Randomizer feature. If you have the Moguri Mod installed, the (end of the) procedure is a bit different.

==== Installation without the Moguri or Memoria Mod ====
1) Go to "File -> Open" and select the FF9_Launcher.exe from your game's folder (usually it is something like "C:\Program Files (x86)\Steam\steamapps\common\FINAL FANTASY IX").
2) Go to "Tools -> Randomizer"; the first thing you should do there is click on "Load All Section Datas" to enable all the options. It will take some time loading.
3) Setup the options however you want. The default options seem fair to me but maybe not to everyone. A description of options can be found below.
4) Click on "Randomize!". You may want to look at the changes applied in the different panels, but maybe not (in which case, I suggest to open the randomizer from the "Party -> Supporting Abilities" panel as the randomization won't be apparent from there in any case).
5) Go to "File -> Save Steam Mod" and choose the options "Compiled DLL" and "Unity Archives" (they should be the default if you don't have Moguri/Memoria). It will generate the game files for your randomization and you then simply need to replace the normal Steam's files by them. For example, the file "HadesWorkshopMod\StreamingAssets\p0data2.bin" goes to "StreamingAssets\p0data2.bin". The "resources.assets" and "Assembly-CSharp.dll" should go both in a sub-folder of "x64" and "x86" (these folders are mostly copies of each other).

Done! You can randomly enjoy the game.

==== Installation with the Moguri or Memoria Mod ====
1) Go to "File -> Open" and select the FF9_Launcher.exe from your game's folder (usually it is something like "C:\Program Files (x86)\Steam\steamapps\common\FINAL FANTASY IX"). It should prompt a message like "Using the non-modded backup DLL [...]", which is a good signal that the Moguri/Memoria mod is installed and that the program could find a proper backup DLL for data-reading purpose.
2) Go to "Tools -> Randomizer"; the first thing you should do there is click on "Load All Section Datas" to enable all the options. It will take some time loading.
3) Setup the options however you want. The default options seem fair to me but maybe not to everyone. A description of options can be found below.
4) Click on "Randomize!". You may want to look at the changes applied in the different panels, but maybe not (in which case, I suggest to open the randomizer from the "Party -> Supporting Abilities" panel as the randomization won't be apparent from there in any case).
5) Go to "File -> Save Steam Mod" and choose the options "Spreadsheets (Memoria)" and "Raw Assets" (they should be the default if you have Moguri/Memoria). It will generate the game files for your randomization.
6) Open the file "Memoria.ini" with a text editor (such as the Notepad). That file is in the game's folder, next to FF9_Launcher.exe. It should contain a line starting with "FolderNames" in its [Mod] section. You must add the name of your mod folder generated by Hades Workshop before the Moguri mod folders in that list, so you end up with something like that:

FolderNames= "HadesWorkshopMod", "MoguriFiles", "MoguriSoundtrack", "MoguriVideo"

(possibly with fewer Moguri folders depending on your options)
(replace "HadesWorkshopMod" by the mod folder name you've picked in Hades Workshop if you didn't use the default)

Done! You can randomly enjoy the game.

==== Description of the different options ====

I recommend using these settings[i.imgur.com] (with the default list of safe abilities untouched).

=== Characters ===
== Spell Powers ==
There are 3 options: Keep Spell Powers, Shuffle Spell Powers and Randomize Spell Powers.
= Keep Spell Powers: No change.
= Shuffle Spell Powers: Shuffle the spell power of every spell dealing damage based on that power.
= Randomize Spell Powers: Set the spell power of every spell dealing damage based on that power to a random number between 5 and 120.

Spells affected by this option are those with an effect among:
Enemy Attack, Magic Attack, Magic Heal, Osmose, Drain, Gravity, Random Magic, Physical Strike, Magic Weapon, Goblin Punch, LV? Attack, Pure Damage, Darkside, Chakra, Spare Change, Lancer, Sword Magic, Eidolon Common, Eidolon Atomos, Eidolon Odin, Cannon, Terran Strike, Flare Star, Enemy Accurate Attack, Inventory Mug, Beat Back.

== Spell Statuses ==
There are 3 options: Keep Spell Statuses, Shuffle Spell Statuses and Randomize Spell Statuses.
= Keep Spell Statuses: No change.
= Shuffle Spell Statuses: Shuffle the spell statuses of every spell inflicting or healing a status.
= Randomize Spell Statuses: Set the spell statuses of every spell inflicting or healing a status. For each spell, there are 50% chances of affecting 1 status, 25% of affecting 2 statuses etc.

Spells affected by this option are those with an effect among:
Enemy Attack (only if accuracy > 0), Magic Attack (only if accuracy > 0), Bad Status, Cure Status, Life, Death, Random Magic (only if accuracy > 0), Physical Strike (only if accuracy > 0), Magic Weapon (only if accuracy > 0), Maelstrom (only if accuracy > 0), Entice, Enemy Accurate Attack (only if accuracy > 0), Good Status, Beat Back (only if accuracy > 0), Iai Strike, Mini.

Statuses that can be assigned with "Randomize" are all the non-hidden statuses, Trance and Defend.
The hidden statuses Low HP, Easy Kill (proof) and Jump can't be assigned that way.

The in-game description of spells will try to update with the new statuses but in a very limited way (it won't work most of the time, or won't show the full list of statuses used by specific spells).

== Shuffle Spells ==
When ticked, shuffle the spells that can be used by the characters.
By design, the number of spells or abilities + the number of supporting abilities is equal to 48 for each character. The distribution is kept when using the randomizer, which means that the characters will have these amount of spells or abilities:
Zidane: 8 (+ steal)
Vivi: 24 (+ focus)
Dagger: 8 summons + 16 magics
Steiner: 12 arts (+ 13 sword magics)
Freya: 8 (+ jump)
Quina: 24 (+ eat)
Eiko: 4 summons + 20 magics
Amarant: 8 (+ throw)

= Remove MP x 4 flag: Spells always use their normal MP cost at any point of the game.
= MP x 4 flag on summons: All the summons require 4 times their normal MP cost until the 3rd battle against Beatrix (whichever character has access to the summon).
= MP x 4 on Summon command: Garnet's spells under the Summon command require 4 times their normal MP cost until the 3rd battle against Beatrix (whichever spell or ability it may be).

= Shuffle Summons apart: When ticked, Garnet's and Eiko's summons are shuffled in the two of their commands, so they are the only ones to be able to summon.
= Quina AP needs: The AP cost for learning Quina's Blue Magic through equipements (weapons or armors). In most cases, there are only a few Blue Magics learnable with equipements and most of her Blue Magics can be learned by eating enemies (whichever spell or ability these Blue Magics may be).
= Keep Elan principle: When ticked, all the spells and abilities of Amarant will be single-target by default and all of his trance counterparts will be multi-target (possible with an "Explosion" SFX if there is no suitable special effect corresponding that can affect multiple targets). When unticked, the multi-target versions of Amarant's abilities will be shuffled together with the others.

== Randomize Supporting Abilities ==
When ticked, randomize the list of supporting abilities that each character can use.
By design, the number of spells or abilities + the number of supporting abilities is equal to 48 for each character. The distribution is kept when using the randomizer, which means that the characters will have these amount of supporting abilities:
Zidane: 40
Vivi: 24
Dagger: 24
Steiner: 36
Freya: 40
Quina: 24
Eiko: 24
Amarant: 40

=== Weapons and Armors ===
== Shuffle Abilities ==
When this option is picked, all the ability slots will be shuffled between weapon/armor ability slots, sorted by character:
- if a weapon usable by Zidane only teaches 2 abilities by default, it will teach 2 other Zidane abilities after randomzation,
- likewise, if an armor usable by Freya and Steiner only teaches 1 ability by default, it will teach 1 other ability usable either by Freya or Steiner after randomization.

== Randomize Abilities ==
Randomize the abilities teached by pieces of equipments.

= Make sure all Spells/Supporting Abilities can be learned: When ticked, each ability is given to a random piece of equipment that the character can use. This is done before assigning other abilities and slightly changes the actual proportion of supporting abilities (it decreases it a bit for weapons and increases a bit for armors). Unless the proportion of slots used is very low, it is not affected by that option.
= Proportion of slots used: Chances for an ability slot to teach either a spell or a supporting ability. There are 3 ability slots per piece of equipment, so a value of 67% would mean that the average number of abilities teached by equipments would be 2. The default values (61% for weapons and 65% for armors) are the proportions of slots used by the vanilla game.
= Proportion of Supporting Abilities: Chances for an ability slot that teaches something to teach a supporting ability rather than a spell or ability. Ability slots filled by the option "Make sure all [...] can be learned" are not affected by this value. The default values (19% for weapons and 78% for armors) are the proportions in the vanilla game.

=== Enemies ===
== Shuffle Spells ==
When ticked, many of enemies' attacks will be shuffled among the suitable attacks of all the enemies.

Attacks affected by this option are those that do not use any of the following effects:
No Effect, Special, Magic Heal, Cure Status, Life, White Wind, Chakra, White Draw, Might, Focus, Sacrifice, Apply Effect, Angel's Snack, Change, Flee, Flee Skill, Steal, Trance, Good Status, Banish.

Additionally, attacks can be shuffled only when they use a suitable spell animation (using either "Set Spell Animation + Channel" or "Set Spell Animation" in their attack animation sequence, but not "SFX"). Also, Prison Cage's "Absorb" spells are removed from the shuffle.

Attacks are sorted depending on whether they are single-target or multi-target (or global) and they are shuffled only according to this category, so a multi-target enemy attack may only be replaced by a multi-target or a global attack from another enemy.

== Keep proportions ==
When ticked, all the admissible attacks will be shuffled. As a result, the pool of attacks that are shuffled contains all the variations of the same spells, so there is Carve Spider's Fire spell (of power 10) and Bomb's Fire spell (of power 19) that are consider to be distinct spells for example (the number of instances of the same enemy in the list of enemies doesn't matter, so Carve Spider's Fire is only present once in the pool even if there are multiple Carve Spiders).

When unticked, the similar attacks of the previous pool are merged by averaging their power, accuracy and MP cost (so a "generic enemy Flare Star spell" will be made as an averaging of Kuja's, Ozma's and Trance Kuja's Flare Stars for example). This has the effect of lowering the chances to face spells used by many enemies while increasing the chances to face spells used by fewer enemies. Attacks are considered to be similar there if they share the same visual effect, the same name, the same effect, the same element and the same status.

== Downscale Max MP ==
When ticked, the Max MP of each enemy is set to be proportional to its level:
Max MP = Enemy's Level x Factor
The value of Factor can be chosen, with 6 making Max MP usually enough for any enemy to cast any spell (except for the most extreme cases) but still low enough to empty in a fair amount of time.

=== Cards ===
== Randomize Card drop ==
When ticked, enemies drop random cards.

== Opponent Decks ==
There are 3 options: Keep opponent Decks, Shuffle opponent Decks and Randomize opponent Decks.
= Keep opponent Decks: No change.
= Shuffle opponent Decks: Shuffle the Tetra Master decks used by opponents among the 64 possible decks (whose list can be seen here[finalfantasy.fandom.com]).
= Randomize opponent Decks: Randomize the cards in the all of the opponent decks, which means that the same opponent will always use the same deck if challenged several times in a row and opponents sharing the same deck in vanilla will also share the same deck after randomization.

=== Random Seed ===
You have the possibility of setting the random seed used for the randomization.
If two people use the randomizer with (1) the same random seed, (2) the same initial game datas (typically both start with a non-modded game) and (3) the same options in the randomizer, then the resulting randomness should be the same (I am not 100% sure that this is machine-independant but I suppose it is, most of the time).

=== Safe Abilities ===
A safe ability is excluded from one or all of the random processes. They are not shuffled nor randomized as long as they are flagged as a safe ability and the corresponding "Exclude Safe Abilities" option is ticked.

By default, safe abilities contain:
  • Spells in the SFX commands, so that they are not shuffled with the normal spells nor they get any random power.
  • Roulette as a character spell since Roulette's slot is particular in the sense that its target will be picked at random (so if it get replaced by Fire, for instance, that Fire would have a random target and, conversely, Roulette placed in another slot would always target the 1st valid target, usually Zidane).
  • Flee, which is tied to Zidane and available right of the bat by default, for convenience.
  • Dyne abilities, that are not shuffled among the other abilities because they are way too overpowered by default.
  • Charge!, also for convenience.
  • Alert, also for convenience (although characters having that one can be random with the default setting, the pieces of equipment teaching it are always the same).
Last edited by Tirlititi; May 26, 2021 @ 11:29am
< >
Showing 1-15 of 34 comments
Tirlititi Aug 2, 2019 @ 2:01pm 
Thanks. That's the other point of the update indeed :)
Nozeart Apr 21, 2020 @ 3:20am 
Hello, I'm searching for a randomizer for the steam version, but your link seems to be dead :( Can you reupload the file ?

Thanks in advance
Tirlititi Apr 21, 2020 @ 3:27am 
Hi. I updated the link, thanks for warning. The tool HW (that includes the PC randomizer) has its main topic there[forums.qhimm.com] in any case.
Alexthekid93 Jun 6, 2020 @ 5:30pm 
Question:
Does the modded executable work from within steam without any extra launch options, or do you need to load it directly from the executable in file explorer/windows?

I've never modded FF IX before, and a randomizer was exactly what i wanted, so this is awesome either way!
Tirlititi Jun 7, 2020 @ 5:16am 
The tool doesn't generete a modded executable (.exe): it generates modded archives (.bin and .assets) and a modded DLL. All these files must replace existing game files.

Once the modded files replace the default game files, there is no difference between launching the game from explorer or from Steam.
Pog thanks for your work OP :cozybethesda:
ThatJoeKid Aug 19, 2020 @ 5:28pm 
Sorry to ask for some hand holding but I am having trouble getting the randomizer to work with Moguri Mod. I am pretty new to modding so I am confused as to where to swap "Assembly-CSharp.dll" and "Assembly-CSharp.bak" to or what to swap them with. Any help with this would be greatly appreciated. Thank you for putting this together, I have watch some people play the randomizer and it has been amazing every time. Thanks!
Tirlititi Aug 20, 2020 @ 5:09am 
Hello ThatJoeKid.
When using the Moguri mod, it is better to generate spreadsheets rather than an Assembly-CSharp.dll, since the DLL will not hold many features of the Moguri mod.

In short:
- Without Moguri or Memoria mods, the idea is to generate a DLL and Unity archives and to directly replace the files.
- With Moguri or Memoria mods, the idea is to generate CSV spreadsheets and raw assets and to keep them in a mod folder that you then register in the Memoria.ini file. Unfortunatly, the paths that the assets should use for Memoria/Moguri are not exactly the ones currently created by HW when saving Steam files (you need to displace "HadesWorkshopMod/p0dataX/assets/...." into "HadesWorkshopMod/StreamingAssets/assets/..." for instance; "HadesWorkshopMod" is the name that should be registered in the Memoria.ini file in that example).

In short, for the CSV files generated by HW, put them in a folder like this:
FINAL FANTASY IX/MyCustomMod/StreamingAssets/Data/Battle/Actions.csv etc...
And then open the Memoria.ini file in the folder "FINAL FANTASY IX" and add "MyCustomMod" in the field "[Mod] FolderNames", eg.:
[Mod] FolderNames = "MyCustomMod", "MoguriFiles"

I may update HW and/or give proper explanation of how these things work now. I think the system that we have with HW and Memoria is very nice currently and able to handle the compatibility of several mods, but there is no documentation on how to use it and it's completly normal for people to be lost.

The .bak are backup files automatically generated when installing the Moguri mod. They have no purpose other than letting you put them back if the mod doesn't work and if you don't want to download the vanilla files from Steam again.
Last edited by Tirlititi; Aug 20, 2020 @ 5:11am
Fedolan Sep 22, 2020 @ 4:43am 
Hey Tirlititi,

I just downloaded HW for the randomizer, but when I try to save steam mod (step 5) I get an error popup.

When selecting the mod folder: 'Unable to create the file'.
When trying to overrwite in the game folder directly: 'You can't overwrite the currently opened steam files'.

Any idea what might be the problem here? It's a fresh install of FF9, so no other mod involved.
Tirlititi Sep 28, 2020 @ 2:04pm 
Hi ThdLPotato.
It's surely because the program doesn't have the right to create folders/files there.
You may either right-click on HW -> "Run as administrator" or choose another folder, such as your desktop folder, to generate files when saving your mod.

Sorry for the late answer.

EDIT: I was wrong, the problem is not that.
The problem and a hacky solution for it are described here.
Last edited by Tirlititi; Nov 23, 2020 @ 9:12am
Zexbid Sep 29, 2020 @ 4:35am 
Not sure what's going on here, but I'm trying to get this working with Moguri. I do as the instructions say, but no matter where I save the spreadsheets, it just gives me the "Unable to create the file" error.
Fedolan Sep 29, 2020 @ 7:17am 
Originally posted by Tirlititi:
Hi ThdLPotato.
It's surely because the program doesn't have the right to create folders/files there.
You may either right-click on HW -> "Run as administrator" or choose another folder, such as your desktop folder, to generate files when saving your mod.

Sorry for the late answer.

Better late than never, haha. Either way, both running as admin and choosing a new folder on desktop still give the 'unable to create the file' error. It makes some files though, so I'm guessing it just fails to make some? After trying to save the mod it creates:

1. StreamingAssets > p0data2.bin and p0data7.bin
2. x64 > FF9_Data > Managed (which is empty)
Tirlititi Sep 29, 2020 @ 9:27am 
Then it fails to generate the DLL (the modded Assembly-CSharp.dll)... There has to be some kind of protection that prevents HW from creating it, maybe an antivirus software.

A very hacky solution would be to open HadesWorkshop.exe with a hexadecimal editor (there are plenty on the internet), search for the occurrences "Assembly-CSharp.dll" and replace the ".dll" by something else (of the same length) like ".hwl". Then the protection preventing HW from creating a DLL shouldn't bother you anymore and you'll have to rename (the extension of) the Assembly-CSharp file after its creation.
Fedolan Sep 29, 2020 @ 12:33pm 
Originally posted by Tirlititi:
Then it fails to generate the DLL (the modded Assembly-CSharp.dll)... There has to be some kind of protection that prevents HW from creating it, maybe an antivirus software.

A very hacky solution would be to open HadesWorkshop.exe with a hexadecimal editor (there are plenty on the internet), search for the occurrences "Assembly-CSharp.dll" and replace the ".dll" by something else (of the same length) like ".hwl". Then the protection preventing HW from creating a DLL shouldn't bother you anymore and you'll have to rename (the extension of) the Assembly-CSharp file after its creation.


So, after tinkering around a for a while I managed to get the randomizer to work! I followed these steps, but also removed the block that windows put on HW for being from a different computer in the property settings. Still got the same error. Eventually attempted to create the files by selecting raw assets instead of the default option unity archives and it worked. Not sure how much of this was all necessary, but I'm happy I finally got it to work!

Thank you Tirlititi, for allowing me to experience one of my favourite games in a new way.
Zexbid Sep 29, 2020 @ 4:12pm 
Originally posted by Tirlititi:
Then it fails to generate the DLL (the modded Assembly-CSharp.dll)... There has to be some kind of protection that prevents HW from creating it, maybe an antivirus software.

A very hacky solution would be to open HadesWorkshop.exe with a hexadecimal editor (there are plenty on the internet), search for the occurrences "Assembly-CSharp.dll" and replace the ".dll" by something else (of the same length) like ".hwl". Then the protection preventing HW from creating a DLL shouldn't bother you anymore and you'll have to rename (the extension of) the Assembly-CSharp file after its creation.
I tried doing that, but it still says its unable to create the file.
Going Raw Assets creates everything except the modded dll. Is it necessary?
< >
Showing 1-15 of 34 comments
Per page: 1530 50

Date Posted: Aug 2, 2019 @ 12:59pm
Posts: 34