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

  • Thread starter Thread starter Tirlititi
  • Start date Start date
Status
Not open for further replies.
Meh I just want vanilla FFIX
that's why you do it yourself.

•No chat icons
•Increased encounter rate
•Disabled cheats
•Sound frequency fix

•Change font
•Sound fixes to certain sounds
•Disable autosaves
•Resize the battle UI
You don't have to keep repeating this, you've said this numerous times already.  :roll:

I wish I wouldn't have to wait for these replies from your master programmers.
well, learn it sometime. We and everybody else is not on here 24/7 to be your constant beck and call; your slave.
patience is of virtue, and wait for such to be done.
 
Last edited:
Yeah personally I don't really care for changing the music to FF4 music, I saw you had done that in your mod you also had changed the window textures and probably other stuff. I just want to fix what's broken not add a bunch of stuff to the game. I keep repeating the things I want to fix hoping that some might be able to point me in the right direction. The ugly chat icons were removed, the sampling rate of the sounds was improved, the cheats were removed. (except the speed up cheat, would love to know how to get rid of that)

dclem I saw you managed to change the font, how did you do that while keeping the changes you made with hades workshop? You also changed the sounds, I would just be interested in changing some sounds that sound really high pitched.

But none of these changes really matter unless the GAME BREAKING stuff is fixed, the encounter rate is bad. I  remember on the ps1 version of the game you would at some places fight enemies every 5 steps. Some areas you actually wanted to get out of fast, like memoria, the root pathway under the ocean and other such places. That needs to be fixed badly, the autosave feature also need to go, it makes the game too easy. It's like adding an autosave feature to dark souls, if you die at a boss, try again immediately, very game breaking.
 
That's you, you don't want it, it's whateva, no one's forcing you. Stay away from the sound mod.
It's the ones like you that get me wondering why I bother fixing the sounds.
But like I said before, the sound mod was going with what I was doing overall as a whole.

btw, the sound mod doesn't require to replace p0data61.bin which hosts all the bgm tracks.

>>>For just the sounds fix, replace files p0data62.bin + p0data63.bin. Just don't use the original p0data61.bin file with this, it won't make any sense.
 
Last edited:
Yeah your mod is more about enhancing the look and feel of the game, turn it into something new and fresh. My mod as little as I've managed to achieve on it is just going to restore the game to it's original state and then maybe make it a bit more difficult.

In the original game you could without much difficulty just waltz through the game, maybe grind a bit before entering memoria but no super hard bosses really. To add 25% to the difficulty of all bosses would make the game more of a challenge. But the main goal is just to fix the bugs and game breaking stuff, I would really appreciate it if you guys could help me out, for example how did you dclem change the encounter rate AND the font.

•Change font
•Fix encounter rate
•Disable all cheats
•Increase sampling rate of sounds
•Remove chat/card icons
•Disable autosaving
•Resize battle UI
•Sound fixes to high pitched sounds
 
Last edited:
Yeah your mod is more about enhancing the look and feel of the game, turn it into something new and fresh.
is that what he thinks?

okay then.

two more things:
image.png
 
Last edited:
Oh Jesus here we to again...
I'll only ask one thing: why the f u c k does anyone really want a very high encounter rate?
Random encounter are a bad design decision. I hate it how I can't avoid them (in the psx era) unless there's  gf or materia which can prevent it.
 
Fraggoso in case you're not aware of how games are structured, you play through a level, it's often repeating patterns you engage in. Jump on those platforms or shoot those incoming enemies. Is it really fun, not really but you still do it because you're looking forward to the reward. You endure the tedious task of killing enemies because you're looking forward to the reward which can come in the form of story or a new area to explore, a good game should be frustrating.

If you want an interactive comic book, Final Fantasy IX without any battles and just dialouge, well it sort of takes away from the experience of playing the game. If I want great litterature I'll read the divine comedy, Don Quiote or the classics of antiquity. Not Final Fantasy IX. When you first play through the game a big part of the game is finding out what the story is about and what the new areas look like. How fun is it to run through the iced caverns in 2 min because you have no encounters with enemies. It's supposed to be tedious, same with memoria at the end. You have got to be maxed out on potions before going through that area, same with many areas in the game.

