Final Fantasy 9 > FF9 Tools

[PSX/PC] General editor - Hades Workshop (0.50b)

(1/405) > >>

Hi there!

I'm working on a Final Fantasy IX modding tool called Hades Workshop. It is aiming to allow to edit most of Final Fantasy IX's content. Quite a big project and I don't know if I will ever decide when it's finished  ;D

//============== THE TOOL =================//

The features so far:
- Can mod Final Fantasy IX PSX files, in .bin format and in any language version,
- Can mod Final Fantasy IX Steam games,
- Read and edit datas about:
--- Spells the party can cast,
--- Supporting abilities the party can use,
--- Commands the party has,
--- Default stats of the party members,
--- Items' features,
--- Items sold in shops,
--- Statistics, attacks and AI of enemies,
--- Tetra Master cards,
--- Text, dialogs and charmap,
--- Game's script,
--- MIPS script and CIL script (very basic and constrained),
--- Model exporting/importing (exporting Battle Scenes only for PSX, more for Steam),
--- Backgrounds (view only in PSX, view/replace in Steam),
--- Field walkmeshes as Wavefront OBJ files,
--- Spell animation sequencing,
--- Asset exporter/importer for the Steam version,
--- Includes a game Randomizer (more infos here).
- Works under Windows only (you may recompile the source code I redistribute or use wine under linux).

It may be a good idea to have a look at the help (F2).

Since the version 0.41, Hades Workshop is compatible with Albeoris's Memoria Engine Modification tool for the Steam version of the game. When using Hades Workshop with Memoria installed, mods are exported directly as mod folders for that can be identified and enabled by Memoria's mod manager.

I made the program, obviously, but I got helped a lot by your wiki ( for cluster datas format of the PSX version and by occasionally.

Other than that, LandonRay and Zande made quite an useful work in data finding, Zidane_2 wrote most of the other tools about FFIX before me.

The launcher image on has been drawn by Maxa'. You can check his Deviant-Art page here.

Please tell me if you get any suggestion/bug report/feedback to share.

Here are the download links:


Github project

The older versions can be found here

Thank you for your attention  :)

//=============== THE MODS =================//

Here are some of the mods that were made using this tool by various people. Go see their description for more detailed informations.

* Difficulty Tweak (PSX/PC): Made by Iamthehorker, this mod increases the MP cost of the abilities and make the battles tougher. The gameplay itself is preserved, so it really is an increase of difficulty for an augmented playthrough. If you think that the boss battles end too quickly or if you never saw the use of the ethers/elixirs, this mod is a way to go. It also allows Steiner to equip the Save of the Queen in the end-game.
* Save The Queen (PSX): A mod made by ThisGuyAreSick2. It allows Steiner to use the allmighty Save The Queen. It also changes the way you synthesize it (it's made in the Black Mage Village in disc 4).
* FF9.2.2 (PSX/PC): A mod made by Vir to improve the Perfect Stats challenge balancing. It removes the forced exp battle so a true lvl 1 game can be made. It also fixes the Thunder Slash glitch. Vir also made a Fixed Stats Mod which removes the primary stat variations from games to games and have a normalized stat progression.
* HD Background (PC): This mod made by Fraggoso for the Steam version of the game improves the backgrounds on the field and make it fit more with the upscale of the characters. There is also a Highres Texture mod, applying the same process to the other textures of the game.
* David Bowie Edition (PC): A mod made by Clem Fandango.
* Moguri Mod (PC): A huge collaborative work, made by Ze_PilOt and Snouz amongst other people. Hades Workshop was used to extract the field backgrounds from the PSX version and re-import them in the PC version after all the work done on them.
* Trance Seek (PC): A very advanced and ambitious gameplay mod made by DV. From reworking in-depth some aspects of the battle system to adding extra scenes and boss fights, passing through changing Tetra Master into Triple Triad, it completly changes the experience of the game.
* Alternate Fantasy (PSX/PC): My own mod. It modifies a wide variety of things in the game but mostly focus on the abilities and the gameplay in battles.
Also, you can find here different tiny mods I made over the years.

Also, for the Steam version of the game, make sure to install the Memoria Engine mod and check out its mod catalog.

//============== HELP AND TIPS =================//

This topic is now more than 30 pages long. Different people asked for help at different points and I always tried to give a complete answer. You can thus find details in this topic about subtilities of the game, or how a feature of HW works, or how to do some precise thing. Since I don't want everyone to read the whole topic thoroughly, here are links to answers to these kind of questions.

Compatibility with Albeoris's Memoria tool (Steam version)

Here is how the compatibility with Memoria works (easiest setting):
1) Have a backup of the non-modded Assembly-CSharp.dll. By default, Memoria keeps it as "Assembly-CSharp.bak", which is fine. If that backup is still available and usable, Hades Workshop will use it and you have nothing more to do. If it doesn't exist, you need to get an Assembly-CSharp.dll by uninstalling Memoria (using Steam's option "Check the integrity of local files" does that) and keep it safe by renaming it "Assembly-CSharp_Vanilla.dll". This DLL is found in "x64/FF9_Data/Managed" and "x86/FF9_Data/Managed" of the game's directory (both are exactly the same).

