Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Tirlititi

Pages: [1] 2 3 ... 22
I think that the loading of fields is bugged for the PSX version. If I recall correctly, it loads without crashing the fields of the japanese discs but completly scramble the field names.

I have no other solution than to try with older versions of HW and find one before that bug appeared, sorry.

1) You are right, Berserk is permanent, my bad. It's not that it would have had a "special treatment", it's more that there is a duration formula for bad statuses, another one for good statuses and a default formula (that is never used then, if I'm not mistaken).

2) Yes exactly. I thought that this status-specific multiplier was the same for all the statuses, I remembered wrongly.
The order of the statuses in that list is the same as the order in HW when it's displayed in rows of 4 statuses (so starting with Petrify, Venom, Virus, Silence, Darkness...).
The different numbers there are "byte priority, byte opr_cnt, ushort conti_cnt, uint clear, uint invalid" (the class is defined in FF9/STAT_DATA). "opr_cnt" defines the rate of occurence for Regen/Poison/Venom, "clear" is a byte-list of statuses that are removed when the status in inflicted and "invalid" is another byte-list of statuses that can't be inflicted afterward (it is used to prevent a permanent status to be inflicted twice for instance).
"priority" seems unused.

Below that status setup, you can see the definition of "add_status" which corresponds to the Status Sets inside HW.

3) Jump is the second to last status (the 31th) so it's the line "new STAT_DATA(0, 0, 10, 0u, 3221225471u),".
It's integer ID is 2^30 = 1073741824u.

I won't update this tool. What I may do in the future is to include it inside Hades Workshop. It would then have more features indeed. That's not for now though.

@lyokoffx: Are you sure that you downloaded the good DLL? There are several DLLs with nearly the same name.
What's your error?

@resinate: That's because of the PSX space limitations :/
You need to compress the code a bit in order to regain those 32 bytes. Which enemy is your boss based on?
Most of the time, in the ATB function, there are lines like this:
Code: [Select]
set #( SV_Target = ... )You can turn them to this to gain a little space:
Code: [Select]
set SV_Target = ... Other space optimisations depend on the code, that's why I ask what is the base enemy.

1- You can download msvcrt.dll on the internet ; it's a standard .dll. Put it in the directory of "converter.exe".
I don't remember what are Zidane_2's tools for individually.

2- There is no spell template. The spells are stored as raw data that HW can read and export as .hws files. Don't expect to find excel files inside PSX discs, if that is what you are asking.

2 bis- You can use FF9 Reverse made by tasior2 to see most of the 3D models of the PSX version.

Hello everyone. Sorry for answering so late: I am off modding nowadays and had some tough work on top of that.

@eugene9: No, it's not really possible because the bones of each model are not linked the same as the bones of the other models.
With my debugging tests, it was possible to edit the animations using the Unity Assets Viewer (in the "Tools" menu). Modifying the animations may be the only model-editing feature that actually works (it bugs when you export/reimport meshes most of the time). So you should untick the option "Import Meshes/Materials" if you try it.
There are several proprietary tools allowing to make animations more or less easily. I guess that more free tools for that will be available eventually.

