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

  • Thread starter Thread starter Tirlititi
  • Start date Start date
Status
Not open for further replies.
Great!! Now i'll test it. Thank you for your detailed answer.

I'm planning to do some balance changes to make the game more challenging. The only defect of this game is that's too easy, in particular in the late game.
 
Thanks :)

Updated to 0.27 :
- Field backgrounds can be viewed and exported (not edited yet),
- You can modify the amount of enemies inside battles ; be sure to change it both in the main panel and in the battle script,
- Added a window telling you how much some file reading processes are progressing (this is quiet useful when you load fields or battle scenes, since they are long to read),
- fixed bugs (tokenize code for japanese, some script bugs, some UI bugs...).

About field background, they are not 100% well displayed. Some tilesets (think of those as layers) are a mess and I don't know how to handle them ^^" Those tilesets are mainly about the "Places names" that are displayed when you first enter a new place but there are also some effects of light. There are also few tilesets that are behind ones they should be ahead of.
You can export them as .tiff (Gimp can read them at least). The filesize is hugely non-optimized.
You can see background's animations too.

For adding enemies to a battle, you must add to an enemy group, verify its "Targetable" flag is on, and add a "INIT_OBJECT" line inside battle's main function. Note that some enemies are moving back to a fixed position (Black Waltz 2, for instance, always go back to its default position in vanilla games after a Teleport move). The angle is also re-initialized to 0 most of the time.

You can see a stupid fight patch I made with this version here.

I guess I'll keep making bug-fixes updates while I'm studying the top-level file format. I need to make the remaining (menu) texts available and I can't do it without this step (plus it should unlock the card's panel also).
 
Last edited:
Thanks :)

Updated to 0.27 :
- Field backgrounds can be viewed and exported (not edited yet),
- You can modify the amount of enemies inside battles ; be sure to change it both in the main panel and in the battle script,
- Added a window telling you how much some file reading processes are progressing (this is quiet useful when you load fields or battle scenes, since they are long to read),
- fixed bugs (tokenize code for japanese, some script bugs, some UI bugs...).

About field background, they are not 100% well displayed. Some tilesets (think of those as layers) are a mess and I don't know how to handle them ^^" Those tilesets are mainly about the "Places names" that are displayed when you first enter a new place but there are also some effects of light. There are also few tilesets that are behind ones they should be ahead of.
You can export them as .tiff (Gimp can read them at least). The filesize is hugely non-optimized.
You can see background's animations too.
I guess I'll keep making bug-fixes updates while I'm studying the top-level file format. I need to make the remaining (menu) texts available and I can't do it without this step (plus it should unlock the card's panel also).
Awesome update.

When you say "(not edited yet)" what do you mean? Are there plans for us to be able to upscale the backgrounds or replace them entirely (sort of like the work edone for FF7 and FF8 with Palmer and so on)?

Are there any plans to add any sort of batching to the backgrounds at all? There are a loooot of backgrounds as we all know, doing them all 1by1 is possible, but very time consuming.

Something else that would be interesting, though not exactly necessary, is to have the viewer window be larger than its current size, most backgrounds don't actually fit correctly.
Its not exactly an issue to scroll up/down left/right though, which is why I said its not necessary, just a minor thing.

Great work.
 
Last edited:
Thanks !

It is planned to make backgrounds editable, yes.
However, the main problem with that is the image size (that's why you can't make the other textures larger than what they currently are). If there is space to add some lines in fields' scripts, increasing a background's size (including upscaling them) would hit the limit extremely fast.
That's another reason why I try to get more of the high-level structures : to add a tool that could increase the size and get ride of that limitation.

The viewer window needs rework ^^ As you said, most backgrounds don't fit inside. The pathing and few other stuff should also be displayed in this window so I let it the way it is until I decide its final form. Same as the Script editor that definitely needs improvements.
 
However, the main problem with that is the image size (that's why you can't make the other textures larger than what they currently are). If there is space to add some lines in fields' scripts, increasing a background's size (including upscaling them) would hit the limit extremely fast.

The viewer window needs rework ^^ As you said, most backgrounds don't fit inside. The pathing and few other stuff should also be displayed in this window so I let it the way it is until I decide its final form. Same as the Script editor that definitely needs improvements.
Could you explain the image size limits in a bit more detail at all?

