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

  • Thread starter Thread starter Tirlititi
  • Start date Start date
Status
Not open for further replies.
I see thanks.
Is it possible to not make the sfxs no pitch with speed booster on?
 
Last edited:
That one is in the method "SfxSoundPlayer::PlaySfxSound". You have, in the second half of the method, the following lines:
Code: [Select]
Code:
ldloc.1conv.r4ldloc.0ldfld 0x40038A0 // SoundProfile::Pitchmulstloc.2ldloc.0ldloc.2stfld 0x40038A0 // SoundProfile::Pitch
Remove the last 3 lines (ldloc.0, ldloc.2, stfld).
Surely that, because you don't have high pitch, you will still end up with weird sounds, with each one on top of the others. It's something to try but I'm not sure that the result will be satisfying.
 
It works! Thanks Tirlititi!
Does this tool also fix some of the broken sounds and missing enemy death sounds too?
 
Last edited:
Thanks Tirlititi. I use PSX version of FF9, no way to edit this script for psx? I know that CIL code editing is available only for Steam Version.

Another question, is it possibile to increase enemies speed above 50 (for more competitive fights when 4 vs 1 enemy)? Or bugs may occurr, as you said above regarding Spirit?
 
Ah... Then no it's not possible to do that with the PSX version, sorry :/
More precisely, it is possible because I'm quite sure that this code is in the MIPS assembly code reachable within HW, but it's not in one of the parts that are related to spell effects, so you would need to be an expert in MIPS + spend several hours to search for that code (I guess it's humanly possible by firstly spot the code using NO$PSX and then hex-searching for it, but it's barely possible).

Actually, Tiamat can increase his strength above 99 up to 255 with his strength stealing skill and there's the same skill existing for magic. I guess that only the spirit and speed can cause problems. For speed, a value of 60 is already the fastest possible, instantatly filling the ATB. I'd say that it has no effect to increase it even further.
 
there is a mod that fixed all sound individually; I found it. nvm
 
Last edited:
hello, first of all, thank you for this tools
its great and handy to use. however I got an error when trying to edit commands
for example I want to edit Zidane commands from steal to Seiken
or I just want to edit set spell in the Party > commands > set spell tab so I can use whatever ability I want
but after saving it I got an error (in game) when battles begin like every name in the UI changed to zidane even though in my party there are vivi, dagger etc and even only zidane in the party. Everyone got 9999HP and 999MP, fully ATB but I cant attack at all (I dont edit anything related with HP/MP/ATB)

can anyone help me?
image bellow
v
v

error.png


sorry bad english.
 
Last edited:
So, I finally got around to buying the Steam version as well. First I thought I could just keep using the PSX version as it'll be essentially the same, but it seems that the steam version just offers so many more modding possibilities. My next step now is to import all my changes I already made to the PSX version to the steam version, and here I've got a couple questions:

1) It was said a couple pages back that text cannot be imported from hwf files from the PSX version, but that was with an older version of the tool when steam compatibility first came out. Is this still true, and does this only refer to dialogue (I hope), or does it also include the names and descriptions of items, spells, enemies etc?

2) Also a couple pages back, there was the rumor that the random encounter rate in the steam version is far lower than in the PSX version despite the encounter rates in the various fields being identical. Is this true? And if so, is there a way to remedy that? Because that would leave you seriously underleveled under normal circumstances, so I'd really prefer playing the game with the original encounter rate.

3) And last, about the saving instructions you posted earlier:

Saving Instructions
You have to backup your files yourself. The program asks for the "FF9_Launcher.exe" file when opening the game, and then for a folder where you want to save your modded files. In any case, never choose the folder in which the selected "FF9_Launcher.exe" lies, either create a new folder either save it in a folder containing another "FF9_Launcher.exe".

The files created this way are intended to replace the files in the sub-folders of your "FINAL FANTASY IX" folder.