2) When saving Steam mods, choose the options "Spreadsheets" and "Raw Assets".
3) The folder generated by Hades Workshop ("HadesWorkshopMod" by default) then goes in the game's directory.
4) In that same directory, there is a file "Memoria.ini" that can be edited with a text editor such as the Notepad (if that file doesn't exist, that probably means that you don't have Memoria installed properly). Edit that file and add your mod folder's name to the list in "[Mod] FolderNames".

Very useful informations

A list of spells specially handled by the engine
About the random encounter rate
How to use "GetRandom" to generate a random number in a range
Declaring local and global variables in scripts
Basic example of reading a field script
Detailed example of adding a cutscene and a hunt sidequest
Changing properly the content of a chest
Typical NPC dialog script
Add a (N)PC on the field
Triggering conditions of special functions (Main, Loop, Counter, etc.)
Helping with the development of HW
Using Field 3D Models for enemies (Steam)
Making temporary characters available in the party menu (Part 1 - Part 2)
Using the Background Editor (Steam)
Properly adding a new enemy to a battle (Steam)
Changing the battle music of specific battles (Steam)
Making sure that a specific playable character is always in the party (Steam and PSX) + changing Zidane's model on the field (Steam)
Modding spell effect: explanation (Steam)
Modding Supporting Abilities: HP/MP +X% (Steam)
Modding Supporting Abilities: Auto-status and Immunes (Steam)
Modding Statuses: changing the tick of Poison/Venom/Regen (Steam)
dnSpy: Add a trance to Cinna, Blank, Marcus and/or Beatrix (Steam)
dnSpy: Bypass the limit of spells in different commands + separating the temporary/permanent character slots (Steam)
dnSpy & Memoria: Add a new music to the game without replacing an existing one

Less but still useful informations

