Author Topic: [PSX/PC] General editor - Hades Workshop (0.41c)  (Read 475800 times)

Dark_Ansem

  • *
  • Posts: 310
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1750 on: 2020-07-02 07:15:11 »
Thank you so much for this!

DV

  • *
  • Posts: 22
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1751 on: 2020-07-11 15:13:26 »
Hi! I hope you're having a good weekend :)

I come back with a little question : how does translation works on HW? Since I've been using it, everything is grayed out ^^ It's not implemented yet?


Tirlititi

  • *
  • Posts: 703
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1752 on: 2020-07-11 18:12:58 »
Hi DV.
You need to go to the "File -> Preferences -> Steam" and disable the "Single language mode".
When enabled, only one language is loaded, which makes it faster (in particular when loading the fields), but then you can't change the option after opening the game.
The "auto-translate" thing is always grayed out though and will probably never be done, unless someone else codes it.

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1753 on: 2020-07-19 12:25:07 »
Hello everyone!

I'm interested in getting into modding FFIX on Steam with Hades Workshop. While I have a lot of grand ideas, I have a fairly simple idea to start me off and get practiced with the process of modding the game. I would like to create a "True Solo Run" mod for characters in FFIX, starting with Freya.

From my understanding, at the most basic level, this would require me to at least:

1) Change the battle party member given to you at the start of the game to whatever character you want to play the whole game with (in this case, Freya).
2) Make the game ignore any attempts to change your party setup (for example, if I don't do this, even if I make the game give me Freya at the start, she will be removed the next time the game forces a change to the party such as when you switch to controlling Vivi in Alexandria, unless I make the game not do that).

Also, as a bonus if at all possible, I would like to also change the character that is controlled in exploration throughout the game. I noticed there is a guide for doing this in the PSX version, but I didn't see any information on doing it in the Steam version.

If using the Steam version for this kind of mod is not possible then I don't mind trying the PSX version too, but the Steam version would be preferable since it's more accessible to people if I were to release such a mod.

Any insight on doing any of this would be much appreciated. I'm new to this and while I had a look around at the scripts in Hades Workshop (noticed a lot of listing referring to "Party" in CIL Code), I'm not sure exactly what I need to change to accomplish what I want, so I could really use the help. :P

Tirlititi

  • *
  • Posts: 703
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1754 on: 2020-07-19 13:13:55 »
I just answered on the Steam forum. I reproduce my answer here if other people are interested:

0) [Optionally] Configure the languages in "File -> Preferences"; the single-language mode will make loadings go faster (and the script file smaller in size),
1) Open the game's FF9_Launcher,
2) Go to the "Environment -> Fields" panel,
3) Use "Batch -> Export Field Scripts", let all the fields ticked and export them into a single file for simplicity,
4) Using a good text editor, open that script file and search/replace regex expressions using the followings:

search:
set Setting_PartyReserve = [0-9]*
replace:
set Setting_PartyReserve = 255

search:
AddParty\(([1-9][0-9]*)\)
replace:
\( AddParty\(4\) || AddParty\($1\) \)

search (no regex):
AddParty(0)
replace:
( AddParty(0) || AddParty(4) )