A similar thing is auto saving, you might say why would you want to die and then have to go all the way from the save point? That's part of the punishment/reward, you should be careful when running through an area because you don't want to die and have to do it again. If there are auto saves you can die at a boss and who cares because I respawn right at the boss location and can try again. To take this to the extreme degree would be to use a cheat that maxes out the character levels, I don't even know why they included cheats in the game. Clearly they're not very bright those philippino boys. Anyway the story and the locations are more enjoyable if it's a challenge exploring it/them.

To run from the start of the iced caverns to the end of the iced caverns, that should at least be 7 battles not 1 or 0. That way there's a chance that Zidane will be without potions and weakened before the boss battle. A boss battle that would be 25% stronger because of the mod. The game is very easy right now, no battles in evil forest, no battles in ice caverns. The boss I suppose is a bit more difficult but not by much. The worst thing that happens because of the low encounter rate is that before you encounter a boss you have to grind levels. Why would you want to rush through the game, come to a boss. Oops I better spend 30 min running around outside of town to level up.

It's stupid and I would not want my buddy to experience the game this way which is why we need to increase the encounter rate.

•Increase encounter rate
•Remove auto saves
•Remove chat icons (You can talk to every NPC in the game anyway, why would you need a huge ugly icon?)
•Change the font to something more medieval
•Disable ALL cheats
•Fix the sound
•Resize the battle menu, we're not using our fingers on the pc

What we don't need is to play as a silent Beatrix who says nothing in cutscenes, what we don't need is to rename Fira to Yuzaboda and make it put poison on people. What we don't need is to switch out all the music to high quality music but which lacks melody, what we don't need is to replace the font with a futuristic space font and make the window graphic an eye soring red color. Changing the font and window theme could be done but then do it for something that matches the setting, a medieval fantasy setting.

Anyway as usual when chatting with programmers I find myself struggling trying to convey basic points to people who likely are on the autism spectrum. I have had these talks before, the math boys wanting something and the artist and visionaries responsible for creating pleasant imagery wanting something else. I bought this game for 20 dollars TWICE, once for myself and once for my buddy. Now it turns out it's riddled with stuff that breaks the game in various ways and nobody seems to care to fix it. You guys do realize there are hundreds of people like me on the steam forum and other places that want the same thing, we don't care for your "cool" changes to the game that disables random battles and makes it possible to play as Beatrix.

I spent two hours this morning changing all those encounter rate values, maybe we could engage in some cooperation here or you just gonna post memes of black people saying boi bai. Some decency please, thank you..
 
Last edited:
@sutebenukun: Hey, glad to see you enjoy it and want to personalize it :)
Unfortunatly, it is not convenient to modify the spell effects, and you can't go very far. It's in the CIL Code, more precisely the class "btl_calc".
Hades Workshop's CIL Code is quite buggy: it sometimes crashes if the edited methods are too big. It seems that you can't edit the main method related to spell effects ("CalcMain") without crash. You can however edit the sub-methods and put the HP cost in them.

EDIT : Since then, it came to my attention that the tool dnSpy can edit the C# code directly from the DLL. I suggest to use that tool for modding the engine. The following is still useful if you want to make really small changes with HW or just to know where to look at in the C# code.

EDIT 2: Modifying spell effects is now a feature of the Memoria Engine modifier. The best way to proceed is to install Albeoris's Memoria, change the source codes that can be found in "StreamingAssets\Scripts\Sources\Battle" (with a text editor) and then run "StreamingAssets\Scripts\Compiler\Memoria.Compiler.exe", which will generate a "Memoria.Scripts.dll" that will be read by the game. No need of Hades Workshop or dnSpy: only Memoria's user version (though it can be done with the dev version as well) and a text editor.