Side effects of Initial/Auto-statuses
Bypass the enemies' Max HP limit
Checking if a character is in the team in-battle
Enabling an enemy attack depending on the party stats
Make Zorn & Thorn battle more difficult
Removing Dagger's depression effect in-battle
About Ragtime Mouse quizz and reward script
Unlocking manually a few of the "Hidden Scenes"
Skipping the script that makes Dagger unlearn her summons
Make Mini-Theater Ship obtainable as a key item
Removing Excalibur II time condition manually
Ensure that characters enter the party at level 1
List of animation IDs and who use them
Delay the availability of some chocographs
Manually extracting a Beatrix mod out of Alternate Fantasy
How to mix some of the standard mods
A word about background and walkmeshes
HW format for text file batching
List of Music ID
Bug when making a multi-hit spell animation (PSX)
Adding custom text font (PSX)
Using Memory card saves after modding (PSX)
Fixing "The Collector" Tetra Master bug (PSX)
Change the initial items + hex-hack to give supporting abilities to Beatrix (PSX)
MIPS editing + controlling someone else than Zidane in fields for PSX
Grudge's MIPS spell formula (PSX)
Adding/Replacing 3D Models - buggy (Steam)
Removing (some of) the bubbles appearing when you get close to NPC on Steam
Removing the stat growth of characters (Steam)
Modding Magic Stone growth of characters (Steam)
Modding the stat growth and upper bound of characters (Steam)
Skipping the last two cinematics of the game (Steam)
A few informations about Special Effects models and why they are maybe the most difficult thing to mod (Explanation message - Explanation video)
dnSpy: fixing a bug with weapons floating mid-air at the start of some battles (Steam)
dnSpy: Fixing the descriptions of Carbuncle's and Fenrir's alternate forms (Steam)
Making a system for key items that unlock synthesis recipes (Steam - Memoria)

//================ BONUS =================//

Simplified Game Scripts

Here are some scripts of systems or mini-games that are of some interest if you wish to know how the game works in-depth.
FFIX Code Folder

Hidden dialogs

Here are some few interesting secret dialogs, never used in the game.
I've also made a patch to enable some of them in-game:
Hidden Dialogs (PSX)
Hidden Dialogs (PC)
And a video showing the patch's content.

Don't hesitate to tell me if you find more unused dialogs: I'll add them to the list ^^

Alexandria [Unused small chats]
Alleyway Jack “There are 100 types of cards, altogether, but remember, you can only hold 100 cards total.”
Alleyway Jack “Hmm... No can do. I still got work to do.”
Boy “Only nobles are allowed inside the castle, so us commoners hafta watch from the rooftops.”
Dante the Signmaker “Break time!”
Dante the Signmaker “Sure don’t feel like workin’!”
Dante the Signmaker “Well... Time to get back to work!”
Dante the Signmaker “I just finished a day’s work. Save it for later, kid!”
Ruby “There was sumthin’ funny ’bout that girl...”

Alexandria [Over the roofs...]
Puck “So, Vivi... Is this your first time in Alexandria?”
Vivi “Uh... Um... Yeah. I bought my ticket from a moogle wearing a hat...”
Puck “Bad luck! If I ever find that moogle, I'll hurt him plenty!”
Vivi “Uh... Thanks...”
Puck “Alright! Just a little farther 'til we can see the stage!”

Alexandria Castle [Promoting sign for Treno]
§ Treno, Alexandria §
Kingdom’s sole town of freemen.
Home to many nobles.

Prima Vista [Unpopular opinion: bugs are cute]
Garnet “Why does everyone fear these cute little bugs so...?”