Here are the 2 safest possible choices :
1) Start by creating a backup of your "FINAL FANTASY IX" folder. When you use HW, only open the backup files and choose the non-backup "FINAL FANTASY IX" folder when you save (it's important that you keep that default name). As that's the game launched by Steam, you'll have your game directly modded.
2) Start by creating a backup of your "FINAL FANTASY IX" folder and use that backup for HW, but create a new folder somewhere else for the saving. To apply the mod, you need to replace manually the files in the "FINAL FANTASY IX" folder by the modded ones.

In any case, a 3rd backup is not a bad idea, unless you don't mind downloading the game again in case of problems.
So do I get this right, whenever I save my changes on an unmodded file, it'll change every file in this entire FFIX folder, and then I have to copy each one of them over the original ones in the different FFIX folder that I will be using to play?

Thanks for your answers, and thanks again for your awesome work so far, tirlititi!
 
Hey Kefka :)

1) The text still can't be imported properly from PSX to Steam, and it concerns all the texts, not only the ones in the "Texts" panel.
If there is one thing that HW does less well for Steam than for PSX, it's editing and managing the texts... I have been working on multi-language support lately but I will need more time to work on the Steam text opcodes (that's what makes it troublesome).
The best solution for now would be to use file batching for dialogs, I guess, but for the rest, you'll have to copy/paste and write the Steam opcodes yourself (you can have 2 windows/panels of HW opened: one of PSX and the other for Steam).

2) Yes, the encounter rate is definitely lower in the Steam version, but the difference is indeed not in the field script. It is unclear to me what makes this difference... I've said what I saw and what I think of it here (comparing the Steam engine's code with the description of SoftReset of the PSX engine's code, it would really look like they are the same):
https://www.gamefaqs.com/boards/197338-final-fantasy-ix/75389893

3) No. What you say is correct except that it only change the few files that need to be changed (that contain the modded data). If you use the 1st choice I describe, you don't have to copy/paste files since they will be replaced directly.

@Rosevalt: I am afraid that you tried to use HW on an already modded game and that what made that bug. You should follow the advices that Kefka just quoted. Also, always think to save your mod as .hws files (Ctrl+S): they are usually the safest way to save the mods that you make, and in a very small format.
 
1) The text still can't be imported properly from PSX to Steam, and it concerns all the texts, not only the ones in the "Texts" panel.
If there is one thing that HW does less well for Steam than for PSX, it's editing and managing the texts... I have been working on multi-language support lately but I will need more time to work on the Steam text opcodes (that's what makes it troublesome).
The best solution for now would be to use file batching for dialogs, I guess, but for the rest, you'll have to copy/paste and write the Steam opcodes yourself (you can have 2 windows/panels of HW opened: one of PSX and the other for Steam).
I see, too bad. I guess I'll just have to redo the changes I made to some enemy, spell and item names by manually going through all of them.

2) Yes, the encounter rate is definitely lower in the Steam version, but the difference is indeed not in the field script. It is unclear to me what makes this difference... I've said what I saw and what I think of it here (comparing the Steam engine's code with the description of SoftReset of the PSX engine's code, it would really look like they are the same):
https://www.gamefaqs.com/boards/197338-final-fantasy-ix/75389893
I've just googled around and it seems no one knows the reason for the indeed much lower encounter rate of the steam version. Damn, that's an even bigger bummer to my plans. So the only option is to manually go through each field and increase the encounter rate to somehow restore the battle frequency of the original PSX game (more or less)? That'll be quite tedious, but I guess there's no way around it if I don't want to remain constantly underleveled.
 
Oh yes, I forgot about the enemies' spells. It's true that they are a pain to rename :/
You can also wait for an update that allows importing PSX text in Steam. That won't be the next one because it'd already be too much, but surely the one after. I plan on working on the texts a lot after the next update:
- conversion between PSX and Steam texts,
- easy way to edit the different languages,
- make the option "Edit similar enemies" apply to the spells as well.
 