@Kefka: I don't know if you did it already, but you can add a "Stona-kill" like this:
Code: [Select]
case 12:
    if (FF9StateSystem.Battle.FF9Battle.add_status[(int)cALC_VAR.cmd.aa.AddNo]==2147483649u && btl_util.CheckEnemyCategory(target, CATEGORY_STONE))
        if (btl_calc.CalcSub_12A(cALC_VAR)) // CheckPetrifyDeathMiss
            UIManager.Battle.SetBattleFollowMessage(25, new object[0]); // "Became too soft to live."
    } else {
        btl_calc.CalcSub_302(cALC_VAR); // DoRemoveSpellStatus
With this, spells that cure exactly the statuses Petrify and Gradual Petrify will also kill stone enemies. Esuna will not.

For the duration of statuses, it's in the method "btl_stat::AlterStatus". Near the end of the method, you have this block:
Code: [Select]
if ((status & 4026466304u) != 0u)
short num6;
if ((status & 2601713664u) != 0u)
num6 = (short)(60 - btl.elem.wpr << 3);
else if ((status & 619446272u) != 0u)
num6 = (short)(btl.elem.wpr << 3);
num6 = (short)(60 - btl.elem.wpr << 2);
btl.stat.cnt.conti[(int)((UIntPtr)(num - 16u))] = (short)(status_data[(int)((UIntPtr)num)].conti_cnt * (ushort)num6);
That's the formulae to change for the duration. The first formula is for negative statuses, the second is for good ones and the last is the default (I think it's used for Berserk only). You can of course split the internal "if" blocks to have a formula specific to each status.

Congrats for modifying the damage formula of these other spells :)

@lyokoffx: I don't know :/
You should have files in those folders. Maybe you are using an ISO that ffix_img_extr.exe doesn't recognize... no idea.
Also, for the sound conversion, I don't know either (but that, I said it the very first time you asked for sounds).

@WhiteMirage: Here is the right way to proceed:
1) Start with a fresh vanilla FFIX.
2) Open the game files with HW.
3) Open the mod file "AlternateFantasy_v4.5.hws". In case you don't have it, it's here (since the last update, it's not packed together with the mod itself anymore).
4) Do all the modifications you want in HW.
5) Save the mod (both as .hws and as Steam files), copy/paste the Steam files in the FFIX folder.
6) Whenever you want to add other modifications, start again from a fresh vanilla FFIX and import your .hws instead. That's why I recommend to copy/paste FFIX's folder when modding, having a vanilla version that you open with HW and a modded version that you play with (and open with the Unity Assets Viewer).

I tried to make things work without bug when you proceed like you did, but apparently I failed to do so.

Also, you may want to have a look to the Readme.txt of the AF mod files because I also (slightly) mod the game with dnSpy.

There is no DB_Extractor anymore: everything is done with ffix_img_extr.

There are 14 directories in the .img file, ffix_img_extr extracted them and, for those of type "DB" (Cluster Datas), also extracted the files that were contained in them. The weapon models and sounds are in the files of the directory 9.
Here is the list of what I know for these directories' purpose:
Code: [Select]
Directory1 : 21 files
Directory2 :
  Generic Cluster Datas (charmaps, backgrounds...)
Directory3 :
  Dialog & Text Cluster Datas
Directory4 :
  World Map Cluster Datas
Directory5 :
  Field Cluster Datas
Directory6 :
  Enemy Cluster Datas
Directory7 :
  Battle Scene Cluster Datas
Directory8 :
  Enemy Model Cluster Datas
Directory9 :
  Weapon Model Cluster Datas
Directory10 :
  Music Cluster Datas
Directory11 :
  Party Battle Model Cluster Datas
Directory12 :
  Audio Cluster Datas
Directory13 :
Directory14 :
  Spell Animation Datas
Directory15 :
  Dummy for directory ending