For instance, the spell effect "Physical Strike" use the sub-method "CalcSub_203", which setups the damage for its target. What you can do is adding a script there that removes HP to the caster only if the caster is Steiner.
The C# script for removing HP to the caster is something like this:
Code: [Select]
Code:
// "flag 1" states that the spell will modify the HP (of "ct" = caster, here). Setting both flags 1 and 2 can be used for healingv.ct_flags |= 1;// The damage is based on caster's max hp. The operation ">> 3" is equivalent to "/ 8"v.ct_hp = (short)(v.caster.max.hp >> 3);
But you can't write C# scripts with HW (that's where the Memoria tool is more convenient), so you need to use a CIL code counterpart:
Code: [Select]
Code:
ldarg.0dupldfld 0x40007F6 // CALC_VAR::ct_flagsldc.i4.1orconv.u1stfld 0x40007F6 // CALC_VAR::ct_flagsldarg.0ldarg.0ldfld 0x40007EC // CALC_VAR::casterldfld 0x4000229 // BTL_DATA::maxldfld 0x4000809 // POINTS::hpldc.i4.3shrconv.i2stfld 0x40007F8 // CALC_VAR::ct_hp
"ldarg.0" is the object of type CALC_VAR that contains all the information about the damage calculation. It was called "v" in the C# above.

Now, if I am telling you about C# code, it's because it is much more easy to read (even though it's still a programing language), and you can see here the whole class of "btl_calc" in C#:
https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0
I added a few comments and renamed the methods "CalcSub" with less opaque names there.

The CIL script above can be used to remove HP to the caster in one of those "CalcSub" method. Verify that the hexadecimal IDs are the same with your game, which should be the case if it's up-to-date. For instance, the non-edited method "CalcSub_203" should start like this:
Code: [Select]
Code:
ldarg.0ldfld 0x40007F0 // CALC_VAR::at_powldarg.0ldfld 0x40007F1 // CALC_VAR::df_pow
If the 0x..... numbers are different, you need to update your game beforehand (in Steam, "FF9 -> properties -> Verify the integrity of local game file").

Now, we need to add the information that only Steiner's attack should remove HP to him (he's not the only one to cast spells using that "CalcSub_203" method). You can do it like that:
Code: [Select]
Code:
if (v.caster.bi.slot_no == 3) {    // Do you stuff}
In CIL:
Code: [Select]
Code:
IL_POS0: ldarg.0IL_POS1: ldfld 0x40007EC // CALC_VAR::casterIL_POS2: ldfld 0x400022D // BTL_DATA::biIL_POS3: ldfld 0x4000272 // BTL_INFO::slot_noIL_POS4: ldc.i4.3IL_POS5: bne.un IL_POSEND// Do your stuffIL_POSEND: // After the "if" block
If we put that together at the start of the method "CalcSub_203", we end up with a method like this:
Code: [Select]
Code:
ldarg.0ldfld 0x40007EC // CALC_VAR::casterldfld 0x400022D // BTL_DATA::bildfld 0x4000272 // BTL_INFO::slot_noldc.i4.3bne.un IL_003Eldarg.0dupldfld 0x40007F6 // CALC_VAR::ct_flagsldc.i4.1orconv.u1stfld 0x40007F6 // CALC_VAR::ct_flagsldarg.0ldarg.0ldfld 0x40007EC // CALC_VAR::casterldfld 0x4000229 // BTL_DATA::maxldfld 0x4000809 // POINTS::hpldc.i4.3shrconv.i2stfld 0x40007F8 // CALC_VAR::ct_hpldarg.0ldfld 0x40007F0 // CALC_VAR::at_powldarg.0ldfld 0x40007F1 // CALC_VAR::df_powsubdupstloc.1ldc.i4.0bgt IL_0055ldc.i4.1stloc.1ldarg.0dupldfld 0x40007F7 // CALC_VAR::tg_flagsldc.i4.1orconv.u1stfld 0x40007F7 // CALC_VAR::tg_flagsldarg.0ldfld 0x40007F3 // CALC_VAR::at_numldc.i4.1bge IL_0077ldarg.0ldc.i4.1stfld 0x40007F3 // CALC_VAR::at_numldloc.1ldarg.0ldfld 0x40007F3 // CALC_VAR::at_nummulstloc.0ldarg.0ldfld 0x40007EE // CALC_VAR::cmdldfld 0x400028B // CMD_DATA::infoldfld 0x4000293 // SELECT_INFO::short_summonbrfalse IL_009Bldloc.0ldc.i4.2mulldc.i4.3divstloc.0ldloc.0ldc.i4 9999ble IL_00ACldc.i4 9999stloc.0ldarg.0ldfld 0x40007F5 // CALC_VAR::flagsldc.i4.8andbrfalse IL_00C8ldarg.0dupldfld 0x40007F7 // CALC_VAR::tg_flagsldc.i4.2orconv.u1stfld 0x40007F7 // CALC_VAR::tg_flagsldarg.0ldloc.0conv.i2stfld 0x40007F9 // CALC_VAR::tg_hpret
(If you copy-paste it, verify that the "IL_POS" numbers are correct: the program tends to update them automatically and not always the right way.)
I tested and it worked wonder for me.

Now you need to do the same thing for other "CalcSub" methods so that it doesn't apply only to damaging spells.
Modifying the engine is the most tedious feature of HW, sorry. I hope it helped you though ^^"


@dclem and Lein: Maybe you can just stop arguing? You both said that you were over with the other and kept posting just to have the final word... that's ridiculous.
Lein, as it was already said, you can't expect everyone to have the same priorities as you. Besides, modding is something that requires time.
I told you that increasing the encounter rate back to normal means understanding what was changed in the Steam version. Those figures that you increased in the fields' scripts are exactly the same between Steam and PSX: if you want to have an encounter rate consistent and balanced as in PSX, that's not what needs to be fixed. If you want a quick and dirty fix, then you're done.
And yes, keeping repeating a few bullets is not going to make those go faster.

No comment about the trendy "autist" insult... That is a very dumb one.
 
Last edited:
Lein, as it was already said, you can't expect everyone to have the same priorities as you. Besides, modding is something that requires time.
I told you that increasing the encounter rate back to normal means understanding what was changed in the Steam version. Those figures that you increased in the fields' scripts are exactly the same between Steam and PSX: if you want to have an encounter rate consistent and balanced as in PSX, that's not what needs to be fixed. If you want a quick and dirty fix, then you're done.
And yes, keeping repeating a few bullets is not going to make those go faster.
thank you.  :)