Hello Tirlititi,
I used HW on CSharp that already modified because HD Background mod I found on Steam. Maybe is that causing the problem?
Somehow I managed to edit the characters spells from spell tabs to create a completely new one. So i dont have to change every characters command just to use one specific spell I want. Hope you understand what I said. Again thank you so much For this tool.
 
That may be because of that, yes. It is very easy to make your mods compatible with the HD backgrounds though. First of all, the CSharp is the only file causing problems: the p0data1X.bin are not problematic to HW. Then, for creating a mod that is compatible with HD backgrounds, open a non-modded game (or with only the p0data1X.bin swapped), go to the CIL Code -> Macros panel, then "Custom Backgrounds".
Once you're there, change the "Resolution" parameters from 32 (normal backgrounds) to 64 (upscaled backgrounds) and click on "Apply Macro". Now when you'll create the Steam Mod files, the CSharp.dll will also contain what is needed for the HD backgrounds.

Something else to know about HD backgrounds and HW: if you opened a game with the modded p0data1X.bin, containing the upscaled backgrounds, you should better go to "File -> Preferences" and change the Steam's background resolution to 64 as well. It has no effect on the mods you create, but it will display the backgrounds correctly (and HD) when viewing them in the "Fields" panel. In exchange, the loading of this panel is a bit slower, which can be boresome because it's already slow with normal backgrounds.
 
I've just googled around and it seems no one knows the reason for the indeed much lower encounter rate of the steam version. Damn, that's an even bigger bummer to my plans. So the only option is to manually go through each field and increase the encounter rate to somehow restore the battle frequency of the original PSX game (more or less)? That'll be quite tedious, but I guess there's no way around it if I don't want to remain constantly underleveled.
Hi Tirliti, I have the same question of Kefka. Actually the only way to increase random battle encounter is to manually edit all fields with a random battle?

I've seen the code you posted on GameFaqs:

if (sMoveKey && !IsNearlyZero(DistanceFromLastFramePos)) {
. . sEncountTimer += DistanceFromLastFramePos * FieldWorldMapFactor;
. . if (!Cheat.IsNoEncounter && usercontrol != 0 && sEncountTimer > 960) {
. . . . sEncountTimer = 0f;
. . . . sEncountBase += encratio;
. . . . if (random8() < sEncountBase/8) {
. . . . . . sEncountBase = 0;
. . . . . . TriggerRandomBattle();
. . . . }
. . }
}

Could the problem be fixed by editing this code? And if so, how I can do this?
 
Last edited:
That sounds good, I'll wait for an update then before I import texts.

Two more questions for you, Tirlititi:

1) In the thread at gamefaqs, you posted the random encounter formula:

if (sMoveKey && !IsNearlyZero(DistanceFromLastFramePos)) {
. . sEncountTimer += DistanceFromLastFramePos * FieldWorldMapFactor;
. . if (!Cheat.IsNoEncounter && usercontrol != 0 && sEncountTimer > 960) {
. . . . sEncountTimer = 0f;
. . . . sEncountBase += encratio;
. . . . if (random8() < sEncountBase/8) {
. . . . . . sEncountBase = 0;
. . . . . . TriggerRandomBattle();
. . . . }
. . }
}
Since you seem to know where this formula is, is it possible to edit it with the CIL code to increase the encounter rate in general (maybe lower the 960 like you suggested in that thread)? This would be far simpler than going through each field file individually.

2) Is it possible to import save files from the PSX version, or do I have to start over? (Well, I would have started over anyway, but having various saves throughout the game would really help with playtesting certain changes).
 
Alright, found it back.
So it's in the CIL code method "EventEngine::ProcessEncount". That's the "ldc.r4 960.000000" line, as you'd have guessed.
Note that the code that you quoted there is not exactly the code in the engine, but a summary of it (the real code lies in different methods, amid other stuff in the field's and world map's main loop).
But yeah, lowering this number seems the best option to me.

