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 ... 21
Yes, it's still broken. I don't know what program you use for creating your FBX files, but you *should* be able to import accessory models.
The character models are a mess... I don't know what fails and why and I gave it up, at least temporarily.
Also, I didn't test replacing only the animations in the latest version, but it was working pretty nicely last time... so you may also do that if I'm not mistaken.

I've not checked, it's strange to me... Who is in the party when you open the menu?
Anyway, there can be 2 reasons for that:
- It was already there in the PSX version,
- There is a special check in the engine's source code that prevents the effect of "DisableMenu" in that field at that point, which is likely to be a mistake.

I am very confident that the Field Scripts themselves are exactly the same in the PSX and Steam versions, and that's the thing usually dealing with menu enabling/disabling (unless the engine oversteps it).

Steam version: you must load the FF9_Launcher.exe file.
PSX version: you must rip your CD to an ISO file (there are tools for that on the internet). The output must be a .bin file, not .img.

Did you set the Ability learning correctly? The first ability must have a non-zero AP requirement (if I remember correctly, that's the only thing to set up).
The method enabling it is "ff9abil::FF9Abil_HasAp". You can check that method to know why it doesn't apply for him.

If you modified your CSharp with dnSpy and it's now not working, it can be pretty much anything...
We can't help you if you don't post the code that is bugged.

Hello Mezzey.
I'm sorry, I didn't see your message... There's an anti-spam system that requires newcomers' posts to be validated and maybe that's why I wasn't notified. Or maybe I'm just dumb.
So, I don't know if you got the answer by yourself, but you waited too long to be able to add her. At this point, Beatrix is on the Red Rose and can't join you anymore.


I Updated the mod to v4.5 International:
- Made the mod compatible with all the available languages,
- Enabled the Japanese language: you can select it from the main menu,
- Fixed a few bugs,
- Allowed two steps for the "Fast Forward" booster: it goes x3 or x5 (without any mod, the speed factor is x5).

I would like to thank a lot the people who helped me for correcting the translations:

Thanks to them, you will hopefully be able to enjoy the mod in language of your choice without "out of place" dialogs or constant reminders that the modder screw up his translation there and there.
Unfortunatly, I've got no feedback for the Japanese translation so you will most probably see these mistakes in Japanese. You can still enjoy the original version of the game for everything that is not coming from the mod.

I've decided to put the source files of the mod in a separate link because it's not only a .hws file anymore and it may be more and more files in the future.

I'm not sure about the music format, but OGG seemed to be a quite popular format to me.
Audacity says that it can import and export files in the OGG format.

Don't forget that the file extension is only informative. In FF9 assets, they really didn't care about using correct file formats specifications, so it's not because the files have an extension ".mesh", ".txt" or ".png" that they really are Mesh, text or PNG files (for the later, the tool explicitely converts the assets to PNG but that's not what they are inside the archive).
Rename the sound files to ".ogg" if Audacity doesn't recognize them automatically.

FF9 Tools / Re: [PSX] Battle scenes exporter (2011-10-20)
« on: 2018-07-04 09:07:57 »
I re-upload all of Zidane_2's tools of Final Fantasy IX (well, those that I obtained at the time at least). You can get them here:
Zidane_2 Tools

There are duplicates in the root folder (but I think that there is more in the root folder than in the sub-folders). You will get among them a tool for viewing the Battle Scenes, the World Map, the Field walkmeshes and backgrounds, Model animation (of the bones, in Blitz3D format if I understand correctly)... For most of them, you'll need to extract the data from the disc .img using the tool "ffix_img_extr":
1) Use an ISO tool (like CDMage) to extract the .img from the binary ISO file of the game,
2) Use "ffix_img_extr" (it's a command-line tool) to extract the files that will be used by the other tools.

You may want to recompile the programs (the source code is included) ; some of them ("ffix_img_extr" in particular) didn't work anymore on my Windows 7.

Only works on the PSX version.

That's really a shame :/
I used the online version a lot and never bothered to download the offline version... I hope that tasior2 will see this eventually.

I have (most of) the tools from Zidane_2 though. I'll upload them in their topics.

Hi Sagefigaro,
I've never experienced these bugs and never saw them when other people used that tool (there has been a few randomizer speedruns). There's a guy who experiences soft-locks during some black screen transitions between fields, but I've always assumed that it was a bug from the emulator because this tool really doesn't modify the fields at all.

By any chance, maybe you are not using the US version of the game? That's the best explanation I've got for your bugs. The tool only checks for the file size but maybe it could misread another version and confuse it with the US version if they have the same file size (which would explain those bugs). Or maybe you applied another hack before? Though I don't know any hack for the PSX version that would shift the datas like this...

I am not really planning to work on that tool anymore. At some point, I would like to include it inside my other tool, Hades Workshop, to make it compatible with the Steam version of the game other among things. I didn't understand your suggestion to "randomize characters"? You mean replace every characters and non-playable characters with another one on the fields? That would be insane ^^'
But no, it would be way too much work (as you say, there's the problem with animations that has no convenient solution) only for cosmetic changes (even if I don't underestimate their importance, it's not the kind of things you'd randomize IMO).

You're welcome :)

@CrazynNova: This message should appear only if you are using the PSX (emulated) version of the game. In this case, the file should open after you skip the message without problem.
If you are using the Steam version of the game, you are not trying to open the good file: you have to go to "File -> Open" and select the file "FF9_Launcher.exe" which is in your Steam game's folder (usually, its path is something like "C:/Program Files/Steam/steamapps/common/FINAL FANTASY IX").

In any case, the field scenes are in the panel "Environment -> Fields". You can export them individually in the "Manage Background" window or in the menu "Batching -> Export Field Backgrounds". You can import them back (in the Steam version only) using the tool "Background Editor" even though it doesn't accept any kind of changes (pixels that are out of the original layer's place are ignored).