... and I think that should be good,
5) In Hades Workshop, "Batch -> Import Field Scripts"; there shouldn't be any error but tell me if there is,
6) "File -> Save Steam Mod" will generate a couple of files but you are interested only in the p0data7.bin (that's the archive containing all the scripts): replace the game's file with it, having a backup for safety.

I *think* this should counter all the problems you can have with this kind of party modifications. Indeed, there are parts of the game (Oeilvert, Ispen Castle...) in which you are supposed to have 4 party members for the cutscenes, so you can't just remove everyone but Freya. The battles that would normally be solo Zidane (Baku, Black Waltz 1 and Amarant... I don't see any other) will be with both Zidane and Freya (again, that's not a good idea to remove Zidane from the team carelessly). And I think that the battle against Plant Brain should be without Blank then... but Plant Brain's AI script seem to be able to handle that case without problem (it will simply be a battle with 1 phase instead of 2).


Of course, you can replace Freya by any other character. In the 2nd and 3rd search/replace,
use "0" instead of "4" for Zidane,
use "1" instead of "4" for Vivi,
use "2" instead of "4" for Dagger,
use "3" instead of "4" for Steiner,
use "5" instead of "4" for Quina,
use "6" instead of "4" for Eiko,
use "7" instead of "4" for Amarant,
use "8" instead of "4" for Beatrix, also use "511" instead of "255" in the "Setting_PartyReserve" line.

I am not sure of how it would work for Quina/Eiko/Amarant because of the shared slot character though...

For replacing the character on the field, that's more complicated because Freya doesn't have all the animations that Zidane has (I don't think that Freya can climb ladders for instance)... It would go pretty much the same way as above but searching for lines:
"SetModel( 98, 93 )", replace by "SetModel( 192, 94 )", but also
"RunAnimation( [Some Animation ID] )", replace with a corresponding animation ID for Freya,
the same for "SetStandAnimation", "SetWalkAnimation", "SetRunAnimation", "SetLeftAnimation", "SetRightAnimation", "SetInactiveAnimation", "SetJumpAnimation", "RunAnimationEx".

The list of animation IDs can be found there (Freya's animation file names start with "ANH_MAIN_F0_FRJ_" and Zidane's start mainly with "ANH_MAIN_F0_ZDN_" (sometimes it's another number after the "F")).

As you can see, your questions are everything but simple :p
It's a hard problem to determine whether a problem is hard or not.

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1755 on: 2020-07-19 15:54:31 »
Hey, thank you for the quick response, didn't see the message on Steam before I typed this lol.

So I got an unhandled exception error when trying to import back in but I'm pretty sure I know why.

I had no trouble with:

search:
set Setting_PartyReserve = [0-9]*
replace:
set Setting_PartyReserve = 255

search (no regex):
AddParty(0)
replace:
( AddParty(0) || AddParty(4) )

However, when it came to:

search:
AddParty\(([1-9][0-9]*)\)
replace:
\( AddParty\(4\) || AddParty\($1\) \)

I got a bit confused as I couldn't find anything resembling that. I'm a bit confused by the syntax here. Is "AddParty\(([1-9][0-9]*)\)" supposed to be two different values that I need to change?

And yeah, I'm aware nothing is really easy here but I figure what I'm doing here would be far easier than making a "custom game" like FFIX Ascension (which is my end goal but it's a way's off obviously lol).

Tirlititi

  • *
  • Posts: 703
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1756 on: 2020-07-19 16:13:07 »
"AddParty\(([1-9][0-9]*)\)" as a regex should read as:

"AddParty" -> simply the string,
"\(" and "\)" -> catch a parenthesis,
"(something)" -> save the string inside the parentheses for replacing it using the "$1" code in the replacement string,
"[1-9]" -> catch exactly one figures but not 0,
"[0-9]*" -> catch 0 or more figures.

So the whole expression catches "AddParty( some number but not 0 )" and puts back that number in the replacement string in place of $1.

Regex (regular expressions) may vary from one program to another (most of the thing is standard though). This syntax works well with Notepad++ for instance.

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1757 on: 2020-07-19 20:19:42 »
Turns out my issue there was I didn't click the Regular Extension box in Find & Replace in Notepad++, got it working now.

However I've hit another wall. When I try to Import Field Data in Hades Workshop now, Hades Workshop just goes into a "Not Responding" state. Has this ever happened before?

Tirlititi

  • *
  • Posts: 703
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1758 on: 2020-07-20 00:14:08 »
Importing and compiling the scripts of all the fields takes some time; you have to wait.

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1759 on: 2020-07-20 08:55:43 »
OK, so I was going to leave it to compile on my home PC while I worked today on my work PC. Last night I tried it for about an hour but I guess it was supposed to take longer, so I figured 8-9 hours over my work period would be more than enough.

However, now I'm simply getting the unhandled exception error again. It's the exact same file as last night. I then tried doing the whole process again on a fresh file, but still getting unhandled exception.

I'll just post a link to the file here in case anyone can figure out what I did wrong here. Really strange that the process at least started last night but not this morning. Also I have been using Notepad++.

https://drive.google.com/file/d/1wI5r9DHKe2uLwyolVxbXrQEIT-CIhMJF/view?usp=sharing

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1760 on: 2020-07-25 21:13:21 »
Hey, apologies for double posting, though things seem quiet so I could be talking to an echo chamber here.  :-P

Anyway, in regards to my True Solo Run project, I made a small amount of progress. Previously, I was having an issue where Hades Workshop was getting an "unhandled exception" error when importing the edited field data, which had the field data for every map in one txt file.

So today, I decided to try exporting as split files. I made my edits in the first file to put Freya in the party, which was for the Prima Vista Cargo Room as you start the game. Sure enough, after starting a new game, Freya was successfully in the party menu, and when the fight with Baku started, she was present there too (replacing Blank). I then applied my edits to all files at once in Notepad, and imported the first ten just to see if it would work any further. Freya was taken out of the party when I got to control Vivi exploring in Alexandria, but on further inspection, all of the files I imported were only Prima Vista files so that's fine. I just didn't import the Alexandria files since they didn't happen to be in that batch.

I continued playing anyway but eventually, the game would consistently crash with a "Runtime error" after the FMV cutscene where Steiner crashes into the castle while chasing Zidane and Garnet. I examined my edited files and found that the fifth file I edited was for the Prima Vista Music Room (the three previous files actually did not get edited at all as they didn't have anything that needed to be replaced), which is indeed the room after the Steiner cutscene.

It's possible I just need to import the other files as the game may have been expecting Freya to already be in the party from the previous scene or something, so I will investigate that.

I just have one question for now though. Is it possible for Hades Workshop to import multiple field files at once? It doesn't seem to let me select multiple files at once when doing a batch import. I can do them individually, but there are over 800 files to import so doing all of that manually would be extremely tedious and susceptible to human error.

RacketyEsperus

  • *
  • Posts: 3
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1761 on: 2020-07-29 21:30:53 »
Hi there, I downloaded Hades Workshop a few days ago and have been feverishly using it to modify my copy of FFIX. It's absolutely amazing, intuitive and easy-to-use so first and foremost, thanks for this amazing piece of software!

Most of it is fairly self-explanatory and I've changed most of the game to my liking but there's one thing I can't seem to get right: adding new spells and abilities to character's commands.

For example, I've altered Dagger's and Eiko's Wht Mag commands to use different spells, and moved some of Vivi's status spells (Sleep, Slow, etc) into their Wht Mag commands. I've also created some new spells (like the Aero spells and extended Water spells) and integrated them into Vivi's Blk Mag command. It all seems to work in theory, as I've added AP costs, added them properly to equipment and assigned animations and damage formulas. When playing the game, the spells show up fine in the menu. And then the problem: the spells are not present in battle when selecting the right command, and I don't know how to fix this.

I've noticed that when highlighting the new spells, their category of 'Wht Mag' or 'Blk Mag' doesn't display in the Abilities screen, so clearly the category isn't being linked to the commands, but I don't know how to fix this.

Also (sorry I'm hopeless at coding and such, so apologies for the rambling nature of this), how do you extend the capacity of a command list? Whenever I try to add more spells to a command, it says I can't add any more (I'm trying to add Watera Sword and Waterga Sword to Steiner's Swd Mag ability, and there's no more room!)

And in the same vein, how do I go about creating a new animation for Watera Sword and Waterga Sword? (since there's only one Water Sword animation).

Any help you could offer would be fantastic!

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1762 on: 2020-07-31 21:56:47 »
Hey, so I ended up figuring out how to do the party switching stuff I wanted and released an early version of my Freya Game+ mod.

Now for the next release, I have other features I need to work on, and I have some questions regarding that.

1) One thing I want to do is rework the Festival of the Hunt so that the player must actually win the game to have Freya win the Coral Ring (since they will be playing as her). I have already accomplished this by simply swapping the cutscene code for when Freya wins and Zidane wins. So if the player intentionally loses now, they get the cutscene of Zidane winning the Gil. However, what I can't figure out is how to change the dialogue for the announcers who tally the points and comment on the battle. I need to change it so that any instance of Freya's and Zidane's names is swapped since Freya is now the player character (so if the player intentionally retires, it says "Freya has retired!" instead of "Zidane has retired!"). Also, for the line where they say "Freya is leading! She's a dragon knight from Burmecia.", I need to change this to something referring to Zidane instead (something like "Zidane is leading! He's the star actor of Tantalus Troupe."). I tried exporting and importing texts and doing it that way and also changing the field scripts but I can't seem to change these lines no matter what I try.

2) In regards to changing Freya to be the exploration avatar, I already get her basic animations working easily (just porting over the ones from Cleyra and Desert Palace). However, there are two things I'm struggling with - first, the "Inactive" Animation Zidane has. I want to add an inactive animation to Freya too. I tried to just adding that line of code and adding one of Freya's animations from a cutscene, but whenever the inactive animation is called in-game, Freya's standing animation just freezes up for a few seconds (I can still move her, she just stops "breathing") and then goes back to normal. I assume the game is trying to play the animation for that duration of time but I must be missing something? And the second thing is footstep sounds, these don't seem to work for me no matter what I try.

3) I want to do a bit of model editing for some things, but some models when I export them as FBX don't open in any FBX program I have (Blender and FBX Review). However, some do (like Freya's own model). I used the same export settings in Unity Assets Manager for all of them. What is the cause of this?

EDIT: Just discovered that the reason some models don't open properly is because they're actually empty. Is there a reason for models being empty after an export here?
« Last Edit: 2020-07-31 22:39:42 by ChikoLad »

DV

  • *
  • Posts: 22
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1763 on: 2020-07-31 23:26:48 »
Hi everyone, i have a little question too...

I am currently working on CD1 (Steam version ofc) but i have something strange.

I edit Phoenix Pinion into Ether + but i got something weird : I confronted somes ennemis on Guismar's Cavern and died but.... Phoenix appears  :? :? !! (I didn't have Eiko lol)

So it seems my Ether + use Rebirth Flame mechanic, i just add 99 Ether + on my save and Phoenix comes again... when i remove all my Ether +, only get Game Over.

I don't know why this happens, i never edit script from Phoenix or something... i can't find the formula about Rebirth Flame : (No. of Phoenix Pinion/256) * 100%.

Someone have an idea about that ?  :-X

PS : One on my player record this => https://www.youtube.com/watch?v=z2kscLduWFc

EDIT : I just add "Phenix" on Ether + abilities, that's fix the softlock... but still didn't know why that's summon Phenix.

EDIT2 : I just did another test at the beginning of the game (first zone, juste before PrisonCage, with solo Zidane). I get 99 Ether + on my inventory.... Phoenix still appears  :?

EDIT3 : I test with Memoria without my mod, give 99 Phoenix Pinion on same spot => No Phoenix appears.

But i just found the function which call Rebirth Flame ! (btl_sys on FF9 folder)

Code: [Select]
for (BTL_DATA next3 = ff9Battle.btl_list.next; next3 != null; next3 = next3.next)
{
if (btl_util.getSerialNumber(next3) - 10 <= 1)
{
if (Status.checkCurStat(next3, BattleStatus.Petrify | BattleStatus.Venom | BattleStatus.Zombie | BattleStatus.Stop))
{
break;
}
if (btl_cmd.CheckSpecificCommand(next3, BattleCommandId.SysLastPhoenix))
{
return;
}
if (ff9item.FF9Item_GetCount(249) > Comn.random8())
{
UIManager.Battle.FF9BMenu_EnableMenu(true);
btl_cmd.SetCommand(next3.cmd[0], BattleCommandId.SysLastPhoenix, 73U, btl_scrp.GetBattleID(0U), 1U);
return;
}
}
}
ff9Battle.btl_seq = 1;
UIManager.Battle.SetBattleFollowMessage(5, new object[0]);

I just edit ID item from Ether + to Phoenix Down => Works !.... but Phoenix still appears without Eiko.

I modify this line : if (btl_util.getSerialNumber(next3) - 10 <= 1) by something else like if (btl_util.getSerialNumber(next3) == 7) : Phoenix isn't coming anymore (but i am pretty sure i break Rebirth Flame for the moment...).

I didn't know where to find the Eiko death condition to trigger Rebirth Flame... still searching !
« Last Edit: 2020-08-01 12:55:00 by DV »

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1764 on: 2020-08-01 13:08:31 »
So I was able to get my fbx exports working but only if I export as .obj files. A bit strange, but I think this is fine for now as I don't need armature for what I'm doing.

However I am now running into an issue when trying to import back into the game. Basically, I have taken Sir Fratley's spear from his model (it's part of his character model as he is never seen without it, so they just made it all the one model) and made it into it's own model. For the sake of testing it, I am just replacing the Partisan weapon for Freya.

I named it all correctly as per the instructions in the guide for model importing. The texture imports into the game fine. But Hades Workshop crashes whenever I try to import the fbx for the mesh.

The resulting p0data2.bin has the new texture in-game but the model is still Partisan. Any ideas?



EDIT: I made a inch of progress. Basically I tried importing the model with the "Import All Nodes in New Files" setting, which at least allowed the import to happen without Hades Workshop crashing...but now the game crashes if a battle is loaded while Freya has Partisan equipped. So something is going wrong.

FYI I'm using Blender as my 3D program, exporting as FBX.
« Last Edit: 2020-08-01 21:08:50 by ChikoLad »

RacketyEsperus

  • *
  • Posts: 3
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1765 on: 2020-08-02 13:13:37 »
Hey again,

Is anyone able to help with this? I've done everything else that I want with the mod, but still struggling on these ones I listed before.

I've basically added Aero, Aera, Aeroga, Watera, Waterga, Watera Sword and Waterga Sword to the Spell list. I've done all the integration work like assigning descriptions, damage calculations, elements, attack types and animations on the Spells tab (using the blank Void abilities under the main chunk), and I've also updated the Commands tab to integrate the new spells into Dagger's, Vivi's and Eiko's spell set. I've then altered the Stats tab to assign each ability an AP amount and sorted them to reflect the same order in the Commands tab, as well as tweaking the Inventory to make sure the characters can actually learn their new spells. Obviously, I can't add the new spells to Steiner's Swd Mag command as there is no more room.

The game starts fine and has all the tweaks I've done and when leaving Evil Forest after the introduction, I go into the menu with Zidane, Dagger, Steiner and Vivi. Equipping the right weapons allows my new spells to be seen (Dagger can now learn Aero from her standard Rod) and it all looks fine in the menu. It has the right MP cost I assigned and it is a learnable skills as it has AP which accrue after battle.

But the only issue is that when we do get into a battle, Aero does not show up in the command list, there's only Cure and Protect (the other abilities on the Rod). When highlighting 'Aero' in Dagger's Abilities tab in the Menu, usually the ability will flag up as 'Wht Mag' or 'Summon' in the upper part of the screen, but Aero displays nothing. Which I assume means the game doesn't recognise the new spell as being part of her abilities, but I don't know where I assign this in Hades workshop.

This is the main issue I'm stumbling on as I'm planning to add a few more spells to Quina's Blu Mag as well and if they don't show up in their commands properly, obviously there's little point.

On the same vein though, how do you increase a command's spell capacity? Simply because I can't even add Steiner's abilities as there's no more room in his Swd Mag command, and therefore, no way to link it to Vivi's Watera and Waterga spell in the Special tab.

And sorry again for rambling, but how do you create new Swd Mag animations? For the new Aero and Water spells, I've simply reused single-target and multi-target animations from other abilities as I'm not wanting any too extravagant. For Watera Sword and Waterga Sword, I simply want the same Swd Mag animation (Steiner running up and striking the enemy), just ending with a different Water animation from the pre-done effects. But the Spell Animations tab looks a lot more complicated than the rest of the program and I'm hopeless when it comes to coding.

Can anyone offer a hand in the right direction for any of these issues? I'd be eternally grateful!

Thanks!

Hi there, I downloaded Hades Workshop a few days ago and have been feverishly using it to modify my copy of FFIX. It's absolutely amazing, intuitive and easy-to-use so first and foremost, thanks for this amazing piece of software!

Most of it is fairly self-explanatory and I've changed most of the game to my liking but there's one thing I can't seem to get right: adding new spells and abilities to character's commands.

For example, I've altered Dagger's and Eiko's Wht Mag commands to use different spells, and moved some of Vivi's status spells (Sleep, Slow, etc) into their Wht Mag commands. I've also created some new spells (like the Aero spells and extended Water spells) and integrated them into Vivi's Blk Mag command. It all seems to work in theory, as I've added AP costs, added them properly to equipment and assigned animations and damage formulas. When playing the game, the spells show up fine in the menu. And then the problem: the spells are not present in battle when selecting the right command, and I don't know how to fix this.

I've noticed that when highlighting the new spells, their category of 'Wht Mag' or 'Blk Mag' doesn't display in the Abilities screen, so clearly the category isn't being linked to the commands, but I don't know how to fix this.

Also (sorry I'm hopeless at coding and such, so apologies for the rambling nature of this), how do you extend the capacity of a command list? Whenever I try to add more spells to a command, it says I can't add any more (I'm trying to add Watera Sword and Waterga Sword to Steiner's Swd Mag ability, and there's no more room!)

And in the same vein, how do I go about creating a new animation for Watera Sword and Waterga Sword? (since there's only one Water Sword animation).

Any help you could offer would be fantastic!

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1766 on: 2020-08-03 21:39:12 »
So I'm trying to make some changes to the third Beatrix fight, but am having some difficulties and have some questions:

1) I want to use some custom music. I've followed the dnSpy & Memoria: Add a new music to the game without replacing an existing one tutorial, but I still run into an issue where the game doesn't play my custom music on the fight, it doesn't play any music at all (this tells me at the very least that I've set up the IDs and what not correctly at least, as all other music still plays fine). In the Memoria log, I get the following info of interest:

Code: [Select]
03.08.2020 10:04:18 |W| [SoundLib] FF9SOUND_SNDEFFECTRES_SUSPEND: slot: 0 is null!
03.08.2020 10:04:18 |W| [SoundLib] FF9SOUND_SNDEFFECTRES_SUSPEND: slot: 1 is null!
03.08.2020 10:04:18 |E| [SoundLib] File not found AT path: Sounds/Sounds01/BGM_/music123.akb
03.08.2020 10:04:19 |M| InitializeBattleText
03.08.2020 10:04:19 |M| [assetInterceptor] loading from directory [C:\Program Files\Moguri Mod\StreamingAssets\]
03.08.2020 10:04:20 |M| [assetInterceptor] loading from directory [C:\Program Files\Moguri Mod\StreamingAssets\]
03.08.2020 10:04:20 |M| [assetInterceptor] loading from directory [C:\Program Files\Moguri Mod\StreamingAssets\]
03.08.2020 10:04:24 |E| [SoundData] Sound not found: 372
03.08.2020 10:04:31 |M| [GameLoopManager] RaiseQuitEvent

I was under the impression I didn't have to rename my imported .ogg "music123.akb" and that the game would do it for me when I first loaded up the track. But I've tried multiple times with no success. I tried renaming it that myself but it doesn't help. I'm kind of at a loss as to what to do at this point. Also yes I placed the music in the Moguri Mod folder since that's where it should import from. Though I also tried the normal FFIX folder for posterity.

2) I haven't looked into it too much yet but I would like to make the third Beatrix fight "winnable" (i.e she doesn't automatically use Climhazzard on you after a few turns, and you beat her by depleting her HP). Where do I find and remove this function?

3) Is it possible to give characters forced Trance at the start of a battle (similar to how Zidane, Vivi, and Steiner all have a moment like this in the original game)?