Warning: I just saw that, in the CIL code, there's some "INVALID" lines, meaning that the method uses some assembly code that I didn't register for some reason.
When editing the method, also replace the last 5 lines by these (normally, IL_00A8 should point to the last "ldc.i4.0" and IL_00A9 to "ret"):
Code: [Select]
Code:
ldc.i4.0beq.s IL_00A8ldc.i4.1br.s IL_00A9ldc.i4.0ret
For PSX saves, I think that gjoerulv's Memoria tool can do the conversion.
 
Thanks a ton, I'll definitely try that out! On another topic that ste459 has mentioned a couple posts ago, the Regen status:

@ste459: Controlling the ATB that accurately is not possible with Hades Workshop. It is possible with Albeoris's Memoria but you'd need to recode part of the engine for that.
However it is indeed possible to increase the Regen frequency, with both HW and Memoria. In HW, you go to CIL Code, search for the method "btl_stat -> SetOprStatusCount" and remove that part of the code:
Code: [Select]

ldarg.0
ldfld 0x400022A   // BTL_DATA::elem
ldfld 0x400080F   // ELEMENT::wpr
sub

It's the four lines under a "ldc.i4.s 60". The Regen frequency formula is indeed "Frames to wait = (60 - wpr) << 2", which is, in a more standard writing, "(60 - Spirit) * 4". Removing these four lines will remove the spirit part so you will always regen with the same frequency (the overall duration is something else and will still increase though). You may change the number in "ldc.i4.s 60" to adjust it if you think it's too slow (or too fast).

@Incinerator: I was bugged by the task of giving a precise answer but replying to ste459 gave me one : if you use regen on a character with 60 spirit or more, the formula above goes to negative which can either mean regen will never trigger or it will trigger every single frame (having a quick look at the code, I would incline to the latter).
This find is certainly interesting, but does it apply to Regen only, or to Poison and Toxic statuses as well? Seeing as they work kinda similar...

Further, does the CIL code also allow to increase the duration time of temporary status effects (both good and bad)? This has always bugged me about the vanilla game, that if you play with ATB on active mode most statuses would expire within less than one round of combat. What good does it do to cast Protect or Shell on a character when that doesn't even last until the enemy's very next attack? If we could somehow prolong their duration it would certainly make them more useful and open up new tactical possibilities.

ALso, sorry to bother you with so many questions, it's just that I've just begun exploring the steam version, as it seems to offer way more possibilities overall than the PSX version.
 
Last edited:
No problem. I also had the reaction of "Damn! Steam version will just offer so much more possibilities" :p

So, for Venom and Poison's frequency, it's in the exact same method as Regen's freqency, sooner in the method. The formula is "Frames to wait = wpr << 2" instead (for both). You can add lines like "ldc.i4.s 10 ; mul" or "ldc.i4.s 10 ; add" if you want to play with it.
The formula's lines are these:
Code: [Select]
Code:
ldarg.0  // This is the 1st argument passed to the method, of type BTL_DATA ; it contains a character's (or enemy's) battle infosldfld 0x400022B // BTL_DATA::elem ; contains the statisticsldfld 0x4000811 // ELEMENT::wpr ; spiritldc.i4.2   // Put the number "2" on the stack for later left shiftshl    // LeftShift( spirit, 2 )conv.u2   // Just a conversion to unsigned short integerstloc.1   // Store the result in a variable (used later)
However, for the durations of the statuses, they are in 2 spots and it is not possible to edit either of them :/
- In "btl_stat::AlterStatus", a page before the end, there are 3 similar formulas "Duration = (60 - spirit) << 3" (for bad statuses and jump), "Duration = spirit << 3" for good ones and "Duration = spirit << 2" by default (it doesn't seem to be used). You can't edit this method because it's too big and CIL editing tends to bug with big methods.
- In FF9BattleDB (.ctor), there is the setup of "STAT_DATA", a class for status informations, including a multiplier used after the formulas I gave above. You can't modify the method because it's too big and anyway it is one of the few methods that are specially handled by HW and modified by other means.

Maybe in a next version I'll add these multipliers to things you can edit in "Party - Special".
 
Status
Not open for further replies.
Back
Top