Fortunatly, the page changed because I wouldn't have seen your message otherwise ^^'

Update to v0.40b.
- Fixed a couple of bugs:
-- Multi-lang links were not saved properly (when the ID of a dialog line in one language is not the same as the one in another language that is linked to the 1st),
-- Fixed a apparently rare bug with .hws files that could occur when editing some script functions (when a .hws file is affected, it crashes on import).
-- Script batching sometimes exported more languages than what was asked in the Preferences,
- Added a couple of datas:
-- For enemies, there is a flag that enables the use of a "Death" function in the AI. When this flag is disabled, that function is ignored. It was not possible to change this flag previously.
-- For spells, items and enemies, added a few "dummied" datas, that are not used at all by the game but that can get some use if you mod the engine (for instance, to increase the experience given by an enemy or, a bit more difficult, increase an enemy's max HP).

How do you mod it? Is it HW that gives you a bugged CSharp? If so, did you mod the CSharp beforehand with dnSpy?

@ToraCarol: I'm still not doing anything with the UI but I'll come to it soon. I also want to give the possibility to get something similar to the PSX UI.

@Brucy: Ok, so the most simple is to use the "trance" effect like you do but tweak it a little to make it un-trance if the trance is already on.
In any case, using dnSpy is the best way to edit "CIL Code". Also, since you need to change the method "btl_calc::CalcMain", it is impossible to do with HW anyway.
1) Install and open dnSpy,
2) Close the mscorlib, System and System.Core to avoid the same problem as ToraCarol,
3) Open FF9's "Assembly-CSharp.dll" with dnSpy: you can now browse in the source code of the game and search for a specific class,
4) Search for the class "btl_cmd" (it is in the root folder, marked by {} - ),
5) Scroll down to the method "FinishCommand", right-click on it and "Edit the C# method",
6) Replace the line "if (FF9StateSystem.Settings.IsTranceFull)" by "if (true)" and compile: with this, the trance will not decrease,
7) Now search for the class "btl_calc" and its method "CalcMain" and "Edit the C# method" as before,
8‌) You should see a lot of "case" lines, scroll down to the "case 96" ; it should look like this by default:
Code: [Select]
case 96:
target.trance = byte.MaxValue;
btl_stat.AlterStatus(target, 16384u);
9) Replace that case by this:
Code: [Select]
case 96:
if (Status.checkCurStat(target, 16384u)) {
target.trance = 0;
btl_stat.RemoveStatus(target, 16384u);
} else {
target.trance = byte.MaxValue;
btl_stat.AlterStatus(target, 16384u);
11) Compile. Apparently, dnSpy whines about implicit type-casting... So it will be a bit tedious, but for all the errors you get (double-click to go to the related line), add a type cast like this for example:
Code: [Select]
Default: target.elem.str = target.elem.str * 3 / 4;
Replace with: target.elem.str = (byte)(target.elem.str * 3 / 4);
I've put "byte" in the parenthesis for this one because the error says "Cannot convert to 'byte'". You need to write "short" instead when the error is about converting to short. After each line replaced, you can press "Compile" to verify that the error line disappears.
12) "File -> Save the module" and you're done!

This is not what I would call easy, but that's how it has to be done ^^'
Good luck.

So, yes, it is about CIL code, but editing the CIL code through HW is very tedious and limited.
It's better to edit the C# code using the tool dnSpy.