4) Is it possible to add custom dialogue windows to a battle?
« Last Edit: 2020-08-03 21:41:23 by ChikoLad »

DV

  • *
  • Posts: 22
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1767 on: 2020-08-04 12:50:09 »
For you ChikoLad :

1)
Code: [Select]
03.08.2020 10:04:18 |E| [SoundLib] File not found AT path: Sounds/Sounds01/BGM_/music123.akb
It's seem that the issue, are you sure your BGM is located in StreamingAssets folder ?

When the game will use your music, it will automatically create an .akb file to be able to use it in game: you just have to create an .ogg file for it to work.

But right now, it looks like it can't find your file... Check the path in Memoria.ini to make sure it's directed to the right folder.
If you still have doubts, you can use the "Export" function in Memoria.ini and see in which folder it will export the files (which is logically the same path).

2) You need to check the Script, on Beatrix_ATB and remove this :

Code: [Select]
    if ( turncounter < 10 ) {
        set turncounter++
    } else {
        set finishfightflag = 1
    }
    if ( finishfightflag && ( !( #Matching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) ) ) {
        set climhazzardwaiting = 1
        set #( SV_Target = SV_PlayerTeam )
        Attack( 5 )
        return
    }

After that, you need to adjust her HP and you can remove this part too on Beatrix_Loop (if you want her "Die" animation or not... as you want !)

Code: [Select]
if ( !endflag ) {
        if ( #( SV_FunctionEnemy[HP] <=$ 10000 ) ) {
            set finishfightflag = 1
        }
        if ( finishfightflag ) {
            set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
            set SV_FunctionEnemy[ATB] =$ FirstOf(SV_FunctionEnemy[MAX_ATB])
            if ( climhazzardwaiting ) {
                if ( #Matching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) {
                    set climhazzardwaiting = 0
                    set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
                } else {
                    if ( GetAttacker == SV_FunctionEnemy ) {
                        if ( GetTarget && ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) ) ) {
                            set endflag = 1
                            Wait( 5 )
                            if ( GetBattleState != 4 ) {
                                return
                            }
                            RunBattleCode( 32, 0 )
                            while ( GetBattleState != 1 ) {
                                Wait( 1 )
                            }
                            set #( SV_Target = SV_FunctionEnemy )
                            AttackSpecial( 7 )
                            while ( IsAttacking != 0 ) {
                                Wait( 1 )
                            }
                            RunBattleCode( 33, 1 )
                            return
                        }
                    }
                }
            } else {
                if ( !( #Matching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) ) {
                    set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
                }
            }
        }
    }

3) Yes of course, you can make an attack which call "Trance" function. You can simply copy/paste "Trance Full" from BlackWaltz 3 for example and use his script on ATB.
After that, you need to precise the target for "Trance Full"