Prima Vista [Garnet thinks Zidane plays Marcus] (found by janglingargot)
Zidane “(I-I'm not Marcus!)”
Garnet “(Oh dear, I'm sorry!)”

Ruined Prima Vista [Disastrous crash]
Blank “Sheez... This baby’s never gonna fly again. That’s for sure.”
Cinna “Is the princess alright?”
Blank “What? I thought she was with you!”
Cinna “No! I haven’t seen her!”
Blank “Oh, man. Maybe she got thrown off the ship.”
Blank “I’ll look for her inside the ship. You look outside.”
Cinna “Alright.”

Ruined Prima Vista [Steiner's bitterness]
Steiner “Those bastards... If they plan to demand a ransom, they're wasting their time. I'll see to it that they receive nothing!”
Steiner “Wretched thieves... I'll see them all hanged!”
Steiner “Those bastards... They will never get away with this!”

Ruined Prima Vista [<Whisper, whisper...>]
Steiner “Without your help, saving the princess will be most difficult.”
Steiner “As you know, magic attack is more effective than physical attack against some enemies.”
Vivi “Oh yeah...”
Steiner “With your black magic, can you turn my sword into a magic sword?”
Vivi “What!?”
Steiner “It will add variety to my attack.”

Evil Forest [Blank's better acuity]
Blank “Zidane, go!”
Blank “Hey, Zidane...”
Blank “You hear that...?”
Zidane “...Something’s coming.”
Zidane “Let’s go! We’re gonna get surrounded!”

Ice Cavern [Quan's wisdom]
Vivi “My grandpa was the one who told me to go out and see the world.”

Dali's Inn [Do you need a reason to kidnap a princess?]
Zidane “Okay, maybe it’s none of my business.”
Zidane “But can’t you at least tell me where you’re going?”
[Later on the cutscene]
Zidane “Oh, it’s only a drag because of Rusty.”

Observatory Mountain [Good and Evil with Grampa Morrid]
Steiner “Alexandria, off course! Burmecia started the war, and we lost our king as a result.”
Morrid “Many wars were fought before the Lindblum Airship Revolution.”
Morrid “Alexandria intiated some of the wars against Burmecia. Now, can you tell me who was right or wrong?”
Steiner “I-I am not talking about the past! I am talking about the future!”
Morrid “What will you do if Alexandria starts a war?”
Steiner “When will the cargo ship arrive!?”

Lindblum Castle [Cargo Ship lore]
Student Engineer “Today, airships are used for all kinds of things. Long ago, they were used only for transporting cargo.”
Student Engineer “This cargo ship was built a long time ago by Regent Cid and Dr. Zebolt.”

Lindblum [Air Cab lore]
Attendant “The air cab is like a mini airship. The regent himself designed it.”
Attendant “It flies to the Theater District and the Industrial District in a matter of seconds.”
Attendant “Convenient, isn’t it?”

Lindblum [Preparing for the Hunt]
Zidane “Oh yeah! Today’s the Festival of the Hunt! I’m gonna win this year for sure!”
Zidane “I’d better buy some stuff.”

Lindblum Castle [Participants are numbered]
“You all have different starting points.”
Elite Guard “Zidane, Hunter No. 4. You will start in the Theater District.”
Elite Guard “Freya, Hunter No. 9. Your starting point will be the Industrial District.”
Elite Guard “Vivi, Hunter No. 2. You’ll start hunting in the Business District.”
Steiner “Master Vivi! No matter what happens, you must not lose to him!”

Lindblum [Wimpy bragger]
Wimpy Guy “I was watching the hunting festival. You sucked pretty bad.”
Wimpy Guy “I could’ve easily scored 500 points <hack-hack>!”

Gizamaluke's Grotto [Entering Burmecia]
Burmecian Soldier “This is the Gizamaluke's Grotto. It is Burmecia's border.”
Burmecian Soldier “No one is allowed inside without the king's permission.”

Qu's Marsh [Mene the knowledgeable]
Howdy! I’m Mene!
I’m just another moogle who’s wandered all over the world─you know...been there, done that.
I’ve battled monsters the size of mountains...
...discovered very rare chocobos...
...and explored forbidden dungeons in search of treasures.
Those were the good old days...
I know pretty much everything there is to know about the world.
So, if you have any questions, feel free to ask me.
Hey, what’s up?

Qu's Marsh [Quina in apprenticeship]
Qu “Six month already since my disciple left for Alexandria...”
Qu “I wonder how s/he doing...”
Qu “My disciple still far from mastering art of eating.”
Qu “Might never master it...”
[Also, isolated]
Steiner “You still do not have my approval to be with the princess!”

South Gate [There's only one man I call 'Bro']
Marcus “You already forgot? He got petrified in Evil Forest!”

Treno [A card tournament on the first visit?]
Card Game Usher “There’s a tournament going on right now! You must first register at the booth to your left!”

Cleyra [Meeting with the King and the High Priest] translated from japanese by luksy
Freya “It has been some time, Your Majesty.”
King of Burmecia “Ah, Freya, well met.”
King of Burmecia “The High Priest and I welcome you.”
High Priest of Cleyra “My Lady.”
High Priest of Cleyra “It would appear that this predicament no longer concerns Burmecia alone.”
Freya “I understand, Your Holiness.”
Freya “And yet...”
Freya “I fear my strength alone may not suffice.”
King “Freya...I know what troubles you.”
King “I must apologize for earlier.”
King “Can you ever forgive me?”
King “No! off course you cannot.”
King “But the fate of the people of Burmecia now hangs by but a thread.”

Cleyra [Tantalus play in Cleyra?!] translated from french by me
“Tonight, for the first time in a while, we will see the play of the Tantalus.”
“I'm looking forward to it!”
“Are you going too?”

Alexandria Castle [The "good" Jesters] translated from french by me
Zorn “Princess, we don't mean any harm.”
Thorn “That's because...”

Occupied Lindblum Castle [Royal funds]
Received 1 Million Gil!
Bring the item I asked for.

Occupied Lindblum [More reactions to the seizing of the city]
Alexandrian Soldier “The air cab will soon be under our control.”
Lindblum Soldier “I can’t believe we lost against soulless dolls...”
Alexandrian Soldier “War is hell. I just wanna go home...”
Alexandrian Soldier “I can’t follow the queen anymore...”
Alexandrian Soldier “Alexandria is invincible as long as we possess the black mage soldiers and our eidolon!”
Alexandrian Soldier “We took Lindblum in just one night!”
Alexandrian Soldier “Don’t you dare resist us if you wanna live.”
Soldier “We should’ve killed Brahne when we had the chance!”
Zidane “Even the air cabs got shot down...”

Occupied Lindblum Castle [Reaching Cid]
Don't get caught by the enemy!
Jump out when she looks away!
Man “The regent is waiting for you at the Base Level.”
Man “The enemy is busy loading supplies. Go down on the lift, now!”
Man “Once you get on the lift, my comrades will take care of the rest.”
Zidane “So, I just take the lift to the Base Level without getting caught?”
Zidane “Piece o' cake! Leave everything to me.”
Is anybody there...?
A tail?
Oh, it's only a cat...
Zidane (Wow, that was a close one.)
Man “(You idiot!)”
Man “Whatever you do, don't get caught!”
Man “What's wrong? The regent is waiting at the Base Level.”
Man “Go now, or you'll get caught!”
Zidane “I gotta run while she's looking away.”

Occupied Lindblum Castle [The Ancient World Map]
Regent Cid “That is a national treasure of Lindblum!”
Regent Cid “It was passed down through my ancestors, since the days of the first regent.”
Regent Cid “It was probably made before our continent was covered in the Mist...”
Regent Cid “That is an ancient map of the entire world!”

Occupied Lindblum Castle [News reach the Dragon's Gate]
Merchant “What now?”
Merchant “What!? Lindblum got invaded!? Oh man!”
Merchant “I’m gonna have even less business now!”
Merchant “I’ll be here for a while. Come back if you need anything.”

Iifa Tree [Alternative fighting call against Soulcage]
Zidane “Shut up! You’re through!”
Zidane “Vivi, Don’t think, just fight!”

Madain Sari [The surprise attack with Mog]
Zidane “I’m gonna surprise her. Then, she’ll be all ours. Just leave it to me, okay?”
Zidane “You understand what I’m saying, right? Eiko needs help!”
Morrison “Mog! They need you, kupo!”
[Later on...]
Lani “Trying to distract me? No go, joe. I’m havin’ a great day.”
Zidane (Time to get it on!)
Lani “Stop dilly-dallying!”

Alexandria [Balloon Mini-game] translated from french by me
Girl “You want to play with us?”
Girl “You've got some time to gather balloons and give them to the boys behind us!”
Girl “You get more time depending on the color of the balloon that you bring.”
Green → 5 more seconds
Yellow → 10 more seconds
Blue → 15 more seconds
Red → 30 more seconds
Girl “All the three of us have a balloon and we are somewhere on the square.”
Girl “Well... Start!”
Boy “X more seconds! You have Y points!”

Lindblum [A smith and his apprentice]
Torres “Wayne saved me during the attack on Lindblum.”
Torres “Maybe it’s time for me to retire...”
Torres “He is so humble!”

Lindblum [A card master and his apprentice]
Card Freak “It’s hard, ’cause you don’t wanna lose rare cards, but that’s the only way to get better at it!”
Card Boy “I wanna get better!”
Card Freak “I’ll think about it after I beat this guy with the tail.”
You jerk!

Lindblum Castle [Toxic working conditions]
Soldier “Watching the dull, heavy Mist really gets me down.”
Soldier “Oh, I hate my job.”

Oeilvert [Doppelgänger extra lines]
Zidane: How have you been? | I’m gonna mug you! | Do you like my tail?
Vivi: I don’t like magic barriers. | That’s enough! | Stop! You’re hurting me!
Garnet: I’m sixteen, a full-grown woman. | Do you know who I am? | I want to use White Magic.
Steiner: I shall not forgive you! | Hey! Hey!!! | I will go!
Freya: Wanna go out with me? | What are you doing here? | I must buy a new spear.
Quina: You taste delicious? | Ouch! I bite my tongue. | This fork too heavy!
Eiko: I’m bored of moogles. | Isn’t my horn the cutest? | I wanna summon!
Amarant: No one understands... | This is silly... | Darn it...

Mount Gulug [Rumbling]
Kuja “Ah, Garland... He sure threw a wrench into my plans.”
[During the extraction]
Zorn “Come forth!”
Thorn “Odin, demon of the dark!”
[After the extraction failed]
Zorn “We will double our efforts!”
Thorn “Double our efforts, we will!”

Mount Gulug [Comprehensive lady Hilda]
[After noticing Cid's moustache]
Hilda “Forgive me, my darling. I failed to notice.”
[After Eiko says she's gonna make Kuja pay]
Hilda “Oh, so this fine young lady wishes to avenge my honor?”

Bran Bal [Bio engineering subtleties]
So the souls of Terra may begin a balanced cycle, it was necessary to preset age, the amount of time before the body fails.
Gravity on Terra and Gaia is identical so that our ambulation senses may apply.

Final [Impossible love] partly translated from french by me
[When Blank plots behind the stairs]
Blank “Forgive me, Marcus, for thy dear love will not see thee at the docks.”
Marcus “Dawn comes anon.”
Cinna “She who you waited for is not here?”
[After "She told me that she could not live without me."]
Marcus “But for that reason a war will break out and many lives will be lost...”

Final [The 2 worlds' fusion]
The Iifa Tree could not be stopped...
Gaia and Terra's fusion
caused global chaos,
destroying many cities and
taking many lives...

link not working :/

Fixed, I added quotes around the link but it wasn't needed...  :roll:

Thanks for warning !

Thanks  ;) by the way im sure you can add the .dll into the program when building it. Some people choose to leave them out because it makes the program bigger i believe. I've heard of "external dependencies" when building source code so im sure you can choose to have it built into the program or make it so you can get the .dll seperately. Not sure how Codelite + wxFormBuilder works though.

Well, this saves me time trying to make my own program with my very limited knowledge on reading from files.

You may want to look at this. I noticed you are missing some of the stats.

Also I haven't figured out the statuses yet. I know some relate to class (Aerial enemies are immune to Float, for example). And I haven't found where the Card is stored. But I imagine the Card drop might be based on the encounter/formation and not just individual enemies. I don't know where the formation data is so I haven't looked around. Also I see where the attack data is probably stored (after the enemy stat data) so this guide may prove useful if you plan on figuring that out.

I assume what the program calls CP is actually AP?

I also think it would be useful if you still gave the number of the formation. So on Disc 1, the Beatrix battle is file0, so having it say "0: Beatrix" would be a help.

But anyway, I love you for doing this. This is extremely useful.


[0] Message Index

[#] Next page

Go to full version