So, I've been developping Hades Workshop for a bit more than 5 years now. I accumulated quite a lot of knowledge about Final Fantasy IX, a game I love, and about its in-depth functioning. Now the Steam version is out and the possibilities it allows in the long-term are enormous. I'm not planning to give to HW more time than I currently give - I have a full-time work besides that - so I feel that either HW's development should involve more people, either it will just keep going at this rate, that can be slow sometimes. I made the
github project page some time ago in that perspective and I hope people will get interested in contributing.
This post serves several purposes:
1) It's a list of what I currently believe to be feasible in terms of FF9 modding. I tried to make it exhaustive but I excluded what I think should never be related to HW (a save editor -> gjoerulv already made a good one ; Messing with the aspect ratio -> it's better done with an external program...).
2) It shows what you can do to participate to this program. You don't necessarily need to know programming to help: a lot of things can be done only with patience and/or different computer skills. What you surely need though, is a certain amount of passion for this game.
If you want to contribute to the project, the best ways to contact me are either send me a PM here, either send me an e-mail at:
laroche.clement1 at gmail.com
I color each of the points depending on what kind of skill it requires to be done.
Blue: You need to know how to use some aspects of HW.Red: You need to know C++ programming.Brown: You need to know C++ programming and get to know the source code of HW.Green: You need another specific skill, like 3D modelling or Unity coding.Of course, I plan to do them myself if nobody comes and propose his help. I'm usually focusing on the brown points and I'll most likely keep doing that.
EDIT 1: I started to strike out what has been done already.
EDIT 2: since I retired from modding, everything that is not stricken out will not be done by me.
MODDING THE ASSETS'Assets' are the name that Unity gives to the game's resources, including 3D models, textures, interface aspect (UI), musics, sounds. I'll focus on these but maybe you'll think of something else as well.
The files p0data1X.bin with X ranging from 1 to 9 contain Field related data (backgrounds),
The file p0data2.bin contains Battle related data (3D models of the battle scenes),
The file p0data3.bin contains World Map related data (3D models),
The files p0data4.bin and p0data5.bin contains the other 3D models and their animations respectively (3D models of enemies and player characters in battles and 3D models on the field),
The files p0data6X.bin with X ranging from 1 to 3 contain the musics and sounds,
The files levelX (in particular level1 and level2) seem to contain the UI datas,
The file mainData contains a 'ResourcesManager' file needed for authentifications of most of the other assets.
The assets are not in the same formats in PC as their PSX counterparts. Also, those formats are not custom to FF9 and thus it would be way better to export/import them rather than adding a feature in HW for modding them directly.
The textures are mostly DXT5 compressed. I already use a library to compress/decompress them (Squish) so I can add a feature in HW to convert them into more usual formats (bmp, tga, tiff...).
The 3D models are Unity-serialized FBX models. They can now be deserialized into FBX but serializing them back doesn't work correctly.
The UI data format is some kind of Unity based binary format. I don't know if it's a standard binary, but it represents things like GameObject, MonoBehavior, Transform, etc... It shouldn't be hard to figure out how to mod them for anyone who knows a bit about Unity.
Musics and sounds are all in the .akb format, which is also easy to read (Audacity does that). It seems that it's not so easy to export files in the .akb format but FF4 modders also encounter this format and they found there way out (for what I understood, .akb is only .ogg with a different header).
ADDING FEATURES TO HWThere are two kinds of features that can be added to HW: adding tools and adding panels.
A panel is an aspect of the game or of the gameplay that could be modded in HW. It usually allows to modify datas that are very specific to FF9 and so adding a panel requires getting to know the binary format of the aspect you want to mod.
A tool can be made for simplifying the life of the modder. They could also be standalone programs, but using the capacities of HW would surely be simpler for most of them.
Here are examples of tools that would be nice to have:
A Damage Calculator: Allowing to get the ranges of damage done by spells/attacks against specific monsters, under specific circumstances. Also useful for the chances to hit and the chances to add a status. All the precise formulas are now known things, so it would only require to code the tool and give it a nice UI.
A Unity Assets Viewer: There are already Assets viewers. Not all of them work correctly with FF9's assets, but some of them does (UnityEx 1.1.5 for instance). The use of a Unity Assets Viewer specific to FF9 would be to be able to find the assets more easily (most of the time, the names of the assets are opaque and they're not their real file names). It would also be useful to make converters to common file formats (like DXT5 <-> .bmp converter for images).
A Randomizer: I made a randomizer for the PSX version, but porting it to the Steam version would require to use more of the power of HW for reading the FF9 Steam datas.
A changelog automatic generator: Adding a tool that compares the data from the game opened with the data from a HWS file and generates a summary of its changes may be useful (for generating changelogs but also for a potential textual format of HWS, because why not).
And here is a list of new possible panels to add:
Walkmesh Editor: With the possibility to import custom backgrounds, it would be nice to be able to edit or create the walkmeshs as well. Walkmesh are the paths on which the characters can walk, so making new areas requires being able to make walkmeshes. Their format is not too complicate (and is already readed by HW) and so the work there would be to implement a convenient way to modify them in 3D. It could also be a possibility to import 3D models (untextured, unanimated...) to use as walkmeshes, but there will be parameters to adjust in HW anyway, as a walkmesh is not only a 3D model. The best solution may be to add a walkmesh support to the Background Editor tool.
Camera Editor: Also needed along with walkmeshes to create new fields, but there are also the battle cameras that should be editable. As of now, the only camera movements available in each battle are the ones already there. Being able to add new cameras make the variety of the enemies' attacks stand out. It'd also be a great tool for making dialog moves in battles.
There's also the possibility to make the tool compatible with the Android and iOS versions. Most of the datas should be the same for what I know, only packed differently.
IMPROVING HW CURRENT FEATURESThere are some features in HW that are currently only partial or missing some database.
Listing the IDs of the resources:3D Models: Most of them are already listed. Listing them all is very useful because it makes the field scripts way more readable: you know which entry is associated to which object through its model ID. That's how you can easily spot the entry of Zidane, for instance. There are a few of them missing, though, and the list should be completed.
Animations: That will already be a longer job. Fortunatly, there is already a list of the field's model animations, but it's a bit imprecise for my tastes: it only links the ID and the file name of the animations. A better list would link the ID with the name of the animation and the model that uses that animation. Fortunaly, the file name kinda contains these informations already (for instance, there is "ANH_MAIN_F0_VIV_LAUGH.anim") but not all are explicit. Also, the same kind of list exists for battle animations, but none of the file name is explicit there.
Musics: Listing the musics and find their ID shouldn't be too hard for someone who knows the game well and which music is played at which occasion. That would be useful for the script editor.
Sounds: Same as for musics, but there are more and it will need more precision and/or testing to accurately identify the sounds. Also, you have to come up with simple and adapted names for those sounds, which won't be an easy task.
Overall, listing the IDs of the resources is useful for making the script editor better. It will also come in handy for exporting/importing the assets if HW gets a Unity Assets Viewer.
Completing the modding features:Spell Animations: For now, there are a lot of unknown instructions in the spell sequencing. You can effectively make multi-hit attacks (great thing they removed a few of the potential bugs in the Steam version) but the possibilities given by this feature is limited. One thing to do is to complete the instructions (and the arguments), but it won't be enough: a lot of the useful stuffs are hidden in what are currently called the "Play model on target" instructions. Without talking about the 3D models of the SFX, it would be nice to, let's say, make a spell that consecutively launch a Thunder SFX and a Fire SFX. A lot of things need to be learned about the Spell Animations file formats.
Enemy Spell Animations: I've worked on this one pretty recently so it is more complete. It should be perfected by displaying convenient informations about the instructions' arguments: for now, the animations, cameras, sound, etc... that you want to run are only identified by a number. Being able to import more sounds usable here should also be done.
Character Progression: I had some fun to make the Curve editor, to see how the HP/MP/Exp progressions were climbing and how to *comfortably* move those progression curves. It was kind of like coding a pencil tool for an image editor. However, it never has been my priority to complete that, so it was left in a state that is quite unconvenient. By the way, if I recall correctly, the default progression curves are piecewise quadratic functions. It could be useful to add a way to input the function instead of drawing them (or even import them from a spreadsheet).
World Maps: Aside from the 3D model, a better grasp of how the different locations are placed could be worked out. A few of the locations are given their coordinates directly in the scripts (chocobo treasures), but not all of them (the towns/dungeons, the topography and different battle areas). Not much to do here besides that, because a lot is coded in the game's script ; a World Map viewer would come in handy in the script.
Text Editor: Surely one of the most useful part of HW that needs big improvements. The text opcodes are handled by HW for the PSX version, maybe not fully but still quite well. However, for the Steam version, the text opcodes are all displayed raw. One thing to do is to display correctly the in-game text we get in the Text Editor window. It is standard work but I haven't done it yet. Another thing would be to convert the PSX text opcodes into Steam text opcodes, and vice versa. That won't be of huge use, but that would allow translations and mods to be compatible both for the Steam and the PSX versions at once. Last but not least, it should be possible to switch languages in HW at any time, as well as being able to add pieces of text for all the languages at once.
Multi-language scripts: Speaking of multi-language, the scripts (enemies' AI, field and World Map scripts) are also language-dependent. The script modifications should expand to the script of all the languages, as much as possible, and notify when it can't be the case because of the differences.
Background Editor: It is a young feature of HW and has a room for improvements. There seems to be some seams left when importing images and that should be fixed. Also the background file format, as they are handled (exported mainly) is the worst possible in term of memory management (each layer is of the size of the full image, usually transparent on 90% of its surface, and saved as uncompressed RGBA format). Finally, creating new fields from scratch requires algorithms for computing the tileblocks, their depth, the walkmesh, the camera position, etc... I would say that it could be automatized with few to no user adjustments if we ask for a 3D model and are able to convert it to the structures mentioned above.
The Script Editor can be improved further, in many many ways. Here are a few possible improvements that were not already mentionned:
Figuring out the purpose of each of the local and global variables in each of the World Maps/Fields scripts, and renaming them. I did that already for the enemies' AI, and it shouldn't take too long to do it for the World Maps, but it is a big task for doing it for all the fields. However, the mini-games, the cutscenes, the progression, the treasures and a few dozens of other things are written in these field scripts. Making them more readable and exhibit how they are coded will make their modding much easier. It's a work that should definitely be done on the long-term and we should only focus on a few fields to begin with that are of primary interest (the chocobo places, the World Maps, the Airships...).
Making macros, automatically generated script, would come in handy too. They used some for sure during the development of FF9 and it would save quite a few copy/paste when coding the script. A few possible macros would be:
- Generating the default script for a talkable NPC or a moogle,
- Generating the default AI (with the random attack picking system),
- Generating the default script for item picking (in a chest or on the ground),
- Generating the script for a ladder,
- Generating the script for leaving a field (opening a door as an option)...
Modding the engine:What I call the game's engine is basically the CIL code. It can be tweaked a bit, but that's all but satisfying. A big improvement would be to reverse engineer the CIL code into C#. There are a few tools that can do that already (.NET Reflector, JetBrains dotPeek, ...) so it's not like we should rediscover the wheel ; hopefully
there is or there will be some library that we can use to do that. Albeoris's Memoria does that already better than HW, but it completely screw up the format by delegating a lot of the classes to an external .dll, making it impossible to come afterwards and mod something else on top of it...
For the time being, and because it can make things way simpler,
the CIL macros are a good option to mod the engine, so we should add more. For instance:
- Changing the FPS limit: It has been asked a lot, and it's definitelly feasible, but a few things have to be changed there and there. The model animation factory seems to be adjusted for a particular FPS limit, and the walking speed is also dependant on the FPS if I recall correctly.
- Modifying the Supporting Abilities: This one is tougher than it looks. The supporting abilities really are melted with the battle system, and it wouldn't be easy to make an automatic way to mod them. It's not an impossible task either.
- Making the base commands moddable: The commands like "Defend", "Item"... are specially handled by the engine so changing the spell(s) linked to them is ineffective and/or buggy. There is also a few spells specially handled by the engine and it would be nice to have a simple way to configure that.
- Removing the tiled background system: This was an idea for easing the background image importation, but it turns out to be less simple than expected. Each 32x32 tile has a different depth, which makes the rendering of one big image instead of plenty of little tiles complicated. Currently, I don't think it's feasible without creating more problems.
- Maybe adding analog support: I don't know why all the types/keys of controllers are not supported. It may be because of Unity's engine, or it may be because of FF9's engine. If it's the latter, fixing it shouldn't be such a problem. There is a list of input codes in the class NGUITools, with "KeyCode.JoystickButton" from 0 to 19. Maybe there are more to add, or maybe they are not handled well...
- Being able to add new things to fixed lists: It's quite vague, but it would be nice, for example, to add more possible battles, or fields, instead of needing to change the existing ones. There are things for which it is highly improbable that we can add more, because the engine is calibrated for it. What we may hope to be able to add are battles, fields, world maps, text areas, 3D models, animations, shops, levels (increase the max), battle scenes... What will unlikely be possible to add are spells, commands, supporting abilities, items, spell animations...
- Implementing new functions to the game's script: That is something unavoidable at some point. For now, the enemy AI, field and world map scripts are limited by the features decided by the developers. It is for instance impossible to get access to a character's strength from the field's script, or to give exp or AP, or to have any information about the Tetra Master cards (except for the number the player has). There are rooms for adding more functions, it only needs to be done and make HW compatible with it.
- Same thing for spell effects: Increasing the variety of effects a spell can have will definitely be a plus for most mods. I'm thinking of a spell that can turn an ally to trance that can be used only if the trance gauge is already up to a certain pourcentage for instance. Also, the only effects that can decrease the MP are MP Hammer and Ryuken for now, which is quite poor.
- Make the encounter rate the same as for the PSX version.- Allow for more languages: There are russian and portuguese translations out of there, maybe more. I guess they replace an existing language with the translation, which is fine, but will likely ask for workaround when playing mods. Adding languages to the game engine can make it easier. Also unlock the japanese language in the main menu.
FIXING HW'S CODEI started coding Hades Workshop a long time ago and it would need
some reworking here and there. There are memory leaks to fix (I start with the most boring thing so you stop reading this paragraph now
), some structures could replace list of arrays, for some reason, I was reluctant to use std::vectors for a long time and they could also find their place...
There are also a few things to complete or code better. Usually, I comment them with the words "TODO" or "DEBUG". Someone told me the other day that he couldn't stand a final release of a program that has those words in its source code. So you know what we need to do if we want to see the birth of a v1.0 ^^
MAKING NEW MODSWell, yes, that's the point of the whole thing in the end ^^"
Difficulty mods or those that refresh the abilities are the natural mods made by HW. But it can of course do much more. Here are random suggestions.
Boss Rush: I wanted to make one, but I can't really handle developing HW + improving AF from time to time + making a boss rush. I don't have a clear idea on how the characters should progress, be it their levels or their abilities available. Still, a boss rush could refresh the game a lot, making tactical battles and faster playthrough than usual.
Kuja mod: Well, the battle model(s) need to be replaced (as well as a lot of icons and images), and it will be a huge work about the cutscenes, but that is in the range of doable things: tell the story from Kuja's point of view.
New Game +: If correctly balanced, it could be pleasant to be able to run the game with all the abilities from previous playthroughs unlocked. If the levels are re-initialized to 1, it can be made possible to max the stats with several playthroughs.
Importing the mods from PSX to Steam: currently, except for the texts, it is quite easy to do that. Either the mod was already in .hws format and can be imported with HW, either it was a .ppf or modded .bin and a trick can convert them into .hws (using the Mod Manager). The most obvious one is Unleashed. I contacted LandonRay a few years ago to ask him the permission to convert his mod into .hws (the point was to be able to translate it more easily) and he never answered... So I'm not porting it now, as a revenge
But it can be done.
A Bug Fix: There are a few bugs left in the Steam version. I don't recall them all, but there's the Thunder Slash glitch, the Marcus/Eiko stat glitch, Ozma's AI, Necron's return magic guard, the
Tetra Master rank bug, mini effect or cure not persisting after trance or detrance, the fact that the last card of a Tetra Master deck is never used by the opponent (to be confirmed), for some reason the rope in the well of the Mount Gulug doesn't display correctly (speaking of which, Eiko is clearly standing with her HD model a few screens later, while she should be lying down ^^), people say there are still sounds missing even though I thought it was fixed, correct the few typos mistakes (I know only one in french, the description of the Cid VIII statue in Lindblum; also, a few have been fixed for the port, in english). For those who really can't stand any bug, there's also the Puck skip, the Mistodon skip, the Madain Sari moogle skip, the World Map stuttering... I must forget some, but that's a little list already. Of course, some of them may be fixed by Silicon Studio in the future.
GROWING THE COMMUNITYQhimm is a great forum. I received a lot of help and feedback here from people knowing their stuff. However, because Final Fantasy VII is so overwhelmingly represented here, there's little room for a big community about another game (I might be wrong though, but neither FF8 nor FF10 modding had a piercing impact here for now). Also, when it comes to FF9 mods, it seems to me that people have a hard time finding us. It's my fault as well, because I don't actively spread the words and I don't even have any social network activity.
Nevertheless, I feel that more people could be interested in FF9 mods than those who seriously search about it.
Additionally, there's basically one topic now about HW, and considering the variety of questions one can have about it, I don't think it's enough.
The obvious place to speak about FF9 modding is the FF9 Steam forum, I guess. There's also the FF9 sub-forum of the FF Modding community on Steam ; it is more clear. The thing is, there are mods to be played and for that it is easy to make a topic listing all the available mods (there are not a tons of them).
But it would be nice to also have tutorials and demonstrations about HW. Even a proper shapping of all the tips, suggestions and procedures people gave in this topic (mostly me, but also a few others) would be very useful. And it would tell people that modding can be easy if you have the will to do it. I'm the kind of guy that consider everyone should have the possibility to play a game his own way (that's why I give myself the right to mod to begin with) and that goes with a correct documentation about the available tools.
Also, the more different mods there are, the bigger the community is, that's about sure. It however needs a proper place to sort them out.
- -- --- ---- ----- ------ ------- -------- --------- ---------- ----------- ------------ ------------ ----------- ---------- --------- -------- ------- ------ ----- ---- --- -- -
Well, that's just about everything about that.
I have no idea of how far FF9 modding will go, but I hope I gave an overview about where it could go. The rest is up to us.
Keep enjoying this game, it deserves it