You can uses theses script if you want :
On Loop function, at the end (if the script already have this part.. skip)
Code: [Select]
  set #( zidane = ( SV_PlayerTeam[MODEL_TYPE] ==$ 0 ) )
        set #( zidane |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 1 ) )
        set #( vivi = ( SV_PlayerTeam[MODEL_TYPE] ==$ 2 ) )
        set #( dagger = ( SV_PlayerTeam[MODEL_TYPE] ==$ 3 ) )
        set #( dagger |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 4 ) )
        set #( dagger |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 5 ) )
        set #( dagger |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 6 ) )
        set #( steiner = ( SV_PlayerTeam[MODEL_TYPE] ==$ 7 ) )
        set #( steiner |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 8 ) )
        set #( quina = ( SV_PlayerTeam[MODEL_TYPE] ==$ 9 ) )
        set #( eiko = ( SV_PlayerTeam[MODEL_TYPE] ==$ 10 ) )
        set #( eiko |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 11 ) )
        set #( freya = ( SV_PlayerTeam[MODEL_TYPE] ==$ 12 ) )
        set #( amarant = ( SV_PlayerTeam[MODEL_TYPE] ==$ 13 ) )
        set #( marcus = ( SV_PlayerTeam[MODEL_TYPE] ==$ 15 ) )
        set #( ciblagepola = ( SV_PlayerTeam[MODEL_TYPE] ==$ 16 ) )
        set #( ciblagepola |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 17 ) )
        set #( beatrix = ( SV_PlayerTeam[MODEL_TYPE] ==$ 18 ) )