The pathing? Do you mean the walkmesh, I remember a Zidane_2 tool let you view/export walkmeshes but I never got the tool working (eventhough I have the source codes to everything he's done).

One thing that I think would be nice, probably for everything actually, is batching export (and import), someone could export all the scripts from lets say disc 1 as a text file and edit that, reimporting it later on, not sure if it'd save any time over the current method though, but it'd be great for fields and battle maps.
 
Yes, the walkmesh. I got Zidane_2's tool working for me.

About the size limit : each field is packed in a "cluster data", regrouping every data needed for this field. There are the background, the script, the local models (really few models are global and usable anywhere ; and yes, that makes a lot of duplicates), the local animations for models, the local sounds, etc...

Between each of these datas, there is litterally no space available. However, between the field clusters, there is some 00 bytes unused.
There is between 0 and 2047 free bytes, depending on luck (clusters' locations are multiples of 2048 so the 00 are just for padding, initially). 2047 bytes, that's enough to add a bit of code, but that wouldn't even allow an increase of a 256x256 image to a 258x256 image (2 bytes = 1 pixel for backgrounds)... You could win 1 pixel in one of the 2 dimensions.

About batching import/export, I'm thinking about it for scripts (it has been asked for texts also...) but there are still a lot of unknown opcodes and such. I also think about changing function names' case LikeThis instead of LIKE_THAT (it was thought to be more like an assembly-looking code at the beginning).
All that to say I'll eventually do that, but not before all the bugs are fixed and that part of the tool is stabilized.
 
Greetings, everyone,

I’m new on this site and I just wanted to say that you guys are awesome! I have used many of your tools with great success already, and now that my FF7 hack is more or less complete, I’ve started working on FF9 next.

I wanted to thank you, Tirlititi, for making this great editor! Final Fantasy IX has always been one of my all-time favorite FFs, and I’ve been dreaming of modding it for a long time.

But right now, I’ve encountered a problem, and I hope that you can help me solve it:

For some unknown reason, the newest version of Hades Workshop (0.27) crashes every time I go to the Item, Enemies, or Environment section. I’ve tried it with both .bin and .iso files, and while Hades can open both file types, it also crashes on both of them whenever I go to one of the above mentioned sections. I can’t explain why that happens, because all previous versions of Hades (0.26 and older) worked fine. I thought that maybe my isos were corrupt, but it also happened when I tried to open the original, unaltered files. I have no other programs running in the background, by the way.

Oh, and I’m playing the German version if that makes any difference (it shouldn’t, however, because as I said all previous Hades versions worked flawlessly with them). Do you have any idea what might be causing this?

Thanks in advance for your help, you’re amazing!

Edit: Also, the item icons in the Inventory section are no longer displayed correctly (see picture). In all old versions of Hades Workshop up  to 0.26, they are still displayed correctly. Maybe this gives you an idea of what might be causing this?

12196ap.jpg


It would be great if you could help me solve this issue, as I'd love to continue my FF9 modding.
 
Last edited:
A little message to inform you that I added some deciphered scripts in the 1st post.

Sometimes, when I get curious or when I'm asked to, I take the script of a system in FF9 and make it more readable (renaming variable names and such). That might be interesting to some of you. That's meant to be understandable if you know some programation basis but it's not meant to be parsable in any way (some uninteresting things are cut off).
 
Nice, thanks for the understandable version of Ozma's AI. Enemy AI is one of the most interesting aspects to edit, but I still have a lot to learn about it. I have just started changing certain enemies' AIs, and I've already succeeded at some of the things I wanna do (like having Hades use Curse and Doomsday without a countdown, or preventing Beatrix from ending battles automatically after 10 rounds).

However, I'm having trouble with changing the target of certain attacks from single to multiple, and I hope someone can help me with this. Specifically, I'm trying to make Tiamat's Float spell target the entire party instead of just one party member (so he has better chances of pulling off his Snort counterattack). Since he has 2 Float spells in his list, I changed the targeting of both attacks in his AI to SV_PlayerTeam (see picture) just to be sure, but it didn't work. He still casts Float on only one party member. Why?

This doesn't make sense to me as I've already done the same thing successfully with Malboro's Bad Breath, and it worked flawlessly. Now Malboro casts Bad Breath on the entire party.

I've wondered whether it might have something to do with the attack animation? The first Float spell in his attack list has a single-target animation, the second one a multi-target animation, but it seems this second one is never used. Is there a way to make him use it?

108a0cx.jpg
 
Yes, that's because of the attack animation.
That's great he has a multi-targeting version of the spell, because otherwise, that wouldn't have been possible.

So, the list of regular attacks he uses is on the initialization function (func_Tiamat_0). Only the 5 first lines matter, the rest is about the randomization system.
Code: [Select]
Code:
    SET VAR_B7_20 = 7    SET VAR_A11_1 = 794688L    SET VAR_A11_4 = 29060    SET VAR_A11_7 = 1280    SET VAR_A11_10 = 24576
VAR_B7_20 -> Number of different regular attacks
VAR_A11_1 and VAR_A11_4 -> Attack IDs of regular attacks
VAR_A11_7 and VAR_A11_10 -> Attack MP costs

The way you should read those ugly 794688L and 29060 is in base 64 (put the selection caret on the numbers and read the base 64 field). 794688L = [ 3 ; 2 ; 1 ; 0 ] and 29060 = [ 0 ; 7 ; 6 ; 4 ] meaning that his regular attacks are all his attacks but the number 5 (Snort) and the number 8 (multi-Float). You have to change the 7 (single-Float) to 8 then.

The calculation to do that is :
[ 0 ; 8 ; 6 ; 4 ]
= 4 + 6*64 + 8*64*64
= 33156

I'm sorry you have to make the conversion yourself everytime you want to change the regular attacks :/
The interface of the script editor needs to change.

Alternatively, you can use a trick and replace the attack 7 by the attack 8 inside the ATE function (func_Tiamat_2). Add these lines right before the 'ATTACK' opcode :
Code: [Select]
Code:
    if ( VAR_B7_19 == 7 ) {        SET VAR_B7_19 = 8    }
 
Last edited:
Wow, it worked! Thanks a ton!

Yeah, there's really a lot of variables in every AI script, it was really difficult to get the hang of it at first. I also made another change while I was at it. Did you now that Tiamat can use both Twister and Jet Fire only once per battle? I always found that rather lame, considering that his weaker Crystal version doesn't have this restriction. I made it so that he can use them an unlimited amount of times, and luckily it turned out to be a simple one variable value change for each. With these changes in place, Tiamat can actually be quite challenging now.

So there are certain attacks whose animations support both single and multi-targeting, but others that don't? This must be why changing the target worked for Malboro's Bad Breath, then.
 
Last edited:
Sorry for the double post, but I've got another question regarding enemy AI scripts, this time it is about counterattacks. It seems that Function func_1_3 is the script that deals with counterattacks, right? Some enemies have a script in this section that I'm unsure of what it does or even what it is (see picture). Do you know what this is supposed to do? Because all enemies that have that don't have any counterattacks.

2ppgh1i.jpg


For example, I'd like to make Quale counterattack with his Rolling Attack occasionally, so I just copy-pasted a fitting counter script from another enemy (Nova Dragon) into Quale's Function func_1_3. However, he still doesn't counterattack at all. What could I have done wrong? The counter script itself must be OK because we already know that it works fine for Nova Dragon. So... what could be the problem?

It seems that Quale's original counter script doesn't serve any purpose either, because deleting it / replacing it with Nova Dragon's counter script didn't change his normal combat behavior in any way. Same with a few other enemies that have this same (seemingly useless) script in Function func_1_3.

But the big question I wanted to ask is: is it possible to give counterattacks to enemies that normally don't have one?

I'm grateful for any input.
 
I can't help you about that. I didn't tested that kind of things.
The script you're showing may be useless in 99% of the situations (or maybe it is only a debugging remain).
I think that Zaghnols have a script like this one that only triggers when they get under Mini : it doesn't scale the model with the same factor as the default one.
I've already seen scripts (Ozma's for instance) responding to an attack inside the looping function. Maybe you can try to put the counter here?
 
Hey Tirlititi (typing that correctly was a challenge).

This tool is super awesome as I've said many times before, I'm quite curious what your future plans are for it, I can't think of many features that could still be added honestly, its pretty feature complete afterall.

I am curious if you've plans to implement a walkmesh viewer/extractor for the field scenes, I know Zidane_2 already made one, which doesn't want to work for me actually.
Outside of that the only things I know you're considering are optimizations and possible batch features (that require optimizations first anyway I think you said).

If you've no plans for that it'd be great if you could give a little rundown on how to use the one by Zidane_2
 
Thanks DanTsukasa (I copied/pasted yours, that was easier :p).

I still plan on tons of things actually.
• Correcting bugs. I saw there was still some bugs with the preloading thing (it can totally mess up with your file because the check of the data size is wrong) and with scripts (I saw Cactuar's IA are surely wrong).
• Walkmesh viewer/editor, as well as making backgrounds editable. I think it will be more simple to make walkmeshes editable directly from the tool, as there may be some features specific to FF9's format.
• Making the file size modifiable. It will allow more changes to be made. However, I'll make it in a separate module because PPF patches won't work anymore with that. You'll have to use .hws files to share the mods then.
• Completing things already there. There are tons of datas about enemies that are currently unknown or uneditable, for instance. The command panel and the supporting abilities panel are also my shame for now and since a long time ^^'
• Making spell animations editable. tasior2 is looking for the models, but there's also the sequencing that can be modified. For instance, it will allow to make spells deal damage several times in one cast, like Cloud's Omnislash and such.
• Speaking of models : importers and exporters of more model files (that was hella tedious for me with battle scenes so that's why I'm not motivated a lot to do the others)
• A Tetra Master panel.
• A menu UI panel.
• Editing the other texts that can't be edited yet.
• Sound and Music exporter/importer.
• A damage calculator, to display conveniently what would be the damage dealt by spells, plus the accuracy of hitting/inflicting statuses.
• Add more flexibility about everything : be able to move an enemy from an enemy formation to another (I'm thinking of making a Garland + Silverdragon fight, for instance ^^), be able to add text lines and not only modify them, same for fields, enemy formations and such...

Actually, I'm not sure to have enough of a life to make everything I would like ^^"
Plus, I'm quiet busy with my job right now.
 
Last edited:
Ah those are some great sounding features.

For the model importing/exporting it might be a smart idea to team up with the guy who made the online viewer, your implementation would be quite different but I'm sure it might save some time and headaches to go over the wiki documentation he's written once he's learned all there is to know about formats.

The walkmesh editor I find interesting, an exporter would be interesting too (though I guess I could use Zidanes tool for that, or his his just editor only, I bet it is...).

How would you even go about the file size modification? I'd understood that to be the ceiling as it were, with no real passable point.

A Tetra Master panel sounds super interesting, what with the possibility of editing the card data along with the card graphics, could change the tide of the game a fair bit (square enix are doing a phone release of Tripple Triad, I wonder if Tetra Master will get the same treatment?), and at the very least make it interesting to have HD cards.

Model data editing is interesting for possible model replacements, especially texture wise, could make the game look real nice, of course the biggest limitation is still the field scenes, since those can only be upscaled really.
 
I saw that. Thanks :D

@ DanTsukasa : It should be possible to expand the binary image, though it requires more knowledge about .img format. I downloaded documentation about it.
 
These additional features look very promising, I'm looking forward to them. I don't know if this is helpful to you, but I've made an excel file for some of the damage calculation formulas which I'm using for my modding. For those who are interested, here it is:

Code: [Select]
Code:
http://speedy.sh/PYtGD/FF9-Damage-Formulas.xls
By the way, I tried your suggestion with placing the counter script in Function_func_1_1, but it didn't seem to work. Although I have to admit, I didn't test it very thoroughly yet. I will experiment some more with it.

On another topic, your to do list reminds me about something else that I've always wanted to play around with, but since I don't know anything about programming, you need to tell me whether the following 2 things are impossible, or whether you could include them in a future version of the editor.

1.) The first one is about the duration of temporary status effects, which are way too short I think. When you’re playing the game with the ATB on active mode and the battle speed set to fastest, no negative status lasts longer than 2 rounds at most if your spirit stat is decent. This becomes especially obvious near the end of the game, when most party members have spirit stats of around 40 even on moderate levels. For example, Mustard Bomb will hardly ever have a chance of killing a character even if it inflicts Heat, because if just a single attack with a decent animation time is in between Mustard Bomb and the targeted character’s turn, the Heat status will have already expired by then. And with ‘decent animation times’ I’m not even talking about summons, as the length of any normal spell or other technique is already sufficient to make Heat wear off. This makes the Body Temp ability more or less obsolete in the late game, even when going up against enemies that use Mustard Bomb or Freeze.

I have found some info on the duration times of status effects in this document here.

http://www.gamefaqs.com/ps/197338-final-fantasy-ix/faqs/44329

It’s a very in-depth analysis of FF9’s battle mechanics, which leads me to believe that the author (Rebirth Flame) must have located these data by looking directly at the code. After all, the only way to obtain that knowledge is by actually hacking the game, isn’t it? Now as I said I am no programmer, so what I’m saying now might be completely wrong, but the duration time seems to be one fixed number for each temporary status (both positive and negative ones), like 160 for Heat or 240 for Poison. This counter decreases continually, and when it reaches 0, the status wears off (at least that's what the author claims). So my question is, if you know where these duration counters are located, would it be possible to make them editable in Hades Workshop to prolong status duration? That would be great.

2.) The second point is about the Poison and Regen stats. One thing that I believe needs to be changed in order to make the game more challenging is to break the power of the Auto-Haste & Auto-Regen Combo. With these 2 abilities activated, you’ll never need to manually heal your party ever again. No matter how powerful the enemy’s attacks are, with Haste status the Regen healing will come so fast that it easily heals you back to full health before the enemy gets his next turn. Add Auto-Life into the mix and your party becomes nigh invincible, eliminating any level of difficulty from late disc 3 onward.

I was thinking that one way to weaken this combo would be to increase the time span between Regen healings. According to the same battle mechanics guide, there seem to be secondary counters for Poison and Regen which determine the time span between two Poison damages / Regen healings. Would it be possible to make these counters editable?

Anyway, these are just some ideas floating around in my head, and I don't know how difficult it would be to change them. But I would like to hear your thoughts on those.
 
Status
Not open for further replies.
Back
Top