In any case, the trance gauge goes down in the method "btl_cmd::FinishCommand" (the class is "btl_cmd" and the method is "FinishCommand").
You have this block in this method:
Code: [Select]
if (Status.checkCurStat(regist, 16384u) && cur_cmd.cmd_no != 3 && cur_cmd.cmd_no != 12) // The status "16384" is trance ; The commands 3 and 12 are "Jump"
byte b = (byte)((300 - (int)regist.level) / (int)regist.elem.wpr * 10); // That's the amount by which the trance is depleted
if (cur_cmd.cmd_no == 21 || cur_cmd.cmd_no == 23)
b /= 2; // For Double-Casts, it's halfed
if (FF9StateSystem.Settings.IsTranceFull)
b = 0; // Cheat mode
if (regist.trance > b)
BTL_DATA expr_1B0 = regist;
expr_1B0.trance -= b;
else if (!FF9StateSystem.Battle.isDebug)
btl_stat.RemoveStatus(regist, 16384u);
if (cur_cmd.cmd_no == 18 && btlsys.phantom_no != 0) // This registers the command for Dagger's Eidolon: it will recast the spell afterwards
btlsys.cmd_status |= 4;
btlsys.phantom_cnt = btl_cmd.setPhantomCount(regist);
I didn't really understand what you wanted to do, but there's a high probability that it's there.

With this code, you should be able to choose the party members yourself. You mean that she's still available in the menu while she shouldn't?
In that case, it's most likely because she's already in the party at that point and you need to remove her before the "Party" call:
Code: [Select]
if (IsInParty(6)) {

Troubleshooting / Re: Double-checking translations
« on: 2018-06-23 09:42:09 »
Thank you very much, that's exactly what I wished for!
I see that a couple of my mistakes were caused by a confusion with italian. That's logical considering that I often based the spanish translation on the italian translation ^^'

Also, I didn't imagine that I forgot so frequently the spanish inverted ponctuation marks. Sorry about all of these.

When I'll credit you for this help, should I use your pseudonym "link2015z" or a different one?

Thanks again!

Troubleshooting / Double-checking translations
« on: 2018-06-22 09:26:15 »
I would like to make an international version of my FF9 mod.

For now, the mod only works with the English version but I have translated the content added by the mod in the other languages supported by the game:
Japanese, German, French, Italian and Spanish.

However, because I have little to no knowledge in these languages (except for french) and mostly did that with auto-translating, I'm afraid that there are errors and nonsensical sentences in these translations. I am especially afraid with the japanese translations: I've learned a few tips regarding how to handle auto-translations but there still may be a lot of problems with the way the sentences are made.

So, if you speak any of these languages, could you be kind enough to check whether there are issues with these translation? You'd get my eternal gratitude :D

You can see the translations here in a (hopefully) convenient way:
Alternate Fantasy Translation

I am available for any question you have regarding this script but, in general, you should see that I've tried to fit with the work of the original translators.

Thank you for reading.

@resinate: Exactly what Incinerator said. Scripts are not in the CSharp.
Except for the texts (which are in "resources.assets"), the CSharp includes what's in the "Party", "Items" and "CIL Code" panels (there may be a couple of exceptions, like the "Status Sets" which are editable from the "Enemy" panel but are in the CSharp, but it is roughly correct).

@ToraCarol: Great that you fixed your problem yourself. I admit that I don't remember at all how head focuses are dealt with.

FF8 Tools / Re: [PSX/PC] Save editor - Hyne (1.9.2)
« on: 2018-06-09 20:06:52 »
That sounds plausible ; who tries to forget abilities?

@ploppo: About the wrong spell special effects, that's quite strange ; I think you did something wrong in your settings. The poisonous effect is the default animation in most cases (when no other is set).
About how I added Beatrix, I don't mind giving you tips, but you need to be more specific... Did you read the tutorial? What didn't you understand?

Again, there is nothing related to the Ipsen Curse in the field. The flag in the battles is everything there is.

@Kefka: Yes, it is possible with dnSpy again. In the "btl_calc::CalcMain", you need to put the line "btl_calc.CalcSub_15E(cALC_VAR);" a bit everywhere ^^'
Again, having a look at this file makes it easier to read the spell effects before editing the real thing (that has idiotic names and is harder to read).

For example, go to the "case 19" (Physical Strike effect) and change it to this:
Code: [Select]
case 19:
if (btl_calc.CalcSub_152(cALC_VAR))
You should put the line before the "CalcSub_20X" ("DoSetDamage_..." in the readable version).

Which string and which tutorial? What I did for Alternate Fantasy is a lot like what is described there.
For the Ipsen Curse, it's only a flag in the battles: you see that all the enemies of the Ipsen castle have this "Ipsen Curse" flag enabled.
It's a bit different for the Oeilvert Curse because that one also has an effect out of battles (you can't use magics). For this curse, there's the flag in the battles but also a general variable that is changed in the "Entrance" field of Oeilvert (I don't remember if it's turned off in the field where Ark is or if it's in one of the Desert Palace fields). The general variable is "Setting_MagicOff": as long as it's 1, magic is disabled in the player's menu.