If you want to use this part, don't forget to use theses variables :
Code: [Select]
allocate 51

global uint16 zidane VAR_GlobUInt16_24
global uint16 vivi VAR_GlobUInt16_26
global uint16 dagger VAR_GlobUInt16_28
global uint16 steiner VAR_GlobUInt16_30
global uint16 quina VAR_GlobUInt16_32
global uint16 eiko VAR_GlobUInt16_34
global uint16 freya VAR_GlobUInt16_36
global uint16 amarant VAR_GlobUInt16_38
global uint16 marcus VAR_GlobUInt16_40
global uint16 ciblagepola VAR_GlobUInt16_42
global uint16 beatrix VAR_GlobUInt16_44

local uint8 tranceflag VAR_LocUInt8_46

On ATB function :

Code: [Select]
    if ( !tranceflag ) {
        set tranceflag = 1
        if ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4419) & CHARACTER ) ) {  <=== Choose your CHARACTER (from variables)
            set #( SV_Target = CHARACTER ) <=== Choose your CHARACTER (from variables)
            Attack( 4 )  <===== Use Attack which call Trance !
            return
        }
    }

As far as I'm concerned, you just have to take inspiration from already existing scripts... just have a look and you'll see that it's very simple ^^

4) Yes, just add some Battle Texts (just below the list of attacks and enemy groups).
You can call them by using Attack Animation (using Battle Text, for example Climhazzard from Beatrix) or using BattleDialog([INSERT ID NUMBER]) on Script.

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1768 on: 2020-08-04 20:34:19 »
Hey DV, thank you for the very detailed response! :D