No comment about the trendy "autist" insult... That is a very dumb one.
+1
 
Last edited:
Good that you put dclem back in line, as for the mods. Yeah I checked that too, the values are the same between pc/ps1, so there's something else that lowers the encounter rate. As nice as it is to have the game on steam the original game isn't broken. Up until there are mods that fix this port I'll use the original game through an emulator and I'll recommend my buddy to do the same.
 
Enough, you guys. Warnings issues. Drama deleted. Now stop it. ~Covarr
 
Hey guys!

i am trying add a extra atack in to a loop :
Code: [Select]
Code:
            set #( SV_Target = SV_FunctionEnemy ) // i set the target            AttackSpecial( 3 ) // atack            while ( IsAttacking != 0 ) {                Wait( 1 )            }            RunBattleCode( 35, 0 ) // continue battle            while ( GetBattleState != 4 ) {                Wait( 1 )            }
But fail
 
@sutebenukun: Hey, glad to see you enjoy it and want to personalize it :)
Unfortunatly, it is not convenient to modify the spell effects, and you can't go very far. It's in the CIL Code, more precisely the class "btl_calc".
Hades Workshop's CIL Code is quite buggy: it sometimes crashes if the edited methods are too big. It seems that you can't edit the main method related to spell effects ("CalcMain") without crash. You can however edit the sub-methods and put the HP cost in them.

For instance, the spell effect "Physical Strike" use the sub-method "CalcSub_203", which setups the damage for its target. What you can do is adding a script there that removes HP to the caster only if the caster is Steiner.
The C# script for removing HP to the caster is something like this:
Code: [Select]
Code:
// "flag 1" states that the spell will modify the HP (of "ct" = caster, here). Setting both flags 1 and 2 can be used for healingv.ct_flags |= 1;// The damage is based on caster's max hp. The operation ">> 3" is equivalent to "/ 8"v.ct_hp = (short)(v.caster.max.hp >> 3);
But you can't write C# scripts with HW (that's where the Memoria tool is more convenient), so you need to use a CIL code counterpart:
Code: [Select]
Code:
ldarg.0dupldfld 0x40007F6 // CALC_VAR::ct_flagsldc.i4.1orconv.u1stfld 0x40007F6 // CALC_VAR::ct_flagsldarg.0ldarg.0ldfld 0x40007EC // CALC_VAR::casterldfld 0x4000229 // BTL_DATA::maxldfld 0x4000809 // POINTS::hpldc.i4.3shrconv.i2stfld 0x40007F8 // CALC_VAR::ct_hp
"ldarg.0" is the object of type CALC_VAR that contains all the information about the damage calculation. It was called "v" in the C# above.