About the jump ability, you may try the following using dnSpy: go to the "btl_cmd" class and its "CheckCommandCondition" then search for a part of the code that looks like this.
Code: [Select]
btl_stat.AlterStatus(regist, 1073741824u);
regist.cmd[3].cmd_no = cmd.cmd_no;
regist.cmd[3].tar_id = ((cmd.cmd_no != 3) ? btl_util.GetStatusBtlID(1u, 0u) : cmd.tar_id);
cmd.tar_id = regist.btl_id;
return true;
And add a few lines before that return:
Code: [Select]
btl_stat.AlterStatus(regist, 1073741824u);
regist.cmd[3].cmd_no = cmd.cmd_no;
regist.cmd[3].tar_id = ((cmd.cmd_no != 3) ? btl_util.GetStatusBtlID(1u, 0u) : cmd.tar_id);
cmd.tar_id = regist.btl_id;
btl.cmd[1].info.priority = 1;
if (btl.cmd[3].cmd_no == 3) {
btl_cmd.SetCounter(btl, 10u, 185, btl.cmd[3].tar_id);
} else {
btl_cmd.SetCounter(btl, 11u, 186, btl.cmd[3].tar_id);
return true;
I've not tested it but it should work (and she should perform the attack without any delay).

@ToraCarol: About the animation at Ipsen Castle, I can't say anything without the script code that you use.
I still don't know how to handle cameras... You can try random things like using the following kind of lines after Blank joins the fight:
Code: [Select]
RunBattleCode( 36, 0 ) // Change "0" to other numbers to try different cameras
Sorry for late answers but that's a lot of things to read.

@ploppo: You can right-click on files in the Unity Assets Viewer to export files and import them back.
The files exported appear in a folder "HadesWorkshopAssets" in your FF9 game directory. To import a file, you must put the new file in that "HadesWorkshopAssets" folder (in a sub-directory actually) exactly at the same place and exactly with the same name as when the file is exported.

@ToraCarol: I think that you didn't get it. Once you have linked Seiken abilities and Summon abilities, it frees space for other commands. Once you have done that, you can add up to 12 spells in another command without being told that there's no space.

About Blank's sword... It's strange but I got it!

So actually, "set character[MODEL_OFF] =$ 65535L" hides weapons only for the enemies (it might be that they have weapons meshes but I don't think so, so it's useless) and not for the party characters.
"set character[PRESENCE_OFF] =$ 1" hides weapons (as well as other stuff ; the character doesn't seem to even exist when its presence is off) but it is called a bit later, just before the ATB appears and the battle starts.

Conclusion: Dagger's weapon also appears mid-air before the battle starts. I just checked it on a youtube video and, indeed, there is a very small window during which you can clearly see her weapon...

So, I think that it's another bug of the Steam version. In the "btl_mot::HideMesh" and "btl_mot::ShowMesh", there is a "if" line that is wrong:
Code: [Select]
if (mesh == 65535 && == 0) ...I think that it should be "!= 0" instead: it was meant to take care of weapons only if the character is a team member and not the opposite.

You may fix the bug in this particular battle by adding another PRESENCE_OFF line together with the shadow/model hiding (still keep the PRESENCE_OFF lines that are below):
Code: [Select]
if ( #VAR_GlobUInt16_28 ) {
    set VAR_GlobUInt8_46++
    set VAR_GlobUInt16_28[MODEL_OFF] =$ 65535L
    set VAR_GlobUInt16_28[SHADOW] =$ 0
    set VAR_GlobUInt16_28[PRESENCE_OFF] =$ 1
    set VAR_GlobUInt16_42[MODEL_OFF] =$ 65535L
    set VAR_GlobUInt16_42[SHADOW] =$ 0
    set VAR_GlobUInt16_42[PRESENCE_OFF] =$ 1
Unless I'm mistaken, it should not crash the game  8)

About giving trance to someone else, I'll make a few tests but it may be possible to actually do it now with dnSpy/Albeoris's Memoria. Of course, unless you import another model, the trance appearance will be roughly the same as the normal state.
I don't guarantee anything though ^^'

1) I don't know :/
The "set VAR_GlobUInt16_42[MODEL_OFF] =$ 65535L" line should be the one that hides the weapon if I am not mistaken. I'll look in the engine if there are special instances where it's not good enough.
2) You can select one of the "Seiken" command and link it to the other "Seiken" command because they share the same abilities anyway ; that frees 4 slots that you can distribute somewhere else. You can do the same with Dagger's summons (normal & trance commands).
3) I gave the answer to that: musics are stored in the p0data61 archive and you can swap/replace them at will. You only need to have your music in .ogg format (and define looping points if you want it to loop in-game ; it is a feature of .ogg files).

Pages: [1] 2 3 ... 21