For the music import issue, I definitely have my music in the right path, at least as far as I can tell. This is how the relevant info is set up in the Memoria.ini:

Code: [Select]
[Import]
Enabled = 1
Path = %StreamingAssets%
Text = 1
Audio = 1
Graphics = 1
Field = 0

[System]
StreamingAssets=C:\Program Files\Moguri Mod\StreamingAssets
Enabled=1

And this is where the song is located:



I know this is correct, since I am using Moguri Mod, and Memoria is importing it's content correctly. Unless Moguri Mod is somehow incompatible with music modding, but I don't think that's the case given it comes with remastered music imports as an option in the installer.

For the other stuff you posted instructions for, I am trying to get the forced Trance working first. Right now I have gotten it as far as making Beatrix use the attack I want (just her basic Attack command for now), and then after this, the ATB charge for both Beatrix and the party gets disabled. However, things are just stuck like that and I'm having trouble figuring out why. The game also freezes every few seconds throughout.

Here is the Loop and ATB code based off your advice and the Black Waltz 3 code. Freya is the character who Beatrix should target and then Freya should turn into Trance mode.

Code: [Select]
#HW newfunction 1
Function Beatrix_Loop
    if ( !VAR_LocUInt8_33 ) {
        set VAR_LocUInt8_33 = 1
        while ( GetBattleState != 1 ) {
            Wait( 1 )
            set VAR_GenUInt8_206 = GetRandom
        }
        RunBattleCode( 35, 0 ) // Enable ATB
        while ( GetBattleState != 4 ) {
            Wait( 1 )
        }
    }
    if ( !VAR_LocUInt8_30 ) {
        if ( VAR_LocUInt8_31 ) {
            set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
            set SV_FunctionEnemy[ATB] =$ FirstOf(SV_FunctionEnemy[MAX_ATB])
            if ( VAR_LocUInt8_38 ) {
                if ( #Matching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) {
                    set VAR_LocUInt8_38 = 0
                    set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
                } else {
                    if ( GetAttacker == SV_FunctionEnemy ) {
                        if ( GetTarget && ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) ) ) {
                            set VAR_LocUInt8_30 = 1
                            Wait( 5 )
                            if ( GetBattleState != 4 ) {
                                return
                            }
                            RunBattleCode( 32, 0 ) // Disable ATB
                            while ( GetBattleState != 1 ) {
                                Wait( 1 )
                            }
                            set #( SV_Target = SV_FunctionEnemy )
                            AttackSpecial( 7 ) // Talk
                            while ( IsAttacking != 0 ) {
                                Wait( 1 )
                            }
                            RunBattleCode( 33, 1 ) // End Battle
                            return
                        }
                    }
                }
            } else {
                if ( !( #Matching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) ) {
                    set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
                }
            }
        }
    }
    Wait( 1 )
        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 ) )
    loop