Now, if I am telling you about C# code, it's because it is much more easy to read (even though it's still a programing language), and you can see here the whole class of "btl_calc" in C#:
https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0
I added a few comments and renamed the methods "CalcSub" with less opaque names there.

The CIL script above can be used to remove HP to the caster in one of those "CalcSub" method. Verify that the hexadecimal IDs are the same with your game, which should be the case if it's up-to-date. For instance, the non-edited method "CalcSub_203" should start like this:
Code: [Select]
Code:
ldarg.0ldfld 0x40007F0 // CALC_VAR::at_powldarg.0ldfld 0x40007F1 // CALC_VAR::df_pow
If the 0x..... numbers are different, you need to update your game beforehand (in Steam, "FF9 -> properties -> Verify the integrity of local game file").

Now, we need to add the information that only Steiner's attack should remove HP to him (he's not the only one to cast spells using that "CalcSub_203" method). You can do it like that:
Code: [Select]
Code:
if (v.caster.bi.slot_no == 3) {    // Do you stuff}
In CIL:
Code: [Select]
Code:
IL_POS0: ldarg.0IL_POS1: ldfld 0x40007EC // CALC_VAR::casterIL_POS2: ldfld 0x400022D // BTL_DATA::biIL_POS3: ldfld 0x4000272 // BTL_INFO::slot_noIL_POS4: ldc.i4.3IL_POS5: bne.un IL_POSEND// Do your stuffIL_POSEND: // After the "if" block
If we put that together at the start of the method "CalcSub_203", we end up with a method like this:
Code: [Select]
Code:
ldarg.0ldfld 0x40007EC // CALC_VAR::casterldfld 0x400022D // BTL_DATA::bildfld 0x4000272 // BTL_INFO::slot_noldc.i4.3bne.un IL_003Eldarg.0dupldfld 0x40007F6 // CALC_VAR::ct_flagsldc.i4.1orconv.u1stfld 0x40007F6 // CALC_VAR::ct_flagsldarg.0ldarg.0ldfld 0x40007EC // CALC_VAR::casterldfld 0x4000229 // BTL_DATA::maxldfld 0x4000809 // POINTS::hpldc.i4.3shrconv.i2stfld 0x40007F8 // CALC_VAR::ct_hpldarg.0ldfld 0x40007F0 // CALC_VAR::at_powldarg.0ldfld 0x40007F1 // CALC_VAR::df_powsubdupstloc.1ldc.i4.0bgt IL_0055ldc.i4.1stloc.1ldarg.0dupldfld 0x40007F7 // CALC_VAR::tg_flagsldc.i4.1orconv.u1stfld 0x40007F7 // CALC_VAR::tg_flagsldarg.0ldfld 0x40007F3 // CALC_VAR::at_numldc.i4.1bge IL_0077ldarg.0ldc.i4.1stfld 0x40007F3 // CALC_VAR::at_numldloc.1ldarg.0ldfld 0x40007F3 // CALC_VAR::at_nummulstloc.0ldarg.0ldfld 0x40007EE // CALC_VAR::cmdldfld 0x400028B // CMD_DATA::infoldfld 0x4000293 // SELECT_INFO::short_summonbrfalse IL_009Bldloc.0ldc.i4.2mulldc.i4.3divstloc.0ldloc.0ldc.i4 9999ble IL_00ACldc.i4 9999stloc.0ldarg.0ldfld 0x40007F5 // CALC_VAR::flagsldc.i4.8andbrfalse IL_00C8ldarg.0dupldfld 0x40007F7 // CALC_VAR::tg_flagsldc.i4.2orconv.u1stfld 0x40007F7 // CALC_VAR::tg_flagsldarg.0ldloc.0conv.i2stfld 0x40007F9 // CALC_VAR::tg_hpret
(If you copy-paste it, verify that the "IL_POS" numbers are correct: the program tends to update them automatically and not always the right way.)
I tested and it worked wonder for me.

Now you need to do the same thing for other "CalcSub" methods so that it doesn't apply only to damaging spells.
Modifying the engine is the most tedious feature of HW, sorry. I hope it helped you though ^^"


@dclem and Lein: Maybe you can just stop arguing? You both said that you were over with the other and kept posting just to have the final word... that's ridiculous.
Lein, as it was already said, you can't expect everyone to have the same priorities as you. Besides, modding is something that requires time.
I told you that increasing the encounter rate back to normal means understanding what was changed in the Steam version. Those figures that you increased in the fields' scripts are exactly the same between Steam and PSX: if you want to have an encounter rate consistent and balanced as in PSX, that's not what needs to be fixed. If you want a quick and dirty fix, then you're done.
And yes, keeping repeating a few bullets is not going to make those go faster.

No comment about the trendy "autist" insult... That is a very dumb one.

Thank you so much! I do however have a few questions if you don't mind, it's been awhile since I've had to do anything with code and even then it was just hex editing FF6.

What program would I need to access the btl_calc or to get to the CIL Code? I'm as beginner as it can get so please bear with me.
The other things I sort of understand since it was similar to what I have done years and years ago, but I'm sure I'll get it back once I'm able to locate the file that I need and have the program that I'll need to modify the btl_calc.
 
In the hunter chance, i am trying combat with sargar, i up HP of sagnar and i hope can display a battle dialog with the hp its low, i have this code in sargar loop:
Function Sagnar_Loop
    if ( !VAR_LocUInt8_30 ) {
        set VAR_LocUInt8_30 = 1
        while ( !( GetBattleLoadState & 8 ) ) {
            Wait( 1 )
            set VAR_GenUInt8_206 = GetRandom
        }
        set VAR_LocUInt16_33 = FirstOf(SV_FunctionEnemy[HP])
        set SV_FunctionEnemy[MODEL_SIZE] =$ 6144
        while ( !( GetBattleLoadState & 16 ) ) {
            Wait( 1 )
            set VAR_GenUInt8_206 = GetRandom
        }
        set #( VAR_GlobUInt16_24 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 0 ) )
        set #( VAR_GlobUInt16_24 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 1 ) )
        set #( VAR_GlobUInt16_26 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 2 ) )
        set #( VAR_GlobUInt16_28 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 3 ) )
        set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 4 ) )
        set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 5 ) )
        set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 6 ) )
        set #( VAR_GlobUInt16_30 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 7 ) )
        set #( VAR_GlobUInt16_30 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 8 ) )
        set #( VAR_GlobUInt16_32 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 9 ) )
        set #( VAR_GlobUInt16_34 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 10 ) )
        set #( VAR_GlobUInt16_34 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 11 ) )
        set #( VAR_GlobUInt16_36 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 12 ) )
        set #( VAR_GlobUInt16_38 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 13 ) )
        set #( VAR_GlobUInt16_40 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 15 ) )
        set #( VAR_GlobUInt16_42 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 16 ) )
        set #( VAR_GlobUInt16_42 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 17 ) )
        set #( VAR_GlobUInt16_44 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 18 ) )
        while ( GetBattleState != 4 ) {
            Wait( 1 )
        }
    }
    if ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & VAR_GlobUInt16_24 ) ) {
        set VARL_GenBool_2655 = 0
    } else {
        set VARL_GenBool_2655 = 1
    }
    if ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & VAR_GlobUInt16_36 ) ) {
        set VARL_GenBool_2648 = 0
    } else {
        set VARL_GenBool_2648 = 1
    }
  if ( #( SV_FunctionEnemy[HP] <=$ 10650 ) ) {
        BattleDialog( 6 )
    }

    if ( #( SV_FunctionEnemy[HP] <=$ 10000 ) ) {
        set SV_FunctionEnemy[HP] =$ 0
        return
    }
    Wait( 1 )
    loop