When you ran ffix_img_extr, you had some messages:
"Standart directory." -> the whole directory was extracted as a single file (it doesn't know how to split it into files),
"Files, many files." -> the directory was a Cluster Data and its files were extracted separatly.

If you don't have everything, try running the tool with administrator rights (it may happen that the tool doesn't have the right to create files at some place and it wouldn't pop any error in that case).

There's no tool to compile the files back into the PSX game, unfortunatly.

@lyokoffx: You can't do more precise outlines with Background extraction because it's only in one piece. In the image you showed, the characters are always in front of everything (be it the floor, the back houses or the sky). The outlines are only done with respect to this issue: what is in front and what is in the back. As a consequence, the objects themselves are not always matching these outlines :/

About the img files extractions: now that you have them, you can use the tools of Zidane_2. Most of them ask for the folder where all these files are placed ("00", "01", etc...).

@Deathcrush: No, there is a variable "General_ScenarioCounter" but it is something different from "GetTime".
"General_ScenarioCounter" is a number that increases at various point of the game when the story progress. Typically, when entering a field for the first time (e.g. "Ice Cavern/Exit"), a cutscene triggers and the counter is increased to say that the cutscene was done and shouldn't trigger the next time entering the field.
"GetTime" really returns the in-game time in seconds.

The second part in the script must be in the function "Code3_Init" if I'm not mistaken.

Ah, I don't know then. Last time I checked, I didn't have problems with scripts (the field names are all messed up however).

Hi Moogie.
No idea why this happens. It must be because the script archive got corrupted somehow...
Get back the original file "p0data7.bin". If you go on your Steam's library, right-click on FF9, then "Properties" and then "Local game files -> Check the integrity of game files", it will fastly download a fresh version of all the files that you modified (including "p0data7.bin") and replace the modded files by these unmodded files. You can then use HW on it.

I don't really know why you would want to set the power value of all the spells to 255 at once. That doesn't seem useful at all.
However, for field scripts, I completely agree with you; I would like to add the batch importation of scripts in the future.

But I'm on a break right now with HW so it's not coming anytime soon, sorry.

@Mr.Nona: Yes, I added the jewels in the "extremely rare" items you can get with Hot & Cold. There are other jewels in the other Chocobo places (I think you can get Diamonds, Emeralds and Moonstones; I don't remember if I also added Rubies in one place). Honestly, this change was not long-considered for balancing or other purpose: I only found it funny to imagine a completionist trying to get 99 of those jewels as ultra rare digs. I must admit that the game is quite sadistic against hard completionists and I didn't do anything to make it better ^^'

@Nikkolas: No, I have only tried once to do Oeilvert with Eiko, Vivi and Dagger in vanilla and it wasn't too hard, just more tedious. You can still do some damage with Zidane and rackets. In the mod, I guess it mainly depends on who can access to Clear Headed at this point (if none of them can, then it must be a terribly hard fight).
Taking only one magician is not a problem though. Speedrunners usually take Eiko with them for Ark and that doesn't disadvantage them so much. Valia Pira can be beaten with any party, as both physical and magical abilities are useful in the Desert Palace.

Also, Oeilvert is the point from which you can get dead peppers. It's a very strong damage dealer when doing a lvl1 run (especially in the mod).

Magic Hammer is somehow random: it removes the enemy's MP by a random amount between 0 and its current MP. When repeated several times, it  completely depletes an enemy's MP pool with a quite robust probabilty and independently of his initial Max MP. For the vast majority of the game's enemies, that's the only way to make enemies run out of MP (Lancer can be used to help at the end, but is not efficient enough by itself), which usually makes the fight much easier (well, for Antlion, only his Fira costs MP for instance) but requires a few turns to setup. Personally, I don't find that it worths it, but it is a legit strategy and only a few enemies have a counter-measure against it.

The principle of Magic Hammer works exactly the same in vanilla, Unleashed or in this mod. One should edit the game's battle engine code to mod that effect (or create another kind of attack removing MP) and I didn't do it.

Enjoy your next playthrough :)

1- Ah, so photoshop does not feature multi-layer tiffs...
You can use Gimp (it's a free image tool) to open the tiff layers and export them in another format, but I don't know which one would be suitable for it.
I don't understand what you want to do with the backgrounds... You can, in the "Manage Background" window, untick all the tilesets except for the main one (usually the last) and export it using the option "Export Selected Only" (the two other options are not important in this situation).

5- In command lines, you need to write the paths inside quotes when there are spaces, so it would be something like this:
Code: [Select]
ffix_img_extr.exe "C:\Users\PC\Desktop\Nouveau dossier\ff9.img" "C:\Users\SonyNintendo\Desktop\Nouveau dossier"If you don't have a ff9.img file but only a .bin, you need to use a tool (like CDmage) to extract the .img out of the .bin (Zidane_2's tools is always using the .img).

1- You know that the backgrounds are made with several layers, right? "Merge tilesets" puts everything in a single layer so it decreases the .tiff file a lot. On the other hand, if you don't merge them, you have all the layers and animation frames available in the image file.
"Exporte selected only" will only export the layers (= tileset) that are ticked in the background preview.
"Sort by depth" changes the layers' order in the exported .tiff. By default, the layers are exported with their internal data order, but it won't always display well (because some layers that should be behind are placed on the front when this option is not used).

2- No, I don't know the format of the PSX sounds and Zidane_2 didn't work on it, for what I know.

3- Yes, that was "Game Alphabet", not "Charmap", sorry ^^'
The "000000..." names are a bug. I would fix it eventually but I am on a break regarding the development of HW.

4- I don't know this PSX development kit. There doesn't seem to be a 3D engine included in this kit (there's a project of a 3D game and the guy developped his own 3D engine). So Steam 3D models are not usable and even using the PSX models would not be usable as it is.
But in general, if you have models in one format, it shouldn't be a big wall to have compatibility or to do format conversion. That really doesn't seem to be the hardest part of the work.

5- Satoh explained it very nicely there (and in the following post) and Lein even showed a picture of a similar situation. You can see that the backgrounds are pictures splitted in several layers, some of them being in front and some in the back.

@Kefka: So, you are definitely doing something wrong (or maybe there was a bug in a previous version of HW and I don't remember fixing it and you are still using that old version of HW).

In your .hws file, there was no script update at all. There was only an unconfigured "Abadon + Amdusias" battle and 4 unconfigured "Hecteyes + Ring Leader" battles. When I say "unconfigured", it means that there was no entry added for the new enemy and no change in the "Main_Init" function. The enemy's stats and attacks were properly copied to the new battle and the group was properly setup. However, there was no proper script for him and it lacked its battle animations for some reason.

So you need:
- To do the steps 6) and 7) described there. Maybe you did on your end but shared an old .hws because none of these steps were put in the file you provided (and it cannot just be a bug with the entry: even your "Main_Init" function was not modified).
- To add the animations required to cast spells. The Ring Leader only uses 3 animations: select him, click on "Edit Resources", then "Add Animation" x3 and change them to "Cast Init", "Cast Loop" and "Cast End". Alternatively, changing the enemy's model ID to something else and switching it back will reset the resources (and thus automatically add these 3 animations).

After this fix, it was all good on my end. However, the other battles were you added more enemies (you have battles with 4 Ring Leaders) are not working correctly because you didn't add any "InitObject" line in those battles' script either.

1- For the PSX version, HW can't show these "avatar" and "dialog box" images indeed. I don't know if I will ever add them. I think that one of Zidane_2's tools can extract all the images of the game though... But they are not easy to use.

2- I didn't understand all of your question, but "File Batching -> Export Field Backgrounds" and "Manage Background -> Export" are nearly the same.
In "Manage Background -> Export", you can preview what you will export and choose if you want to export only the selected layers (if you export all the layers, you will see all the frames of the windmills' wings on top of each others).
In "File Batching -> Export Field Backgrounds", you can export quickly a large number of backgrounds.

Apparently, the latest versions of HW have some problem with the PSX japanese version of the game, because you should have the names of the fields instead of those "0000000000..." things. You should go to "File -> Preferences -> PSX -> Charmap -> Japanese" when using the PSX japanese version of the game in order to display texts properly.

"Opening-for-FMV" is the name of one field (it's an empty field that is the first one to be used when the player hits "New Game" and its main purpose is to launch the opening FMV before switching to the "Prima Vista/Cargo Room").

Yes, I can try to take a look at your .hws file (on this week-end, surely).
Maybe you can write this in your new enemy's "loop" function:
Code: [Select]
SetTextVariable(0, FirstOf(SV_FunctionEnemy[ATB]))
BattleDialog( X )
Wait( 1 )
...where the battle dialog X is a "[NUMB=0]" message. You should at least see if the loop function runs and if the enemy's ATB fills up.

Hum... This entry type turning to 255 is strange.
Your script should be fine. Did you put an "allocate 32" or higher? Since you're using a variable uint8_31, you need to allocate at least 32 bytes to local variables ; anyway even without, it should do something.
Maybe your new enemy has the flag "Link" in the "Group" datas, in which case you should remove it.
Or maybe you forgot to add a "InitObject" in the Main_Init function?

1- Most of the UI sprites are in the archive "Shared -> sharedassets2". You'll find there the avatars ("Face Atlas"), the icons ("Icon Atlas"), the sprites for the dialog boxes ("Gray Atlas" and "Blue Atlas"), etc...
For the PSX version, there are a lot of these sprites (but far from everything) in the two first sections of the "Environment -> Texts" panel.

2- I don't really get what you are talking about. If it's about the fields' backgrounds, they can be previewed in the "Environment -> Fields" panel and exported as images (both individually and altogether using "Manage Backgrounds -> Export" or "File Batching -> Export Field Backgrounds").
It came to my attention that exporting the backgrounds with file batching crashes if you don't untick the field "Opening-for-FMV". You should look for it toward the top of the list (it's the 21st of the list) and untick it when using File Batching.

Backgrounds are a custom format specially for the game. Except for the image compression, it uses the same format in the PSX and Steam versions. They are mostly 2D but there is a notion of depth allowing it to exist in a 3D environment.

@lyokoffx: Yes, HW can extract the sounds and musics (of the Steam version, not PSX) through the Unity Assets Viewer.
The musics are in the archive p0data61 and the other sounds are in the archives p0data62 and p0data63. I indexed the musics so the info box tells you which file corresponds to which music, but I didn't do it for the sounds, except for these battle sounds you're looking for. They are in the archive p0data62 (in the "Infos", you'll find descriptions like "soundeffect Battle Sound Knight Sword Slash" or "soundeffect Battle Sound Charge & Fist"...).

@Kefka: Exactly, dnSpy really deals with the source code of the game and you can change pretty much everything provided you spend enough time for it. For Flare Star's effect to never miss, you should indeed remove the lines related to accuracy, even the "if" block:
Code: [Select]
case 99: // Flare Star
            cALC_VAR.tg_flags |= this.CALC_FLAG_MISS;
            cALC_VAR.tg_hp = (short)(target.level * cmd.aa.Ref.power);
Also, that's an error from my end: it shouldn't display "this.CALC_FLAG_MISS" but "this.CALC_TGFLAG_HP" instead, because that's not the "miss" flag that is turned on but the "deals damage to target" flag. I fixed it.
It's just a number "1" anyway inside the dnSpy code.

PS: Since the last HW update, you can select "Unused XXX" in the list of spell effects. This allows you to code a completely new spell effect (deals damage to the target and heals caster's MP, to give a random example) without replacing any other. You just need to add a "case XXX" to this method in dnSpy.

I didn't remember at all this play with the name! Sorry for making you fail that question because of it...
There are a lot of "c" -> "k" changes in the names, in the french translation and not so many "g" -> "j" changes.

No problem.
And yes, that's me.

@lyokoffx: Ok nice. It's weird that you need administrator rights to allow HW to create a file but okay.

1- The only "missing" models are the spell special effects (they are inside the files "efXXXX" in the resources.assets but in a PSX format that I don't know) and the fact that some models (typically the World Map) are splitted into pieces. For the rest:
- p0data2 contains the weapon models (".../battlemodel/6/") and the battle scenes (".../battlemodel/battlemap_all/"),
- p0data3 contains the World Map terrain (".../worldmap/prefabs/.../block....prefab") and the World Map structures/effects (".../worldmap/effectmodels/" and ".../worldmap/prefabs/effects/"),
- p0data4 contains pretty much all the field models ("assets/resources/models/") and battle models of the enemies and characters (folder "3" of the models); the related animations are in p0data6 (they are automatically used when you extract a model from the p0data5 archive).
There are also some special effects on the field or on the world map (I think they are called "SPS") in p0data1X archives. I'm not sure if they really are 3D models though.

2- For the PSX version, you can extract only the Battle Scenes as wavefront 3D models (.obj) using HW.

3- No. The references to GameObjects and such are because the game was developped using Unity. It's not HW's terminology to begin with.

@DracoMoye: This error log doesn't tell me anything interesting unfortunatly :/
Can you get a bit more precise on what you do before the program crashes? Do you see the preview of your .bmp images in the Background Editor? Is it when you click on "Apply" in the "Converter" panel that it crashes or right after selecting the .bmp file? You should maybe try to convert your .bmp into other image formats (if I recall correctly, PNG, TGA and TIFF should be ok). The .bmp formats are actually very diverse and maybe you're using a version that is not compatible.

@Kefka: No problem. Well done going this far (you did most of the job).
For the errors, they are caused by dnSpy but they are not problematic: you just need to write the type conversion yourself when these errors pop. For instance, if the line "byte x = 5;" gives an error, change it to this:
Code: [Select]
byte x = (byte)5;It's sometimes a bit more complicated, like "byte x = intvalue1 + intvalue2;" in which case you must also add parentheses around what needs to be converted:
Code: [Select]
byte x = (byte)(intvalue1 + intvalue2);What I personally do is that I create a .txt file in my mod's folder named after the class/method I edit and I put the code (and its modifications) in that file. This way, I only have to "Select All + Copy + Paste" when I change it (otherwise, I'd need to write these type conversions everytime because dnSpy doesn't register them after compilation).

For the Darkside and Lancer effects, you need to add the line after the "at_pow" variable is set (it's usually in the "Setup..." call but sometimes it's directly in the "case" code) and before it is used (again, it's usually in the "DoSetDamage..." but sometimes it's directly in the "case" code). So for Lancer and Darskide, you need to add "btl_calc.CalcSub_15E(cALC_VAR);" before that one:
Code: [Select]
if (cALC_VAR.at_pow - cALC_VAR.df_pow > 0)

Try to right-click on HW (the program's .exe) and select "Run as administrator", it should fix the problem.
But then again, "NoName" files are not interesting for 3D models and that's not what you want to export.

You're welcome, Vomitrocious :)

@lyokoffx: So, this error means that the program couldn't save the file on your hard drive. Most probably, it can be because there is already a file "NoName10400" at this place and it is used by another program. It could also be because your OS denies the right to HW to create files there (but that'd be strange because you would have seen it with other files).
However, "NoName10400" is not a 3D model anyway. In order to extract a 3D model, you need to select a named file with the extension ".fbx" and file type "GameObject" (example: "Resources/Assets/1/133/133.fbx"). That's not the most intuitive process, but these are the root files of the 3D models in the archives so that's how it works...

The 3D model importation doesn't work correctly unfortunatly.

@Kefka: That's strange :/
1) If you export those meta-data files again after this manipulation, are the changes still there? If not, you are not importing things correctly (though I don't really see how ; you would see if there was a problem).
2) Maybe you edited the game files of your backup folder? The important folder is the one named "FINAL FANTASY IX" in Steam's folder. I think that it's those files that are used even if you execute the "FF9_Launcher.exe" of a copy placed in a totally unrelated folder.

EDIT: I forgot to answer about the field's "main_reinit" but fortunatly, Incinerator's answer is better than what I could have said (I never tried to add new encounters in fields without them). "XXX_reinit" is indeed a function called after a battle ends.

Pages: [1] 2 3 ... 22