Code: [Select]
#HW newfunction 5
Function Beatrix_ATB
    set #( VAR_LocUInt16_43 = RandomInTeam(SV_PlayerTeam) )
    if ( !VAR_LocUInt8_46 ) {
        set VAR_LocUInt8_46 = 1
        if ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4419) & VAR_GlobUInt16_36 ) ) {
            set #( SV_Target = VAR_GlobUInt16_36 )
            Attack( 0 ) // Trance Full
            return
        }
    }
if ( !VAR_LocUInt8_47 ) {
        set VAR_LocUInt8_47 = 1
        set #( VAR_LocUInt16_43 = ( RandomInTeam(SV_PlayerTeam) & ( ~VAR_GlobUInt16_36 ) ) )
    }
    set VAR_LocInt24_15 = ( VAR_LocInt24_12 & 7 )
    set VAR_LocInt24_24 = GetRandom
    set VAR_LocInt24_27 = 128
    set VAR_LocInt8_20 = ( VAR_LocUInt8_19 - 1 )
    while ( VAR_LocInt8_20 >= 0 ) {
        if ( VAR_LocInt24_24 > VAR_LocInt24_27 ) {
            break
        }
        set VAR_LocInt24_27 >>= 1
        set VAR_LocInt8_20--
    }
    if ( VAR_LocInt8_20 == 65535 ) {
        set VAR_LocInt8_20 = ( VAR_LocUInt8_19 - 1 )
    }
    if ( VAR_LocInt8_20 == ( VAR_LocUInt8_19 - 1 ) ) {
        set VAR_LocInt24_12 = ( ( VAR_LocInt24_12 >> 3 ) & 2097151L )
        set VAR_LocInt24_12 |= ( VAR_LocInt24_15 << ( VAR_LocInt8_20 * 3 ) )
    } else {
        if ( VAR_LocInt8_20 ) {
            set VAR_LocInt24_21 = ( VAR_LocInt24_15 << ( VAR_LocInt8_20 * 3 ) )
            set VAR_LocInt24_24 = ( ( 1 << ( ( VAR_LocInt8_20 + 1 ) * 3 ) ) - 1 )
            set VAR_LocInt24_27 = ( ( VAR_LocInt24_24 & VAR_LocInt24_12 ) >> 3 )
            set VAR_LocInt24_27 |= VAR_LocInt24_21
            set VAR_LocInt24_24 ^= 16777215L
            set VAR_LocInt24_12 &= VAR_LocInt24_24
            set VAR_LocInt24_12 |= VAR_LocInt24_27
        }
    }
    set VAR_LocInt8_20 = VAR_LocUInt8_19
    while ( VAR_LocInt8_20 >= 0 ) {
        switch 8 ( VAR_LocInt24_15 ) from 0 {
        case +0:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
            break
        case +1:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
            break
        case +2:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
            break
        case +3:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
            break
        case +4:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
            break
        case +5:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
            break
        case +6:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
            break
        case +7:
            set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
        }
        if ( VAR_LocInt24_15 >= 4 ) {
            set VAR_LocInt24_24 = ( ( VAR_LocInt24_9 >> ( ( VAR_LocInt24_15 - 4 ) * 6 ) ) & 63 )
        } else {
            set VAR_LocInt24_24 = ( ( VAR_LocInt24_6 >> ( VAR_LocInt24_15 * 6 ) ) & 63 )
        }
        set VAR_LocInt24_21 = ( #SV_Target )
        set VAR_LocInt24_27 = FirstOf(SV_FunctionEnemy[MP])
        if ( VAR_LocInt24_21 && ( VAR_LocInt24_24 <= VAR_LocInt24_27 ) ) {
            break
        }
        if ( VAR_LocInt8_20 <= 0 ) {
            break
        }
        set VAR_LocInt24_15 = ( VAR_LocInt24_12 & 7 )
        set VAR_LocInt24_12 = ( ( VAR_LocInt24_12 >> 3 ) & 2097151L )
        set VAR_LocInt24_12 |= ( VAR_LocInt24_15 << ( ( VAR_LocUInt8_19 - 1 ) * 3 ) )
        set VAR_LocInt8_20--
    }
    if ( VAR_LocInt24_15 >= 4 ) {
        set VAR_LocUInt8_18 = ( ( VAR_LocInt24_3 >> ( ( VAR_LocInt24_15 - 4 ) * 6 ) ) & 63 )
    } else {
        set VAR_LocUInt8_18 = ( ( VAR_LocInt24_0 >> ( VAR_LocInt24_15 * 6 ) ) & 63 )
    }
    if ( ( FirstOf(SV_FunctionEnemy[HP]) - 10000 ) < ( ( FirstOf(SV_FunctionEnemy[MAX_HP]) - 10000 ) >> 1 ) ) {
        set #( VAR_LocUInt16_39 = SV_FunctionEnemy )
    } else {
        set #( VAR_LocUInt16_39 = 0 )
    }
    if ( ( #VAR_LocUInt16_39 ) && ( !VAR_LocUInt8_41 ) ) {
        set VAR_LocUInt8_41 = 1
        set #( SV_Target = SV_FunctionEnemy )
        Attack( 1 ) // Cura
        return
    }
    Attack( VAR_LocUInt8_18 )
    return

I most likely just did something really wrong here. I suspect I need to do something else to make the trance animation play, and also add another "Enable ATB" command for after.

EDIT: So I turned off the Trance code for now so I could test beating the battle by depleting Beatrix's HP. Thankfully this works like a charm with no issues. I may change the animation at the end (have her stand in her "low HP" stance and have some dialogue) at a later time and I of course have to change the cutscenes before and after the fight but that stuff will come later. :)
« Last Edit: 2020-08-04 22:38:42 by ChikoLad »

ChikoLad

  • *
  • Posts: 11
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1769 on: 2020-08-06 14:39:17 »
FFIX was updated on Steam today, giving the Steam version a smaller battle UI like the modern console versions, a fix to the Field BGM starting halfway through when returning from a battle or Tetra Master game, and "other minor bug fixes".

It has broken mods such as Moguri Mod so if anyone here is working on their own mods, it may be worth testing to make sure they work on the updated files.

RacketyEsperus

  • *
  • Posts: 3
    • View Profile
Re: [PSX/PC] General editor - Hades Workshop (0.41c)
« Reply #1770 on: Yesterday at 11:57:25 »
Has anyone ever encountered this problem? Desperately needing assistance with this!

Hey again,

Is anyone able to help with this? I've done everything else that I want with the mod, but still struggling on these ones I listed before.

I've basically added Aero, Aera, Aeroga, Watera, Waterga, Watera Sword and Waterga Sword to the Spell list. I've done all the integration work like assigning descriptions, damage calculations, elements, attack types and animations on the Spells tab (using the blank Void abilities under the main chunk), and I've also updated the Commands tab to integrate the new spells into Dagger's, Vivi's and Eiko's spell set. I've then altered the Stats tab to assign each ability an AP amount and sorted them to reflect the same order in the Commands tab, as well as tweaking the Inventory to make sure the characters can actually learn their new spells. Obviously, I can't add the new spells to Steiner's Swd Mag command as there is no more room.

The game starts fine and has all the tweaks I've done and when leaving Evil Forest after the introduction, I go into the menu with Zidane, Dagger, Steiner and Vivi. Equipping the right weapons allows my new spells to be seen (Dagger can now learn Aero from her standard Rod) and it all looks fine in the menu. It has the right MP cost I assigned and it is a learnable skills as it has AP which accrue after battle.

But the only issue is that when we do get into a battle, Aero does not show up in the command list, there's only Cure and Protect (the other abilities on the Rod). When highlighting 'Aero' in Dagger's Abilities tab in the Menu, usually the ability will flag up as 'Wht Mag' or 'Summon' in the upper part of the screen, but Aero displays nothing. Which I assume means the game doesn't recognise the new spell as being part of her abilities, but I don't know where I assign this in Hades workshop.

This is the main issue I'm stumbling on as I'm planning to add a few more spells to Quina's Blu Mag as well and if they don't show up in their commands properly, obviously there's little point.

On the same vein though, how do you increase a command's spell capacity? Simply because I can't even add Steiner's abilities as there's no more room in his Swd Mag command, and therefore, no way to link it to Vivi's Watera and Waterga spell in the Special tab.

And sorry again for rambling, but how do you create new Swd Mag animations? For the new Aero and Water spells, I've simply reused single-target and multi-target animations from other abilities as I'm not wanting any too extravagant. For Watera Sword and Waterga Sword, I simply want the same Swd Mag animation (Steiner running up and striking the enemy), just ending with a different Water animation from the pre-done effects. But the Spell Animations tab looks a lot more complicated than the rest of the program and I'm hopeless when it comes to coding.

Can anyone offer a hand in the right direction for any of these issues? I'd be eternally grateful!

Thanks!