its Ok, when i play and the saganar life if 650 or less, display dialog ok, but freija atack dont have more efects, whats i make wrong?
 
Last edited:
@sutebenukun: You access to the CIL Code using Hades Workshop, there's a panel "CIL Code", the list of classes (including "btl_calc") is on the left and the classes' methods ("CalcMain", "CalcSub_203", etc...) appear next to it once you selected a class.

You may also see the C# and CIL code using programs like JetBrains dotPeck, but it can only display it, not modify it. I don't know any free tool that allows to inject CIL code in a dll.

@elberuss: Zaghnol has a protection against Freya. If she's about to land a killing blow, Zaghnol is regenerated and doesn't die (while it's not the case for Zidane). There is a limit to that protection ; I think he can regenerate up to 5 times IIRC before Freya gets indeed able to kill him. So you'd have to attack him repeatedly with her without attacking him with Zidane for Freya to deal the killing blow.
 
@sutebenukun: You access to the CIL Code using Hades Workshop, there's a panel "CIL Code", the list of classes (including "btl_calc") is on the left and the classes' methods ("CalcMain", "CalcSub_203", etc...) appear next to it once you selected a class.

You may also see the C# and CIL code using programs like JetBrains dotPeck, but it can only display it, not modify it. I don't know any free tool that allows to inject CIL code in a dll.
Alrighty, I looked in the actual program but the only option I see is MIPS Code. And while it'll let me edit it for the PSX version, it brings up a window saying it has been disabled for the Steam version, which is the version I'm attempting to modify. Am I doing something wrong?
 
Oh?
Either it's a bug, either you don't have the latest version of the tool. I hope it's the latter ^^

You can see the version in the "About" window (F1). If it's not v0.37c, get the newest version in the opening post of the thread.
If it is v0.37c, then I guess it's a bug. Maybe try to open only the Steam version? (You have to select the FF9_Launcher.exe.)
 
Oh?
Either it's a bug, either you don't have the latest version of the tool. I hope it's the latter ^^

You can see the version in the "About" window (F1). If it's not v0.37c, get the newest version in the opening post of the thread.
If it is v0.37c, then I guess it's a bug. Maybe try to open only the Steam version? (You have to select the FF9_Launcher.exe.)
My apologies, I had the 0.34 version so I just downloaded the latest and the tab is available and working! I hate to be a hassle but I was fiddling around with the Stats category and was wondering how I might give Beatrix the ability to go into Trance. I created a specific skillset for her and connected it to her Seiken command a la Zidane's link with his Skills, but was wondering if that was enough to give her a Trance or if there was something more I would have to do.
 
Hum...
I couldn't successfully add a trance to Beatrix ; you need at least two things for that:
1) Making this character a permanent party member, that is removing the flag "temporary character" in the "SetCharacterData" call (in fields scripts),
2) Add a trance model to the list of character models, in the CIL "btl_init::..ctor" method.

With that, however, the trance gauge appears and fills correctly, but the game freezes once it's fully filled. So there has to be something else that I didn't spot :/
Also, the "temporary character" flag determines whether the game will use the temporary character or the permanent counterpart (Marcus/Eiko for instance). So for adding trance to Marcus, Blank or Cina, it would also require something else (maybe changing the condition (1) for the trance bar to appear).
 
Hum...
I couldn't successfully add a trance to Beatrix ; you need at least two things for that:
1) Making this character a permanent party member, that is removing the flag "temporary character" in the "SetCharacterData" call (in fields scripts),
2) Add a trance model to the list of character models, in the CIL "btl_init::..ctor" method.

With that, however, the trance gauge appears and fills correctly, but the game freezes once it's fully filled. So there has to be something else that I didn't spot :/
Also, the "temporary character" flag determines whether the game will use the temporary character or the permanent counterpart (Marcus/Eiko for instance). So for adding trance to Marcus, Blank or Cina, it would also require something else (maybe changing the condition (1) for the trance bar to appear).
Interesting. I was wondering about adding trance to "guest" characters. I bet there's an animation call that it's missing when you activate trance and that's why it freezes, just a hunch. I haven't looked at this games data too hard yet.

 Would it be possible to switch the character the temporary characters are tied to? I like Eiko, but I also want to use Marcus. Can I place him over someone else instead? Better yet, can we add character slots? I know Beatrix is a special case and seems to actually have her own slot, so I'm sure it would be complicated.

Has anyone tried to swap assets such as Zidane with his Pluto Knight gear, or Garnet with her dress or whitemage hood?

Lastly, is there something I can use to preview .fbx models?
 
Last edited:
Status
Not open for further replies.
Back
Top