Qhimm.com Forums

Final Fantasy 9 => FF9 Tools => Topic started by: Tirlititi on 2013-06-06 17:51:30

Title: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2013-06-06 17:51:30
Hi there!

I'm working on a Final Fantasy IX modding tool called Hades Workshop. It is aiming to allow to edit most of Final Fantasy IX's content. Quite a big project and I don't know if I will ever decide when it's finished  ;D

//============== THE TOOL =================//

The features so far:
- Can mod Final Fantasy IX PSX files, in .bin format and in any language version,
- Can mod Final Fantasy IX Steam games,
- Read and edit datas about:
--- Spells the party can cast,
--- Supporting abilities the party can use,
--- Commands the party has,
--- Default stats of the party members,
--- Items' features,
--- Items sold in shops,
--- Statistics, attacks and AI of enemies,
--- Tetra Master cards,
--- Text, dialogs and charmap,
--- Game's script,
--- MIPS script and CIL script,
--- Model exporting/importing (exporting Battle Scenes only for PSX, more for Steam),
--- Backgrounds (view only in PSX, view/replace in Steam),
--- Steam resources exporter/importer,
--- Spell animation sequencing,
--- Includes a game Randomizer (more infos here (https://steamcommunity.com/app/377840/discussions/0/1639792569842032173/)).
- Works under Windows only (you may recompile the source code I redistribute or use wine under linux).

It may be a good idea to have a look at the help (F2).

Since the version 0.41, Hades Workshop is compatible with Albeoris's Memoria Engine Modification (https://github.com/Albeoris/Memoria/releases) tool for the Steam version of the game. When using Hades Workshop with Memoria installed, mods are exported directly as mod folders (https://github.com/Albeoris/Memoria/wiki/Mod-folders) for that can be identified and enabled by Memoria's mod manager (https://github.com/Albeoris/Memoria/wiki/Mod-Manager).

Credits:
I made the program, obviously, but I got helped a lot by your wiki (http://wiki.qhimm.com/view/FF9 (http://wiki.qhimm.com/view/FF9)) for cluster datas format of the PSX version and by http://finalfantasy.wikia.com/ (http://finalfantasy.wikia.com/) occasionally.

Other than that, LandonRay and Zande made quite an useful work in data finding, Zidane_2 wrote most of the other tools about FFIX before me.

The launcher image on has been drawn by Maxa'. You can check his Deviant-Art page here (http://maxa-art.deviantart.com/).

Please tell me if you get any suggestion/bug report/feedback to share.

Here are the download links:

HADES WORKSHOP (https://www.hiveworkshop.com/attachments/hadesworkshop-zip.448443/)

Github project (https://github.com/Tirlititi/Hades-Workshop)

The older versions can be found here (https://www.dropbox.com/sh/f8edyp5ua4a7kc7/AACuhcb46gQq4x4IMGmgRgl1a?dl=0)

Thank you for your attention  :)

//=============== THE MODS =================//

Here are some of the mods that were made using this tool by various people. Go see their description for more detailed informations.

Also, you can find here (https://www.dropbox.com/sh/ac7sr4q3z2cx9vp/AACQDfqXPvn8c3ylXeGUrBKEa?dl=0) different tiny mods I made over the years.

Also, for the Steam version of the game, make sure to install the Memoria Engine mod and check out its mod catalog.

//============== HELP AND TIPS =================//

This topic is now more than 30 pages long. Different people asked for help at different points and I always tried to give a complete answer. You can thus find details in this topic about subtilities of the game, or how a feature of HW works, or how to do some precise thing. Since I don't want everyone to read the whole topic thoroughly, here are links to answers to these kind of questions.

Compatibility with Albeoris's Memoria tool (Steam version)

Here is how the compatibility with Memoria works (easiest setting):
SETTING:
1) Have a backup of the non-modded Assembly-CSharp.dll. By default, Memoria keeps it as "Assembly-CSharp.bak", which is fine. If that backup is still available and usable, Hades Workshop will use it and you have nothing more to do. If it doesn't exist, you need to get an Assembly-CSharp.dll by uninstalling Memoria (using Steam's option "Check the integrity of local files" does that) and keep it safe by renaming it "Assembly-CSharp_Vanilla.dll". This DLL is found in "x64/FF9_Data/Managed" and "x86/FF9_Data/Managed" of the game's directory (both are exactly the same).

USAGE:
2) When saving Steam mods, choose the options "Spreadsheets" and "Raw Assets".
3) The folder generated by Hades Workshop ("HadesWorkshopMod" by default) then goes in the game's directory.
4) In that same directory, there is a file "Memoria.ini" that can be edited with a text editor such as the Notepad (if that file doesn't exist, that probably means that you don't have Memoria installed properly). Edit that file and add your mod folder's name to the list in "[Mod] FolderNames".

Very useful informations

A list of spells specially handled by the engine (http://forums.qhimm.com/index.php?topic=14315.msg248444#msg248444)
About the random encounter rate (https://www.gamefaqs.com/boards/197338-final-fantasy-ix/75389893)
How to use "GetRandom" to generate a random number in a range (http://forums.qhimm.com/index.php?topic=14315.msg250290#msg250290)
Declaring local and global variables in scripts (http://forums.qhimm.com/index.php?topic=14315.msg234516#msg234516)
Basic example of reading a field script (https://steamcommunity.com/groups/ff-modding/discussions/13/350533172684330089/?ctp=6#c1846946102851108081)
Detailed example of adding a cutscene and a hunt sidequest (http://forums.qhimm.com/index.php?topic=14315.msg260956#msg260956)
Changing properly the content of a chest (http://forums.qhimm.com/index.php?topic=14315.msg233384#msg233384)
Typical NPC dialog script (http://forums.qhimm.com/index.php?topic=14315.msg247568#msg247568)
Add a (N)PC on the field (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890)
Triggering conditions of special functions (Main, Loop, Counter, etc.) (http://forums.qhimm.com/index.php?topic=14315.msg271072#msg271072)
Helping with the development of HW (http://forums.qhimm.com/index.php?topic=14315.msg248197#msg248197)
Using Field 3D Models for enemies (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg256033#msg256033)
Making temporary characters available in the party menu (Part 1 (http://forums.qhimm.com/index.php?topic=14315.msg245063#msg245063) - Part 2 (http://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=8#c1457328927844133175))
Using the Background Editor (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg247956#msg247956)
Properly adding a new enemy to a battle (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485)
Changing the battle music of specific battles (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg259712#msg259712)
Making sure that a specific playable character is always in the party (Steam and PSX) + changing Zidane's model on the field (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg280642#msg280642)
Modding spell effect: explanation (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg250810#msg250810)
Modding Supporting Abilities: HP/MP +X% (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg249962#msg249962)
Modding Supporting Abilities: Auto-status and Immunes (Steam) (http://steamcommunity.com/groups/ff-modding/discussions/13/350533172684330089/#c2119355556487352609)
Modding Statuses: changing the tick of Poison/Venom/Regen (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg255569#msg255569)
dnSpy: Add a trance to Cinna, Blank, Marcus and/or Beatrix (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg264545#msg264545)
dnSpy: Bypass the limit of spells in different commands + separating the temporary/permanent character slots (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg262683#msg262683)
dnSpy & Memoria: Add a new music to the game without replacing an existing one (http://forums.qhimm.com/index.php?topic=14315.msg277910#msg277910)

Less but still useful informations

Side effects of Initial/Auto-statuses (http://forums.qhimm.com/index.php?topic=14315.msg205428#msg205428)
Bypass the enemies' Max HP limit (http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426)
Checking if a character is in the team in-battle (http://forums.qhimm.com/index.php?topic=14315.msg236103#msg236103)
Enabling an enemy attack depending on the party stats (http://forums.qhimm.com/index.php?topic=14315.msg236276#msg236276)
Make Zorn & Thorn battle more difficult (http://forums.qhimm.com/index.php?topic=14315.msg250236#msg250236)
Removing Dagger's depression effect in-battle (http://forums.qhimm.com/index.php?topic=14315.msg251907#msg251907)
About Ragtime Mouse quizz and reward script (http://forums.qhimm.com/index.php?topic=14315.msg251926#msg251926)
Unlocking manually a few of the "Hidden Scenes" (http://forums.qhimm.com/index.php?topic=14315.msg222961#msg222961)
Skipping the script that makes Dagger unlearn her summons (http://forums.qhimm.com/index.php?topic=14315.msg237588#msg237588)
Make Mini-Theater Ship obtainable as a key item (http://forums.qhimm.com/index.php?topic=14315.msg238833#msg238833)
Removing Excalibur II time condition manually (http://forums.qhimm.com/index.php?topic=14315.msg248637#msg248637)
Ensure that characters enter the party at level 1 (http://forums.qhimm.com/index.php?topic=14315.msg237581#msg237581)
List of animation IDs and who use them (http://forums.qhimm.com/index.php?topic=14315.msg253853#msg253853)
Delay the availability of some chocographs (http://forums.qhimm.com/index.php?topic=14315.msg268867#msg268867)
Manually extracting a Beatrix mod out of Alternate Fantasy (http://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=2#c276237094325785813)
How to mix some of the standard mods (http://forums.qhimm.com/index.php?topic=14315.msg237980#msg237980)
A word about background and walkmeshes (http://forums.qhimm.com/index.php?topic=14315.msg239117#msg239117)
HW format for text file batching (http://forums.qhimm.com/index.php?topic=14315.msg237956#msg237956)
List of Music ID (http://forums.qhimm.com/index.php?topic=14315.msg269706#msg269706)
Bug when making a multi-hit spell animation (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg230211#msg230211)
Adding custom text font (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg213039#msg213039)
Using Memory card saves after modding (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg212984#msg212984)
Fixing "The Collector" Tetra Master bug (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg214553#msg214553)
Change the initial items + hex-hack to give supporting abilities to Beatrix (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg241840#msg241840)
MIPS editing + controlling someone else than Zidane in fields for PSX (http://forums.qhimm.com/index.php?topic=14315.msg239490#msg239490)
Grudge's MIPS spell formula (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg239660#msg239660)
Adding/Replacing 3D Models - buggy (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg255679#msg255679)
Removing (some of) the bubbles appearing when you get close to NPC on Steam (http://forums.qhimm.com/index.php?topic=14315.msg248727#msg248727)
Removing the stat growth of characters (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg248318#msg248318)
Modding Magic Stone growth of characters (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg249629#msg249629)
Modding the stat growth and upper bound of characters (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg255270#msg255270)
Skipping the last two cinematics of the game (Steam) (http://steamcommunity.com/groups/ff-modding/discussions/13/350533172684330089/?ctp=2#c1488861734096802623)
A few informations about Special Effects models and why they are maybe the most difficult thing to mod (Explanation message (https://steamcommunity.com/app/377840/discussions/0/353915953249510749/?tscn=1586011860#c1866119961557697697) - Explanation video (https://www.youtube.com/watch?v=HFGIX-ECGeA))
dnSpy: fixing a bug with weapons floating mid-air at the start of some battles (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg257240#msg257240)
dnSpy: Fixing the descriptions of Carbuncle's and Fenrir's alternate forms (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg277655#msg277655)
Making a system for key items that unlock synthesis recipes (Steam - Memoria) (https://forums.qhimm.com/index.php?topic=14315.msg289547#msg289547)

//================ BONUS =================//

Simplified Game Scripts

Here are some scripts of systems or mini-games that are of some interest if you wish to know how the game works in-depth.
FFIX Code Folder (https://www.dropbox.com/sh/8ce6b73316gkx0x/AAA2-z3GCFZf3-Ed-6htDRmCa?dl=0)

Hidden dialogs

Here are some few interesting secret dialogs, never used in the game.
I've also made a patch to enable some of them in-game:
Hidden Dialogs (PSX) (http://www.romhacking.net/hacks/2112/)
Hidden Dialogs (PC) (https://www.dropbox.com/s/ejifo5amf4kkcyc/PC_HiddenScenes.zip?dl=1)
And a video (https://www.youtube.com/watch?v=paxguJo6AqA) showing the patch's content.

Don't hesitate to tell me if you find more unused dialogs: I'll add them to the list ^^

Alexandria [Unused small chats]
Alleyway Jack “There are 100 types of cards, altogether, but remember, you can only hold 100 cards total.”
Alleyway Jack “Hmm... No can do. I still got work to do.”
Boy “Only nobles are allowed inside the castle, so us commoners hafta watch from the rooftops.”
Dante the Signmaker “Break time!”
Dante the Signmaker “Sure don’t feel like workin’!”
Dante the Signmaker “Well... Time to get back to work!”
Dante the Signmaker “I just finished a day’s work. Save it for later, kid!”
Ruby “There was sumthin’ funny ’bout that girl...”

Alexandria [Over the roofs...]
Puck “So, Vivi... Is this your first time in Alexandria?”
Vivi “Uh... Um... Yeah. I bought my ticket from a moogle wearing a hat...”
Puck “Bad luck! If I ever find that moogle, I'll hurt him plenty!”
Vivi “Uh... Thanks...”
Puck “Alright! Just a little farther 'til we can see the stage!”

Alexandria Castle [Promoting sign for Treno]
§ Treno, Alexandria §
Kingdom’s sole town of freemen.
Home to many nobles.

Prima Vista [Unpopular opinion: bugs are cute]
Garnet “Why does everyone fear these cute little bugs so...?”

Prima Vista [Garnet thinks Zidane plays Marcus] (found by janglingargot (https://www.reddit.com/r/FinalFantasyIX/comments/1anato8/unused_lines_from_the_i_want_to_be_your_canary/))
Zidane “(I-I'm not Marcus!)”
Garnet “(Oh dear, I'm sorry!)”

Ruined Prima Vista [Disastrous crash]
Blank “Sheez... This baby’s never gonna fly again. That’s for sure.”
Cinna “Is the princess alright?”
Blank “What? I thought she was with you!”
Cinna “No! I haven’t seen her!”
Blank “Oh, man. Maybe she got thrown off the ship.”
Blank “I’ll look for her inside the ship. You look outside.”
Cinna “Alright.”

Ruined Prima Vista [Steiner's bitterness]
[1/3]
Steiner “Those bastards... If they plan to demand a ransom, they're wasting their time. I'll see to it that they receive nothing!”
[2/3]
Steiner “Wretched thieves... I'll see them all hanged!”
[3/3]
Steiner “Those bastards... They will never get away with this!”

Ruined Prima Vista [<Whisper, whisper...>]
Steiner “Without your help, saving the princess will be most difficult.”
Steiner “As you know, magic attack is more effective than physical attack against some enemies.”
Vivi “Oh yeah...”
Therefore...
(<Thump-Thump...>)
Steiner “With your black magic, can you turn my sword into a magic sword?”
Vivi “What!?”
Steiner “It will add variety to my attack.”

Evil Forest [Blank's better acuity]
Blank “Zidane, go!”
Blank “Hey, Zidane...”
Blank “You hear that...?”
Zidane “...Something’s coming.”
Zidane “Let’s go! We’re gonna get surrounded!”

Ice Cavern [Quan's wisdom]
Vivi “My grandpa was the one who told me to go out and see the world.”

Dali's Inn [Do you need a reason to kidnap a princess?]
Zidane “Okay, maybe it’s none of my business.”
Zidane “But can’t you at least tell me where you’re going?”
[Later on the cutscene]
Zidane “Oh, it’s only a drag because of Rusty.”

Observatory Mountain [Good and Evil with Grampa Morrid]
Steiner “Alexandria, off course! Burmecia started the war, and we lost our king as a result.”
Morrid “Many wars were fought before the Lindblum Airship Revolution.”
Morrid “Alexandria intiated some of the wars against Burmecia. Now, can you tell me who was right or wrong?”
Steiner “I-I am not talking about the past! I am talking about the future!”
Morrid “What will you do if Alexandria starts a war?”
Steiner “When will the cargo ship arrive!?”

Lindblum Castle [Cargo Ship lore]
Student Engineer “Today, airships are used for all kinds of things. Long ago, they were used only for transporting cargo.”
Student Engineer “This cargo ship was built a long time ago by Regent Cid and Dr. Zebolt.”

Lindblum [Air Cab lore]
Attendant “The air cab is like a mini airship. The regent himself designed it.”
Attendant “It flies to the Theater District and the Industrial District in a matter of seconds.”
Attendant “Convenient, isn’t it?”

Lindblum [Preparing for the Hunt]
Zidane “Oh yeah! Today’s the Festival of the Hunt! I’m gonna win this year for sure!”
Zidane “I’d better buy some stuff.”

Lindblum Castle [Participants are numbered]
“You all have different starting points.”
Elite Guard “Zidane, Hunter No. 4. You will start in the Theater District.”
Elite Guard “Freya, Hunter No. 9. Your starting point will be the Industrial District.”
Elite Guard “Vivi, Hunter No. 2. You’ll start hunting in the Business District.”
Steiner “Master Vivi! No matter what happens, you must not lose to him!”

Lindblum [Wimpy bragger]
Wimpy Guy “I was watching the hunting festival. You sucked pretty bad.”
Wimpy Guy “I could’ve easily scored 500 points <hack-hack>!”

Gizamaluke's Grotto [Entering Burmecia]
Burmecian Soldier “This is the Gizamaluke's Grotto. It is Burmecia's border.”
Burmecian Soldier “No one is allowed inside without the king's permission.”

Qu's Marsh [Mene the knowledgeable]
Howdy! I’m Mene!
I’m just another moogle who’s wandered all over the world─you know...been there, done that.
I’ve battled monsters the size of mountains...
...discovered very rare chocobos...
...and explored forbidden dungeons in search of treasures.
Those were the good old days...
I know pretty much everything there is to know about the world.
So, if you have any questions, feel free to ask me.
Hey, what’s up?

Qu's Marsh [Quina in apprenticeship]
Qu “Six month already since my disciple left for Alexandria...”
Qu “I wonder how s/he doing...”
Qu “My disciple still far from mastering art of eating.”
Qu “Might never master it...”
[Also, isolated]
Steiner “You still do not have my approval to be with the princess!”

South Gate [There's only one man I call 'Bro']
Marcus “You already forgot? He got petrified in Evil Forest!”

Treno [A card tournament on the first visit?]
Card Game Usher “There’s a tournament going on right now! You must first register at the booth to your left!”

Cleyra [Meeting with the King and the High Priest] translated from japanese by luksy
Freya “It has been some time, Your Majesty.”
King of Burmecia “Ah, Freya, well met.”
King of Burmecia “The High Priest and I welcome you.”
High Priest of Cleyra “My Lady.”
High Priest of Cleyra “It would appear that this predicament no longer concerns Burmecia alone.”
Freya “I understand, Your Holiness.”
Freya “And yet...”
Freya “I fear my strength alone may not suffice.”
King “Freya...I know what troubles you.”
King “I must apologize for earlier.”
King “Can you ever forgive me?”
King “No! off course you cannot.”
King “But the fate of the people of Burmecia now hangs by but a thread.”

Cleyra [Tantalus play in Cleyra?!] translated from french by me
“Tonight, for the first time in a while, we will see the play of the Tantalus.”
“I'm looking forward to it!”
“Are you going too?”

Alexandria Castle [The "good" Jesters] translated from french by me
Zorn “Princess, we don't mean any harm.”
Thorn “That's because...”

Occupied Lindblum Castle [Royal funds]
Received 1 Million Gil!
Bring the item I asked for.

Occupied Lindblum [More reactions to the seizing of the city]
Alexandrian Soldier “The air cab will soon be under our control.”
Lindblum Soldier “I can’t believe we lost against soulless dolls...”
Alexandrian Soldier “War is hell. I just wanna go home...”
Alexandrian Soldier “I can’t follow the queen anymore...”
Alexandrian Soldier “Alexandria is invincible as long as we possess the black mage soldiers and our eidolon!”
Alexandrian Soldier “We took Lindblum in just one night!”
Alexandrian Soldier “Don’t you dare resist us if you wanna live.”
Soldier “We should’ve killed Brahne when we had the chance!”
Zidane “Even the air cabs got shot down...”

Occupied Lindblum Castle [Reaching Cid]
Don't get caught by the enemy!
Jump out when she looks away!
Man “The regent is waiting for you at the Base Level.”
Man “The enemy is busy loading supplies. Go down on the lift, now!”
Man “Once you get on the lift, my comrades will take care of the rest.”
Zidane “So, I just take the lift to the Base Level without getting caught?”
Yeah...
Zidane “Piece o' cake! Leave everything to me.”
Huh?
Is anybody there...?
A tail?
Meeow!
Oh, it's only a cat...
Zidane (Wow, that was a close one.)
Man “(You idiot!)”
Man “Whatever you do, don't get caught!”
Man “What's wrong? The regent is waiting at the Base Level.”
Man “Go now, or you'll get caught!”
Zidane “I gotta run while she's looking away.”

Occupied Lindblum Castle [The Ancient World Map]
Regent Cid “That is a national treasure of Lindblum!”
Regent Cid “It was passed down through my ancestors, since the days of the first regent.”
Regent Cid “It was probably made before our continent was covered in the Mist...”
Regent Cid “That is an ancient map of the entire world!”

Occupied Lindblum Castle [News reach the Dragon's Gate]
Merchant “What now?”
Merchant “What!? Lindblum got invaded!? Oh man!”
Merchant “I’m gonna have even less business now!”
Merchant “I’ll be here for a while. Come back if you need anything.”

Iifa Tree [Alternative fighting call against Soulcage]
Zidane “Shut up! You’re through!”
Zidane “Vivi, Don’t think, just fight!”

Madain Sari [The surprise attack with Mog]
Zidane “I’m gonna surprise her. Then, she’ll be all ours. Just leave it to me, okay?”
Zidane “You understand what I’m saying, right? Eiko needs help!”
Morrison “Mog! They need you, kupo!”
[Later on...]
Lani “Trying to distract me? No go, joe. I’m havin’ a great day.”
Zidane (Time to get it on!)
Lani “Stop dilly-dallying!”

Alexandria [Balloon Mini-game] translated from french by me
Girl “You want to play with us?”
Girl “You've got some time to gather balloons and give them to the boys behind us!”
Girl “You get more time depending on the color of the balloon that you bring.”
Green → 5 more seconds
Yellow → 10 more seconds
Blue → 15 more seconds
Red → 30 more seconds
Girl “All the three of us have a balloon and we are somewhere on the square.”
Girl “Well... Start!”
Boy “X more seconds! You have Y points!”

Lindblum [A smith and his apprentice]
Torres “Wayne saved me during the attack on Lindblum.”
Torres “Maybe it’s time for me to retire...”
Torres “He is so humble!”

Lindblum [A card master and his apprentice]
Card Freak “It’s hard, ’cause you don’t wanna lose rare cards, but that’s the only way to get better at it!”
Card Boy “I wanna get better!”
Card Freak “I’ll think about it after I beat this guy with the tail.”
You jerk!

Lindblum Castle [Toxic working conditions]
Soldier “Watching the dull, heavy Mist really gets me down.”
Soldier “Oh, I hate my job.”

Oeilvert [Doppelgänger extra lines]
Zidane: How have you been? | I’m gonna mug you! | Do you like my tail?
Vivi: I don’t like magic barriers. | That’s enough! | Stop! You’re hurting me!
Garnet: I’m sixteen, a full-grown woman. | Do you know who I am? | I want to use White Magic.
Steiner: I shall not forgive you! | Hey! Hey!!! | I will go!
Freya: Wanna go out with me? | What are you doing here? | I must buy a new spear.
Quina: You taste delicious? | Ouch! I bite my tongue. | This fork too heavy!
Eiko: I’m bored of moogles. | Isn’t my horn the cutest? | I wanna summon!
Amarant: No one understands... | This is silly... | Darn it...

Mount Gulug [Rumbling]
Kuja “Ah, Garland... He sure threw a wrench into my plans.”
[During the extraction]
Zorn “Come forth!”
Thorn “Odin, demon of the dark!”
[After the extraction failed]
Zorn “We will double our efforts!”
Thorn “Double our efforts, we will!”

Mount Gulug [Comprehensive lady Hilda]
[After noticing Cid's moustache]
Hilda “Forgive me, my darling. I failed to notice.”
[After Eiko says she's gonna make Kuja pay]
Hilda “Oh, so this fine young lady wishes to avenge my honor?”

Bran Bal [Bio engineering subtleties]
So the souls of Terra may begin a balanced cycle, it was necessary to preset age, the amount of time before the body fails.
Gravity on Terra and Gaia is identical so that our ambulation senses may apply.

Final [Impossible love] partly translated from french by me
[When Blank plots behind the stairs]
Blank “Forgive me, Marcus, for thy dear love will not see thee at the docks.”
[Later]
Marcus “Dawn comes anon.”
Cinna “She who you waited for is not here?”
[After "She told me that she could not live without me."]
Marcus “But for that reason a war will break out and many lives will be lost...”

Final [The 2 worlds' fusion]
The Iifa Tree could not be stopped...
Gaia and Terra's fusion
caused global chaos,
destroying many cities and
taking many lives...
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-06-06 21:31:18
link not working :/
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-06 21:36:56
Fixed, I added quotes around the link but it wasn't needed...  :roll:

Thanks for warning !
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-06-06 21:37:32
Thanks  ;) by the way im sure you can add the .dll into the program when building it. Some people choose to leave them out because it makes the program bigger i believe. I've heard of "external dependencies" when building source code so im sure you can choose to have it built into the program or make it so you can get the .dll seperately. Not sure how Codelite + wxFormBuilder works though.
Title: Re: [FF-IX] Hades Workshop
Post by: JBedford128 on 2013-06-07 14:47:42
Well, this saves me time trying to make my own program with my very limited knowledge on reading from files.

You may want to look at this (http://forums.qhimm.com/index.php?topic=12648.msg176861#msg176861). I noticed you are missing some of the stats.

Also I haven't figured out the statuses yet. I know some relate to class (Aerial enemies are immune to Float, for example). And I haven't found where the Card is stored. But I imagine the Card drop might be based on the encounter/formation and not just individual enemies. I don't know where the formation data is so I haven't looked around. Also I see where the attack data is probably stored (after the enemy stat data) so this guide (http://www.gamefaqs.com/ps/197338-final-fantasy-ix/faqs/20490) may prove useful if you plan on figuring that out.

I assume what the program calls CP is actually AP?

I also think it would be useful if you still gave the number of the formation. So on Disc 1, the Beatrix battle is file0, so having it say "0: Beatrix" would be a help.

But anyway, I love you for doing this. This is extremely useful.
Title: Re: [FF-IX] Hades Workshop
Post by: nfitc1 on 2013-06-07 14:56:13
Thanks  ;) by the way im sure you can add the .dll into the program when building it. Some people choose to leave them out because it makes the program bigger i believe. I've heard of "external dependencies" when building source code so im sure you can choose to have it built into the program or make it so you can get the .dll seperately. Not sure how Codelite + wxFormBuilder works though.

Depends on the library. If the source is open you can copy what you need into your project. Otherwise, it's safest to distribute the library with it as it may have external dependencies as well. Honestly, size doesn't matter so much anymore. Back before Harddrives were less than 10 GB it would be important to cram as much into as little as you could. Now it's hard to find a machine with less than 80 GB which is more than enough for most people (although my 2TB machine is more than half full :) ).
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-07 16:15:04
Many thanks for the links, JBedford128. I didn't see this topic before ! Very useful.
About enemies' attacks, I know some things about it but the datas are splitted everywhere and particulary in the script file for the AI (that includes which monster uses which attacks...). I still lack knowledge on scripts, though I got some opcode values.
Yeah, maybe the card drop is in the enemy formation, there are a couple of bytes I don't know in it.
And yes, CP -> AP. CP is the french thing and I messed up ^^'.

Quote
I also think it would be useful if you still gave the number of the formation. So on Disc 1, the Beatrix battle is file0, so having it say "0: Beatrix" would be a help.
Okay, I'll add that.

I'm quiet sure there is a simple way to remove the dll dependancies (it should be an option passed to the compiler) ; my attempts to do it just didn't work  :(

Next version will be focused on being able to overwrite datas. It'll be limited anyway but I'll try to make it as full as possible.
Title: Re: [FF-IX] Hades Workshop
Post by: nfitc1 on 2013-06-08 02:14:40
I'm quiet sure there is a simple way to remove the dll dependancies (it should be an option passed to the compiler) ; my attempts to do it just didn't work  :(

I don't think dll embedding is possible. I do enough assembly and disassembly to know that there's not a simple flag to tell a compiler to rip the code out of a library and mesh it with your code. There are lots of reasons this would not work. Unless you can get the source code of these libraries in your target language then I wouldn't think about integrating it into a single executable. I could give lectures about why trying to do such a thing is bad practice, but I'll spare you if you just trust me when I say you shouldn't.
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-06-08 05:44:14
I think its better you keep it the way you have it with the .dll files just added to the rar/zip. you can always make the dll part a last priority (you can come back to) once you feel the program has developed enough.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-10 17:06:28
Updated. I've update the link in the first post so you don't have to search the last version through the topic.

The program may now overwrite datas directly in the binary file. Be careful because you can't unedit what you've done. I'm planning to add a system that saves a backup of the original datas in the .hwf file (when you open the file for the first time) but that's not done yet.
I also fixed that "fatal error" message when you exit the program.

About what you can edit, what you can't edit and what is limited (long boring post incoming :P) :
- texts are limited both in size and in printable characters. You may only use characters from the US/EU char table (link (http://wiki.qhimm.com/view/FF9/CharTables#Character_Table_for_EU_.26_US_version)) and size is limited to what the size initially allocated for all the datas of the same type. For instance, in the US version, there is a size of 1608 characters for ALL the spells names (including the terminating character, so it actually does 1416). In general, there is only up to 3 extra characters so you will most likely have to remove the names from other spells to get some space.
- You can't edit the enemy names yet (there is a way to have more space for them but that will be for another version).
- Commands spell lists are also limited. You may link 2 commands to increase the limit (they would share the same spells). White Magic and White Magic+ are linked by default, as well as Black Magic and Black Magic+ but you can link Dagger's eidolons (trance and normal) and the 2 Beatrix Seikens (dunno why there is 2 of them) so you win 12 spells to put anywhere for free.
- Editing commands don't change the spell list in the menu (only in battle). It doesn't add AP requirement to the character either, so he can use it without having to learn it.
- I added the "Model ID" field to the enemies, but that's more for testing and curiousness than for real use. I'm pretty sure it won't be simple to change the model. I haven't test it yet though.
- You can't change the enemy groups, apart from its frequency and the AP it gives. It would be safe to remove an enemy from a group but any other change would have bugging results.
- You can add up to 32 items to a shop, period.

I removed the "Targetable" flag. I thought it were used by things like the battle with Steiner and the Bomb behind him but that's not even the case. Since it's more something that deals with the battle's script, I'll leave it out for now.
I also added names to the shops. It may be inacurrate for the weapons and armors shops and it is imprecise for the item shops. If someone can confirm the last one is the Zorn and Thorn's shop right before Oeilvert, it would be nice of him.

I'll stop searching for removing the dll dependancies, then. That's not a priority either, as you said, xenokain ^^

Oh, and I added the numbers in the enemy list. I'll make it optional in the following versions, though.
Title: Re: [FF-IX] Hades Workshop
Post by: xLostWingx on 2013-06-10 18:43:14
Love to see work being done with IX  ;D Keep up the good work man.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-06-10 23:55:01
it is very cool). add image extractor and simple chars font editor. like chenge ierogliphs on other chars.
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-06-11 01:32:08
Thanks for the updates  ;D This is extremely useful.
Title: Re: [FF-IX] Hades Workshop
Post by: JBedford128 on 2013-06-11 17:36:02
I've noticed something strange with some bosses. They are displayed as having 10000 HP more than they actually have in the game. This explains why I couldn't find Ozma in the data when searching for his HP, and it also explains why Ozma has 55545, 10000 less than the upper limit.

There obviously is a flag that does this. Friendly Yan proves that 65535 HP is possible. So a flag removes 10000 HP from the given amount, which I can't think of any good reason for.

Edit: Well I think I might have found it. Before the HP value there is a string of 0s (in hex). But I noticed that both Beatrix and Prison Cage had an 80 (so 80 00 00 00 before the HP value). So I changed the 08 to 00 for Prison Cage, and used Death. And Death killed it. I didn't see its HP count though. So that might have just been some statuses that I changed. (additional note: Using Death on Prison Cage causes a game hang).

Edit2: Doesn't effect HP, but does effect some status immunities.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-11 19:14:57
Nonono, that's not that, that's AI-relevant.

When an enemy dies, he just dies, but some bosses (like Ozma, or even the very first Masked Man) actually have a more complex dying animation, which is in fact a spell (Maliris's ending movement is the only one that actually does something). So they have a scripted event : "When they have less than 10000hp, the ATB pauses, they cast a spell and then they die". There is a part of the hexa code about what I think is the event setup for Masked Man's battle :
Code: [Select]
05 D6 1E 0E 7F 02 EE 00 05 79 01 29 24 7D 10
27 1E 2A 7F 02 08 00 05 D6 1F 7D 01 00 2C 7F
10 27 = 10000.
05 is the variable assignement opcode, so it's only about setup (38 is the opcode for an enemy to cast). I don't know a lot about how variables are coded but you can assume the opcode 05 is 7F-terminated. I don't know for sure what 02 is but it seems to be a sort of a JUMP opcode (01 is also JUMP, though...).

Ok, I just saw your 2nd edit. That's a good thing to know nonetheless, thank you :D

EDIT : Ha, sorry, that's not Masked man's battle, that's beatrix's battle. I just went confused with "1st battle in the game" and "1st battle in the battle list"  :oops:
Title: Re: [FF-IX] Hades Workshop
Post by: JBedford128 on 2013-06-11 20:35:38
Oh, that makes a lot more sense. ^_^

Death is tied to this, as both worked on Parasite Cage when I set it to 00. It also allowed Scan to work (it just seems to Miss otherwise), which allowed me to see the true HP. Everything else was Guarded (but I didn't test Venom (no player ability natively has it) or Vanish (which natively targets only allies)).

I don't understand Eat's relationship to it. I could Eat Parasite Cage (well, i didn't (i don't think i could given its HP), but it said "I can no eat until weaker"), but for Garnet it just plain said "I no can eat".

Edit: Oh wait, Garnet gets immunity from Eat because she is of the Humanoid class. Remove the class and she can be Eaten.

So I did some more digging.

Part of the enemy file:
----------------
00 00 00 00 [first-status-set. Status immunity]
00 00 00 00 [second-status-set. Status evasion, and sometimes auto-status]
00 00 00 00 [third-status-set. Status at beginning of battle/sort-of auto-status]
00 00 [HP]
00 00 [MP]
--------------------

Now, with regards to the status immunities:
Byte1 (01=Break, 02=Venom, 04=Virus. 08=Silence, 10=Blind. 20=Annoy, 40=Zombie, 80=??)
Byte2 (01=Death (but not Eat), 02[messes up targetting?], 04=Confuse, 08=Berserk, 10=Stop, 20=Auto-Life, 40=??, 80=Defend)
Byte3 (01=Poison, 02=Sleep, 04=Regen, 08=Haste, 10=Slow, 20=Float, 40=Shell, 80=Protect)
Byte4 (01=Heat, 02=Freeze, 04=Vanish, 08=Doom, 10=Mini,20=Reflect, 40=???, 80=Gradual Petrify)

It's the same statuses with all three sets of status thingies. 80000000 seems to do nothing, but the third-status-set uses 80000000 as a Death immunity. 00020000 is odd as an immunity. I'm not sure I could actually hit the enemy with it on.

So the first-status-set is Guard immunities.

The second-status-set work the same as immunities, but instead of saying "Guard" it says "Miss". Its other benefit is auto-statuses. The ones I've noted are Auto-Float, Auto-Haste, Auto-Reflect, Auto-Slow, Auto-Berserk, Auto-Poison, and Auto-Regen. I didn't go through each one individually, since I got the gist, so there may be more. However, I think Auto-Poison may be purely cosmetic. Unless I've forgotten how Poison worked, I sat waiting for the enemy to take damage but never did. I also suspect Auto-Slow may be cosmetic. I do know that Auto-Reflect works though.

There is also something interesting about Auto-Haste and Auto-Slow. When both are on, both the Haste and Slow indicators will appear next to the enemy. If one is on, and the one that is not on is inflicted on the enemy, both indicators appear then also. This could just be evidence that both are cosmetic and do not function as Auto-Statuses. But I don't know for sure.

The third-status-set inflicts the status at the start of the battle, however the effectiveness of this changes:
-If Stop is a selected status, then it can be removed. Unlike the second-status-set, there's no forced Miss.
-If a status is a temporary status (is removed after a duration) then the status does not stick. A graphic will be seen on start-up but that's it.
-For the countdown statuses, the countdowns are removed. If Doom is a selected status, the enemy will get Death instantly.
-00400000 seems to be Trance. The Masked Man was glowing, but it didn't do anything.
-00010000 and 00000040 have the enemy disappear and commands are never completed.
I also looked at other unknowns in an attempt to find out what they were. The two-bytes after the Animation IDs: Only of the bits in these bytes seems to do anything. "01" makes Prison Cave (the enemy I was testing on at the time) invisible.
-80000000 is the oddest. As discussed before, this is what bosses have. It Guards Instant Death, it makes Scan Miss, it makes Eat Miss (No can  eat), and a new revelation is that it makes Demi Miss too.

Also, after the Steal data, there are two unknown bytes, and then another set of two unknown bytes. For that second set of two unknown bytes, I set it to FF and it meant that when my characters attacked, they actually passed through the Prison Cage and attacked behind it. So these bytes may decide which part of a model the characters should attack.

Additionally, further down, the seventh and eighth bytes after the bytes deciding Blue Magic: These dictate where the cursor appears in relation to the enemy. I switched it to FF and it made the cursor jump all over the screen, but I also set it to a more stable figure that moved the cursor a couple feet upward from its original position. Additionally, my characters attacks towards the cursor. So this is like the bytes I mentioned before, except the offset effects the cursor too, which is not the case for the other ones.

Sorry if any of that wasn't clear, I'm not good with explaining things or words.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-13 01:13:57
It's clear enough, thanks.
I know a bit more than what the programs currently displays. I'll try to write it down.
The Enemy Chunk data has an ID of 10 and begins like every other chunk (see the wiki for that).
Then there is the "groups" datas :
Code: [Select]
1 byte Unknown
1 byte NbGroups
1 byte NbEnemyTypes
1 byte NbAttacks
2 bytes Battle Flags
2 bytes Unknown

Then comes [Nb Groups] times this :
Code: [Select]
1 byte Group Frequency
1 byte Nb Enemies
2 bytes Engaging camera ID
2 bytes AP
2 bytes Unknown
[
1 byte Enemy ID
1 byte Targetable Flag
2 bytes Unknown
2 bytes Position X
2 bytes Position Z
2 bytes Position Y
2 bytes Facing Angle
] (x4)

Then come the enemy's stats (the part you investigated). There are [NbEnemyTypes] of them (thx to you : I didn't know the purpose of the first 12 datas) :
Code: [Select]
4 bytes Status immunity
4 bytes Status evasion/auto-status
4 bytes Status initial cast
2 bytes HP
2 bytes MP
2 bytes Gils
2 bytes Exp
4 bytes Drop Item
4 bytes Steal Item
1 byte Unknown
1 byte Collision size (it tells how large some effects must be, such as scan)
2 bytes Aiming position, as you said (though I don't know more how it should be interpreted)
2 bytes Model ID (thx Zande for this and the followings)
2 bytes Animation ID 1
2 bytes Animation ID 2
2 bytes Animation ID 3
2 bytes Animation ID 4
2 bytes Animation ID 5
2 bytes Animation ID 6
4 bytes Unknown
2 bytes Attack Power
1 byte Speed
1 byte Strength
1 byte Magic
1 byte Spirit
4 bytes Unknown
1 byte Elemental guard
1 byte Elemental absorb
1 byte Elemental half
1 byte Elemental weak
1 byte Level
1 byte Class
1 byte Unknown
1 byte Physical defence
1 byte Physical evade
1 byte Magic defence
1 byte Magic evade
1 byte Blue magic
2 bytes Unknown
2 bytes Cursor position (not the one you mentioned but pretty much the same thing if I remember well)
2 bytes AKAO death ID (sound when he dies)
2 bytes Cursor position (the one you mentioned)
16 bytes Unknown
2 bytes Shadow Gap Y (didn't investigate it...)
7 bytes Unknown
1 byte Drop card
10 bytes Unknown

Finally come the attack stats. [NbAttacks] times this :
Code: [Select]
1 byte Unknown
2 bytes Model ID (though it seems unused ; the real model ID is in the 0x11 chunk file with the attack animations)
1 byte Unknown (often 1F or 5F)
1 byte Effect
1 byte Power
1 byte Element
1 byte Accuracy
1 byte Flags ("use reflect", "is magic" and I don't know the others, unfortunatly :/)
1 byte Status
1 byte MP cost
5 bytes Unknown
And finally, 4 bytes end the whole thing, but I don't know what it might be.

About opcodes, since that's the most interesting thing I would want to hack next. Here is what I know :
The arguments of most opcodes can be either raw values or variable codes. A variable code is a list of variable operations terminated by 7F. I won't list operations here but there is a sample :
Code: [Select]
D40D 7D0200 20 D809 7D0000 18 27 7Fis translated into :
Code: [Select]
( Var_D40D == 2 ) && ( Var_D809 < 0 )20 is the == operation, 18 is the < operation and 27 is the && operation and 7D announce a short numerical value. So it is read like that :
Code: [Select]
D40D 7D0200 20 -> ( Var_D40D == 2 )
D809 7D0000 18 -> ( Var_D809 < 0 )
27 -> ( Var_D40D == 2 ) && ( Var_D809 < 0 )
The result is put on the stack (for a following conditional jump, for instance).

The list of opcodes and their effect (for those I know of) can be seen in the file "Hades_Strings.h" of the source code. I don't list them cause there are a lot of them...

I'll update this post if you or me find more informations. Now I just discovered that the US version and the french version have a huge difference : in the french version, some important datas are compressed (with a compression method called RNC) in a sub-file, making them impossible for me to edit. But that's not the case in the US version... So I guess I'll end up making this program only open the US version...
Title: Re: [FF-IX] Hades Workshop
Post by: JBedford128 on 2013-06-14 16:16:11
The third set of status bytes do not have anything to do with immunity, they are just initial cast, and the status can be removed by standard means (like Remedy).

The fifth byte (first unknown byte, after number of attacks) of the data:
- 01 = When the battle ends in a non-standard way, do not continue battle.(used for bosses and friendly enemies--allows to continue fighting boss after death sequence if turned off)
- 02 = Always back attack
- 04 = [Unknown]
- 08 = [Unknown]
- 10 = no victory pose/no fanfare.
- 20 = cannot escape
- 40 = enemies are out of reach? (Masked Man could still hit me for full damage, i could not hit him)
- 80 = Cannot use magic (greyed out in menu, party members at least)
Sixth byte:
- 01 = Attacks take off a lot: I assume this is the Ipsen effect- weak weapons do more damage
- 02 = [Unknown]
- 04 = [Unknown]
- 08 = prevents the battle results screen.
- 10 = [Unknown]
- 20 = [Unknown]
- 40 = [Unknown]
- 80 = [Unknown]

Since my tests were against Masked Man I could have missed things, like if the unknowns were to effect EXP or Drop, or if the victory poses of some of the characters played or not (although it wouldn't make sense to decide that in the battle data- i thought the same about Magic block and the reverse weapons though).

For the first unknown (byte5) in Attack stats, you state it can only be 1F, but I have seen 5F frequently.

And I am using the PAL UK version and it seems to match up to the US version quite well. I've seen some differences, but most are translation.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-14 20:21:08
Ah, that's a good thing to know. I thought that RNC thing would be used by every european versions.
The header begins with "RNC\1" so if you search the hexadecimal sequence "52 4E 43 01" and find no results, it's sure that's not used. But I trust your test, it may just be a cleaner way to know it.
But for now, I don't seek datas written in this part of the file. That'll become a problem when I'll look for items, characters' stats and supporting abilities.

Thanks for testing the flags :)
I can't do as much testing as I would like to and I'm really grateful you take care of some. I'll release a new version soon, but I would like to make that backup system before.

By the way, the 3rd status set is used for death/eat/scan immunity, no? Even if it's only 1 bit. Also, what is break? You meant petrify?
Title: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: JBedford128 on 2013-06-14 21:29:52
Oh yeah, I forgot about that one bit. :p

And by Break I do mean Petrify. Break is the name of the spell. I did the same with Annoy: the status is actually "Trouble" but at the time my main source for status name was ability name.

Also I think I've very likely found the value that stores the card. Dendrobium and Fang both store "01" (both holding the Fang card, the second card) in the byte, and Goblin stores "00" (Goblin card, the first), Beatrix stores "FF" (no card), and Ironite stores 08 and Basilisk stores 05, which match up.

Code: [Select]
16 bytes  Unknown
2 bytes   Shadow Gap Y (didn't investigate it...)
7 bytes   Unknown
1 byte    Card drop (00 to 63, FF is none)
9 bytes   Unknown

I'll confirm this in an edit later (EDIT: Confirmed. I had a Fang drop an Airship card).

Above you may notice that I dropped a byte from what you originally wrote. The total I wrote would be 35 bytes in this section, but you have 36.

So take the Goblin/Fang one for example: After Goblin, there are 36 bytes in this section, then Fang's enemy-block starts. For Fang, there are 35 bytes in this section before the Attacks/Abilities block starts.

So there is an additional byte here between two enemies in the same scene? Or am I missing something?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-15 01:14:50
I checked again and I think you miscalculated.
That does 116 (0x74) bytes for all the stats.
Title: Re: [FF-IX] Hades Workshop
Post by: JBedford128 on 2013-06-15 01:43:37
Here's what I'm seeing:
Code: [Select]
[end of Goblin]
09 09 09 09 09 01 f9 00 ff 02 ff ee 01 00 f6 f9
fc 00 17 00 b6 00 b4 00 01 00 00 00 00 00 01 00
00 00 00 00                          [36 bytes]

[Fang]      04 e0 00 44 00 00 00 00 00 00 00 00
44 00 aa 00 5a 00 17 00 ff f4 f0 ff ec f0 ed f9
70 03 97 00 c9 06 c9 06 c1 06 cd 0d bd 06 bd 06
00 00 00 00 02 00 08 00 13 08 08 0a 10 00 00 00
00 00 00 01 01 02 64 0a 02 0a 03 00 09 00 13 00
82 00 03 00
           
            0d 0d 0d 0d 0d 01 fa 00 fd 00 fd f7
fc fc f6 f9 f9 00 83 00 ee 00 44 01 22 01 00 00
58 00 01 00 00 00 00                 [35 bytes]

[attack data]        00 00 00 fe 1f 08 08 00 64
2c 00 00 80 00 00 00 00 12 00 fe 1f 40 08 01 00
...............................................
The only explanation is the attack data is wrong. It has one less byte near the start, and one more at the end. Because it says there should be four bytes before the "usually 1F byte", so I assume there should only be three.

If that were the case, it would also explain why I'm seeing five bytes that end the whole thing instead of four.
Title: Re: [FF-IX] Hades Workshop
Post by: Caledor on 2013-06-15 02:07:32
Finally someone showing some love for FF9! Can't wait to see this tool completed! :-D
By the way will it eventually be able to edit things other than magic names like weapon names and so on? And it is possible to avoid the char limit restriction for those sections?

Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-15 11:39:54
@ JBedford128 : Oh, yeah, the attack is wrong, I saw that when I implemented it but forgot to correct here (there is 1 byte less at start and I forgot the accuracy). Sorry.

@ Caledor : Yeah, weapons will be editable, but that's part of the datas that are compressed in some versions (if it only concerns the french version, that's not a big deal, though...).
I can't remove the char limit restriction for now. I can't even tell whether it is easy or would require deep restructuration of the file.
The only thing I can do for now is merging the names when they are the same. I guess I'll eventually do that.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-16 21:05:00
Update.
I added quiet a lot of stuff for enemies, some spell effects, fixed few bugs...
Also made the .ppf exporter. It does the same thing that a PPF creator, but much faster. The comparison is done between the changes you made and the file on the hard disk (so don't save before exporting the .ppf).

The enemies' spells animations are just there for information, they are quiet inaccurate or missing.

Now I'll take a break for a week.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-06-29 01:23:16
when add Πsymbol to text. program is crahing. and add import/export to .txt please
Title: Re: [FF-IX] Hades Workshop
Post by: Avalanche on 2013-06-30 17:17:37
It is possible to add a "modul" where i can edit the game dialogues? We would like to translate the game to Hungarian and it will be awesome if you can help us with your awesome tool. : )
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-06-30 23:17:46
He's on break because hes tired. He's the only one working on anything ff9 related right now.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-06-30 23:39:39
I was not really tired but rather busy ^^ I'm back on the thing now.
I'll add a text module soon, yes.

About the Œ character, I fixed it, thanks. However, there is a "bug" with the text filtering : the program should filter unprintable characters such as £ or whatever, but it doesn't work if you copy-paste those characters, thus the fatal error when saving (but Œ should have been fine, that was my oversight).
Title: Re: [FF-IX] Hades Workshop
Post by: nfitc1 on 2013-07-01 11:38:39
What code language are you writing this in?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-01 11:50:44
Check the first post : that's C++.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-02 20:05:46
Greetings. there was a problem. from the menu select the name can not fit all the letters. and those that are replaced by the symbols are not displayed. (24 letters of the English against 33 Russian) characters in the Japanese version but there are many more problems. may be possible as anything from there move it to also have a lot of character in US version.
Just tell me if anyone knows how to fix the width of the letters. some can not fit across the width (like М on screen, there was no place for the right shade, and Ж to be the width of a Ш)
p.s. screenshot of the test, I hope you'll understand what I mean. hard to explain, but still not their native language)
Here's a link to a screenshot
https://docs.google.com/file/d/0B6Bbbdpi5BzBbmxWbUd1QnoxdW8/edit?usp=sharing
It may also be added to the tool change in the width of each letter)
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-02 23:10:38
Na, I don't understant what you said. It's not my native language either so it's even harder to find out ^^'
I'm not even sure it concerns my program or another FF9 text editing tool.
Title: Re: [FF-IX] Hades Workshop
Post by: nfitc1 on 2013-07-03 00:18:58
Check the first post : that's C++.

Ah. I saw Codelite and wxFormBuilder and didn't know what those were. I might be able to help if you need any.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-03 01:15:51
Codelite is an IDE (instead of coding with the a basic text editor, I code with this and it takes care of all the compiling stuff, coloring the code, etc...) and wxFormBuilder is an add-on to wxWidgets, which is a GUI library (countaining functions for creating/customizing windows and everything related).

I'd gladly welcome your help if you can get used to how I poorly code ^^ But since I'll try to remake some part of the code, I guess it'd be better for you to help after I've done it.

EDIT : I said bullsh*t, that'll teach me to answer so late  ::) Fixed it now.
Title: Re: [FF-IX] Hades Workshop
Post by: nfitc1 on 2013-07-03 12:01:05
I wasn't thinking writing or co-authoring. I'm more of a "if you don't know how to do what you want to do" kinda helper. I'm no stranger to sloppy code. The first WallMarket had lousy code. I even came across code I had written 13 years ago! Talk about sloppy!! You know you've got a problem when you're naming variables "newGG" and "neoGG" in the same method. :(
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-03 12:59:49
Lol
Ok, I'll ask you if I'm struggled with something :)
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-04 18:40:00
Up. I had way more problems with text than I expected. And it doesn't work so well now...

I also added some features to facilitate the edition. You can sort spells, commands and enemies by alphabetical order and you can also make enemy changes faster with the option "Edit similar enemies" which make the stat changes shared by every enemies with the same name and level (to avoid changing every Beatrix fights together, for instance).

The bugs/problems there are with texts for now :
- You can't export them as .ppf : I saw there was a bug with ppf exporting so I'll try to fix that before I continue it,
- You may only shorten the texts : I need much more investigation on how texts are coded and I don't want to work on the saving feature until I've went further. However, you can export texts as a .txt file so you can begin to work on it if you want to translate FF9,
- Not all the texts are available. All the dialogs are, but pretty much everything related to the menu are not (the menu sections, obviously, but also the item names and such...),
- The special character µ is shown as plain text, as well as the code it calls. Shortly, that means that µ and some of the following characters (at least 1 but often more) are to be ignored,
- As a side effect of the previous bug, some few texts are misread and shortened while some others are longer than they should (you'll see what I mean if you encounter it),
- The first text block is incomprehensible. I don't know what purpose it serves.


Actually, I was more willing to work on scripts and opcodes. Anyone who has infos on how texts work would have my eternal gratitude, because that quiet bores me to find it ^^'
The rest of the post is some boring data informations I know.

So, about the 0x06 chunks, here is what I know :
Code: [Select]
2 bytes TextAmount
2 bytes Unknown/Unused
[
2 bytes TextOffset (from the first text offset position)
1 byte Some Flag?
1 byte Some Flag?
] x TextAmount OR TextAmount x 2
Remaining Texts
Sometimes, the datas are doubled. It might be when the 2nd flag is 0 that the current and the previous texts are linked but I don't really know... For what I saw, dialogs and field texts are doubled while battle texts are not. When texts are doubled, it seems the 2nd offset is the one used...
Here are the opcodes I know, occuring after the character µ (0xF9) :
- 2 (0x02) : slow text apparition (takes 1 argument),
- 4 (0x04) : tokenize the text (1st argument is the number of tokens and following 2 bytes-long arguments are their offset),
- 8 (0x08) : add multiple-choices feature (no argument),
- % (0x0E) : insert text specified in the script file by the command 0x66 (takes 1 argument),
- A-I (0x10-0x18) : insert the name of a team member (no argument),
- U-Z (0x24-0x29) : change the text color (no argument),
- È, Ó and - (0x55, 0x5C and 0x0B) : terminate text (no argument),
- Ü (0x63) : insert the pad square button picture (no argument),
- ò (0x71) : new line for multiple-choices feature (no argument).


EDIT : minor update to fix my chartable. Some special characters were somehow wrong or missing.
Title: Re: [FF-IX] Hades Workshop
Post by: Avalanche on 2013-07-04 21:28:22
Thanks for the good work, i hope someone will help you solve the problems. I follow your work every day.  ;)
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-12 06:51:20
Hi. how to work?  very need to add import/export to text (party)>spells and commands and helps
i waiting when you add export. but this you no add.
thanks for what you do
sorry for stupid language
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-12 10:44:56
Why would you need an import/export feature for texts that you can simply copy/paste?...
It would be a waste of time to me. I have more urgent things to do.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-12 15:00:28
Copy / paste would frequently. because working with the text would have to be much. Golosary be monsters \ composite names
replace the letters under the Russian font not once. why such a small thing would be very difficult if you insert it all manually
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-12 20:53:25
I guess adding a russian font shouldn't be too complicated. I'll think about it.

I don't understand half of your post. Please make efforts and don't use google translation.
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-07-12 21:18:57
He/shes better off asking someone from their native language to help them come back here and post in English.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-12 21:43:58
thanks for you think add russian font.
no translation Google even more difficult to explain. I will try to show

(http://5.firepic.org/5/images/2013-07/27/k5gnyef76m7y.jpg) (http://firepic.org/)

manually in hades workshop is harder to do than if it were the name of magic, etc in - text file. Because it could be done AutoCorrect letters to those that need - the entire text at once
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2013-07-25 01:43:09
in the future version are possible add more text than normal?

ex: english <-----> portuguese

I'm Back = Estou de volta
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-25 07:59:02
Yes it will. Not in the next version but maybe the one after that. You'll have a fixed size for each "Text block" and there will be some free characters (~50 I guess) unlike the spells/commands texts that have pretty much no extra space.

I had to rewrite a lot of the program, that's why it's taking some time (plus the fact I'm on holidays, ofc ^^).

By the way, shikulja, your image isn't displaying properly for me...
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2013-07-26 22:50:51
Thanks my friend, so I'll waiting for update of block size   :D
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-27 08:31:03
Update.

So, as said, I rewrote a lot of things :
- Texts are still displayed with "µ" but there are no more trailing characters after that. Instead of "µ+060Hurray !" you have "µHurray !" for instance. Some of the bugs I listed for the previous version are fixed : you can assume the way the texts are displayed now is the way it will be displayed in the final version.
- You may now edit any text (including the ones in the spell/command sections) using an extended text block.
- That extended text block can display the text as it is in-game, roughly. For now, not every opcodes are handled : the speed (not really accurate but fine enough, I think), the colors and some string replacement. The "µ" are not displayed there, of course.
- The extra text in battles is no more accessible. It will be re-added in the "Enemies" section soon.
- I didn't test the PPF conversion yet, it bugged a bit in previous version and I guess it still does (though I did some changes). The PPF conversion doesn't work at all for the "Texts" section for sure.

Additionally, I enabled the "Preferences" menu. The only settings that can be done are the color of the text window and the alphabet used (in the extended text block only).

Next version will be focused on fixing the PPF conversion (and possibly adding a reading feature for .ppf files), adding way to edit the text opcodes (for now, it can only be removed by suppressing the "µ", not added or modified) and increasing the maximum text length.

@ shikulja : Thanks, I just saw you fixed the image. I get the problem now, but cyrillic encoding is a bit of a mess ^^'. Can you try the program with the cyrillic alphabet and tell me if there are still bugs? If that works, I'll extend the cyrillic/greek display to every text extracted from FF9.
The fonts I use are "Cyrillic Basic" for cyrillic and "Symbol" for greek.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-27 10:12:37
program need wxmsw294ud_richtext_gcc_cl.dll

(http://i48.fastpic.ru/big/2013/0727/03/319a5cabe96aff06341f8d5304f4df03.jpg) (http://fastpic.ru/)

give me program with the cyrillic alphabet  or on new version incluted cyrilic?
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2013-07-27 16:04:25
I'm having the same error here,
(http://img809.imageshack.us/img809/4061/21qg.jpg)
I have a question: this new version have to insert text in *. txt? in the previous version only had to extract

tnanks for you reply my friend
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-28 16:46:42
When you have problems like that, you can always google the dll. I added it to the zip file nonetheless.
I may add an import feature for texts but that's not my priority at all.

Sorry for the missing dll.

EDIT : there were more than 1 missing dll... I'm re-uploading the thing.
EDIT 2 : Done.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-28 18:31:07
it is >preferens>game alphabet>cyrilic   

1. font not normal  in box(1 image)
2. program is hang when i "overwrite binary file" (2 image)

(http://i46.fastpic.ru/big/2013/0728/a6/e010f04a79a37ac92734d0512329c8a6.jpg) (http://fastpic.ru/)


other
(http://i47.fastpic.ru/big/2013/0728/09/0308ac82af20df4852f70dbb4d926209.jpg) (http://fastpic.ru/)




Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2013-07-28 19:55:26
When you have problems like that, you can always google the dll. I added it to the zip file nonetheless.
I may add an import feature for texts but that's not my priority at all.

Sorry for the missing dll.

EDIT : there were more than 1 missing dll... I'm re-uploading the thing.
EDIT 2 : Done.
Thanks Work very well, but when I Overwrite binari file the program crash and alsot the text are limited, but there is a method to edit freely, I say in the matter of adding many characteres as you want?

OBS: it's hard to know how to move in a program of this size, just as it is a great game franchise like Final Fantasy IX, good luck on your project.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-28 20:32:43
Ultimately, I guess that might be possible, but no one ever succeeded to do a thing like that on an ISO for what I know. The problem is that adding more characters means "pushing" the datas in the file and it doesn't like it.
Fortunatly, there is an extra space empty and unused after the text dialogs (it varies between 0 and 2048 extra characters for one text block). So I can use that space.
The only cautious is that I don't know exactly everything about how dialogs are encoded and I just need to do some tests to get it working well. I'm not planning on pushing the limit more than that.
Also, keep in mind that a lot of the texts in a text block isn't actually used (dialogs from CD X but present in CD Y, debug dialogs, etc...).

I can't reproduce the "overwrite save datas" bug. Does it happen even if you only edit a spell's power? Or is it related to text?
Did it re-scanned the file? The .hwf should be updated. If that's the problem, just delete the .hwf file and let the program redo one.

@shikulja : I think "Cyrillic basic" is meaningless then, since you have already the good font everywhere else (that wasn't the case in your previous screenshot)...

Anyway, I'll try to be a bit faster on the next version, so everything can work properly.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-28 21:15:48
I can't reproduce the "overwrite save datas" bug. Does it happen even if you only edit a spell's power? Or is it related to text?
Did it re-scanned the file? The .hwf should be updated. If that's the problem, just delete the .hwf file and let the program redo one.

1. and text and spells
2. yes rescaned automatic
3. yes delete .hwf file  not help
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2013-07-28 22:23:19
is random, but the same error occurs
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-07-30 09:01:21
Updated for a bug-fix version :
- Saves and PPF exportation work properly,
- Added a character filtering for the "Edit Text" window,
- You can export text using the extended opcode names if you find it more readable,
- Minor charmap changes.

Note that if you try to put unrecognized characters in texts (since there is a filter, the only way to do it now is to copy/paste them), the program will no longer crash on saves but instead turn those characters into "?".

I also modified the "Game langage" preference : it no longer change the font but change the encoding instead. I really have little clues about how I could make the program compatible with non-West European charset but if it is miraculously of any help, let me know it...
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-30 10:07:48
Working. but it still makes little sense ((
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-07-30 10:18:42
you can change the font to Arial. there is also Latin and Greek, and Cyrillic?
Title: Re: [FF-IX] Hades Workshop
Post by: itoikenza on 2013-08-06 23:21:49
Saves and PPF exportation work properly,

can it open saved ppf's? i would love that...
Title: Re: [FF-IX] Hades Workshop
Post by: demeterf on 2013-08-07 15:28:46
Hi!

This is a great program,
I'm waiting for the updated version, that can handle more text in dialogue boxes.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-14 20:15:11
Update.
I'm not spending as much time as before on that, unfortunatly :/

What's new :
- Character limitation is much more flexible for enemies and dialogs,
- You may move and remove opcodes in texts (not add yet - I do not guarantee it's bugless with every opcodes),
- Buttons are displayed in dialogs' preview,
- New pages in dialogs are now displayed with a ¶ instead of a space (it mainly affects Mogster's explanations),
- Font of the text editor switched to "Arial".

EDIT : Forgot to tell you that, if you can write lengthened texts, the text boxes' won't be resized accordingly, so you can't put anything you want either.
To change the box sizes, I guess it'll need to edit the scripts. That's on my to-do list but it's quiet a huge work (I'm a bit experienced on it by now, but I need to make the program read .ppf first).
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-17 08:49:07
Actually, I changed my mind. I won't do a .ppf reader but I'll add a way to save changes in a custom format. It will allow you to pass changes from a disc to another, for instance.

But there's also a trick to load .ppf (and be able to make changes in more than 1 shot ><) :
- Save your .ppf with the option "Add an undo feature",
- Apply your .ppf to your file,
- Open your patched file with Hades Workshop,
- Open each of the tabs (in order to load datas),
- Apply the undo patch,
- You may now export the additional changes you made as a PPF.

Note that "Export as PPF" works this way : it compares the datas between the file in your hard disc and the file you would obtain if you used "Overwrite binary file". The result is a patch that allows the upgrade :
from the file in your hard disc
to the file in your hard disc + the things you edited.

That's why you have to apply the undo patch before exporting as a PPF, so the file in your hard disc be the initial game file.

But this is a temporary trick. I mean I hope that next version you won't need it anymore.
Title: Re: [FF-IX] Hades Workshop
Post by: itoikenza on 2013-08-18 01:19:36
Great, thanks for the effort man. looking forward to the custom file export feature.
Title: Re: [FF-IX] Hades Workshop
Post by: Gine on 2013-08-23 10:19:34
I tried to translate FF9 in Asian language (Thai language) with Hades Workshop.

But it is always change to ??????.

I think it is because there are no alphabets in char table.

The problems are,

1. I don't know how to add/replace it into char table with hex edit tool.

2. I don't know how to use char table from QwimmWiki to find the position of char table.

Can you advise me to do this.

Thanks.  :)
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-23 12:42:01
I may try to implement asian support, but that'll take some work. I can't see the proper japanese characters in QwimmWiki and I guess Thai isn't written with kanjis anyway...

To be sure I properly got your problem :
1) You have a game version with an Asian alphabet,
2) When you open your file, dialogs and texts are meaningless because they use Occidental alphabet,
3) You copy/paste the dialogs you wrote somewhere else (with a notepad or something) in Asian alphabet,
4) You end up with texts in-game full of "?", as well as when you close/reopen the file using HW.

Are all these points right?
Title: Re: [FF-IX] Hades Workshop
Post by: Gine on 2013-08-23 16:34:53
1) I have English version of ff9.

2) It open perfectly fine in English language.

3) Yes, I did that.

4) Yes.

Thanks for your reply.  :D
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-23 17:12:16
I see, thank you... Unfortunatly, I can't force the game to use another alphabet than he uses. I'll try to see if I can figure out how to make it (if wiki's informations are right, I know where to look at least), but that will definitely take some time...

Also, how many different characters would you need, approximately? less than 200? more than 600?
Title: Re: [FF-IX] Hades Workshop
Post by: Gine on 2013-08-23 17:39:26
They are less than 80 characters.  :)

Here is the alphabets in Unicode for your reference.

http://www.unicode.org/charts/PDF/U0E00.pdf

Thai number is not important.

Whatever it can or can't add Thai alphabets.

I appreciate with your concern. Thanks.  :D
Title: Re: [FF-IX] Hades Workshop
Post by: itoikenza on 2013-08-25 21:17:29
Tirlititi is it possible to replace "Change" into any other command list instead?

here's what i tried, but nothing worked...
also the only reason i linked the "itoikenza" command list, is because it won't let me add moves otherwise...
(https://dl.dropboxusercontent.com/u/50488782/models/itoikenzaFF9Change.PNG)
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-26 19:23:57
Yeah, I know, I need more investigations on commands, but since dialogs was most asked, I went for it first.
Editing the "Change" spell also makes strange results : it seems to apply both the "change row" effect and another effect you would put.

Btw Gine, I found where a charmap is being defined from an image (that draws the characters). I had trouble reading images but Zidane_2 succeeded there, so I guess it may be possible in a relatively near future to use a custom charmap made from an image you'd import.
Title: Re: [FF-IX] Hades Workshop
Post by: Gine on 2013-08-27 16:06:32
Wow. That's great.  :D
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-28 01:23:17
Update :
- Added "Open Mod" and "Save Mod" to save datas in a special file (.hws). They can be used to share modifications across multiple files. Hotkeys for them are Ctrl+Shif+O and Ctrl+S ("Overwrite binary" hotkey has been changed to Ctrl+B),
- Added names for text blocks,
- Added options to sort text blocks similar to the ones for enemies,
- Added unknown flags in spell datas (if you figure out what's their purpose, I'm interested ^^ I guess some of them are about counter-attacks).
- Re-added the extra texts in battle.

About sharing datas across different CD for enemy and text datas : as you may display it, each battle and text block as an ID (identifier). The program simply uses that ID to identify the battles.

I had a lot of bugs with saving and opening .hws files at some point and I'm unsure I fixed all of them. You may got fatal errors or less important bugs... I'll release a bug-fix version soon if that is the case.
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-08-28 22:02:39
Link down...
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-28 22:06:11
That's because I'm updating it ^^'. There was indeed few bugs.
There was an old bug happening when you open/close several files in a row and a bug that made Enemy datas not always saved in HWS files.

Link's back in 10 min :P
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-08-28 22:23:55
How can you change (add/remove) magic from command groups?
If I remove Fire from Vivi black magic and I equip the first fire staff, he will not learn it?
If I add Holy to Garnet white magic, will it be automatically learned or will it need the item?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-28 22:45:57
"If I remove Fire from Vivi black magic and I equip the first fire staff, he will not learn it?" -> Didn't test it but I guess he'll still "learn" it but won't be able to use it in battle (though it may be useful for Steiner's sword).

"If I add Holy to Garnet white magic, will it be automatically learned or will it need the item?" -> She automatically learns it and can use it in battle (if she has enough MP).

I'm glad some people are interested in modding battles and not only translating the game because that's what I like most too ^^.
Those things are to be improved. I don't know exactly what I'm gonna do next... That may be either that (fixing/improving commands and spells), working on scripts or adding things Landon and Zidane documented about.
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-08-28 23:08:23
It will be nice to tweak a little the class experience...
Is there a limit to known abilities?
Can a char know other's abilities without some major animation problems? Like zidane performing lancer or some black magic...

Tomorrow I'll play a little with some modifications.

Very nice tool. One I would never expect to exist. Certainly opens the way to some major  FF IX mods.

Sir Knight,  I must give you the road...
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-29 09:51:54
Thanks :)

As far as I know, the only abilities with animation problems (for the playable characters) are Freya's abilities with the exception of Lancer (because there is no channeling).

There are also problems sometime with enemies abilities not made for being casted by allies/on enemies. "Purple Haze" (it's Troll's "Solution" ability, btw) is a good example of what may happen : when they do it, enemies go near the target and then release their stuff. However, as a party's spell sfx, the caster doesn't approach the target but you still see purple stuff on both the caster and the target.

Apart from that, there are special effects that should never be used for a regular spell, such as the infamous Ultima, which freeze the game after it's done. You can only access those by checking "Enable all animations" (though I may change this system in the future).
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-08-29 10:10:02
But you can't change the animation for a specific char, right. If you change a monster ability animation to fix the compatibily with a player, it would corrupt the original atack from the monster, correct?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-29 10:24:46
I guess (never investigated it) it would apply the change to both the enemy and party versions. But I'm confident that, depending how you'd do that, it may fix the problem with no side-effect for the enemy version.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-29 13:58:27
Update again... I found other bugs.

This one is a bit more annoying, since data was not saved in HWS the way it should have been. That means I'll add a "debugging" version of the program : it will load HWS files you created with the previous versions - or at least what it can retrieve - and save them bugless. Just "Save Mod" after having loaded a HWS file. Note that the bug only happened on "Enemies" and "Texts" datas : if you didn't use them in your HWS, no need to download the debugging version of the program.
Once HWS have been saved back, you have to use the regular version also. It's really only for people who spent some time creating a HWS file for their mod and don't want to do that again.

Hades Workshop - Debugging version (http://www.hiveworkshop.com/forums/pastebin_data/fxqiwr/_files/HadesWorkshopDebug.zip)
TO BE CLEAR : do NOT download the program with this link if you didn't use the version 0.17 or 0.17b or if you didn't save any HWS file with it. Download the program from the 1st post of the topic instead.

Sorry about that... It should be fine now since I used the new version for some time and didn't have anymore bugs with HWS files.
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-08-30 08:59:45
Ok... At first glance, everything working ok except I can't make ppf patches work on epsxe, it loads but simply does nothing.
Editing the .bin works.

Some animations are broken (rey's wind makes garnet do some crazy break dance, others make the char go into a defence stance) but overall, it works.

You cannot add a new ability, so you have o replace an existing one (boring for zidane).
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-30 17:56:16
I didn't succeed to make ppf patches work with ePSXe "Auto-apply ppf patches". Either we do it wrong or the ppf version my program makes is not compatible (it creates ppf 3.0). You can use ppf-o-matic instead since it perfectly works with it.

Since I'm at it, and since I'll surely have hard times working on that with the incoming end of the holidays, I'm updating one more time to fix a rare bug that corrupted the ppf exportation.
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-08-31 17:38:49
Confirmed... Changing freyas animations makes them compatible with other chars, but breaks the original animation... Still worth it anyway...
Why is carbuncle divided in 4 spells, and witch one must be added to the summon command?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-08-31 20:21:06
Carbuncle has different effects if Eiko's wearing special ores (Emerald, Diamond and Moonstone). The Ruby Light (gives reflect) is the original one. Same goes for Fenrir who is different when Eiko wears a Maiden Prayer.
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-09-01 10:10:26
I underdstand that... But wich one must I add to have the default attack? The reflect one? And it will still change based on the addon? And will it change based on the char using the ability or just eiko?

Oh, and by the way, how about two small arrows to order the abilities list?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-09-03 08:05:57
The reflect one, yes, and it will take the addon in account whichever character use the summon.
Sorry for slow answer... And thx for the suggestion, that'd be better indeed.

By the way, the 4th spell flag (the 2nd "Unknown" one) is about Counter attacks while the 8th is about Return Magic (it's only used by ennemies). But you can't counter or return a magic if the attacker/caster is a friend.

There's also informations about enemies' "Auto-statuses" and "Initial Statuses" :

EDIT about Steam version: Some of the "Initial Statuses" don't display properly ; it is the case for "Silence" for instance, which is effective if given as an initial status to an enemy, but won't display the little bubble.

[General]
With the exceptions of "Doom" and "Gradual Petrify", the battles are not won because of an auto/initial status.
When a status can't be cured, it means it can't be cured by any way (spells, items, time, physical attacks...).
Color changing is quiet bugged. It doesn't change in the right color most of the time.
[Blind - Reflect - Silence]
Init : status is applied at the beginning, works fine and can be cured.
Auto : status is applied at the beginning, works fine and can't be cured.
[Trouble - Confuse - Stop - Defend - Zombie - Virus (remove Evasion)]
Init : status is applied at the beginning, works fine and can be cured.
Init + Auto : status is applied at the beginning, works fine and can't be cured.
[Shell - Protect]
Init + Auto : status is applied at the beginning, works fine and can't be cured.
[Haste - Slow]
Auto : displays the SFX but doesn't do anything else.
[Sleep - Float]
Init : status applied but cured immediately.
Auto : status is applied at the beginning, works fine and can't be cured.
[Berserk]
Init : status is applied at the beginning, works fine and can be cured.
Auto : status is applied at the beginning, works fine, can't be cured but doesn't change the color.
Init + Auto : status is applied at the beginning, works fine and can't be cured.
[Regen]
Init : status applied but cured immediately (regen HP once).
Auto : status is applied at the beginning, works fine and can't be cured.
[Poison]
Init : status applied but cured immediately (deals damage once).
Auto : displays the SFX but doesn't do anything else.
Init + Auto : status is applied at the beginning, deals damage faster than usual and can't be cured.
[Venom]
Init : status is applied at the beginning, works fine and can be cured.
Auto : status can't be cured but only disables the attacks.
Init + Auto : status is applied at the beginning, deals damage faster than usual and can't be cured.
[Vanish]
Init + Auto : status is applied at the beginning, works fine, can't be cured but doesn't make invisible.
[Mini]
Init : status is applied at the beginning, works fine and can be cured. The enemy is however still normal-sized until it is hit.
Init + Auto : status is applied at the beginning, works fine and can't be cured. The enemy is however still normal-sized until it is hit.
[Doom]
Init or Auto : does instant death (with "Death" message displayed).
[Gradual Petrify]
Init : status is applied with a very fast countdown. Petrify in less than 5 seconds with any spirit value.
[Trance]
Init : makes the enemy shine and uses an attack countdown. The enemy stops shining and the battle bugs when the trance ends (for me, the next attacker was stucked and couldn't do anything until he died-revived while the others kept attacking).
Init + Auto : makes the enemy shine and can't be cured.
[Heat]
Init : status applied (color change) but cured immediately.
Auto : displays the SFX without changing the color but doesn't do anything else.
Init + Auto : status is applied at the beginning, works fine and can't be cured.
[Freeze]
Init : status applied (color change) but cured immediately.
Auto : displays the SFX without changing the color and only disables the attacks.
Init + Auto : status is applied at the beginning, works fine and can't be cured.
[Death]
Init : the enemy has greyed name and can't be targeted (or cancel the spells targeting it). Game crashs if the battle ends (if you run away...).
Auto : the enemy has greyed name and stops attacking when its HP reach 0 (and keep displaying its death animation everytime it's dealt damage) until it's healed.
[Jump]
Similar to "Death" but doesn't grey the name and disables the enemy's animations when it's hitted.

I'll try to think of a nice way to put informations like this in the "help" tab.
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-09-03 14:24:07
How far are you from equipment editing and texture replacement (like making steiner use beatrix textures, for example)?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-09-03 15:21:31
I've all to be done, but, as said, I can use the work Zidane_2 made so far. For equipments, there are complications I explained somewhere about RNC compression and I still haven't found any working solution for it (I have still few ideas, though, but that needs testing). Not to mention I'm indeed having hard works to do and I can barelly do few tests for Hades Workshop...

But what do you mean by "steiner use beatrix textures" ? You know about UV Mapping, right? If it were only replacing a texture by another, it could be done by copying a block of data from somewhere to somewhere else.

I guess I'll go for an exporting manager next : to include Zidane_2's tools in the program and try to make the corresponding importing features. If I can find more datas on spells and commands, that'll be good too (but I'm afraid some of them are RNC-compressed in some versions).
Title: Re: [FF-IX] Hades Workshop
Post by: eXistenZe on 2013-09-03 21:08:04
You can make a spell use another's animation and textures, right? Is it much different with a char?
And btw, increasing spell amount in a command list, is it possible?
Title: Re: [FF-IX] Hades Workshop
Post by: Tenko Kuugen on 2013-09-03 21:33:33
I'm keeping such a close eye on this that I will definitely make a full blown hack with this eventually. FF9 is my favorite FF game ever.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-09-04 16:53:43
@ eXistenZe : You mean the model? Textures are only drawings. I think it'll be possible to edit scripts (and add Beatrix to the party inside the story) before importing models for fighters.
And yes, you can add spells to commands with the limitations I explained (that is : special commands like "Attack" or "Defend" are hardly editable and you need to link commands or remove spells somewhere before adding others somewhere else).
You can link the 2 "Seiken" commands together as well as linking Dagger's "Summon" with "Eidolon" to gain 12 spell slots in the commands. I have no idea how I could increase the limit and I don't think I will before a long time.

@ Tenko Kuugen : It's mine too :D
Looking forward your mod.
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2013-09-12 04:18:11
It's a awesome project, its very great work Tirlititi congratulation, but i found a bug see



the the balloon text do not expand, its because the size of the block?
(http://img822.imageshack.us/img822/8708/pvu5.png)

same thing, but its different
(http://img856.imageshack.us/img856/3494/xtey.png)


try insert many text and you see..

thanks and continue with this wonderful project, you're the best
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-09-12 20:44:40
Hey gledson, thx a bunch.
I already knew that but you actually made me remember a thing I wanted to test about it and it turned out I was lucky :)

So, to make it short, you will be able to modify bubbles' size as soon as the next release comes out (I guess this week-end).
Good luck for translating the game.

Also, battle scenes will be exportable. That's not a big news since Zidane_2 already made a tool for that, but you can expect to be able to replace them in-game soon (there'll be size limitations, as always, though :/ ).

EDIT : Update delayed. I had a bad bug, fixed now, but there are still minor things to fix. I'll do it tomorrow.
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2013-09-12 21:54:35
thanks man, I wish you luck in your great tool
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-09-16 19:02:54
Update.
- Added Battle Scene exporter :
--- The loading time when you get on the panel is quiet long ; maybe I'll make it so all the BS are not loaded in one shot at this moment,
--- Y axis is inverted, as in Zidane_2's exporter, I don't know why but it doesn't work if I don't do that...
- Added controllers for dialog bubbles (in the "Texts" panel only) :
--- In the other panels, there is either no need for it (spells descriptions' bubbles are auto-sized, for instance) or it can't be edited at all (spell names...),
--- The preview is not 100% accurate (for the width mainly),
--- Additionaly, bubbles' size are sometime variable (ATE-picking dialogs, for instance, are smaller if not all the ATE are available).
- Added a "Help" window. It is some advanced help written there for the moment ; I don't know if I should add some tutorial-like help for now...

I understood a much more about TIMs images (that wasn't easy ^^'). It will be useful for all that is texture-related (and the charmap).

Also, some of you have already noticed, but I added a sample of "secret" dialogs, never actually used in the final version of the game but still present in the binary file. These 3 dialogs are not all the ones you can find, but there are some of them that can't be found in the US version of the game. You can read them in the 1st post of the thread.

PS. : the upload was frightenly fast this time :O
Tell me if there are bugs with the uploaded files.
Title: Re: [FF-IX] Hades Workshop
Post by: demeterf on 2013-09-23 11:20:33
Thanks!
Title: Re: [FF-IX] Hades Workshop
Post by: R51 on 2013-11-02 18:26:09
I just decided to check this out and it looks pretty slick so far, especially given the lack of other FF9 tools out there. I'm a little confused at what I'm looking at in terms of the enemies, though. Is there any sort of documentation that explains that part? I guess a big part of it could be explained if the enemy data changes from disc to disc, as I've not been able to look t more than disc 1 so far. Beyond that, though, I'm a bit confused on the enemy groups. For instance, why are there six apparently identical entries for Vice at 088,089,and 08C-F? Also, there, why in those same enemies are there Frequences of 40 and 255? What do those two numbers mean?

If any of this is explained in a wiki or anywhere else, thanks in advance for a link, and thanks again for the tool itself!
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-11-02 19:12:49
Hi. Long time no see.
Version 0.19 out, more to reassure you that I'm not dead than to be an useful update...  :P
- You can import models for Battle Scenes (geometry only, not texture yet),
- Exporting quads is fixed now (at least Blender can read them with most gfx cards),
- You may also change the colors a bit, as well as reorder textures, in Battle Scenes,
- You may now choose not to load texts (names, helps, etc...) when loading mods,
- Added 2 spell effects (Absorb Strength and Absorb Magic).

The bad point :
the size limit... You have between 0 and 2048 free bytes, which is really poor when it comes to models.

The good point :
textures should be importable soon (I guess it'll take much less time than geometry). I hope it will allow a decent way to get more space by optimizing the textures.

Note : the model's format must be .obj (the importer doesn't read the related .mtl file). Each faces be either a triangle or a quad and must have a texture and an UV mapping associated to it. If the program can't interpret some features of the model, it will display a warning and ignore them. Once a model is successfully imported, you must link textures ID from the imported model to the texture list available in the Final Fantasy file (Blender, in particular, tends to un-sort them).

Pfiou, it was really hard for me to make that importer. And I'm so busy with my studies these times... :'(

Thanks for the thx, demeterf, by the way !

@ R51 : posting when I update ^^' speak of a coincidence.
About enemies, there are several things.
- Enemies are often duplicated : I think there is 1 instance for each different battleground (or battle scene) they may appear in. I'm not 100% sure that's the only difference but, for instance, the Big Dragon in the Mist Continent's mountain and the Big Dragon in the Forgotten Continent's plains are separated.
- Additionaly, there are enemy groups (or enemy formations) : they are variations of the same battle, with more or less enemies in it or different enemy types (eg. : Carve Spider or Carve Spider + Axe Beak). The Frequences are the probability you fall on each formation given you have already fallen on that battle. Frequency of 255 is same as 100, actually.

There is a help (F2), which I should update but still gives some useful informations (it strangely lags a bit though...). Don't hesitate to read it if that's not done yet ^^
Also, I tried to answer a lot of questions in this thread, so you may also read it if you have time to spare :P

Thanks for the feedback.
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-11-04 06:45:55
Thanks for the update. Im always checking this. Awesome job on the whole import models work you are putting into this program.
Title: Re: [FF-IX] Hades Workshop
Post by: DanTsukasa on 2013-11-13 11:10:25
Ah this program is awesome!

Is there anychance it might be able to export the models/textures of the world map at any point?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-11-13 15:29:17
Thanks. To answer you, it might be possible, but I think Zidane_2 (him again !) made a program to see the world map already. I don't remember how it worked (if you could export the models or only see it) but I may try to add this feature in the future.

However, for now, my short-term plan is :
- add a battle scene texture importation,
- add a charmap texture importation (not really advanced : I think you won't be able to see the changes for the texts in the program, only in-game),
- add a section for the party's stats.
Title: Re: [FF-IX] Hades Workshop
Post by: itoikenza on 2013-11-13 15:45:10
Tirlititi: don't forget my request, please. the change and defend editing, remember i wanted to change "change" into any choice movelist?
Title: Re: [FF-IX] Hades Workshop
Post by: DanTsukasa on 2013-11-13 17:37:24
Thanks. To answer you, it might be possible, but I think Zidane_2 (him again !) made a program to see the world map already. I don't remember how it worked (if you could export the models or only see it) but I may try to add this feature in the future.

Aye, Zidane_2 made a bunch of software written in Blitz3D for FFIX, I've put the sourcode here (he gave it to me a while ago) so you can grab it if you like, it just sits in there all the time anyway.

Here: https://www.dropbox.com/sh/azf19y7homu8qnj/u-JOQibN1q

Unfortunately you couldn't export from his viewer, it was only that, a viewer, it was pretty good though.
I actually have the sourcecodes to everything he ever did for FFIX, I'd be happy to share it with you, I've got his permission to share it so its not a problem, might help you a little. It's all written in Blitz3D though, so you'll probably have to get the trial version of that.

A guy on the Xentax Forums managed to make a little progress in figuring out the format so I can always provide that info too.

Eitherway this program is awesome and your aforementioned updates sound great, IX doesn't get enough love honestly, I'd love to be able to go in and HD the game with higherquality textures (and perhaps a more painterly art style Ala Bravely Default) some time.

EDIT: In the end I just threw in all the sourcecodes for all the Zidane software he gave me (basically everything he put on the forums plus a few more things he never shared because they were incomplete.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-11-13 20:06:24
Wow, great !
The Blitz3D script seems exploitable at first glance. It'll be useful anyway :D

Itoikenza, I didn't forget your request nor the fact that the "Commands" section is bad for now, but I can't guarantee any result in this since I don't know where (and how) those datas are stored. I'll try to figure it out when I'll go on Party's stats, but I can only cross the fingers for that :/
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2013-11-14 14:02:27
Wow, this is a wonderful tool! I was testing it, 'cause I plan to use this for my future projects with FF9. I have a question, Tirlititi: can this tool hack the equipment/item/key item/location names?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-11-14 16:29:37
No, not for now. It's on my to-do list though. Good luck with your project :)

About location names, you may edit them (they are world map texts, even if you would need to change them in all the dialogs too) but it's not working so well as I need to implement text opcode editing.
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2013-11-14 17:30:30
Ah, cool. I'll be waiting for the next update. ;D

Oh yeah, I forgot to mention the Card names. I edited the monster names with Hades Workshop, but the Card names are still the same. Guess they're stored somewhere else.
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2013-11-23 09:59:48
It seems that the program can't edit some eidolon attacks yet. These are the ones I didn't find:
Title: Re: [FF-IX] Hades Workshop
Post by: Caledor on 2013-11-24 12:08:34
I don't know if you already have info regarding items and equipment text so i'll just tell you what i've found.
Items/Key Items/equipment/card names are are located into the SLES/SLUS file in ff9 text format. Pointers for equipment and item names are right above the names, in blocks long 18 byes each, with the first two being the actual pointer. Key item pointers are located after the names instead, but not directly after (there are 386 bytes between the end of the block of the names and the first pointer to key item names in the italian SLES file) in blocks 7 bytes long, with the first two being the actual pointer. I'll try editing card names next so tell me if you need infos about them too. I hope to have saved you some time, keep up the good work!  ;-)
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-11-24 21:53:21
Thanks :D It will save me some time indeed.

@ Kikoutei : You mean they are not in the spell section list? :O
I have them... They are named "Atomos", "Carbuncle" (4 of them, including Ruby-light) and "Fenrir".
Or maybe you speak about the animations or about the effects? Eidolons' effects are quiet weird and you can't change the "ores powerup" effect on them, I guess.
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2013-11-24 22:03:24
@ Kikoutei : You mean they are not in the spell section list? :O
I have them... They are named "Atomos", "Carbuncle" (4 of them, including Ruby-light) and "Fenrir".
Or maybe you speak about the animations or about the effects? Eidolons' effects are quiet weird and you can't change the "ores powerup" effect on them, I guess.
Their names and attacks are not in the same place, believe me. Just like "Rebirth Flame" and "Phoenix". "Phoenix" is shown in the Summon list, while "Rebirth Flame" is shown in the attack/skill message box. Yes, some Eidolon attacks are located somewhere else, I found them using a hex editor.

(http://i830.photobucket.com/albums/zz229/Kikoutei-sama/FF912_zps7a4e7d6d.png)
Title: Re: [FF-IX] Hades Workshop
Post by: Caledor on 2013-11-24 23:57:40
Thanks :lol: It will save me some time indeed.

Glad to have helped. I'm really looking forward for the time when every single string of the game will be editable with your tool.
Ah, and when everything is finished you should consider adding a search function and/or an export/import function to allow easier editing of multiple strings.
Title: Re: [FF-IX] Hades Workshop
Post by: Bosola on 2013-11-25 19:26:12
I haven't really looked at this application, but I thought I'd chip in with a few suggestions.

The first one is to try and avoid storing player modifications as binary files. Seriously. This was a major mistake with the FFVII tools and I really do think it has harmed serious efforts to create large scale modding projects for years. Player changes should be saved first as text files that represent the state of the model (not binary changes). This is really, really important, because it makes mods portable, it lets modders use source control and it makes it feasible to update the implementation of a particular effect etc. without forcing modders to rewrite their projects. This won't always be possible in all circumstances, like model or texture assets, but it's an absolute must for mechanics / stats patches.

The reason is that with 'abstracted' user files, it suddenly becomes trivial for a modder to immediately port a project to multiple international releases. They can store their projects in subversion and branch / merge features as they see fit (branching binaries is arduous; merging them is practically impossible). Updates to tools are no longer as risky, as if a tool's compile / save to PPF messes up a project, you can always wait for the next release and compile again (unlike with some of the FFVII tools, which occasionally lose data on save and force some very time-intensive regression testing). Faulty implementations are bound to tools, not project files, so modders can continue working on stuff whilst tools get fixed.

The other big thing is that abstracted project records can expose implicit global variables in the binary - like duplicate enemy records - without much trouble. In fact, the model doesn't have to represent the binary file at all - if you want to give users the ability to create monster attribute inheritance chains that don't exist explicitly in the binary, you can do so without (much) trouble.

I'm being a bit prejudiced here - I haven't seen your code, I'm just assuming it looks like a lot of the projects I've seen round here before - so possibly you've already considered this. But as it sounds like your project is growing steadily, you might want to think about these things as they'll have architectural implications (because they'll force you to separate out your model).
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-11-25 20:45:39
So, first thing first, I've updated the program :
- It can now kind of import textures for the Battle scenes models.
- The help is improved a bit.
- I think the dll are not required anymore (it turns out they were only debugging dll ^^').
- Some few bug fixes.

I didn't test the model importation thoroughly but it seems to work, more or less (exporting a model + re-importing it elsewhere works at least).

I'm not really satisfied with the way I handle it because :
1) you have to manually import textures and models separately and make the link after.
2) The texture you can import must not be larger than 768x256 (3 times a 256x256 texture, which is what most of the default scenes use).
3) There are 2 opposite needs concerning textures and UV mapping : the UV mapping in the model must refer to a 256x256 part of the full picture (called "Painting" in the program) but the importation process creates a palette, which is quiet complicated by itself, and would better require the textures to be splitted into smaller parts to have a better resolution (a palette is limited to 256 colors). I really don't know how to make it nice...

Tell me if I made a mistake and the dll are still needed (I don't think that's the case, but who knows...).

@ Kikoutei-sama : Ah, their names... Yes, that is somewhere else, in a more general text block. I'll try to give access to it.

@ Caledor : There is already an exporting feature, but I know that's not that convenient. I'll think about it (a search feature, I guess) but it would be a waste of time to make it before I find a definite way of managing the charmap (if I want the program to be able to write texts in, let's say, chinese, I have to re-write the way the texts are handled by the program).

@ Bosola : I'm not sure to fully understand you. First, models are not the only thing Hades Workshop can edit. Second, I don't know how the FF7 tools you're refering to are coded, but I tried to make the binary saves (the "Save Mod" feature, if that's indeed what you're talking about) looking alike the binary data in the FFIX disc : this way, a program reading a FFIX disc should have little problem reading my files.
Actually, the differences is that
1) there is an header in my file and each data blocks begin with one or several identifiers (which are, if I can do it, also using FFIX's standart : I use the chunk type list and the object's identifiers, for instance).
2) there is no "offset constraint", so the data blocks can be however large or in whichever order they want.

Of course, my system is far from being perfect. I think the last time I looked about it, I told myself that I should have add more "Version bytes" to make the format a bit more flexible (for spells, for instance, I think I'll add to write datas related to Kikoutei-sama's issue in a separated data block instead of just writting them next to the other spell datas).

Tell me if I missed the point or if I'm not clear ^^ That's likely to have happened.
Title: Re: [FF-IX] Hades Workshop
Post by: Caledor on 2013-11-26 08:39:32
The exe keeps asking for dlls. Could you please add them back?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-11-26 09:03:25
Hurray for my dumberness ! (http://forum.ffdream.com/images/smilies/banane.gif)
I didn't test it properly then... They're back.
Title: Re: [FF-IX] Hades Workshop
Post by: Bosola on 2013-11-28 20:01:59
@ Bosola : I'm not sure to fully understand you. First, models are not the only thing Hades Workshop can edit. Second, I don't know how the FF7 tools you're refering to are coded, but I tried to make the binary saves (the "Save Mod" feature, if that's indeed what you're talking about) looking alike the binary data in the FFIX disc : this way, a program reading a FFIX disc should have little problem reading my files.

This is a good practice, as it promotes interoperability, but I don't think it goes far enough. You shouldn't just be saving to binary - for 'gameplay' data, I'd propose you should really be saving a model that may or may not be directly tied to the binary, then provide a compile step.

I can think of quite a few benefits:
If I were writing this tool, that's the approach that I'd take.
Title: Re: [FF-IX] Hades Workshop
Post by: xenokain on 2013-11-29 21:35:05
The tool works perfect,thanks for putting back the .dll files because I couldn't find one that was missing.
Title: Re: [FF-IX] Hades Workshop
Post by: DanTsukasa on 2013-12-05 10:07:45
Though I would share this on the worldmap from a guy on Xentax that was looking into it (for 20 minutes no less).

Vert coordinates and stuff, honestly I don't entirely know what to do with this information so I figured I'd share it here.

Quote

WorldGridW= 24
WorldGridH= 20

V1=2

(seek > 0x1000)

-> function loadSetka2(fil,1,1,13)

tmp1= 0x1000

ffs%=524548
point%=18432

dffs%= 8
mesh[0]= 24
mesh[1]= 4028
mesh[2]= 8216
mesh[3]= 12140

seek > 0x1018
numvert= 118
numTri= 189

VertPointer= 0x3C
TriPointer= 0x3EC

(seek > 0x103C)

//reading 118 vertices

Code:
#    0x103c
v 8.000000 62.466797 58.000000
v 7.675781 63.165039 58.481445
v 7.675781 62.676758 58.481445
v 8.000000 62.890625 58.916016
v 8.000000 63.378906 58.916016
v 2.000000 63.316406 59.892578
v 0.715820 0.000000 59.000000
v 2.000000 0.000000 60.039063
v 2.551758 63.316406 57.777344
v 1.797852 0.000000 57.000000
v 2.117188 0.000000 57.613281
v 4.000000 0.000000 60.146484
v 3.208008 63.316406 59.295898
v 3.338867 0.000000 59.663086
v 7.000000 63.488281 59.101563
v 8.000000 0.000000 59.062500
v 2.865234 63.316406 60.000000
v 3.012695 0.000000 60.146484
v 0.947266 63.316406 59.000000
v 0.819336 0.000000 57.951172
v 1.671875 63.316406 57.990234
v 1.050781 63.316406 58.163086
v 6.000000 63.679688 59.577148
v 7.000000 0.000000 59.248047
v 2.000000 63.316406 59.000000
v 8.000000 61.965820 56.255859
v 7.617188 61.685547 56.000000
v 7.617188 61.553711 56.250000
v 7.284180 61.770508 56.809570
v 8.000000 62.458008 56.656250
v 7.258789 61.783203 56.333008
v 8.000000 62.241211 56.562500
v 2.000000 0.000000 62.000000
v 1.000000 0.000000 63.000000
v 2.000000 0.000000 63.000000
v 1.000000 0.000000 61.000000
v 1.000000 0.000000 62.000000
v 1.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 3.000000 0.000000 62.000000
v 3.000000 0.000000 63.000000
v 3.000000 0.000000 61.000000
v 3.000000 0.000000 0.000000
v 4.000000 0.000000 62.000000
v 4.000000 0.000000 63.000000
v 4.000000 0.000000 0.000000
v 6.000000 0.000000 62.000000
v 5.000000 0.000000 63.000000
v 6.000000 0.000000 63.000000
v 5.000000 0.000000 61.250000
v 5.000000 0.000000 62.000000
v 5.000000 0.000000 0.000000
v 6.000000 0.000000 0.000000
v 7.000000 0.000000 62.000000
v 7.000000 0.000000 63.000000
v 7.000000 0.000000 61.000000
v 7.000000 0.000000 0.000000
v 8.000000 0.000000 63.000000
v 8.000000 0.000000 61.916992
v 8.000000 0.000000 60.903320
v 7.000000 0.000000 60.000000
v 8.000000 0.000000 0.000000
v 0.000000 0.000000 63.000000
v 0.000000 0.000000 62.000000
v 3.715820 0.000000 60.707031
v 0.786133 0.000000 60.000000
v 0.000000 0.000000 61.000000
v 0.000000 0.000000 59.000000
v 1.135742 0.000000 57.000000
v 0.000000 0.000000 56.000000
v 0.000000 0.000000 57.000000
v 0.000000 0.000000 0.000000
v 8.000000 62.955078 58.000000
v 8.000000 62.492188 58.493164
v 2.333984 0.000000 56.000000
v 2.000000 63.316406 57.000000
v 2.480469 63.006836 56.000000
v 1.671875 0.000000 57.778320
v 4.000000 63.316406 60.000000
v 5.000000 0.000000 60.460938
v 5.000000 63.535156 60.314453
v 6.000000 0.000000 59.723633
v 3.000000 63.006836 56.000000
v 3.000000 63.188477 57.000000
v 4.000000 63.087891 56.000000
v 4.000000 62.835938 57.000000
v 4.000000 62.998047 58.000000
v 7.082031 63.344727 58.075195
v 5.000000 63.368164 59.000000
v 4.000000 63.083008 59.000000
v 4.838867 63.087891 56.000000
v 6.000000 63.423828 59.000000
v 8.000000 62.901367 57.071289
v 6.946289 61.757813 56.954102
v 6.447266 60.680664 56.508789
v 6.657227 60.787109 56.254883
v 6.775391 60.762695 56.000000
v 6.270508 60.709961 56.729492
v 5.901367 60.823242 57.098633
v 6.763672 61.841797 57.445313
v 5.419922 61.757813 56.500000
v 4.810547 62.090820 57.190430
v 5.555664 61.580078 57.444336
v 6.222656 62.095703 57.960938
v 6.397461 61.182617 56.000000
v 5.547852 61.500977 56.000000
v 5.000000 62.343750 58.000000
v 7.310547 61.329102 56.000000
v 7.833984 61.919922 56.000000
v 8.000000 62.081055 56.000000
v 8.000000 62.449219 56.775391
v 0.000000 0.000000 58.000000
v 6.000000 0.000000 60.000000
v 8.000000 0.000000 59.847656
v 2.000000 0.000000 60.871094
v 1.513672 0.000000 56.000000
v 6.000000 0.000000 61.000000
v 0.000000 0.000000 60.000000

Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-12-05 16:28:11
shakotay2 has to be over-busy to refuse to spend more than 20 minutes on this...

Anyway, that doesn't interest me. This is the extracted data of the World Map's model (and far from all of it). If something, the structure of the datas inside the binary would be more interesting to me. But then again, I don't intend to make a World Map's model extractor before some time.

Thanks for your will to help, though.
Title: Re: [FF-IX] Hades Workshop
Post by: DanTsukasa on 2013-12-05 19:24:36
Yeah figured I'd share it since I had it laying about anyway, and I did say before I'd share it but I totally forgot.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-12-14 22:11:37
hi. how to import text block back in program?
and need export - enemies names, attacks, spells, help text, items ets
like:
{COMMANDS}
1. [ATTACK]
HELP=Attack with equipped weapon.
2. ...
3. ...
{ENEMIES}
1. [MALBORO]
Bad Breath
Thundaga
Virus Tentacles
etc..

Very need. all text import\export
because the team is already preparing for the translation of the text and game. Forward only when it will be convenient to Use text
thanks.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-12-14 23:53:10
(http://s6.hostingkartinok.com/uploads/thumbs/2013/12/cc407333c561347845eed504626d61dd.png) (http://hostingkartinok.com/show-image.php?id=cc407333c561347845eed504626d61dd)

not working export for this simbols
/translating on russian/
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2013-12-15 22:26:02
Update.
This version is quiet incomplete for several reasons, but I'm afraid I won't work on the program a lot for the christmas period...
- You can now change the charmap's image (it's in the "Text" panel) and so the whole alphabet the game uses,
- Some others UI images became also editable in the process,
- Improved the "Preferences" options,
- Thus, you can now open Final Fantasy IX, the japanese version !
- Fixed some bugs.

About what's not complete :
- The letters' width is not editable yet. If you replace a letter by another one bigger, it will render weirdely in-game. In the following example of what I mean, the latin alphabet has been replaced by the same alphabet, but bigger :
(http://www.hiveworkshop.com/forums/pastebin_data/fxqiwr/FFIX_Chmap.jpg)
- Some of the charmap textures use really few colors and take the advantage of that to have 2 different textures painted at the same place. You can't use that trick yet when you import your own texture.
- I have seen some bugs with the .ppf conversion of Battle Scenes but I didn't fixed it yet.
- For now, I suggest you to go to the "Preferences" options before opening any file, select the alphabet you want, and then only open a file. You should be able to swap between alphabets whenever you want in the next release, but it's still in-progress.

And last but not least : I have included 2 charmaps in "HadesWorkshop.conf". Those are the only ones I know because they are on the qhimm wiki. If you want to read files using other charmaps (random example : the cyrillic alphabet :P ), you'll have to PM it to me (the whole charmap, TITS all the symbols used in FFIX's texts and their order, just like these (http://wiki.qhimm.com/view/FF9/CharTables)) so I can add it to the program. You can also try to add it yourself into "HadesWorkshop.conf" using the same syntax than for the others. "HadesWorkshop.conf" is coded with utf-8 and must remain so.

shikulja, I won't add an "Import all the texts" feature for now : you'll have to simply copy/paste them from you notepad to the program.
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-12-17 02:01:00
WOW O_o  impressive!

you need to add
intro image with text
names of cities and continents
images from a card game tetra (images with text)
Images of the main menu - a new game, continue
image with text - game over
Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2013-12-17 03:29:29
(And last but not least )
It works! when I pick up all the letters and symbols I will send you.
yet in'm slightly shocked)) is what I dreamed)

(http://s020.radikal.ru/i718/1312/b6/2efb9afa106bt.jpg) (http://radikal.ru/fp/9c68addd189841fa8a9f33925003f872)

RussianPirate Charmap  Kudos and RGR
https://drive.google.com/file/d/0B6Bbbdpi5BzBMVQ3WmlQZGdYNFE/edit?usp=sharing

in the game
(http://s020.radikal.ru/i718/1312/79/f4cbf6c1107et.jpg) (http://radikal.ru/fp/dddde64d9ffc418caedf61d0446517d0)

Because of limitations - a lot of cuts (

Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-01-02 22:15:00
Updated for a bug-fix version (mainly).
- There were several bugs in savings. In short, PPF exportation didn't work when textures were involved and mod saves couldn't be read properly some texts (saves are not corrupted however).
- When you load mods and it says "There are unused things in this disc", the unused things are not discarded anymore when you save your mod back. A mod file can thus contain all the datas about the 4 discs at the same time (it was best to have 1 mod per disc until now because of these datas not used in each of them).
- The rendering problem of letters described in my previous update has been replaced by another  :-D The letters' size are very roughly adjusted from the picture's width. It's not precise a lot so there may be a little difference with normal letters' spacing.

I'm gonna add the other texts to the tool progressively.

Happy new year btw.
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2014-01-04 20:45:27
Hey Tirlititi, I'd like to change Ozma's HP to 1,000,000, but it's not working. Is it because the game's limited to a maximum of 65535 HP?
Title: Re: [FF-IX] Hades Workshop
Post by: JBedford128 on 2014-01-04 21:43:02
Yeah, HP is assigned to two bytes, and most bosses have 10000 HP off of that. 55535 is Ozma's actual HP, the highest possible amount.
Title: Re: [FF-IX] Hades Workshop
Post by: Gine on 2014-01-09 19:22:45
You're amazing!

Thanks for your work and Happy New Year. :D
Title: Re: [FF-IX] Hades Workshop
Post by: Tenko Kuugen on 2014-01-20 14:00:28
dropping in to say how much I appreciate the work you're doing and how much I'm looking forward to one day being able to create extensive overhauls of FF9
Title: Re: [FF-IX] Hades Workshop
Post by: LeonhartGR on 2014-01-20 21:06:29
...being able to create extensive overhauls of FF9

Wow...! That was quite a bomb statement! Looking forward to that myself :P :P
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-01-21 16:28:13
Haha, I wished I could go that far. Thanks for the cheers, I appreciate ^^

I guess I'm going to make one more little update before attacking the next big release. I have found another bug in saving games (this one is not my fault ! That was because of a weirdery in FFIX's datas) and I'll make it so you can import 2 pages in the charmap textures.
I've begun to make a mod myself, so I did some tests about effects and battle mechanics. I'll also put them in the help.

By the way, did you know that a fire spell cures the Frozen status? I find this kind of little subtleties great in RPGs  ;D
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2014-01-31 14:14:57
I'm having a problem here. The program crashes whenever I try to edit King Leo's name in the 'Enemies' section (I press backspace and then it crashes). It happened with the enemy party 'King Leo; Zenero; Benero'. I was editing Disc 1, by the way.

I also have a question: is it possible to add opcodes to the text with this tool?

Edit: More crashes. This time happened while renaming Ironite's Flame attack. I don't know what's going on.

Edit2: It also happened while renaming Sahagin's Water-gun, while pressing backspace.

Edit3: I applied the ppf patch I created with HW on Disc 2, and now this message appears in HW:
Quote
An unhadled exception occurred. Press "Abort" to terminate the program, "Retry" to exit the program normally and "Ignore" to try to continue.
It appears every time I go to the Enemies section. :(

Note: The error reported on Edit 3 is not related to the other ones.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-02-02 08:15:43
I don't know what's going on either :/

But you shouldn't open patched games with Hades Workshop (there is 1 unsafe thing : export a patch when the file on your disc has been modified somehow). Patches/overwrite binary should be used only to create the final version of the game. Use the "Save Mod" (Ctrl+S) option to save changes that you want to go back to later.

I'm releasing an updated version then. There is the bug-fix I talked about in my previous post : it may come from there (though it was pretty harmless if you only used "Save Mod"). You can also import 2 pages of charmaps instead of 1, increasing a bit the number/size of characters you can draw for a custom alphabet.

You were using the version 0.21b, right?

Anyway, I hope it'll be fixed without too much pain ^^' Sorry about that.
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2014-02-02 11:34:32
Yeah, it was the version 0.21b indeed.

And, well, the 'Save Mod' option is having some errors, that's why I'm using 'Export PPF Patch' instead. Some of these errors don't let me save the Memoria text block, claiming that the text was unused, when in fact, it wasn't.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-02-02 11:52:46
It says "data unused in this disc" : it only means that the Memoria text block doesn't exist in disc 1-3. You mean you opened your mod file on disc 4 and it said "Unused text block" about the Memoria text block?
Title: Re: [FF-IX] Hades Workshop
Post by: Thisguyaresick2 on 2014-02-02 11:54:58
Oops, I forgot to mention the disc, sorry. Yeah, it was Disc 4.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-02-02 12:10:14
That's a bug, then, yes.
Hum.... Maybe the japanese version has some differences about that? I don't have the disc 4 : I do my tests (about the japanese version) on disc 1 and didn't experience bugs like this for now.

I'll try to get where it comes from. Thanks a bunch for telling me.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-03-28 15:08:29
Update to version 0.22.

- Supporting abilities are now available to edit.
--- Only name, help and magic stone cost can be edited for now.

- Stats are now available to edit.
--- You can change the experience recquired to level up as well as the HP/MP progression curve,
--- You can change the default name, primary stats (at lvl 1) and ability list for each characters (the 8 permanents + the 4 temporaries). Note that the "ability list" also completes the edition of the commands.

- Items are now available to edit.
--- For key items, you can change the name, help and description,
--- For regular items, you can change most of things about them (except for the way ores impact eidolons).

- Added the few items' effect to the spell effect list though the formulas aren't relevant for spell uses,
- You may now make Quina learn supporting abilities when s/he eat an enemy (the supporting ability name is not properly displayed when s/he does, though :/),
- Added a way to change the palette selection for making the importation of custom charmaps easier,
- Fixed few visual bugs.

Next things I would like to do are :
- Adding Tetra master's cards edition,
- Adding a Damage Calculator tool (if anyone wants to help me on this, that would be great ^^),
- Adding a way to edit/add text opcodes (at least for the basic ones),
- Fixing that bug Thisguyaresick2 told of... I couldn't reproduce it even though I didn't spend much time on it,
- Completing every things not complete yet, such as the eidolons' power boosts or casting words...

Have fun. Those things should have been editable much sooner since you guys and LandonRay made the documentation about this since a long time ^^'

EDIT : update to version 0.22b : fixed a fatal error bug when some text was copied/pasted + fixed a bug making a weapon's elemental attack non editable.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-04-06 22:41:37
Update to 0.23.
- Synthesis shops are now available to edit.
- Fixed a bug with key items' descriptions on some versions of the game.
- Fixed a bug on items' battle help on PPF exports.
- Fixed a minor bug happening when charmap was changed.

Thanks a bunch to Thisguyaresick2 for pointing out these bugs ^^

Note that on versions with the 2nd fixed bug (most of versions, I fear), you won't be able to get item text modifications when loading HWS files (the ones saved with the versions 0.22). Sorry.
Also, still on these versions, the last key item's description can't be edited at all for now (it will always say "not enough space") but that's not a real problem since it is unused...
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2014-04-21 02:19:31
Nice, i will test ^^
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-05-10 20:30:15
I can't seem to get text color to change in item descriptions.

I wanted to add an Add Status effect to a weapon and have the text be red like normal. My Add button on the Edit Text Screen is grayed out, clicking in the list doesn't do anything, pasting in the µ doesn't do anything, nor copying and pasting a colored entry...

Please inform? Thank you.

Edit: I had searched 'color,' but now I see that the most recent update's note on text editing may apply to this question. Not sure. Sorry if I should have noticed that.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-10 21:15:03
Yes, that was one of my notes. You didn't miss anything : it is not possible to add/edit text opcodes at the time. It'll be possible in the next version, though. Should be ready in 2 weeks or sooner.
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-05-10 21:19:26
Hey, thanks so much for the quick reply, even though I had overlooked my own solution (both there and, I now see, in the Help menu).

Question: suppose I play the game with the modded equipment, then in two weeks you release another version and I edit text color. Would I be able to mod the disc and load up my old game? Would it matter if I had the item in my inventory? Essentially, can I get away with fixing the aesthetics later?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-10 21:47:00
It will never matter if it's only cosmetic.

I'll speak for memory card saving (because for save states, it's different in the worse way) :
- Modifying the stats given by the items or the attacks of the weapons matter if you had a character equiped with it. I think it goes back to normal (to the newest version) when you un-equip then re-equip them.
- Modifying the party's stats, both the "Level Progression" and the individual stats are likely to bug. I didn't test it so I can't say for sure. It might go back to normal when you level up and/or un-equip then re-equip something.
- Abilities learned are replaced by the new ones and it has the same amount of AP than for the previous one. Let's say I have a save with Zidane's Thievery at 80/100 and I modify the game so he needs 200 to learn Flare instead of Thievery, then he will have 80/200 AP for learning flare. Also, you keep gaining AP once you're done learning an ability (but it's invisible of course).
- If you modify the Magic Stones requirement of supporting abilities and if a character has it activated (when you saved), it will totally mess up with the total amount of magic stones available for that character. I don't know if it's getting back to normal after leveling up but that's still something.

Everything else is safe and should have no side-effect nor bug.
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-05-10 22:10:38
Huzzah. I like your program very much and thank you for it.

At the moment I am just doing some minor rebalancing: giving characters who had no weapons with stats such so they can have stat growth more comparable to the others, tweaking Whale Whisker and Angel's Flute so they may be sidegrades to the Tiger Racket... My idea had been to give them statuses to add, but perhaps I'll just give them +2 Magic and they can be upgrades to the Magic Racket and a sidegrade in that way.
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-05-13 15:17:31
Hello, I found this great tool on Romhacking.net and now I'm here.
First, thank you very much for your effort.
Secondly, my PC can read Japanese properly, but I wonder why the Japanese encoding in Hades Workshop is not right. Below are my screenshots for Hades Workshop and Deling (FF8 editor) for Japanese version of FF9 and FF8.

Hades Workshop, thing are not right
(http://i.imgur.com/jVSoRRA.jpg)

Deling, things are right
(http://i.imgur.com/Jk3Vcgc.jpg)

Can you tell me what I have to do to read the Japanese encoding properly?

Second, I want to translate FF9 to my native language, so I must redraw the font. Can you tell me and people here where the font locate? Is there any tool out there allow me to extract and reinsert to font?

Thank you very much for reading.
 :)
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-13 17:28:14
Hey thanks !
To properly display the japanese test, go in the File->Preferences menu and select Japanese as the game's alphabet.

The font is in the Environment->Text panel. Check out the "Charmap" section, you'll see several pictures : the global text font is the first one.

Here is the method to import your own font (I should add it in the help but I always forget ><) :
1st step : create an image .tga with every letters and characters you want. That's tedious if you paint it but Gimp and other programs have options to paint characters. Best way to draw them : they must be 13 pixels high maximum, 3, 6, 9, 12 or 15 pixels large, being white on a black background and having ~ 6 different tones of grey. It's also better if you use the same dimensions than in the game, so it's better to export the font before and use it as the base image.
2nd step : open HadesWorkshop.conf with a simple text editor and add a new line in the [Text] section :
Charmap[YourLanguageHere]=
and then you put all the letters one by one. They should be in the same order than in your image (that makes things easier). Since you don't draw the space, you can put it anywhere (it's in 16th position in normal games but that's only a standart). You're limited to 247 characters for the first charmap. If you need more, add a second line "Charmap[YourLangageHere][A]=" and put up to 256 more characters in that line. You can do it once again with a "B" option so you can use up to 759 characters.
3rd step : open Hades Workshop and your game, go to the charmap image (Environment -> Texts -> Charmap) and select the first picture : you see the current charmap. Click on "Manage Textures" then "Browse", select your charmap image, adjust its scale/position and then click on "Import" : you see the characters as they will appear in-game. Because of the way FFIX compresses it, it'll look bad if your letters are not 3, 6, etc... pixels-large.
4th step : in the same screen, select all the paintings one by one and make them surround each a letter. The order here must be the same as the one in the .conf file (let a 0-large painting for the space). You can delete or add paintings with a right-click.
5th step : go to preferences and select your charmap in the field "Game alphabet".
6th step : translate everything you can ^^'

Note that the Japanese version actually uses an extended charmap that is dependant on where the player is located. The font picture for it can be managed the same way, but there is no support for displaying/editing characters from that charmap inside the dialogs...
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-05-13 22:17:29
Thank you very much for the quick reply.

Actually, I did choose Japanese alphabet in the preference, but it's no use. I wonder why? Does it concerned to the Non-unicode setting in the Window's control panel? Currently, my setting for non-unicode for program is Japanese, and I can read Japanese properly in other softwares except for Hades Workshop.

I'm pretty used to doing the font editting stuff, I'll try the way you mentioned here.

P/S: I decided to choose Japanese version as the base of my translation because at the first glance, it uses more space than English version (because of Kanjis) so I have much space for my text than the English one.

I wonder does FF9 use any kind of pointer for text?

And one more important thing: it's the character width. How can I adjsut the character width? For example, the original character "A" has 12 pixels width, but I redraw it in to "i", so there's a space after the letter. Is there a way to reduce or enlarge the width space?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-14 17:20:21
I have no clue about the japanese, then... Works fine for me when I try to open the japanese version. If I recall well, the unicode encoding for my program is utf-8. Do you read properly the HadesWorkshop.conf file when you open it with a text editor?

For the letters' width, you can use the extra space obtained when you redraw big letters, as long as you keep everything a multiple of 3. It only mean you'll have to actually do the 4th step and adjust every "letter boxes" to fit the letters.

I'm not sure of what you mean by text pointers : there are tables of pointers for each text tokens (so "Cure" has a pointer for it, "Cura" has another which points 5 characters after the previous one). But I don't think there is a pointer table for each location to where there is text (a table saying "there's ability texts here, menu texts here, etc...").
Besides, the pointers for text tokens are not always near the texts themselves, and the 0-position often differs for a case to another.
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-05-15 12:56:54
Now I know why I can not read the Japanese version properly. The reason as the video below.

https://www.youtube.com/watch?v=fFK3Br_W-3I (https://www.youtube.com/watch?v=fFK3Br_W-3I)

Here's the summery.

1. When I first downloaded Hades Workshop, the HadesWorkshop.conf is 4K (3,107 bytes) and it has Japanese charmap, Latin charmap in it.
2. When I opended Hades Workshop and choose Japanese in the preference, somehow it automatically overwrite the conf file. This is inevitable.
3. The new .conf file (overwrited by the program) now is 1Kb (297 bytes) and the Japanese charmap, Latin charmap was gone!

I wonder is the the bug of HadesWorkshop? 
By the way, I download the proram from Romhacking.net
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-15 16:43:31
Ok, thanks for the explanation. I'll see what I can do about that (it has to be some sort of option to make sure the .conf file is properly read/overwritten whichever your platform's configuration is).
There is no difference between the Romhacking.net version and the one here. Only the source code is in a separate file here.
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-05-16 15:35:53
In the Control panel, there's Region and Language setting. When I chose Change system locale to English, now Hadesworkshop doesn't delete the Japanese charmap in the .conf file so I can read it properly now.
But if I change system locale to Japanese, Hadeworkshop delete Japanese charmap whenever I open it.
Hope to see another version which fix this problem soon.
Title: Re: [FF-IX] Hades Workshop
Post by: demeterf on 2014-05-18 12:55:42
Hello, your program works great, but I have a problem.

I'm not really good with creating charmaps, so could I request your help (or someone else's) to make
Ő, Ű, ő, ű characters for a hungarian translations? Only these characters are missing. It would be a really big help.

By the way, I see, that I can export text blocks, but cannot import them back. Is it possible, that in the near future you make the enviroment/texts part importable? It would fasten up the translation process, because it's really hard and slow to open, then close a text line, and repeat plus it would be possible to work with a group to translate...

Thank you! :)
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-18 14:12:17
Is there some characters you don't need in the charmap? Because there's the place to add ő and ű but not the upper-case ones without deleting anything.

Here is the lower-case texture (at the right of the picture) :
https://dl.dropboxusercontent.com/u/98687557/Charmap.tga

For the upper-case, just copy-paste a O and a U and the accent from the lower-case and put it over an unneeded character.
If there are no unneeded character, it'll be much more complicated :/ It's really tedious to properly draw letters from nothing because the game's compression algorithm tends to alterate the picture a lot.

You still have to do all the steps 2-6, though.

For the importing feature, that's not my priority.
Title: Re: [FF-IX] Hades Workshop
Post by: demeterf on 2014-05-19 12:45:55
Yes, there are some characters that I don't need, but I downloaded GIMP (it has taken a half hour to learn how to use it :D ), edited the charmap file, (deleted a char that I don't need, copied the normal upper case version and the accent from the lower- case version to make Ő and Ű) and the config file, and now it works perfectly.

The only problem is, that now I can't load the iso file with Hades if it's patched. But I can do make a mod :D

Anyway, thanks for your help. It will be much easier to do the translation from now on.

Title: Re: [FF-IX] Hades Workshop
Post by: shikulja on 2014-05-21 07:45:47
need add\edit this menu (add characters from charmap like in image)
(http://immage.biz/images/2014/05/21/b4pG8TsSW.jpg)
and add save/load gliph positions in manadge texture menu
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-05-23 23:20:04
I now can open the Japanese version, but there's many Kanji missing from the text (ones replaced by "?").
Is this because of differents Kanji table are used in different location in the game?

(http://i.imgur.com/EObREVt.jpg)

Is there any way to fix this?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-24 10:19:56
Yes, that's because of the extended table. I don't know any simple way to make it work : I guess I'll have to list all the kanjis in each of the extended tables and put them in the .conf as well...
If it's only a matter of translating, you can try to find the game script somewhere else and erase those characters. It shouldn't bug if you replace them by some other text.

Another bad news : the update will surely be delayed. I want to fix that previous bug, with the local system dependancies and I'm not done yet with the other thing that I've worked on.
Title: Re: [FF-IX] Hades Workshop
Post by: JBedford128 on 2014-05-24 15:29:54
If it helps, I had a Japanese reader figure out the "first" table for me once (the one in the Prima Vista rooms, don't remember if its ID is 0):

Code: [Select]
            '姫','我','隊','来','船','誘','拐','父','様','思','居','芝','観','演','虫','室',
            '客', 'Υ','_','俺','愛','貴','度','奏','語','婚','刃','足','恋','話','仕','連',
            '達','結','役','嫌','親','聞','掛','仲','言','主','太','乗','飛','続','望','宵',
            '友','声','待','席','議','会','込','訳','申','引','醜','隙','驚','皆','苦','兄',
            '張','頑','悟','良','奴','落','貸','到','団','戻','遅','娘','容','始','困','負',
            '勝','存','納','年','座','玉','為','観','考','関','機','痛','壊','塞','赦','余',
            '露','礼','悲','弟','済','刺','静','烈','憎','希','和','笑','千','丸','斯','母',
            '原','覧','裂','公','盛','評','集','揮','響','美','番','情','急','舞','台','細',
            '練','習','念','計','違','願','恩','配','漫','毎','朝','穴','幕','軽','頼','鳥',
            '君','顏','参','安','丈','夫','熱','勘','弁','明','説','籍','祝','建','怪','男',
            '捕','低','鐘','総','豪','少','逢','緒','帰','央','貢','仇','庫','温','泣','潮',
            '早','準','完','供','胆','例','功','哀','彼','広','界','拒','輝','七','貝','似',
            '仮','倉', non, non, non, non, non, non, non, non, non, non, non, non, non, non,
             non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non,
             non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non,
             non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non
sauce (http://i829.photobucket.com/albums/zz212/JBedford128/kanji.png)

Where "non" is nothing.

I felt too bad about asking her to do the rest because it takes a long time, and there's like 20 of them or something.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-24 19:58:16
Yeah, that'll save some time to me or thisguyaresick (who gentlefully helps me).
Thank your friend for us.
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-05-27 05:00:28
need add\edit this menu (add characters from charmap like in image)
(http://immage.biz/images/2014/05/21/b4pG8TsSW.jpg)
and add save/load gliph positions in manadge texture menu

For shikulja's question:
1. Extract FF9.IMG from the CD
2. Open it in a hex editor. I recommend Windhex by Bongo.
3. You can edit the hex manually or just use Atlas to insert it. The address as my picture below.

(http://i.imgur.com/LOD4CtI.jpg)

For Tirlititi's: I have seen many strategy games like Fire Emblem use various Kanji tables as well as the Kana table. They have a trigger bite for each array, such as $09 to trigger the Kana array, $0A for Kanji array 1 and $0B for Kanji array 2. I think FF9 use the same method (Japanese version). Can you embede this function to Hades workshop?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-27 09:23:07
I know how it works, it's just that it's incredibly tedious because we need to register all the kanjis' tables and that there are a lot of them (between 20 and 30 I would say).
You're right about the byte flags though. It's explained here :
http://wiki.qhimm.com/view/FF9/CharTables

The problem is for the "External Kanji Table" : there is one different for each place in the game. thisguyaresick is doing a great job at the moment to write down all these tables but you can figure it takes some time.

EDIT : Actually, that makes 65 external tables in total...
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-05-31 23:32:12
Update to 0.24.
Here are the changes :
- You can now edit the game's script (for fields and battles). It's a new feature and is still very limited though. You can also edit fields' name. See bellow for more informations,
- You can now add and edit text opcodes. I don't know the effect of all the opcodes but the most useful of them (the unknown are read as their hexadecimal code, as before).
- Added a "curve editing tool" for the level progressions. It's nice for seeing the progression curves, but not too much precise. It's more like a gadget for now even if it's better than a bunch of figures. I'd like to improve it but that really shouldn't be my priority.
- Fixed the bug making the configurations file not working depending on the local system.
- Fixed a bug making World Maps' texts uneditable (it must be recent because that worked before).
- Improved the time spent for scanning files (it shouldn't upgrade with this version though ^^').

Also, please note that the DLLs have been updated as well.

So, I've got a whole bunch of things to say...

First, I gave up on card data finding. There are several reasons for that, the main one being the fact they are not at the same place at all in the binary files in PAL/NTSC versions and the Japanese one. I'll get back to it when I understand better the top levels structures of the binary file (once again, your wiki helped a lot but it wasn't enough for that particular problem :/).

Second, about the external kanji table, I'm being helped by ThisGuyAreSick2 and Yugisokubodai and that's the next thing I'm donna do. It will come asap with a bug-fix version if I find any (not that I want it but I know there are usually some of them ^^').

Third, the game's script...
You can edit both Battle scripts and Field scripts, as said, but you cannot edit the World Maps' scripts. The reason is that, in the Japanese version, there is A FRACKING BLOCK OF TEXT IN THE MIDDLE OF THE SCRIPT. I have absolutely no clue about why it is there or even if it's properly handled by the game itself (it may be present only inside unused World Maps, since there are 13 of them). So I disabled the reading/editing of the scripts in World Maps.
Here is an example of a piece of script :
(http://www.hiveworkshop.com/forums/pastebin_data/fxqiwr/HadesWorkshopScriptSample.jpg)
It's Baku's scripted movements and dialogs after the party defeats him (as Masked Man). The first "Animation" code is him patting Zidane's head, then he says "You're looking a lot better", then he faces south (a 0 angle is south ; a 64 angle is west) and say "Gwahahaha", etc...

About what you can edit, I'm not 100% sure of pretty much everything, so it may bug a lot. I just played with it a little and succeeded in changing some chests' content, some dialogs and with a good practice, you should be able to edit some scripted cinematics to a certain extent.
About editing limitations : I don't know the meaning of most opcodes and I've not implemented a way to change a code's length yet. Thus, you can't change an opcode yet, only its arguments. What's more, you can't change any of its arguments, but only the numerical ones. Most of opcodes' arguments can be either numerical values or "variable code" : the variable codes are (quiet) well displayed but cannot be edited yet.
Also, all the JUMP-ing opcodes are displayed as is. The jumping offset is the binary value so it won't help a lot. I would like to turn them all into "if/then/else", "switch" and "loop" statements but that's for a next time.

And one last thing : the edition of the script can be made easier if you go to the item, stats, texts and enemies panel before. Some numerical values (item ID, character's name, text ID and battle ID) will be translated in more understandable things. It's not 100% accurate though, for now :/

I'm gonna be really busy IRL for the month to come. I don't think I'll do anything else than reading some kanji tables until then.

EDIT : Update to 0.24b. Fixed some few things I forgot to do.
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-06-02 03:19:10
I'm doing with the Kanji tables now  :P
By the way, about the font. I extracted it with Tim Viewer, edited it with a photo editor out there, then re-insert to the game and it's displayed just as in the Photo editor.

However, when I exctracted the font using Hades to .tga file, then edited it with the photo editor, re-inserted with Hades, it does't displayed excatly what I did in the photo editor.

I wonder does Hades modifies the font wrongly?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-06-02 17:50:11
There are several sorts of TIM and I handle them quiet differently. Besides the compression method (the 3-pixels-coded-as-2 thing), there is also the handling of the transparancy : it's ignored in some of the TIMs.

I guess TIM viewer retrieve the 3rd pixel slightly differently than me, then... But I only compute a mean and it seems the most correct way of doing it...
Title: Re: [FF-IX] Hades Workshop
Post by: aladore384 on 2014-07-02 10:03:46
Hi Tirlititi,

First thanks for this tool. It's amazing. I am now considering fixing those minor glitches still present in the game.

The infamous Thunder Slash Glitch is my target for now and we're having a lengthy discussion with Vir about HOW it should be fixed : http://www.gamefaqs.com/boards/197338-final-fantasy-ix/69536029#8

But that's not why I am replying here. I was wondering if you would make the tool so that we can change stuff in Tetra Master. I'd like to fix the 1,700 pts glitch.

Self-quoting from : http://www.gamefaqs.com/boards/197338-final-fantasy-ix/69143572?page=5#54

Quote
I was wondering about the intended rank for 1,700 pts in Tetra Master. It currently reads "Would you like to discard this card?" as we all know. The 2nd best rank is "Master".

Now, if you read the "Strategy Guide" key item, it is signed by "Grand Master I", and I think this is the title that would have been earned by the player if there wasn't the glitch. Simply "Grand Master" would be my guess as I don't think they would have specified the count, or maybe "Grand Master IX", who knows !
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-02 16:29:12
Hi Aladore,
I don't really know how to fix that bug properly. The title "The Collector" is present in the text datas but it is kinda badly referenced for its use in the card menu.

Here is what I know :
• The text list begins with each of the 32 rank names, including the last one which is "The Collector".
• The text coming right after it is "Would you like to discard this card ?".
• In the UI datas, there is some variable pointer instead of the text ID for the collector rank's text field.
So it seems that the variable jump from value 30 ("Master") to value 32 (the "Would you like..." text ID) instead of being caped at 31 ("The Collector"). I don't know why, though, but I checked and there is no dummy rank in-between so it really seems to be relative to how the variable is increased.

So, here is a ppf patch to fix it (https://dl.dropboxusercontent.com/u/98687557/TheCollector.zip) in a non-satisfying way (for me ^^') : I swapped the IDs of the texts "The Collector" and "Would you like...". Two errors make it work fine... It's only for the US version, though.
But I would prefer to fix the way the variable is incremented.

As for being able to fix it with HW, I don't think it will be feasible before long. I gave up on Tetra Master edition and even so it would be more a matter of coding/UI managing.

About the Thunder Slash glitch, I personally think that it was changed from a physical attack to a demi-like spell because otherwise it would be too much similar to Thunder Swords. It would be that they forgot to change the accuracy (and maybe power) in the process.

Thanks for your feedback and good luck bug-fixing the game ^^
Title: Re: [FF-IX] Hades Workshop
Post by: aladore384 on 2014-07-02 20:35:47
Thanks to you, I had the curiosity to check "The Collector" rank's localization in French, which is "LE Grand Maître"... kinda disappointing. Anyway this gave me closure about this issue.

http://aladore3viii4.free.fr/files/FF9/Tetra%20Master%20ranking%20-%20French.htm

I used monkey-moore-0.5-2009-11-29-win32 for a Relative Search in order to check that.

I was wondering, your "The Collector fix" ppf file worked perfectly for my NTSC US copy : how did you make it ? If it's too much trouble don't bother to answer, but I was thinking of making the same file for other regions. So if you could provide me with the names of softwares that can do the job I'd be grateful.

Well, just for the sake of discussion, I also wondered about the cap of two things :

- Frogs caught : 32,767. This cap seems forced as it is 7FFF in hex. Do you think another cap was intended ?

- Jump rope : there seem to be no cap at all. After 8,388,607 (7F FFFF) the counter displays 0 and after 16,777,215 (FF FFFF) the counter overflows. I tested 9,999 among other values to see if there is a cap but I don't seem to find one.

Also, about the Thunder Slash glitch, it's settled. We (Vir and I) both agreed on the fact that it should be changed to Physical Attack. The only nitpicking lies in the Power where Vir went with 19 and I went with 17.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-02 21:14:22
I wrote a detailled way to make the fix, but it was a bit tedious and doesn't work for the japanese version (card datas are a bit different in it). So here it is :

More details if someone wants to make one himself (you should better know some hex editing ^^') :
Only in PAL/US versions

You need to change 3 bytes to fix the bug :
1) change the 31th text pointer to the one of the 32th
2) change the 32th text pointer to the one of the 31th
3) change the ID of the text used by the question box when discarding cards from 32 to 31

1) The text lists and pointers are at the very beginning of the "Card Menu" module (see the wiki (http://wiki.qhimm.com/view/FF9#Disk_IMG_Format) : the card module is the 11th of the 1st directory (Directory '0' in the wiki)). The pointers begin at the position 0x1C of the module and are 4 bytes-long (2 bytes for the actual pointer and 2 unknown bytes). Go to the 31th pointer (position in the module : 0x98) and change its value by the one following it (at position 0x9C).
To find the card module easier, you may try to search for the raw datas 0x0113002F002D that should be at position 0x13 of the card module, but that's not the case in some version (Japanese at least, though it seems to be ok in PAL versions).

2) Do the same for the 32th pointer (at position 0x9C, still) : change it to the value the previous one had before you changed it.

3) Search for the raw datas 0x20000424 in the same module (it seems it's always 0x2000042400000486 in all versions) and change that 0x20 into 0x1F.
You should find it approximatively at the offset 0x5C00 from the beginning of the module.

EDIT : I forgot to answer you about the caps. You will be able to see how values are caped with the scripts. HW can already display/edit the field scripts in some extent (it's hard to decipher but you could retrieve the things you asked with some patience ^^'). Besides that, the caps are related to the byte length of the datas.
We are on making the japanese charmaps for now, then I'll do 2/3 things like editing images directly inside HW and then I'll try to organize and improve the script editing tool.
Title: Re: [FF-IX] Hades Workshop
Post by: aladore384 on 2014-07-04 11:31:37
Thank you for these answers. I'll give you feedback about those matters as soon as I got a chance to follow your instructions :)
Title: Re: [FF-IX] Hades Workshop
Post by: Xinlus on 2014-07-04 17:35:43
This is the same patch for spanish PAL version: https://drive.google.com/file/d/0B8Zi6lNUy7RwSE1ITDBFNlU4VGs/edit?usp=sharing

(http://4.bp.blogspot.com/-7UW-QKsJw3g/U7ban_5SklI/AAAAAAAAETE/Iw519QnsVSQ/s1600/ff9si.png)

Thanks for you great work!
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-07-06 02:26:15
Say, I see you got text color support going! I like it!

Sorry that I'm plying you with problems, then...

I find it always places the opcode at the beginning of the field and I sure haven't got using those arrows down to precision. What I do is cut all the text above the last character where I need an opcode, put in that opcode, and paste the rest of the text in front of it. Repeat.

Is there a better way?


Also, in game, the red text I put in seems to be shadowed.  Is that something I'm doing?

I have a screenshot, and I see buttons to Insert Image (it puts in html codes?) and "Attachments and other options" (nothing about attachments there?), but I haven't worked out how to post it.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-06 10:06:58
@ Xinlus : Thank you for your spanish fellows ^^

@ Vir : Yeah, you can just remove the µ that is created at the beginning of the text and write another one where you want it, then click on "Apply" (if there are missing µ when you click on it, the last opcodes will be removed ; if there are too many of them, the last of them are removed).
I'm thinking of making it a bit more convenient.

For the shadowed red, I'll test it. There are 2 opcodes for each color, so I guess the other one is the best suited. I guess the one you have to choose depends on weather you are editing a "help" message or a generic text, but I'll figure it.

I can't add attachments either. I guess you have to upload your image somewhere else and put the into the IMG tag.
Like 【img】http://YourImage.png【/img】

Also, I added some few dialogs in the first post. The Burmecia's one is not present in the french version ; that's the only one I found that is in that case (usually, there are more translated text in the french version than the US one).
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-06 22:19:19
Hey ! Sorry for double-posting, but I have a request.
I found another unused dialog in Cleyra that is only in the japanese version. It seems to be the dialog between Freya, the king and the high priest in Cleyra's temple.

Could someone nice and motivated translate it?
Quote
フライヤ
「ブルメシア王、ごぶさたしております

ブルメシア王
「おお、フライヤ、よくぞ来てくれた

ブルメシア王
「クレイラ大祭司と共に歓迎するぞ

クレイラ大祭司
「フライヤ殿

クレイラ大祭司
「この度のこと、もはや、ブルメシアだけの問題では無くなってきました

フライヤ
「承知いたしております

フライヤ
「ですが……

フライヤ
「私の力ではなんともならぬやもしれませぬ

ブルメシア王
「フライヤ……、あの時のことを言っておるのだな?

ブルメシア王
「あの時のことは、あやまる

ブルメシア王
「どうか、許してくれぬか?

ブルメシア王
「いや!許せぬのは分かっておる

ブルメシア王
「だが、いまは、わずかとなったブルメシアの国民の命がかかっておるのだ

Thanks in advance !
Title: Re: [FF-IX] Hades Workshop
Post by: luksy on 2014-07-07 01:31:57
Quote
Freya
It has been some time, Your Majesty.

King of Burmecia
Ah, Freya, well met.
The High Priest and I welcome you.

High Priest of Cleyra
My Lady.
It would appear that this predicament no longer concerns Burmecia alone.

Freya
I understand, Your Holiness.
And yet...
I fear my strength alone may not suffice.

King
Freya...I know what troubles you.
I must apologize for earlier.
Can you ever forgive me?
No! Of course you cannot.
But the fate of the people of Burmecia now hangs by but a thread.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-07 11:11:07
Great job  ;)
I added it to the list, as well as the balloon mini-game.
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-07-10 13:52:26
I finished the Kanji table for disc 3 today.
Hope a new version will be released soon  :P

By the way, has disc2,4 done yet? If not, I'll take the job done.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-10 16:23:55
Disc 4 is done, there is only disc 2 left then (minus Cleyra) :D
Title: Re: [FF-IX] Hades Workshop
Post by: aladore384 on 2014-07-10 21:50:49
Thank you so much ! I'll upload it ASAP !

http://aladore3viii4.free.fr/patches/

(http://aladore3viii4.free.fr/files/FF9/Screen%20Fix%20Card%20Rank%20Glitch%20FR.png)
Title: Re: [FF-IX] Hades Workshop
Post by: gledson999 on 2014-07-11 02:47:52
how codes to make all card with all arrow and complete attributes like this Nova dragon?
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-07-11 10:34:29
I'm done with Disc 2, too.
For me, Hades Workshop is perfect but one litte thing discribed below.
An example here, you can see the dialogue window (bubble) fit the text length perferctly.

(http://i.imgur.com/bH0AAWw.jpg)

But in game it looks like this

(http://i.imgur.com/qA678lv.jpg)

It means dialogue bubble lenght doesn't displayed exactly. Since it already knew the lenght (how many pixels) of each characters, so the whole text lenghth calculating and displaying is a piece of cake. Pleas correct if I'm wrong  ;D

Hope to see this get fixed along with the kanji table in the next version.  :wink:
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-11 10:59:39
Yeah, the bubble's length is inaccurate. You're right when you say that calculating the text's length is a piece of cake, but that means displaying the text with the extracted charmap images. I was thinking of doing that eventually, but that's a totally different way to do it (I basically have to rewrite the whole "WriteText" feature of a text editor ^^).
I don't think it'll come in the next version, but I'll try to do it soon still.

@ gledson999 : You'd like to check out this other awesome program (http://forums.qhimm.com/index.php?topic=11494.0) :P
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-07-11 11:04:19
Oh I didn't know that it's complicated.
By the way, can I paste the Kanji tables to config file ? Or I have to do something special to read proper Japanese?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-11 11:23:36
The program is not configured yet to read several external charmap at once. It'll also come in the next version.
Title: Re: [FF-IX] Hades Workshop
Post by: LetCreativityPlay on 2014-07-11 15:52:52
wow awesome idea!
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-12 19:57:03
Thanks, I guess. Not sure which idea you're talking about :p

Update to 0.24c. Not a lot of new things here, mainly the support of japanese extended dialogs. Tell me if you find errors in kanjis.
Also, you can now edit textures and images pixels by pixels inside the program. It's not so easy to draw letters but that's better than exporting/importing. You can also make some good stuff with item icons and other UI images. You can zoom in/out using the wheel, but you can't modify the color set in the palettes yet.

And that's quiet all, if I recall well.
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-07-12 22:14:58
I just tested my issue and the second "[RED" (heh, putting that in brackets works on this forum, too) does not shadow, for everyone's future reference. I don't know if that second Red was there in the last version and I overlooked it, but in this version it works fine for sure. Maybe I misunderstood when you said there were two versions; I thought you meant available to code so I didn't check.

Either way, thanks for the great and consistent support!

I'm going to add the colored text to my moddings be in line with the game and probably change the MP cost on Six Dragons. Odd ability, that.
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-07-13 01:28:33
I don't know why, but there's still some Kanji missing, which is replaced with ?
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-13 09:15:04
Where? Which place?
Thisguyaresick2 told me that there was some for enemies' name. I didn't find out how those are handled.
If it is in dialogs, I just checked in everyone of them from disc 1 and didn't find any. You're sure that's not regular ? ? ^^
Title: Re: [FF-IX] Hades Workshop
Post by: Yugisokubodai on 2014-07-13 13:30:34
Oh it's strange that after resetting my PC, the field message is OK now. But there's stell some missing Kanji in the enemies tab.
For example, disc 1, enemy いただきキャット
(http://i.imgur.com/kwMsCpU.jpg)

I don't know what is the fist character, but the second one is 滅 (metsu) for sure.
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-07-14 20:35:52
Say, I just noticed many items' Battle Help text is messed up in my modded discs. I did not do this. The clean ISOs are okay. All the Battle Help entries before Ice Brand are long strings of 0s, fragments of unknown text, computer gibberish. The actual entries start with Ice Brand: i.e., Ice Brand is "Cinna's Hammer," Coral Sword is "Weapon used by thieves" [Dagger].

Everything looks okay in-game, though, so I thought it might be something with the workshop's reading? If it had been something I'd done... I almost certainly would have asked you anyway ;) Battle Help is the tooltip that comes up for Amarant's Throw menu, right? I downloaded a save GameFAQs (that's how I have been doing my testing) and checked some tooltips in the Throw menu and none of the daggers appeared off.

Thought of doing some further testing for you:

My clean ISOs, which are the basis for my most recent modded discs (the ones I mention here) do not have this issue. Patched disc 1 at least of the previous version of my mod also looks fine. Now this is interesting: if I open the clean ISO and then open the most recent mod (the only one with the symptom), there is no issue. I also looked at the Menu Help tips all the way down the list in case maybe they got offset later (though the erroneous Battle Help doesn't appear to have anything to do with the Menu Help), but it's all in alignment. So it's just something about how Hades Workshop reads this particular patched disc, evidently.

Fyi, the only differences between this mod and the previous versions are that I deleted a little Menu Help text in order to put in the properly colored Elem Atks which I modded and I adjusted Steiner's base magic stones because evidently I had not actually done that in the version I uploaded.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-14 21:02:22
Yes, Amarant's throw menu and also item's menu (ores and potions have a slightly different help).
That's not normal and it will bug if you attend to save.

I guess that's because it scanned the discs wrongly, because it was already patched. It should only scan clean ISO, otherwise that can happen.

Try to do that :
1) Make a scan of a clean ISO (simply open it with HW), you end up with a file (eg. : FFIX_Disc1.hwf) in the directory of your ISO,
2) Rename that .hwf file so it matches the name of your modded ISO (eg. : FFIX_Disc1_Modded.hwf) - replace the old one if needed -,
3) Open your modded ISO with HW.

It shouldn't do a scan of your modded ISO (otherwise you messed up something) and it should work well (otherwise I messed up something ^^).

If that doesn't work, please send me the patch you used and the .hwf file.
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-07-14 21:58:17
It's all straight when loaded that way. It's no problem for me even if it reads it funny as long as it works in the game, of course. Just trying to help if I found a bug :)
Title: Re: [FF-IX] Hades Workshop
Post by: itoikenza on 2014-07-15 13:21:32
Tirlititi, is the change/defend able to fully edit now? i wanna make "change" a custom movelist called "killer" with desc. "Kills and Heals"
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-15 22:05:14
Na, the command pannel hasn't been improved, sorry.
I never had the chance to get the datas related to it. I hope that's not too deeply hardcoded but I fear it is.

I saw there was a patch for improving the ATB speed in-battle. I'll check about it ; maybe that'll give me informations on how commands are handled. I'll see that before getting into the script.
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-07-16 23:01:18
When you say you saw a patch to speed the ATB, do you mean someone has made one or you see a way in game to do it? Because that'd be the #1 wish of the majority who could want a mod for FF9, I reckon.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-17 00:18:22
Someone has made one ^^
http://www.romhacking.net/hacks/1799/

I didn't test it yet, though.
Title: Re: [FF-IX] Hades Workshop
Post by: itoikenza on 2014-07-17 00:18:40
whenever i save a mod as hws. i get this strange oddity, it gives the following weapon status attacks as follows.
for example: if i choose "all bad" i get "confuse+blind+mini+slow" when i reimport.

all bad= confuse+blind+mini+slow
bad breath= venom
confuse+blind+mini+slow= gradual petrify
petrify+gradual petrify= virus
vemon+poison= zombie
Death= defend
doom= regen+autolife
zombie= trouble
trouble= auto-life
blind= heat
silence= freeze
virus= bad breath
venom= shell+protect
petrify= doom
gradual petrify= vanish
mini= ko+zombie+petrify+virus
freeze= petrify
heat= death
sleep= poison
slow= stop
poison= slow
stop= sleep
beserk= all good + stop
confuse= float
all good + stop= blind
shell+ protect= beserk
regen+autolife= confuse
defend= reflect
reflect= mini
vanish= silence
protect= haste
shell= protect
float= shell
haste= all bad
regen= petrify+gradual petrify
Auto-life= venom + poison
ko+zombie+petrify+virus= ko
ko= regen
Title: Re: [FF-IX] Hades Workshop
Post by: Vir on 2014-07-17 00:32:19
WOW! Neat! How haven't I heard of this, you know??

Is there any reason it wouldn't be compatible with the stuff we do, Tirlititi? Thanks again!


Edit:
I did some testing to see what difference it made. I started the watch when lv1 Zidane's bar emptied after completing an attack and stopped it when it seemed to first flash ready.

Sped up:
Fast ~3 seconds
Medium ~5 seconds
Slow ~12 seconds

Normal
Fast ~7 seconds
Medium ~9 seconds
Slow ~12 seconds

So the lowest setting doesn't appear to have been changed, and the other two are sped up approximately twice over.
Title: Re: [FF-IX] Hades Workshop
Post by: Tirlititi on 2014-07-17 12:05:15
@ Vir : For now, I'm quiet confident it is compatible. It may be not in the future but then you'll be able to change the ATB speed using HW.

@ itoikenza : Ah, yes -_- Actually, that happens as soon as you change the field. If you select another weapon and select back the weapon of which you edited the status' field, you'll have the bug happens.
I fix it for the next version, thanks a bunch.
Title: Re: [FF9] General editor - Hades Workshop
Post by: Vir on 2014-07-17 18:09:18
Thanks.

About modifying the ATB with HWS.

I wanted to pass along a suggestion Atomos199 (Excalibur II Perfect Game Guide author over at GameFAQs, you know?) made. To paraphrase, it would be great if there were a mode where the ATB stopped during animations, like the Recommended mode in VII. One hitch in FF9, as you may know, is that as the ATB continues to fill during animations and the animations typically take some time, the game becomes effectively turn based. Even the slowest creature will fill its turn bar and practically input its turn in the same order since all the bars will queue up during the animations, you know?
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: itoikenza on 2014-07-18 19:58:28
hey Tirlititi, one more thing while i'm at it! how is it moves are instantly available without being learnable? can that be changed?
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Tirlititi on 2014-07-19 21:52:54
@ Vir : Yeah, I got what you mean. I'll see what I can do.

@ itoikenza : You also have to add those spells in the "Ability list" of the character, in the "Stats" panel. You'll be able to adjust the AP needed there.
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Vir on 2014-07-19 21:59:41
Just if you're already going to work on that sort of thing already, that'd probably be a neat approach. Your program is already beyond satisfactory, so don't feel put upon or anything ;)
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Isidore on 2014-07-30 15:44:37
Hi Tirlititi !
First I have to say thank you for great work on Final Fantasy IX :)

Sadly, since the latest versions of hades workshop, several problems appears to me.
Here's a little list

- When i try editing stuff like supporty abilities, some names will be messed up in the menu (but appears correctly in the editor)
Ex : "Niv+" --> ".+"
"Galenterie" --> "ure"
"Orphee" --> "e"

- Editing items seems to be pointless as the changes won't appear in game (but it does in the editor) (like getting swords usables by Djidane, or changing effects of some items)

- Changing abilities in "Stat" > "Ability list" doesn't seem to work either, as the changes won't appear ingame. 

I've tried many ways, like editing the .bin file directly in the editor, or with applying a .ppf file, but it sill doesn't work... I'm playing on the French version, and I've already tried your program last summer and everything worked perfectly ...
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Tirlititi on 2014-07-30 16:10:00
I think the answer to all your problems is that you use the editor's save states. You must save at a mog, reload and modifications should work fine.
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Isidore on 2014-07-30 16:39:43
Unfortunately I don't think it's the problem, because I only save at the mog and never use the save states  :|
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Tirlititi on 2014-07-30 17:31:59
Humhumhum...
Then try to solve it the way I describe here (http://forums.qhimm.com/index.php?topic=14315.msg215330#msg215330). That's strange though... It shouldn't display right in the editor either if that's the problem.

I just tested the things you told me for the french version and it works fine for me.

If that still doesn't work, please send me your .hwf file and the patch you get when you export as a .ppf.
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Isidore on 2014-07-30 19:07:08
Humm
I tried your method but still the same problems...

Here's the .hwf & .ppf files

http://www.partage-facile.com/R7TQBJW1IX/patch_ffix_disc1.ppf.html (http://www.partage-facile.com/R7TQBJW1IX/patch_ffix_disc1.ppf.html)

http://www.partage-facile.com/QTJ908TBE3/final_fantasy_ix__disc1_.hwf.html (http://www.partage-facile.com/QTJ908TBE3/final_fantasy_ix__disc1_.hwf.html)
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Tirlititi on 2014-07-30 21:30:23
I'm sorry but your .ppf works fine for me...
You have renamed "Pluriche" into "Gils +", for example, and it displays well in game, as well as "Niv. +" or "Orphée". As for getting items available to other characters, you added some daggers to Marcus's weapons.

Apply your .ppf to a clean ISO, since it was created from a clean ISO (as recommended). But other than that, I don't see how you can end up with a problem of any kind :/

No problem either from the file scanning. It's all fine.
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Isidore on 2014-07-30 23:20:00
So the problem should be the iso. Okay I will try again with another one.
Anyway, thank you for your help ;)
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Lubdar on 2014-07-31 08:09:51
This doesn't by chance have the capability of viewing the summon models does it?
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Tirlititi on 2014-07-31 10:01:52
No, it doesn't. That's not something that should be available before long. For now, the only models the program can extract are the battle scenes.

But model ripping is something that interested quiet a few people. I think you'll find some interesting things if you search for Zerox's work on the internet about that. As far as I know, Zerox has retired and doesn't rip models anymore, but she have left an incredible amount of resources - sometimes reboned/reanimated by her or other fans -. Maybe FFIX's summons are amongst them. At least I know there are summons from FFVIII.
Title: Re: [FF9] General editor - Hades Workshop (0.24c)
Post by: Tirlititi on 2014-08-02 15:43:48
Update to 0.25 :
• Added some fields to edit in the "Stats" panel :
└─> you can now edit the commands of the characters (both normal and transe).
└─> there are also the commands temporary available, such as the theater's spells.
└─> you can change the attack boost of the trance (50% or 200%). Zidane seems to have a special trance attack modifier but I don't know what it does.
└─> you can change the initial equipment sets, the equipments characters begin with. For Beatrix and Marcus, there are two sets because they change it during the game.
• Added the last charmaps for the japanese version (so the configuration file has been updated) : kanjis of the Enemy, Field and World Map sections are now displayed properly.
• More opcodes have been identified in the script (party handling opcodes for most of them). The text and battle arguments in scripts are also displayed more accurately.
• Renamed a 【RED】 text opcode to differentiate the one for helps only and the other one.
• Fixed few bugs.

I found some other things about commands but, as I thought, these are hardcoded. I'm afraid it won't be possible to change the fixed commands "Change" and "Defend" to commands using a panel (they can be related only to instant non-targeting commands).
But I've not find everthing yet about that and that's about isolated bytes. I'd largely prefer to learn about the big picture before making it editable.

I've not found a way to manipulate the way the ATB fills. The patch didn't help me at all in fact ^^'

Also, there is a bug when editing scripts (it was already in 0.24) : it randomly makes the program crash sometimes when you click on "Edit script" in the Field panel. Editing scripts is still very limited and I have a big work to do on that so I didn't bother yet, but don't go wandering in the Field panel if you have are on an unsaved mod  :P
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: xenokain on 2014-08-03 05:55:11
Thanks a lot for working on this Tirlititi. The program keeps improving.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Vir on 2014-08-03 20:44:32
Ditto!
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Napha on 2014-08-04 22:28:50
Hey, this tool is amazing! The option to change de character commands was a great plus.

I have three questions though:

1. Is it possible to lower the item limit? Like having a maximum of 50 potions instead of 99?

2. Is it possible to cap the maximum level at, let's say, 60? I can just make the exp needed to level 61 very high, but just capping at 60 would be better.

3. Is it possible to make other summons work like Madeen, getting stronger as the summoner levels up? They use the same formula on the tool, but Madeen's way is much better IMO, it would be awesome to transfer it to the other ones.

Those are just ideas, no need to rush to it ^^

And I don't know if you know it, but some animations are in the wrong category. For example, there is an animation called "Aera (multi)" but it works just like the regular single target aera animation, just saying in case you didn't know.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-08-05 01:14:20
Hey, thanks.

1. I don't really know how to make that. Everytime you get an item in the script (in chest, during dialogs, during mini-games, etc...), there are actions to check if you have already 99 items and it displays "Can't carry more" instead of giving it. So if you want to raise or lower the limit, you have to change it everytime in the script and that would be a huge work (not to mention you can't do that until the script editor is improved).
Additionaly, that doesn't take care of items stole to enemies or dropped by them. I don't know how to change the limit for those.

2. Same for the level, I don't know how to change the limit. It should be much easier to find it, though, I guess.

3. The subtilities of summons' power is also an unknown for me. They are specially handled by the game ; Meteor is also in this case, since there is a chance for it to fail and to display the 2nd spell animation and that is persistent even if you totally change its effect.

Anyway, I'm more motivated for other things for now. I'll keep your ideas in mind, though, if I find something related to that. The level cap might be really easy if we're lucky ^^ I'll test about it.

As for the "multi" suffix, it just tells that the animation can be used for a multi-targeting spell but it can also for a single-targeting spell. The only difference between "Aera (multi)" and "Aera (single)" is that the later can't be used for a multi-targeting spell (if I recall well, but maybe I'm mistaken).
One day, I'll rewrite the spell animations' categories. There are some distinctions I should make (for instance, there are animations that are "consecutive strikes", such as Death Lvl. 5 or trance Aquarius, that can be used for global targeting but will only be launched on 4 targets maximum).

______________________________________________________________________

So, I have begun to make a patch (english version (http://www.romhacking.net/hacks/2112/)/french version (http://www.romhacking.net/hacks/2113/)) that enables some of the unused dialogs. Some of them have been scripted so it takes few things to unlock them. For now, I've unlocked 4 :

1) Steiner's bitterness [1/3] : there are 3 lines of dialogs here. The script and the lines themselves suggest that Steiner should only say one of them. I chose the 1st one because that's the 1st one ^^ Also, it's more substancial than the others. I don't know if it'll be possible to ever know what action you had to do to unlock whichever line ; I'm afraid it won't.

2) Good and Evil with Grampa Morrid : this one was simple to unlock. Story-wise, I think the king can't be Dagger's father because the dates don't match (Lindblum instored the peace in the era of Cid's father around 30 years before the game while Dagger's father died 6 years before). Plus Cid and Dagger's father were friends.

3) Meeting with the King and the High Priest : this one is an ATE. The game names it "The Treetop Town of Cleyra". I had to put back the dialogs and I used luksy's translation (the ATE name was already translated).

4) Reaching Cid : the game phase that comes with it is also enabled  :D

I've looked for the others too. I've found no trace of Over the roofs, Entering Burmecia (it would be hard to put it back anyway since you're not supposed to leave Lindblum before all the Hunt events) and The 2 worlds' fusion.
The Ancient World Map is actually a part of an alternate dialog when you have reached Cid in which Artania is present. I'll see if we can do something for this one latter.
The Balloon Mini-game is also present in a certain extend. I didn't find a way to properly enable it but I'm afraid it'd be full of bugs (the japanese text for it also mention that it bugs and is not very entertaining). It would have taken place on the main square of Alexandria, at the same place that the rop jumping from disc 1 (the girls scatter over the square and the boy stays on the little wood platform).

As a side note, I learned that the dialogs in the Desert Palace I thought unused are actually used ^^
The "hopeless situations" are shown when you are catched by the hedgehog pie with less than 4 or 2 minutes left. So I removed thosed dialogs from the list.

If someone wants to make a patch like this one for other langages, it will be easier once Hades Workshop can fully edit the game's script (I hex-edited it, personally). I'll share technical informations at that time.

I also plan on making a video... I'll see about it.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Napha on 2014-08-05 17:59:24
Oh, I thought changing the summons' formula would be hard, but I actually thought the item cap would be the easiest. I asked more as a matter of curiosity, as those changes would be very useful I believe, no need to worry about them ^^

And about the "Aera (multi)" animation, I guess I didn't express myself well (I'm not a native english speaker, you might have noticed)
I tried to say that even multi-targeting the enemy using the "Aera (multi)" animation I couldn't target all enemies, it just hit the rightmost enemy, just like it would happen with a single target animation. But I may just have swapped the "single" and "multi" animations, I'll check this later and edit this post to tell you what happens.

EDIT: Yes, the "Aera (multi)" animation hits only one enemy, even multi-targeted

I think the animations' tab is very well done btw, I specially like how it has some animations that wasn't even present in the game if I recall, like the "Trine" animation
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Isidore on 2014-08-07 10:14:56
Hello Tirlititi
I'm so sorry to bother you again with that, but as you can see in the pictures, there's still the same problem  :|

I've done several tests, using three different ISOs (including one made from the original FFIX disc), and on two different computers, but I still got the same problems : missing names and letters of supporting abilities, and changes in the inventory section that don't appear in the game. (and it also seem that changing the starting equipment set make the game crashes when you select the new game option)

The rest (changing effect/names of combat skills, commands, editing enemies, texts..) seems to work right.

(http://s29.postimg.org/bpevyme5j/10431673_10152616869179819_2170632130852954872_n.jpg)

(http://s29.postimg.org/6o7hx96p3/10511339_10152616869104819_6046561553189103048_n.jpg)

That's a mystery to me as I don't understand what i could have done wrong...
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-08-09 09:20:18
@ Napha : Ah, ok. I'll check to see what are the differences between those Aera, then. Maybe there are none but usually, there's at least a difference about the camera movements (like in the different versions of Aerial Slash).

@ Isidore : Please check your private messages.

@ everyone : I made the youtube video, it's available here (https://www.youtube.com/watch?v=ZFvdrD0jmms). Sorry for the slowdown ; I tried to fix it but I'm really running on an old laptop at the moment ^^'
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Vir on 2014-09-16 05:37:57
Hey, Tirlititi, I am making another mod. I wonder, if I make it as a second ppf and don't change any of the same value (no conflict?), can I make it as two optional mods which work together no problem? Or should I just plan for it to be part of the same mod?
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-09-16 18:10:56
It may have a conflict even if you don't change the same values in these case :
1) You change the name or help text of a spell/command/item/etc... in both mods, even if it is not the same object for both mods (let's say you change the help of "Thunder Slash" in one mod and the help of "Thievery" in the other : it will make a conflict).
2) You edit an enemy (or a text block) in both mods. As long as it's the same enemy (or text block) that is edited, it won't really matter which field (or text line) you changed in both.

If you really don't change things that are not in the same panel, it shouldn't make a conflict.

Anyway, you can simply make two separate mods and save them as two .hws files. Then you import both one after another and create a .ppf patch from then. So you'll have 3 versions : 1 for each mod and 1 for their fusion.


By the way, I'm not working on the program anymore since few weeks. I'm slowly getting used to my new job but that's really time consuming for me :/
I don't know when I'll be back on business here.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Vir on 2014-09-16 23:53:07
Fair enough. I won't expect you necessarily to answer as immediately, then. Thanks for the answer this time, too.

Best of luck with your new job!
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: demeterf on 2014-09-24 21:04:13
Hy Tirlititi!

I know that I asked before, that you could make an importing feature for the text, but you said that is not your priority.

We have started translating the game by exporting the texts, but it is hard and takes a long time, to copy paste every line one by one
and to resize the text bubble. It would be much faster if you could make an importing feature only for the texts.

But if you don't have time for it, could you please write a little instruction on how to make it, so we could search for
someone who could make ii

Thanks!
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-09-26 13:59:46
I'll see what I can do once I got back to work, but don't expect much... Also, it would only work with µ-written opcodes (so you had to disable the flag "Use extended opcodes").

As for the instruction, the program is open-source. Have fun.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: shikulja on 2014-10-07 00:51:54
what about extented space for text? (progress)
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: eXistenZe on 2014-10-19 08:37:04
Is it possible to convert a ppf to hwf format?
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-10-19 16:14:43
@ shikulja : you mean the extended space text opcode? I'll display those properly once I rewrite the text displaying feature (so it uses the characters directly from the game).

@ eXistenZe : Not fully. You can patch a game, then open it with HW and save as .hws, but it won't save everything. It saves properly everything in the "Party" and "Item" panels but it won't save the enemy datas (even if you enable the corresponding flag) since, from the program's perspective, they haven't been modified. Same for the "Environment" panels.
That's on my todo list to add a solution to that.


I've some time to spare on the program these days. Editing scripts shouldn't be too far away from now.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: shikulja on 2014-10-19 17:33:42
not. I wanted to say. to be able to write more text. i.e. disable limit
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-10-19 18:07:43
Ah...
Not yet either I'm afraid ^^'

I have yet to find the pointers to this kind of datas. Not that I actively search for them but it's been an unknown for me since a long time.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: eXistenZe on 2014-10-21 17:16:13
Hey guys...

Another run through FF9 and having some fun with this tool...
Since I don't actually like any of the current mods available (way many abilities broken or badly implemented), I'm kinda cheating and removing some abilities from my least used chars to boost my preferred ones...

Since this will most likely break the difficulty of the game, is there anyone who has actually created a difficulty mod where I can import the monster data from? Like HP + 100% to all enemies and other boosts?

Best regards,
xz

[edit]
When I add a blue magic to a char pool and the respective item/weapon, they can equip it, use it, learn it, but the learn % never shows the actual numbers, just the progression bar. Any idea why?

[edit2]
More bugs found.
When I add Might to a char like zidane or steiner, no matter what animation I give them, it will never show.
Some changes with abilities apparently bug other ones. I never changed the cure spell or anything related to it, but dagger is unable to cast it in battle(it does not show in battle menu, despite being learned and cast through main menu...
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: eXistenZe on 2014-10-24 15:45:16
Vacation time, I guess...
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-10-24 22:49:11
Haha ^^
Yes I'm in vacation, but I'm still around. I just didn't see your edits.

About the blue magics, I didn't notice it. I have no solution for that but using other spell slots instead of making a blue magic learnable. Thanks for warning, though. I add it to my todo list ^^'

About Might and Cure, I never had this problem. Might works fine for me if it's used by Zidane or Steiner and Cure should be usable by Dagger as long as it remains in her "White Magic" command and she keeps that command in her command list.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: eXistenZe on 2014-10-25 12:09:03
Blue magic % is a minor bug...

Might is a weird one. Zidane takes a step forward and nothing happens, no matter the animation I choose...

Cure is the problematic bug... I never touched the spell, it's place in the command list or it's "learnable" position... She can learn it and use it by main menu, just not in battle.

When you return from vacation can I send you my hws for you to check?

[Edit]
It's not only cure. It also affects cura, curaga and regen. And it's not about their position in the command list. Cure in the bottom of the list does not show and protect in the begining works.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-10-28 21:56:24
@ eXistenZe : Yes, send me your .hws. I'll check it.

Update to 0.26 !
What's new :
- You can fully edit the game scripts. Also, you now have access to the World Map's script except for the japanese version which I have troubles with. The syntax ressembles to the C syntax with some significiant differencies (see below),
- Added an option for displaying texts in a nicer way (without the opcode symbols) in previews.
- Added a button in the text editing window to automatically compute the size of the dialog box. It's not 100% reliable but it's still fairly accurate.

About the game script, here is what I added in the "Help" window :

Code: [Select]
The game script handles scripted events, enemy AIs and other related stuffs.

The script is presented with a kind of C-like syntax. There are several differences though.

[General]
The language accepts only one instruction per line.
Lines are not terminated by any punctuation character.
For flow control statements, the braces are mandatory.
You can't use braces out of a flow control statement.
There is no such thing as real values. Everything is done using integers (sometimes signed).

Once you have modified a function's script, you must parse it to check eventual errors.

[Flow Control]
The different keywords for controlling the script's flow are described here.

if : usual If/Then statement with an optional Else. The syntax is

if ( CONDITION ) {
    CODE
}

or

if ( CONDITION ) {
    CODE_A
} else {
    CODE_B
}

Note that the opening braces must be on the same line as the keywords "if" and "else".

ifnot : opposite control of if. It works similarly though. The syntax is

ifnot ( CONDITION ) {
    CODE
}

while : usual While statement. You can use the keyword "break" to leave the control but there is no such thing as a "continue" instruction. The syntax is

while ( CONDITION ) {
    CODE
}

do/while : usual Do/While statement. You can also use the keyword "break" to leave the control. The syntax is

do {
    CODE
} while ( CONDITION )

switch : a Switch statement with consecutive cases only. The first case's value is specified in the control, as well as the maximal amount of cases. The syntax is

switch NB ( VALUE ) from FIRST {
case +INC:
    CODE_A
case +INC ; +INC:
    CODE_B
default:
    CODE_C
}

where
NB is the maximal amount of cases,
VALUE is the control expression,
FIRST is the "+0" case,
INC are numbers strictly lower than NB.
Note that, like in C, you have to use the keyword "break" if you want only one branch to be run and that the "default" case is optional.
The semicolon allows to make several values lead to the same code branch.

switchex : a more usual Switch statement. The exact amount of cases (default case excluded) must be provided in the control. The syntax is

switchex NB ( VALUE ) {
case X:
    CODE_A
case Y ; Z:
    CODE_B
default:
    CODE_C
}

NB being the amount of cases and X, Y and Z representing numbers. The keywords "break", "default" and the semicolon have the same purpose than for the "switch" statement.

loop : rerun the whole function. It works as an alternative to a last "RETURN" instruction and can only be used out of any other control block.

[Variables]
You can not declare variables. There is a limited amount of them, some being globals shared accross different field scripts, some being locals initialized to 0 when the script code is loaded.
For what I know,
- local variables are the ones named "VAR_A" "VAR_B" followed by 2 numbers. The second number works as an array operator,
- usual globals variables are the ones named "VAR_D",
- global variables that are saved in a memory card save are the ones named "VAR_C",
- "MV" and "SV" variables are special globals that are also shared by the game's mechanics (such as the battle code or the deplacement code).
- There are also Getters to retrieve values from the other game's mechanics that can't be directly modified (such as the player's gils amount).

In order to manipulate variables, you must use the instruction "SET" followed by a series of operations over the variables. Some of those operations are still unknown.
Besides the usual operations, you have "^" that marks the binary XOR operation and "#" that is an unary operator counting the amount of active bits.
The brackets are more of a structure's field accesser than a real array operator. They will be displayed differently in a next version.
Note that the minus operator can't be read as an unary operator yet. Only positive integers can be used in variable manipulation codes.

WARNING : at the moment, the operation priorities are not respected. By default, the operations will be executed from right to left. It is advised to write all the parentheses.

Variable manipulation codes can also be used in most of instructions's arguments.

You can change quiet a lot of things now. The content of the chests, the game dialogs, mini-game mechanics, etc... The scripting language may be a bit ascetic :/ I guess I would have had way more work if I wanted to make it more flexible.

Here is an example I made (a patch for the Disc 1 of the US version - just start a new game once patched) :
download patch example (https://dl.dropboxusercontent.com/u/98687557/Resources/ScriptTest.zip)
It took me some time, though. It's still tedious. But way way less than editing the thing with an hexadecimal tool ^^

There is a limitation I'm willing to remove for the next version : you are limited for using only preloaded datas. You can't use a model if it is not present (hidden or not) in the original game in the field you want to use it. That also goes for model animations or fields (you can't jump from any field to any other field) or for battles.
In fact, I already passed by this limitation in the "hidden dialogs" patch I made. I need to work just a little bit more to automate the process. I guess I'll make available the choice of which datas are preloaded in a field (and a battle -> you'll finally be able to change an enemy's model).

Ah yes, something I forgot to mention in the help : the array of variables (the second number in "VAR_A10_10" for example) is of size 256 for variables of type A, B and SV and is 65536 for C, D and MV. I also forgot to throw an error if you enter something higher... You'll end up with an array re-ajusted between 0 and 255 without being noticed of that.

Also, here is a list of the fighter structure fields I know (If you see "SV_FunctionEnemy[38]", for instance, that refers to the enemy's current MP). They appear only as raw number in the program :
Code: [Select]
[32] : Enable back presence flag
[33] : Disable presence flag
[35] : max HP
[36] : current HP
[37] : max MP
[38] : current MP
[39] : max ATB
[40] : current ATB (Only player characters maybe)
[41] : level
[42] : status immune (Heat - Gradual Petrify)
[43] : status immune (Petrify - Protect)
[44] : auto status (Heat - Gradual Petrify)
[45] : auto status (Petrify - Protect)
[46] : current status (Heat - Gradual Petrify)
[47] : current status (Petrify - Protect)
[48] : elemental immune
[49] : elemental absorb
[50] : elemental half
[51] : elemental weakness
[54] : shadow flag?
[55] : model size
[59] : Disable model flag
[60] : Enable back model flag
[65] : line position (not to confuse with "row position" ; that's the ordering of the fighters from 0 to 3)
[73] : magic power
[74] : defence
[75] : evade
[76] : magic defence
[77] : magic evade
[78] : marthym order flag (change its value to cast Marthym !)
You can totally modify them in battle script (the game does that for turning Ozma's darkness absorbtion into a weakness, for instance).
By the way, the reason why I display integer values as a base 64 numbers (among other display modes) is that most of enemy AIs use this base for the setup of their spell (how them casting is randomized is quiet complicated ^^). It has importance for the values in the AI setup.

I would be surprised if there isn't any bug, but not with the most common opcodes and stuff.
If you find one or if you have any question, please tell me.

I would like to thank yaz0r, a french fellow who works on a script dumper and who helped me for this (if you have convenient names for some functions, it's thanks to him for instance ^^).
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Baby5 on 2014-11-24 12:16:03
MP Multiplier of Spells:
0 = Nothing special
1 = Can be used in menu(such as Cure). Does nothing & waste mp if you allow some commands(such as Flare) to be used on a party member in menu.
2 = Blue Magic(this skill may be obtained by Eat/Cook). Character must have skill available in Ability set.
3 = No idea, havent tested. Not used for anything by the game though.
4 = Makes MP cost 4x the amount. Used on Garnet's Eidolons.

For example, if i swap Ifrit's MP Multiplier from 4 to 1, Ifrit's MP cost becomes 26(the regular amount) and becomes usable from the menu. Since Ifrit does nothing in terms of "Heal/Status/Revive", the character just wastes 26 MP.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-11-24 17:52:33
Oh my god, thank you so much for this point :O

I think I just tested the value 3 on Garnet's eidolons and saw the multiplication went down to 3 times the MP amount.
The flag 2 may be the fact that you don't see figures when you are learning the ability. That's not something that can be seen in regular games but the Blue Magics don't display the AP on the learning bar ("35/40" for instance ; it's replaced by 3 stars when you have fully learned the ability). eXistenZe was having this problem : I think you just gave him the way to fix it ^^
Indeed, there are few effects that can be used in menu.

I'll investigate that more thoroughly. Thanks a bunch again !
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: ZackNeji on 2014-12-18 11:17:57
I have a problem.
I want to make the same as hidden dialogs patch in the spanish version.

But in Steiner in Prima Vista scene (Prima Vista/Storage -> Function func_0_1) gives me this error:  "- Not enough space : data is 21636 bytes too heavy."

This error apears without changing anything, and if I change a value, the program don't make any real change when I save it.

Any solution?

Sorry for my english.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-12-18 16:58:58
Indeed, the script editor has a kind of bug (harmless but it sometimes screw the data space required by a function) : some switch/ex control cases have redundant operations.

In this case, you have switches in this function that ressemble to this :
Code: [Select]
switchex 14 ( VAR_B9_239 ) {
case 206:
    some_code_A...
    FIELD( 206 )
    some_code_B...
case 200:
    same_code_B...
The code B is redundant in the first case because the "FIELD" opcode should be handled like a "RETURN"...

I'm aware of the problem and hopefully it will be fixed in the next version.

I'm in holidays tomorrow ; I'll have a bit more time for the program so I guess the next version will come out soon. It will also enable the edition of preloading datas, which is compulsory for making a patch like "Hidden dialogs" (for the Linblum's part).

So I can only tell you to wait a bit 'till I fix the problem, sorry. You're looking at the very right place for Steiner's dialog, congrats ^^
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: ZackNeji on 2014-12-18 17:32:30
Thanks, I keep waiting ;). You are doing a great great work.

I have another question (less important).
I already added the dialogs between Vivi and Puck. All gone well, but when Puck talks (not Vivi beacuse his texts are in his function) the new text boxes appears over Puck and cover him. I don't know why this happends. Can you tell me why?

(http://usuaris.tinet.cat/zackneji/mopok/uploads/sin_titulo_1_copia.jpg)

Thx.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-12-18 19:04:18
I didn't even see that dialog was still in the script ! It's not in my Hidden Dialogs patch ^^"
I'll look into it. It might be related to the window's flag UI argument in the "WINDOW" or "DIALOG"s opcodes.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: ZackNeji on 2014-12-18 23:12:02
I didn't even see that dialog was still in the script ! It's not in my Hidden Dialogs patch ^^"
I'll look into it. It might be related to the window's flag UI argument in the "WINDOW" or "DIALOG"s opcodes.

The dialog is not in the script, only text. I added it into the script. I'll look the UI options, thx.

If you want the script modifed to add the conversation, here you have it:
viviPuckDialog.rar (http://usuaris.tinet.cat/zackneji/mopok/uploads/vivipuckdialog.rar)

The both goes in "Alexandria/Rooftop"

The script is the spanish one, but I thing that works in USA or french ver. as well ;)
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2014-12-19 21:55:30
Ah ok, I wondered ^^

I guess the dialog was initially meant to be placed after they reach the castle's wall, since the texts are after the “After this wall, we'll be inside the castle!”. That's why I didn't add them in Hidden Dialog.
Though it makes sense to have the dialog here.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: ZackNeji on 2014-12-20 00:02:25
You're right. I look to add there to see how it looks^^
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: itoikenza on 2014-12-23 21:16:20
Tirlititi is it possible to replace "Change" into any other command list instead?

here's what i tried, but nothing worked...
also the only reason i linked the "itoikenza" command list, is because it won't let me add moves otherwise...
(https://dl.dropboxusercontent.com/u/50488782/models/itoikenzaFF9Change.PNG)

@Tirlititi, Remember that?

have you ever fixed the change/defend not being changeable into a moveset yet?
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Yugisokubodai on 2015-01-11 16:37:26
There're 2 or 3 change and defend command in ff9.img. All have pointers point to them. You need to edit it and other text which are not supported by HadesWorkshop by an hex editor or program likes Atlas.

Anyone know the opcode to access small Kana letter in Japanese version? I guess it's some kind of F9xxyy but havent found it yet.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-01-11 20:19:21
Updated to v0.26b.
Few things new there. I had so much trouble with one of them...

- You can now change the battle scene of battles,
- You can modify the preloading datas of fields and world maps : it allows to trigger any battle inside any field and jump from any field to another,
- Modified the "MP Multiplier" field for spells, it was flags in the end (thanks Baby5 again for that),
- You can now see and remove (not add nor edit yet) special text opcodes I called "Format Codes" : they are used to tell whether a dialog bubble must be up or down, or place the bubble on the screen (ZackNeji : if you delete the format codes of Alexandria hidden dialogs, they will display fine on this screen),
- Fixed 3 bugs with the game script : the harmless one plus two others... There might be some more though :/

About preloading datas, they are half-automatized : you don't have to care of making preloading datas match each other (if an enemy formation is preloaded, its battle scene must be also preloaded for example) but you need to manually add preloading datas (fields and enemy formations mainly) if you use one in the game's script.

itoikenza, I am aware of this problem everytime I open the program ^^"
But the recent insight I had with battle's mechanics make me think it will be really hard for me to understand it, and therefore manage those commands.

So, I said I would tell about how making an "hidden dialog" patch with the tool so here it is.
First, open the disc 1 and 2 and go to the fields panel.

1) For Steiner's Bitterness part :
This one is quiet easy, you go in Ruined Prima Vista's storage room script (or whichever it is called in your langage), select the "Function Main_Loop" : the dialogs are mainly scripted in this single function in this field (in most fields, the dialogs are scripted in each character's own function instead). Check the different "WindowSync/Async" opcodes to guide yourself in the script.
You'll find these lines :
Code: [Select]
        if ( VARL_GenBool_2439 == 1 ) {
            WindowSyncEx( 13, 1, 128, 364 )
        }
        if ( VARL_GenBool_2438 == 1 ) {
            WindowSyncEx( 13, 1, 128, 365 )
        }
        if ( VARL_GenBool_2437 == 1 ) {
            WindowSyncEx( 13, 1, 128, 366 )
        }
The variables VARL_GenBool_243x seems to not be used anywhere else. The easiest way to unlock a line of dialog is to delete the "if" statement around it (the line containing the "if" and the closing braces).
Don't forget to parse the function before hitting the button "Ok".

2) For Steiner and Morrid's conversation :
Go in the Observatory Mountain's Shack script and search for the "Function GrandpaA_Loop", specifically these lines.
Code: [Select]
    case 12:
        WindowSync( 6, 128, 118 )
        set VAR_GlobInt16_28 = 17
        EnableHeadFocus( 2 )
        set VAR_GlobUInt8_31 = 96
        RunSharedScript( 7 )
        break
This function and the "SteinerB_2" one are responding each other using the variable "VAR_GlobInt16_28" which tells the current state of the dialog. Here, the variable is said to jump from the value 12 to the value 17, skiping a part of the dialog. Just replace the 17 by 13 and it will be fine.

3) Cleyra Meeting :
For this one, you have to enable an ATE in one (or several) of Cleyra's fields. I personally enabled it only in the Cathedral's hall field because it is simplier, but I don't know which conditions should have been met to enable it in developers' mind.
So, go in the Cathedral's hall field (in the US version, that's the 2nd field called "Cleyra/Cathedral" ; be sure to get to the sandstorm-still-active version of it, the first one).
The interesting part of the script is found in the "Function Main_Init" :
Code: [Select]
    if ( VARL_GenUInt8_484 == 0 ) {
        set VAR_GlobUInt16_30 |= 2
    }
    if ( VARL_GenUInt8_484 == 2 ) {
        set VAR_GlobUInt16_30 |= 8
    }
    if ( VARL_GenUInt8_483 == 0 ) {
        set VAR_GlobUInt16_30 |= 1
    }
    if ( VARL_GenUInt8_483 == 2 ) {
        set VAR_GlobUInt16_30 |= 4
    }
    if ( VARL_GenBool_3857 == 0 ) {
        set VAR_GlobUInt16_30 = 0
    }
You need to add these lines in the list of "if" statement (before the last one, that's better) :
Code: [Select]
    if ( VARL_GenBool_3856 == 0 ) {
        set VAR_GlobUInt16_30 |= 16
    }
The variable "VARL_GenBool_3856" is a flag that is set to 1 once the ATE has been seen, and 16 is a bit-flag corresponding to the 5th ATE, the hidden one.
You'll surely need to translate the lines of text for this dialog (in the Text panel of the program), as I think it's only present in the Japanese version of the game.
See there (http://forums.qhimm.com/index.php?topic=14315.msg214793#msg214793) for the original dialog and an english translation by luksy.

4) Reaching Cid :
I assumed this part of the game was intended to be right after the ATE "Brahne's Fleet Arrives".
Search for the first "Brahne's Fleet/Event" field's script. It is quiet low placed in the field list. At the end of the "Function Linblum_Soldier_Loop", you'll find something like this :
Code: [Select]
            PreloadField( 5, 1363 )
            set VAR_GlobInt16_21 = 1363
            if ( VAR_GlobUInt8_17 == 255 ) {
                set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
            }
            0xA9( 250 )
            FadeFilter( 6, 24, VAR_GlobUInt8_17, 255, 255, 255 )
            Wait( 25 )
            if ( VAR_GlobBool_167 == 1 ) {
                RunSoundCode( 265, 65535 )
                set VAR_GlobBool_167 = 0
            }
            if ( VAR_GlobBool_162 == 0 ) {
                if ( VAR_GenUInt8_13 < 9 ) {
                    set VAR_GenUInt8_13 = 3
                }
                RunSoundCode1( 20864, 2297, 0 )
            }
            if ( VAR_GlobBool_163 == 0 ) {
            }
            set General_FieldEntrance = 2
            Field( 1363 )
            break
You must set the field to 1364 (Lindblum Airship Dock) instead of 1363 (Lindblum Hallway). Modify it in both the "PreloadField" and the "Field" opcodes. You also need to set the variable "General_FieldEntrance" to value 1, so Zidane appears at the right place of the Docks.
Once you have done that, you need one more thing for this one : you need to add the "Lindblum Airship Dock" field to the preloading datas of the Brahne's fleet field. Hit the button for editing preloading datas, go to the "Fields" section, search for the Dock's field in the list on the left and then add it. If you run out of space, delete the Hallway's field before since the two fields are not linked anymore.

Aaaaaaand you're done with that (and so am I ^^).
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Yugisokubodai on 2015-01-12 01:23:16
I found that the world map's dialogue uses embeded pointers for locations at the beginning of the text block. These pointers called TOKENIZE in Hades, and the program calculates it wrongly. Anyone notice that the location names are wrong with Hades?
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-01-12 09:18:23
Wa.
Indeed, they are calculated wrongly for the japanese version. I'll correct it for the next version.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Yugisokubodai on 2015-01-12 12:11:54
And the dialogue bubble height are always zero in Japanese version.
Btw, I tried to fix the calculation with Atlas.

(http://i.imgur.com/bMbScgC.png)

(http://i.imgur.com/3Yjzffd.png)

Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Yugisokubodai on 2015-01-13 11:37:16
I wonder is there any way to trigger each dialogue text without palying?
After translating, we need to check if the dialogue bubble fit the text or not, and playing through the game is nearly impossible.
I see there's debug mode in the text, but how to enter it?
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Yugisokubodai on 2015-01-17 08:43:43
I found a way to test all sentences we translated without having to play through the game. Just use the save state.

From 1:37 in this video

https://www.youtube.com/watch?v=uz3VuN_o9bQ
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: ste459 on 2015-02-21 07:57:51
Hello!!  :)

First of all: thank you for your awesome work. FF9 is my favourite game, and I always dreamed the possibility to mod it!
When I firt saw this post, I can't believe it. Thanks

I really would ask a question to modders more experienced than me: it's possible to make a script that allows a boss to refill his Health Point when they are low? I know that the HP hard limit of 65535 cannot be exceeded. But if it were possible to make a script that refill (for example) Kuja Trance HP when they go under 10.000, and to do this thing for a limited number of time, the problem of max HP can be bypassed.

For example, we can declare a variable X. X start value (at the beginning of the fight) has to be 1.
When during the battle the boss HP go lower than 10.000, the boss refill his HP to the full value and X becomes 2.
And so on, until X reach a default value (for example 10) and the script interrupts.

I have no experience in programming except very little of Visual Basic 6. So I may wrote only stupid things.

I ask the question to coders more skilled than me. Is it possible? We can have a Kuja Trance, Ozma, Hades with virtually unlimited HP, for very challenging fights!
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-02-21 10:07:42
Yes, it is possible by editing the AI script.
I'm planning to make a more detailed manual of script editing, but there are still some few bugs and I wish to know the purpose of some more functions. But that, you can do already.

For AI script, the functions are usually the followings.
- A single main function that usually only inits the enemies with a InitObject call.
- For each enemies, a set of function that can be made of:
-- Init: usually defines which regular attacks the enemy will use and their mana cost (read the first values as Byte 64).
-- ATB: what the enemy does when its ATB is full.
-- Loop: a function that check the enemy's state each frame and may respond to it accordingly. It always ends with the lines "Wait(1)" and "loop". That's the one you're looking for. (optional but frequent)
-- Counter: what the enemy does when it has been hitted (optional)
-- CounterEx: what the enemy does when it casts a spell on himself or anytime the "counter" doesn't trigger for some reason (optional)
-- Death: what happens when the enemy dies (optional)
They may be sorted differently, though.

For most bosses, you may have noticed that they display 10 000 more HP than they should. Trance Kuja's HP is 55535 in-game, not 65535. That's because the looping function is scripted so when Kuja goes under 10 000 HP, he speaks, cast Ultima and ends the fight.
That's this part of the code specifically :
Code: [Select]
    if ( #( SV_FunctionEnemy[HP] <$ 10000 ) ) {
        // Wait until Kuja no longer attacks
        while ( IsAttacking != 0 ) {
            Wait( 1 )
        }
        // A check of "The battle has started"
        if ( GetBattleState != 4 ) {
            return
        }
        // Freeze the ATB and hide it.
        RunBattleCode( 32, 0 )
        while ( GetBattleState != 1 ) {
            Wait( 1 )
        }
        // Cast Ultima (the speech is included in it)
        set #( SV_Target = SV_PlayerTeam )
        AttackSpecial( 5 )
        while ( !( VAR_GenUInt8_199 & 16 ) ) {
            Wait( 1 )
        }
        RunBattleCode( 40, 1 )
        set VAR_GenUInt8_199 &= 65519
        Wait( 1 )
        while ( !( VAR_GenUInt8_199 & 16 ) ) {
            Wait( 1 )
        }
        // Fade filter and ends the fight
        FadeFilter( 0, 1, 0, 255, 255, 255 )
        set VAR_GenUInt8_199 &= 65519
        while ( IsAttacking != 0 ) {
            Wait( 1 )
        }
        set SV_FunctionEnemy[DEFEATED_ON] =$ 1
        RunBattleCode( 33, 5 )
        return
    }

So, you see, to check if an enemy's HP is under 10 000, that's the line "#( SV_FunctionEnemy[HP] <$ 10000 )".
Using simply "SV_FunctionEnemy[HP] <$ 10000" should also work. The purpose of the # operator and $ operator modifier is to handle multiple characters at once.
For instance, the expression "#( SV_PlayerTeam[HP] ==$ 1 )" will return true if there is at least 1 character in the team whose HP is 1.
However, "SV_PlayerTeam[HP] == 1" won't work. It will return true only if the 1st character's HP is 1 and all the others' are 0.

More precisely, suppose you have 4 characters in the team and their HP are 100, 113, 210 and 95.
"SV_PlayerTeam[HP]" returns a list : [100, 113, 210, 95]
"SV_PlayerTeam[HP] >=$ 100" also returns a list : [1, 1, 1, 0]
"#( SV_PlayerTeam[HP] >=$ 100 )" returns the amount of bits on : 3

So, how do you do what you suggested ? By doing exactly what you suggested ! You take a variable ("VAR_LocUInt8_60" is fine for that purpose and completly unused), increment it and heal each time Kuja goes under 10 000 and launch the end of the battle only once it reaches a certain amount.
You also need to set the local variable counter to more than 61 in order to use "VAR_LocUInt8_60" (in the "Local Variable Panel" above the function's script, write "allocate 61" instead of the previous "allocate" statement).

To heal, use this line:
Code: [Select]
set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])"FirstOf" converts a list [value1, value2, value3, value4] into value1.
You can also use :
Code: [Select]
set SV_FunctionEnemy[HP] =$ 65535
You may want to init VAR_LocUInt8_60 to 0 in the enemy's initialization function but it's always initialized to 0 by default.

The resultant code should look something like this :
Code: [Select]
Function func_Trance_Kuja_Loop
    if ( !VAR_LocUInt8_0 ) {
        set VAR_LocUInt8_0 = 1
        while ( !( GetBattleLoadState & 8 ) ) {
            Wait( 1 )
            set VAR_GenUInt8_206 = GetRandom
        }
        set SV_FunctionEnemy[SHADOW] =$ 0
        while ( GetBattleState != 1 ) {
            Wait( 1 )
            set VAR_GenUInt8_206 = GetRandom
        }
        RunBattleCode( 35, 0 )
        while ( GetBattleState != 4 ) {
            Wait( 1 )
        }
    }
    if ( #( SV_FunctionEnemy[HP] <$ 10000 ) ) {
        if ( VAR_LocUInt8_60 < 5 ) {
            set VAR_LocUInt8_60++
            set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
        } else {
            while ( IsAttacking != 0 ) {
                Wait( 1 )
            }
            if ( GetBattleState != 4 ) {
                return
            }
            RunBattleCode( 32, 0 )
            while ( GetBattleState != 1 ) {
                Wait( 1 )
            }
            set #( SV_Target = SV_PlayerTeam )
            AttackSpecial( 5 )
            while ( !( VAR_GenUInt8_199 & 16 ) ) {
                Wait( 1 )
            }
            RunBattleCode( 40, 1 )
            set VAR_GenUInt8_199 &= 65519
            Wait( 1 )
            while ( !( VAR_GenUInt8_199 & 16 ) ) {
                Wait( 1 )
            }
            FadeFilter( 0, 1, 0, 255, 255, 255 )
            set VAR_GenUInt8_199 &= 65519
            while ( IsAttacking != 0 ) {
                Wait( 1 )
            }
            set SV_FunctionEnemy[DEFEATED_ON] =$ 1
            RunBattleCode( 33, 5 )
            return
        }
    }
    Wait( 1 )
    loop

Note that Kuja's counter-attacks are based on his current HP. You may want to change that also. And you may also want not to heal Kuja completly (let's say bring his HP to 55535 instead of 65535) so his Curaga still heals him.
Hope you'll be more at ease after that ^^

Congrats Yugisokubodai btw (your music is nice ^^).
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: ste459 on 2015-02-21 14:48:55
Great!! Now i'll test it. Thank you for your detailed answer.

I'm planning to do some balance changes to make the game more challenging. The only defect of this game is that's too easy, in particular in the late game.

Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: tasior2 on 2015-02-23 11:12:42
Just want to say, GREAT WORK Tirlititi!!!
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-02-27 21:28:11
Thanks :)

Updated to 0.27 :
- Field backgrounds can be viewed and exported (not edited yet),
- You can modify the amount of enemies inside battles ; be sure to change it both in the main panel and in the battle script,
- Added a window telling you how much some file reading processes are progressing (this is quiet useful when you load fields or battle scenes, since they are long to read),
- fixed bugs (tokenize code for japanese, some script bugs, some UI bugs...).

About field background, they are not 100% well displayed. Some tilesets (think of those as layers) are a mess and I don't know how to handle them ^^" Those tilesets are mainly about the "Places names" that are displayed when you first enter a new place but there are also some effects of light. There are also few tilesets that are behind ones they should be ahead of.
You can export them as .tiff (Gimp can read them at least). The filesize is hugely non-optimized.
You can see background's animations too.

For adding enemies to a battle, you must add to an enemy group, verify its "Targetable" flag is on, and add a "INIT_OBJECT" line inside battle's main function. Note that some enemies are moving back to a fixed position (Black Waltz 2, for instance, always go back to its default position in vanilla games after a Teleport move). The angle is also re-initialized to 0 most of the time.

You can see a stupid fight patch I made with this version here (https://www.youtube.com/watch?v=as9CP9Sm7c8).

I guess I'll keep making bug-fixes updates while I'm studying the top-level file format. I need to make the remaining (menu) texts available and I can't do it without this step (plus it should unlock the card's panel also).
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: DanTsukasa on 2015-03-01 09:04:40
Thanks :)

Updated to 0.27 :
- Field backgrounds can be viewed and exported (not edited yet),
- You can modify the amount of enemies inside battles ; be sure to change it both in the main panel and in the battle script,
- Added a window telling you how much some file reading processes are progressing (this is quiet useful when you load fields or battle scenes, since they are long to read),
- fixed bugs (tokenize code for japanese, some script bugs, some UI bugs...).

About field background, they are not 100% well displayed. Some tilesets (think of those as layers) are a mess and I don't know how to handle them ^^" Those tilesets are mainly about the "Places names" that are displayed when you first enter a new place but there are also some effects of light. There are also few tilesets that are behind ones they should be ahead of.
You can export them as .tiff (Gimp can read them at least). The filesize is hugely non-optimized.
You can see background's animations too.
I guess I'll keep making bug-fixes updates while I'm studying the top-level file format. I need to make the remaining (menu) texts available and I can't do it without this step (plus it should unlock the card's panel also).

Awesome update.

When you say "(not edited yet)" what do you mean? Are there plans for us to be able to upscale the backgrounds or replace them entirely (sort of like the work edone for FF7 and FF8 with Palmer and so on)?

Are there any plans to add any sort of batching to the backgrounds at all? There are a loooot of backgrounds as we all know, doing them all 1by1 is possible, but very time consuming.

Something else that would be interesting, though not exactly necessary, is to have the viewer window be larger than its current size, most backgrounds don't actually fit correctly.
Its not exactly an issue to scroll up/down left/right though, which is why I said its not necessary, just a minor thing.

Great work.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-03-01 10:58:27
Thanks !

It is planned to make backgrounds editable, yes.
However, the main problem with that is the image size (that's why you can't make the other textures larger than what they currently are). If there is space to add some lines in fields' scripts, increasing a background's size (including upscaling them) would hit the limit extremely fast.
That's another reason why I try to get more of the high-level structures : to add a tool that could increase the size and get ride of that limitation.

The viewer window needs rework ^^ As you said, most backgrounds don't fit inside. The pathing and few other stuff should also be displayed in this window so I let it the way it is until I decide its final form. Same as the Script editor that definitely needs improvements.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: DanTsukasa on 2015-03-01 13:07:44
However, the main problem with that is the image size (that's why you can't make the other textures larger than what they currently are). If there is space to add some lines in fields' scripts, increasing a background's size (including upscaling them) would hit the limit extremely fast.

The viewer window needs rework ^^ As you said, most backgrounds don't fit inside. The pathing and few other stuff should also be displayed in this window so I let it the way it is until I decide its final form. Same as the Script editor that definitely needs improvements.

Could you explain the image size limits in a bit more detail at all?

The pathing? Do you mean the walkmesh, I remember a Zidane_2 tool let you view/export walkmeshes but I never got the tool working (eventhough I have the source codes to everything he's done).

One thing that I think would be nice, probably for everything actually, is batching export (and import), someone could export all the scripts from lets say disc 1 as a text file and edit that, reimporting it later on, not sure if it'd save any time over the current method though, but it'd be great for fields and battle maps.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-03-01 13:50:37
Yes, the walkmesh. I got Zidane_2's tool working for me.

About the size limit : each field is packed in a "cluster data", regrouping every data needed for this field. There are the background, the script, the local models (really few models are global and usable anywhere ; and yes, that makes a lot of duplicates), the local animations for models, the local sounds, etc...

Between each of these datas, there is litterally no space available. However, between the field clusters, there is some 00 bytes unused.
There is between 0 and 2047 free bytes, depending on luck (clusters' locations are multiples of 2048 so the 00 are just for padding, initially). 2047 bytes, that's enough to add a bit of code, but that wouldn't even allow an increase of a 256x256 image to a 258x256 image (2 bytes = 1 pixel for backgrounds)... You could win 1 pixel in one of the 2 dimensions.

About batching import/export, I'm thinking about it for scripts (it has been asked for texts also...) but there are still a lot of unknown opcodes and such. I also think about changing function names' case LikeThis instead of LIKE_THAT (it was thought to be more like an assembly-looking code at the beginning).
All that to say I'll eventually do that, but not before all the bugs are fixed and that part of the tool is stabilized.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-03-05 20:54:07
Greetings, everyone,

I’m new on this site and I just wanted to say that you guys are awesome! I have used many of your tools with great success already, and now that my FF7 hack is more or less complete, I’ve started working on FF9 next.

I wanted to thank you, Tirlititi, for making this great editor! Final Fantasy IX has always been one of my all-time favorite FFs, and I’ve been dreaming of modding it for a long time.

But right now, I’ve encountered a problem, and I hope that you can help me solve it:

For some unknown reason, the newest version of Hades Workshop (0.27) crashes every time I go to the Item, Enemies, or Environment section. I’ve tried it with both .bin and .iso files, and while Hades can open both file types, it also crashes on both of them whenever I go to one of the above mentioned sections. I can’t explain why that happens, because all previous versions of Hades (0.26 and older) worked fine. I thought that maybe my isos were corrupt, but it also happened when I tried to open the original, unaltered files. I have no other programs running in the background, by the way.

Oh, and I’m playing the German version if that makes any difference (it shouldn’t, however, because as I said all previous Hades versions worked flawlessly with them). Do you have any idea what might be causing this?

Thanks in advance for your help, you’re amazing!

Edit: Also, the item icons in the Inventory section are no longer displayed correctly (see picture). In all old versions of Hades Workshop up  to 0.26, they are still displayed correctly. Maybe this gives you an idea of what might be causing this?

(http://oi59.tinypic.com/12196ap.jpg)

It would be great if you could help me solve this issue, as I'd love to continue my FF9 modding.

Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-03-21 14:51:40
A little message to inform you that I added some deciphered scripts in the 1st post.

Sometimes, when I get curious or when I'm asked to, I take the script of a system in FF9 and make it more readable (renaming variable names and such). That might be interesting to some of you. That's meant to be understandable if you know some programation basis but it's not meant to be parsable in any way (some uninteresting things are cut off).
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-03-24 11:42:02
Nice, thanks for the understandable version of Ozma's AI. Enemy AI is one of the most interesting aspects to edit, but I still have a lot to learn about it. I have just started changing certain enemies' AIs, and I've already succeeded at some of the things I wanna do (like having Hades use Curse and Doomsday without a countdown, or preventing Beatrix from ending battles automatically after 10 rounds).

However, I'm having trouble with changing the target of certain attacks from single to multiple, and I hope someone can help me with this. Specifically, I'm trying to make Tiamat's Float spell target the entire party instead of just one party member (so he has better chances of pulling off his Snort counterattack). Since he has 2 Float spells in his list, I changed the targeting of both attacks in his AI to SV_PlayerTeam (see picture) just to be sure, but it didn't work. He still casts Float on only one party member. Why?

This doesn't make sense to me as I've already done the same thing successfully with Malboro's Bad Breath, and it worked flawlessly. Now Malboro casts Bad Breath on the entire party.

I've wondered whether it might have something to do with the attack animation? The first Float spell in his attack list has a single-target animation, the second one a multi-target animation, but it seems this second one is never used. Is there a way to make him use it?

(http://oi59.tinypic.com/108a0cx.jpg)
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-03-24 15:42:02
Yes, that's because of the attack animation.
That's great he has a multi-targeting version of the spell, because otherwise, that wouldn't have been possible.

So, the list of regular attacks he uses is on the initialization function (func_Tiamat_0). Only the 5 first lines matter, the rest is about the randomization system.
Code: [Select]
    SET VAR_B7_20 = 7
    SET VAR_A11_1 = 794688L
    SET VAR_A11_4 = 29060
    SET VAR_A11_7 = 1280
    SET VAR_A11_10 = 24576
VAR_B7_20 -> Number of different regular attacks
VAR_A11_1 and VAR_A11_4 -> Attack IDs of regular attacks
VAR_A11_7 and VAR_A11_10 -> Attack MP costs

The way you should read those ugly 794688L and 29060 is in base 64 (put the selection caret on the numbers and read the base 64 field). 794688L = [ 3 ; 2 ; 1 ; 0 ] and 29060 = [ 0 ; 7 ; 6 ; 4 ] meaning that his regular attacks are all his attacks but the number 5 (Snort) and the number 8 (multi-Float). You have to change the 7 (single-Float) to 8 then.

The calculation to do that is :
[ 0 ; 8 ; 6 ; 4 ]
= 4 + 6*64 + 8*64*64
= 33156

I'm sorry you have to make the conversion yourself everytime you want to change the regular attacks :/
The interface of the script editor needs to change.

Alternatively, you can use a trick and replace the attack 7 by the attack 8 inside the ATE function (func_Tiamat_2). Add these lines right before the 'ATTACK' opcode :
Code: [Select]
    if ( VAR_B7_19 == 7 ) {
        SET VAR_B7_19 = 8
    }
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-03-24 16:58:12
Wow, it worked! Thanks a ton!

Yeah, there's really a lot of variables in every AI script, it was really difficult to get the hang of it at first. I also made another change while I was at it. Did you now that Tiamat can use both Twister and Jet Fire only once per battle? I always found that rather lame, considering that his weaker Crystal version doesn't have this restriction. I made it so that he can use them an unlimited amount of times, and luckily it turned out to be a simple one variable value change for each. With these changes in place, Tiamat can actually be quite challenging now.

So there are certain attacks whose animations support both single and multi-targeting, but others that don't? This must be why changing the target worked for Malboro's Bad Breath, then.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-03-30 14:19:42
Sorry for the double post, but I've got another question regarding enemy AI scripts, this time it is about counterattacks. It seems that Function func_1_3 is the script that deals with counterattacks, right? Some enemies have a script in this section that I'm unsure of what it does or even what it is (see picture). Do you know what this is supposed to do? Because all enemies that have that don't have any counterattacks.

(http://oi60.tinypic.com/2ppgh1i.jpg)

For example, I'd like to make Quale counterattack with his Rolling Attack occasionally, so I just copy-pasted a fitting counter script from another enemy (Nova Dragon) into Quale's Function func_1_3. However, he still doesn't counterattack at all. What could I have done wrong? The counter script itself must be OK because we already know that it works fine for Nova Dragon. So... what could be the problem?

It seems that Quale's original counter script doesn't serve any purpose either, because deleting it / replacing it with Nova Dragon's counter script didn't change his normal combat behavior in any way. Same with a few other enemies that have this same (seemingly useless) script in Function func_1_3.

But the big question I wanted to ask is: is it possible to give counterattacks to enemies that normally don't have one?

I'm grateful for any input.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-03-31 13:46:35
I can't help you about that. I didn't tested that kind of things.
The script you're showing may be useless in 99% of the situations (or maybe it is only a debugging remain).
I think that Zaghnols have a script like this one that only triggers when they get under Mini : it doesn't scale the model with the same factor as the default one.
I've already seen scripts (Ozma's for instance) responding to an attack inside the looping function. Maybe you can try to put the counter here?
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: DanTsukasa on 2015-03-31 14:17:53
Hey Tirlititi (typing that correctly was a challenge).

This tool is super awesome as I've said many times before, I'm quite curious what your future plans are for it, I can't think of many features that could still be added honestly, its pretty feature complete afterall.

I am curious if you've plans to implement a walkmesh viewer/extractor for the field scenes, I know Zidane_2 already made one, which doesn't want to work for me actually.
Outside of that the only things I know you're considering are optimizations and possible batch features (that require optimizations first anyway I think you said).

If you've no plans for that it'd be great if you could give a little rundown on how to use the one by Zidane_2
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-04-01 10:29:03
Thanks DanTsukasa (I copied/pasted yours, that was easier :p).

I still plan on tons of things actually.
• Correcting bugs. I saw there was still some bugs with the preloading thing (it can totally mess up with your file because the check of the data size is wrong) and with scripts (I saw Cactuar's IA are surely wrong).
• Walkmesh viewer/editor, as well as making backgrounds editable. I think it will be more simple to make walkmeshes editable directly from the tool, as there may be some features specific to FF9's format.
• Making the file size modifiable. It will allow more changes to be made. However, I'll make it in a separate module because PPF patches won't work anymore with that. You'll have to use .hws files to share the mods then.
• Completing things already there. There are tons of datas about enemies that are currently unknown or uneditable, for instance. The command panel and the supporting abilities panel are also my shame for now and since a long time ^^'
• Making spell animations editable. tasior2 is looking for the models, but there's also the sequencing that can be modified. For instance, it will allow to make spells deal damage several times in one cast, like Cloud's Omnislash and such.
• Speaking of models : importers and exporters of more model files (that was hella tedious for me with battle scenes so that's why I'm not motivated a lot to do the others)
• A Tetra Master panel.
• A menu UI panel.
• Editing the other texts that can't be edited yet.
• Sound and Music exporter/importer.
• A damage calculator, to display conveniently what would be the damage dealt by spells, plus the accuracy of hitting/inflicting statuses.
• Add more flexibility about everything : be able to move an enemy from an enemy formation to another (I'm thinking of making a Garland + Silverdragon fight, for instance ^^), be able to add text lines and not only modify them, same for fields, enemy formations and such...

Actually, I'm not sure to have enough of a life to make everything I would like ^^"
Plus, I'm quiet busy with my job right now.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: DanTsukasa on 2015-04-01 12:23:37
Ah those are some great sounding features.

For the model importing/exporting it might be a smart idea to team up with the guy who made the online viewer, your implementation would be quite different but I'm sure it might save some time and headaches to go over the wiki documentation he's written once he's learned all there is to know about formats.

The walkmesh editor I find interesting, an exporter would be interesting too (though I guess I could use Zidanes tool for that, or his his just editor only, I bet it is...).

How would you even go about the file size modification? I'd understood that to be the ceiling as it were, with no real passable point.

A Tetra Master panel sounds super interesting, what with the possibility of editing the card data along with the card graphics, could change the tide of the game a fair bit (square enix are doing a phone release of Tripple Triad, I wonder if Tetra Master will get the same treatment?), and at the very least make it interesting to have HD cards.

Model data editing is interesting for possible model replacements, especially texture wise, could make the game look real nice, of course the biggest limitation is still the field scenes, since those can only be upscaled really.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: tasior2 on 2015-04-01 12:50:28
Hi Tirlititi,

I just posted some information about directory 13 (spells), hope that will be helpful somehow.

http://forums.qhimm.com/index.php?topic=13840.0
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-04-01 13:16:31
I saw that. Thanks :D

@ DanTsukasa : It should be possible to expand the binary image, though it requires more knowledge about .img format. I downloaded documentation about it.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-04-01 14:37:16
These additional features look very promising, I'm looking forward to them. I don't know if this is helpful to you, but I've made an excel file for some of the damage calculation formulas which I'm using for my modding. For those who are interested, here it is:

Code: [Select]
http://speedy.sh/PYtGD/FF9-Damage-Formulas.xls
By the way, I tried your suggestion with placing the counter script in Function_func_1_1, but it didn't seem to work. Although I have to admit, I didn't test it very thoroughly yet. I will experiment some more with it.

On another topic, your to do list reminds me about something else that I've always wanted to play around with, but since I don't know anything about programming, you need to tell me whether the following 2 things are impossible, or whether you could include them in a future version of the editor.

1.) The first one is about the duration of temporary status effects, which are way too short I think. When you’re playing the game with the ATB on active mode and the battle speed set to fastest, no negative status lasts longer than 2 rounds at most if your spirit stat is decent. This becomes especially obvious near the end of the game, when most party members have spirit stats of around 40 even on moderate levels. For example, Mustard Bomb will hardly ever have a chance of killing a character even if it inflicts Heat, because if just a single attack with a decent animation time is in between Mustard Bomb and the targeted character’s turn, the Heat status will have already expired by then. And with ‘decent animation times’ I’m not even talking about summons, as the length of any normal spell or other technique is already sufficient to make Heat wear off. This makes the Body Temp ability more or less obsolete in the late game, even when going up against enemies that use Mustard Bomb or Freeze.

I have found some info on the duration times of status effects in this document here.

http://www.gamefaqs.com/ps/197338-final-fantasy-ix/faqs/44329 (http://www.gamefaqs.com/ps/197338-final-fantasy-ix/faqs/44329)

It’s a very in-depth analysis of FF9’s battle mechanics, which leads me to believe that the author (Rebirth Flame) must have located these data by looking directly at the code. After all, the only way to obtain that knowledge is by actually hacking the game, isn’t it? Now as I said I am no programmer, so what I’m saying now might be completely wrong, but the duration time seems to be one fixed number for each temporary status (both positive and negative ones), like 160 for Heat or 240 for Poison. This counter decreases continually, and when it reaches 0, the status wears off (at least that's what the author claims). So my question is, if you know where these duration counters are located, would it be possible to make them editable in Hades Workshop to prolong status duration? That would be great.

2.) The second point is about the Poison and Regen stats. One thing that I believe needs to be changed in order to make the game more challenging is to break the power of the Auto-Haste & Auto-Regen Combo. With these 2 abilities activated, you’ll never need to manually heal your party ever again. No matter how powerful the enemy’s attacks are, with Haste status the Regen healing will come so fast that it easily heals you back to full health before the enemy gets his next turn. Add Auto-Life into the mix and your party becomes nigh invincible, eliminating any level of difficulty from late disc 3 onward.

I was thinking that one way to weaken this combo would be to increase the time span between Regen healings. According to the same battle mechanics guide, there seem to be secondary counters for Poison and Regen which determine the time span between two Poison damages / Regen healings. Would it be possible to make these counters editable?

Anyway, these are just some ideas floating around in my head, and I don't know how difficult it would be to change them. But I would like to hear your thoughts on those.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Vir on 2015-04-01 16:34:10
Kefka, it sounds like you might be interested in the Poison and Regen tables I have on the Statuses sheet of my mod's spreadsheet. They show how many hits and what % of HP each status moves at each value of Spirit.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-04-03 07:06:56
Thanks, Vir, your tables give a nice overview of how the spirit stat influences the time span and the amount of damage/healing that comes from regen and poison. Now all I would need to know is how to edit that. As for now, the only way to lower Regen healing is by lowering the Spirit stat, but I don't wanna do that, as Spirit is important for so many other things as well.

By the way, your tables also gave me some nice ideas for my own mod.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: gledson999 on 2015-04-25 03:40:04
@Tirlititi I have 2 question:

1º: Could be possible disable randon battle over the field and World map? if yes, how i do this?

2º: will be possible allow extract insert video (*.str) in the future?

EDIT:

1º: I found the Preload option on Environment tab/Field and i removed this monster.
(http://i.imgur.com/oB8eOmm.png)

2º: I changed script and changed the Opcode RANDOM_BATTLE to NOTHING parsed and saved
(http://i.imgur.com/v0Cxy9e.png)

3º: but when i enter in game scenario the game crashes like this
(http://i.imgur.com/i8tTrx9.png)
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-04-26 11:05:30
Hey ! I'm sorry, I'm having some problems with my computers so I can't check or test things right now.

@ Kefka : that's a pitty for the counters :/
I would have thought it should work at least in the looping function. Did you check if it was actually looping? The function should end with those two lines :
Code: [Select]
    WAIT(1)
    loop
If there is a RETURN instead, it won't loop anyway so it may be why it didn't work.
About the statuses : no, I don't plan to go that far in the battle mechanics. I wish I could, but the figures controlling these kind of things are really spread over the file and it will be too difficult for me to draw the big picture of the battle mechanics.
However, I've progressed in the spell animation editing feature ; without giving false hope (this feature was full of them for my concern), there might be a way to stop the ATB progression during spell animations, making the combo regen+booster lighter. That also needs checks.

@ gledson : I would have advise you to do exactly what you did....
There is no need to remove the battles from the preloading list, though, and it is the thing that most likely made the bug.
In order to take no risk : simply remove the line RANDOM_BATTLE (remove it, don't change it to "NOTHING" though if that was the problem, then I made a terrible mistake ^^"), parse and save and that should be all about it.
Save states should work fine for a script edition like this. The changes will be effective as soon as you (re)enter the field. However, when changing the preloading files, I think the field needs not to have been preloaded first, so the save state must be at least 2 fields away from the modified field (for the entrance of the Gargan Roo, the save state should be in Tot's tower stairs, for example).

Also, keep in mind that there may be the "RANDOM_BATTLE" opcode somewhere else than in the main function. For instance, the random battles of the fire room in the Desert Palace are activated only once all the fires have been lightened up. So there is a conditionnal execution of "RANDOM_BATTLE" in the main function but there is also another one in another function running when the last fire is lightened.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: gledson999 on 2015-04-26 19:21:05
@ gledson : I would have advise you to do exactly what you did....
There is no need to remove the battles from the preloading list, though, and it is the thing that most likely made the bug.
In order to take no risk : simply remove the line RANDOM_BATTLE (remove it, don't change it to "NOTHING" though if that was the problem, then I made a terrible mistake ^^"), parse and save and that should be all about it.
Save states should work fine for a script edition like this. The changes will be effective as soon as you (re)enter the field. However, when changing the preloading files, I think the field needs not to have been preloaded first, so the save state must be at least 2 fields away from the modified field (for the entrance of the Gargan Roo, the save state should be in Tot's tower stairs, for example).

Also, keep in mind that there may be the "RANDOM_BATTLE" opcode somewhere else than in the main function. For instance, the random battles of the fire room in the Desert Palace are activated only once all the fires have been lightened up. So there is a conditionnal execution of "RANDOM_BATTLE" in the main function but there is also another one in another function running when the last fire is lightened.

Thanks Tirlititiworked perfectly on field battle :D

other questions, I could not find where the value disables battles on the world map ?, as it does to disable because I did not find any opcode called Random Battle, is to remove battles for some monsters.

Ex: no battle will be read with Armstrong data Desert, only be read data Adamantoise

It's Possible?


OBS: I'm trying to make a patch to perfect Excalibur guide ;)
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-04-27 10:03:09
@ Kefka : that's a pitty for the counters :/
I would have thought it should work at least in the looping function. Did you check if it was actually looping? The function should end with those two lines :
Code: [Select]
    WAIT(1)
    loop
If there is a RETURN instead, it won't loop anyway so it may be why it didn't work.

Ah, that could be why it wasn't working, I was always using RETURN at the end. I'm gonna try again with a loop function then.

About the statuses : no, I don't plan to go that far in the battle mechanics. I wish I could, but the figures controlling these kind of things are really spread over the file and it will be too difficult for me to draw the big picture of the battle mechanics.
However, I've progressed in the spell animation editing feature ; without giving false hope (this feature was full of them for my concern), there might be a way to stop the ATB progression during spell animations, making the combo regen+booster lighter. That also needs checks.

Interesting, that might be a solution to both of my status-related questions. It would make Auto-Regen far weaker while at the same time prolonging the duration of all status effects. If that is indeed possible it would be great.

Another question regarding the random battles: If it is possible to remove random battles from a certain field, the opposite should be possible, too, right? Because I was considering adding random battles to fields that currently have none. So all I would need to do would be to add the RANDOM_ENCOUNTER function to a field file, plus the four random battles that I want in brackets, like this:

Code: [Select]
RANDOM_BATTLE( 0, 306, 306, 310, 310 )
Or is there something else that needs to be done?
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-04-27 13:00:45
@ gledson : Yeah, the random battles are not handled by the script in the world map (except for Ragtime mouses and Antlion, IIRC). You can't remove the battles from the world map for now :/

@ Kefka : You got it right, but you also need to add the battles in the preloading datas. There is a bug that should be corrected in the next version for preloading datas, but you can try now nonetheless.
Add those battles to the preloading datas, add the "RANDOM_BATTLE" opcode inside the script and test : it will crash in-game if the bug occured and should work fine if not ^^
The corresponding battle scene for the battles must be preloaded as well but I think I made it automatic (if you add a battle, the battle scene is added too if it weren't there).

Note that the 1st argument of "RANDOM_BATTLE" has unknown effect. It might be about the frequency of random encounters.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Kefka on 2015-04-30 12:31:52
@ Kefka : You got it right, but you also need to add the battles in the preloading datas. There is a bug that should be corrected in the next version for preloading datas, but you can try now nonetheless.
Add those battles to the preloading datas, add the "RANDOM_BATTLE" opcode inside the script and test : it will crash in-game if the bug occured and should work fine if not ^^
The corresponding battle scene for the battles must be preloaded as well but I think I made it automatic (if you add a battle, the battle scene is added too if it weren't there).

Note that the 1st argument of "RANDOM_BATTLE" has unknown effect. It might be about the frequency of random encounters.

Ah, ok, thanks for the tip. I'll play around with that for a while.

I've got another question for you, and maybe it can already be done in the current version, but I'm not quite sure how. Is it possible to change the contents of treasure chests on the World Map? I already know how to do it in the Field files, but I'm not sure about the World Map. There is a section called Chocobo Treasures in the World Map tab, but the ITEM ADD Opcode in its script contains only variables, not absolute item IDs like in the field files. Where exactly are the items in the chocobo treasures located?

The reason I’m asking is because I'm mainly working on rebalancing the game's difficulty (not an extreme hardcore mod, just a bit more challenging than normal) because I find that it’s way too easy. Rebalancing the first two discs was easy, but early disc 3 is where the problems start. This is the point when you can find some of the game's most powerful equipment way too early, like Dragon's Hair, Ragnarok, Kaiser Knuckles, High Mage Staff, Light Robe, Shadow Robe, Circlet and Genji Armor. So I was planning on swapping some of these items to later treasure chests, when their stats are more appropriate for the point in the game.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-04-30 17:19:16
According to my memories :
The variables that set the items for the Chocobo chests are located in one of the "chest" function. There is a switch with several variable settings.
The first "SET" is about marking the treasure as found,
the second "SET" is about the first item given,
the third "SET" is about the amount of that item,
the fourth "SET" is about the second item given,
etc... for 4 items
Note that a special variable is used for smoke-evolving chocographs. Also, the script is written so only the 4th item can be a card (but I think you can also give a regular item in the 4th slot).

To see the corresponding item when in the "SET" lines, you need to go to the "Inventory" panel before editing the script. Then the corresponding item will be displayed when you select a number. You need to be quiet familiar with the item sorting by ID if you want to modify it, though :/
Alternatively, you can also write a dummy line "ITEM_ADD" only to have the menu on the right that automatically puts the corresponding number. You remove that line once you're done.
Title: Re: [FF9] General editor - Hades Workshop (0.25)
Post by: Tirlititi on 2015-05-29 18:16:22
Finally update to 0.28 after some break.

I didn't do what I initially planned... That happens too often ^^"
- You can now edit the animation sequencing for both spells and enemy attacks,
- Fixed script bugs and made it a bit more comfortable to read,
- Improved the UI some bit (images no longer twinkles, for instance),


The good news : editing the enemy animation sequencing allows to choose which spell they can cast (SFX-speaking). You can also add several damage points in a spell animation so the spell effect is activated several time (you can use it for making an enemy double-casting or dealing more than 9999 in one attack, for instance).
Enemy animation sequencing and spell animation sequencing are alike, but not totally the same. There are a lot of opcodes related that are unknown. The ones the game doesn't use at all are called "Unused XXXX" but some of them actually do have an effect.

The bad news is that I didn't find a spell animation opcode that halts the ATB, as I wished. I think the chances such an opcode exist are thin.
There is also much less control in spell animation sequencing that I thought. The "Play model" opcodes are kinda bad named because it doesn't only display the spell model but also has some control over the sequencing (Death lvl 5's "Play model" defines the damage point and Ultima's last "Play model" is the thing that loops forever and freeze the battle).

About the script's improvement, you have more translations available in the left of the screen (if an integer corresponds to an attack list, a spell ID or a button list, you can read it conveniently) and the battle properties are also displayed better.

As always, I also found the use of some more script opcodes... But the animation sequencing ones have been added so I'm not near to see the end ^^"
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-05-30 07:19:49
Great work, man! Thanks for the update! It's even working for me, don't know why I had problems and crashes with version 0.27, but 0.28 is running flawlessly again.

Anyway, I've got two questions regarding monster formations that I hope you can shed some light into:

1.) I've noticed that in some monster formations, there are additional slots checked as Targetable even when they don't contain an enemy (see pic). Do you know why this is the case or whether it serves a purpose?

(http://oi62.tinypic.com/hte9gn.jpg)

2.) I've tried adding additional monsters to some battle formations (I also did check the Targetable flag in the new slots that were filled). For example, I wanted to add 2 Goblins to a fight that normally only has 2 Fangs. But then in battle something wierd happens: the new monsters are only visible for a couple seconds,  then they disappear. I suppose it happens when their turn comes up, because the new enemies also cannot perform any attacks. The funny thing is that they still remain targetable, but they're just invisible and cannot act. Any ideas about what's going on?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-05-30 08:11:59
1) The "targetable" flag isn't actually used by the vanilla game, but disabling it can be used to make things like the Bomb-Steiner battle. The vanilla game must be doing that using the script to do that.

2) For adding more enemies, you need to go to the script too and add "INIT_OBJECT" lines to the main function. The first argument of this opcode is the related AI and the second may be related to the enemy slot in the "Groups" section (just check how it is coded in other battles and you'll understand ^^).
Be aware that, for bosses, adding more enemies can be handled weirdly by the script : the battle is usually automatically won when the boss reach 10000 HP, for instance.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-05-30 12:46:00
Ah, thanks a lot, it's working now! Don't worry, I don't plan on messing with boss formations, just wanted to add more enemies in random battles. I find it kinda lame that in most battles there's only 1-2 enemies, and the maximum of 4 is hardly ever used.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Ragna on 2015-05-30 16:07:03
I find it kinda lame that in most battles there's only 1-2 enemies, and the maximum of 4 is hardly ever used.
That's certainly due to the limited PlayStation VRAM space for enemy textures during battle.
Remember there's already a fixed space for the stage's textures and up to four characters and character
weapons texture space, and a certain amount of space must be free for attacks/magic/summons textures too.

There could be a problem if you put more than 3 different enemies in the same battle depending on their specific texture data.
I guess they put thought on balance for texture data for each enemy formation.

the battle is usually automatically won when the boss reach 10000 HP, for instance.
What do you mean by that? Is it maybe that healing an enemy for above 65535 (HP overflow) automatically kills it or something?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: JBedford128 on 2015-05-30 18:13:10
Most bosses don't die by their HP being reduced to 0. Instead, if HP < 10000 trigger death script. This is why Ozma has 55535 HP -- he actually has 65535 but he dies when going below 10000 so he effectively only has 55535. You can't scan so you wouldn't know either way. If the boss's HP did reach 0 the battle just wouldn't end/would hang, which isn't a problem since bosses are immune to instant death attacks and other damage doesn't exceed 9999.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Ragna on 2015-05-30 21:54:15
Most bosses don't die by their HP being reduced to 0. Instead, if HP < 10000 trigger death script. This is why Ozma has 55535 HP -- he actually has 65535 but he dies when going below 10000 so he effectively only has 55535. You can't scan so you wouldn't know either way. If the boss's HP did reach 0 the battle just wouldn't end/would hang, which isn't a problem since bosses are immune to instant death attacks and other damage doesn't exceed 9999.
WTF?! That's so bizarre... :-o
Any idea on why they did that? :?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-05-31 06:27:35
Most bosses don't die by their HP being reduced to 0. Instead, if HP < 10000 trigger death script. This is why Ozma has 55535 HP -- he actually has 65535 but he dies when going below 10000 so he effectively only has 55535. You can't scan so you wouldn't know either way. If the boss's HP did reach 0 the battle just wouldn't end/would hang, which isn't a problem since bosses are immune to instant death attacks and other damage doesn't exceed 9999.
WTF?! That's so bizarre... :-o
Any idea on why they did that? :?

The "death if HP drops below 10000"  script is used by all enemies that have a special death animation, be it a spectacular explosion or just talking to you (Baku, Lani, Kuja, for example). The funny thing is, for all bosses that have less than 20000 HP total you can actually verify that in game by throwing a tent at them (which heals exactly 50% of HP and MP in battle). For example, the Masked Man from the game's beginning has acutally 10188 HP, and when you throw a tent at him it heals him for 5094, that's how you know it.

The only enemy in the game that has a "true" final attack is Maliris with her Raining Swords. This is the only attack that is performed when the bosses HP reach indeed 0, so we know that true final attacks must be possible.

I have no idea why they did that, but it's been bugging me too for a while now. I've always wondered if it might be possible to make these special boss deaths behave like Maliris (change them from "perform special death if HP is less than 10000" to "perform special death if HP is 0"). This would allow us to give most disc 4 bosses an additional 10000 HP. But so far I've been unsuccessful with that.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-05-31 08:14:10
^this

That's really strange indeed. I didn't even see Maliris's final attack code. I thought it was also using the "under 10000 HP" way.
So they indeed made 2 different systems for handling the end of the boss battles...

You can't use the "perform special death if HP is 0" system with HW for now. I'll look into it but if that works as I think it does, it shouldn't be too hard to enable.

However, you can already give more HP to enemies using the script : when an enemy goes under 10 000 HP, heal him.
See this post for a detailled way to go : http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: DanTsukasa on 2015-05-31 12:52:39
This is an awesome update, and that information about Boss HP going under 0 is really interesting too, so that means boss battles have a different ending script to the normal random battles, interesting.

Are there any plans to add Gif support, lots of the backgrounds have nice animations going on and its not really possible to show the animations right now without exporting each frame individually and stitching them together in photoshop. A better method could be layered Tifs, with each frame being its own layer within the tif. I'm not sure how difficult that might be though.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-05-31 14:23:26
I thought about making it GIF exporting instead of TIFF exporting, but that wouldn't work because there is not only 1 animation per scene but several independant ones. Or there is a GIF feature I'm not aware of?

Personally, when I want to get a GIF from the scene, I use either one of the 2 solutions :
1) using a program, Screen2Gif and capturing the animation(s) in the editor,
2) check all the tile blocks in the editor, then export, then open the TIFF with GIMP, then "Copy visible" -> "Paste" in a new image for each frame of the animation.

The second solution is cleaner but a little more tedious. I find it less tedious than exporting each frame from the editor though.
I'm not aware of photoshop's subtilities but I guess it would work pretty much the same with it.

I hope I helped.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: DanTsukasa on 2015-05-31 16:14:33
Yeah the gif exporter would have that issue, so I thought the layered .tiff would probably be smarter, people can just remove the layers they don't care for.

Capturing the animations from the editor is actually an idea I had in mind, though I'm not sure if perhaps they play a little too fast in the editor.
The main issue with the editor view is that its upscaled, and though its not a huge upscale, its pretty noticable in some scenes.

Example here: http://puu.sh/i7ffo/c75c1d2fa3.jpg the viewer is roughly 1/5th larger than the export and it can be seen in the quality too.

Your second suggestion however, doesn't work in Photoshop for some reason, If I export all the layers it only see's it as a single layered .tiff file, but I tried in Irfan view and it can see all the separate layers correctly, so I'm not sure whats happening there. Whats odd is that I can save a multi-layer .tif (not .tiff though) from Photoshop and Photoshop can then open it fine. I would say is it possible to add PSD support in this case, but common sense tells me its not exactly an open source/easily research able format.

One thing that could work though is that it exports all layers to separate tiff or png images, keeping size and transparency (so the actual frame size stays correct, copy and paste is easy then, no need to manually line things up).

Bit peeved at that Photoshop thing though, that rather sucks. Thanks for replying so fast, its much appreciated.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-06-01 06:35:20
^this

That's really strange indeed. I didn't even see Maliris's final attack code. I thought it was also using the "under 10000 HP" way.
So they indeed made 2 different systems for handling the end of the boss battles...

You can't use the "perform special death if HP is 0" system with HW for now. I'll look into it but if that works as I think it does, it shouldn't be too hard to enable.

However, you can already give more HP to enemies using the script : when an enemy goes under 10 000 HP, heal him.
See this post for a detailled way to go : http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426

Ah, ok thanks, that's one possibility to artificially increase an enemy's HP.

About Maliris, there's really nothing special to her Raining Swords final attack other than that it's located in function_func_4, which is the death function according to you. All bosses that use the "10000 HP death" usually have that located in function_func_1 (the looping function). I've been playing around with the idea of giving final attacks to certain enemies, but in order to do so I guess one would need to add a function_func_4 to their script. Most enemies don't have such a function by default, and currently the editor doesn't allow to add additional functions to a script. Do you think this will be possible in a future version?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-06-01 17:14:29
Yes, that's how I think I can make it possible.
However, the function number as it is now is not 100% relevant to "when it is triggered". I think there is some other flag telling if a function is ran on death or on ATB or whatever. I'd just need to decipher it.
For instance, there are few enemies with no looping function. For them, the ATB function is "func_1" and not "func_2". The fact they are mostly sorted is not something 100% reliable.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-06-19 07:04:15
Hullo thar, I've been using the editor and it's been better than I ever thought something like this could ever be. But I've been having an odd issue.

For whatever reason, some enemies after being edited in certain ways seem to have an odd glitch happen where that enemy will no longer be defeated when their HP reaches 0, the death animation happens but then they just go back to normal.

Any attacks afterwards also play out the death animation since their HP probably stays at 0, and I don't know what I'm doing that's causing this. The only thing that seems consistent is that it happens after I edit an enemy's attacks.

Any thoughts on what could be causing this?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-06-20 12:37:48
Hold everything, there are some nasty bugs with the enemy animation editing :/

First bug happens when you export the PPF. It is quiet rare and random but mess up the whole battle.
Second bug happens if you save your changes as .hws file then reload it. The program reads it bad but the save itself is not corrupted (it becomes corrupted if you save again after reloading though).

Both bugs are related to enemy animation editing. There shouldn't be any problem if you didn't use that feature (or at least not those problems ^^").

Dogshrapnel, it may be tricky to fix the changes you made if your files are corrupted and if you didn't have a backup. Send me your corrupted file (.ppf or .hws) and I'll try to fix it.
Sorry for the fail :/

Program updated : I fixed those 2 bugs and added a way to add/remove functions in scripts. You can right-click on the function list for that.
When you add a new function, you're asked 2 numbers, the entry type and the function type. The entry type shouldn't be changed (it says if the script is attached to an object, to a region or to nothing). The function type can be any number but :
1) some numbers means the function is special and it will be run at some points (for AI script, this is what the previous posts in this page was about) ; the "looping function" number can be seen as a secondary "main function" as it is run when the script is initialised.
2) there will be unknown results if you use the same number for 2 different functions of the same entry. The normal version used the types 10 and followings for regular functions that can be called somewhere else in the script.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-06-20 15:51:25
I'll just put the links here. These are my current back-ups. I want the later version working if possible.
To be honest, I forget when exactly I started having this problem, thanks for the help.

I never realized how scripted this game was, the most in-depth edit I've done is to the power and properties of AI attacks thinking it wouldn't be a problem.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-06-20 17:48:12
Ok. Your file is not corrupted and you didn't have the bugs I just fixed ^^"

It seems that you can't give the "death" status immunity to enemies or else you can't kill them at all, lol.
To give an enemy the immunity against death, I know no other solution than giving the "Easy kill" status as initial status (It should rather be called "Easy Kill Proof"). However, it will also give immunity against "Magic Matra" and similar moves, and against "Scan"...

EDIT : However, "Easy Kill Proof" doesn't immune against "Death Lvl 5". Nothing can immune against that spell if the level matches. I think that's the only one in that case.

Anyway, be it Mimics or Gizamaluke, the spell animation changes you made didn't corrupt your file at all.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-06-20 19:44:38
Oh my gosh, really? I feel like an idiot now. Thanks for the help!

That's an interesting thing to know.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-06-21 00:19:47
Why would you? That should have been normal to be able to use a death immunity.

Since we are in weird things that comes from nowhere and can make battles bug, I just ran into one. When you add an enemy to a battle group, you sometimes also need (in addition to editing the script and increasing the enemy amount in the group) to uncheck then check back the "Targetable" flag. Some enemies that you'd add are invisible and bug if you don't do it.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-06-21 01:37:33
All it takes is someone making an editor to realize how weird and quirky a game is.

Well, "all" as if making one is easy.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-06-21 08:32:37
Program updated : I fixed those 2 bugs and added a way to add/remove functions in scripts. You can right-click on the function list for that.
When you add a new function, you're asked 2 numbers, the entry type and the function type. The entry type shouldn't be changed (it says if the script is attached to an object, to a region or to nothing). The function type can be any number but :
1) some numbers means the function is special and it will be run at some points (for AI script, this is what the previous posts in this page was about) ; the "looping function" number can be seen as a secondary "main function" as it is run when the script is initialised.
2) there will be unknown results if you use the same number for 2 different functions of the same entry. The normal version used the types 10 and followings for regular functions that can be called somewhere else in the script.

Wow, nice update, improved enemy AI editing is what I've been eagerly awaiting! Does that mean we can now give counter scripts and death scripts to enemies that didn't have them before?

Since we are in weird things that comes from nowhere and can make battles bug, I just ran into one. When you add an enemy to a battle group, you sometimes also need (in addition to editing the script and increasing the enemy amount in the group) to uncheck then check back the "Targetable" flag. Some enemies that you'd add are invisible and bug if you don't do it.

What a coincidence! I ran into that same bug yesterday! I was adding more enemies to battles (because a battle against a single Carve Spider is kinda lame), but I didn't bother with the targetable flag because it was already checked. I somehow managed to fix it by carefully going through everything again (including unchecking and re-checking), but I didn't know why it was fixed afterwards, since I didn't really change anything. That's good to know.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-06-25 14:35:16
Sorry for double-posting, Tirlititi, but I've got a few questions regarding the different AI functions.

1.) The death function doesn't seem to work for me, and the editor also says that it's "not working well". If you had the same problem, was it a specific enemy or a specific attack that caused the trouble? Is there anything specific that needs to be done/written in the script to make it work?

2.) There are also some other functions that I haven't heard of before, like "running on speak button", "running on card button", and "running on collision", what exactly do they do?

By the way, I was wrong in my earlier post about Maliris being the only enemy that uses a death script. I just witnessed a Cactuar using 1000 Needles as a final attack when it died.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-06-25 14:57:27
1) I tried to use the "death" function with an enemy (I don't remember which one) but it didn't work. I didn't investigate much more though, and you can use the usual way "+10000 HP and run the death script in the looping function". Maybe there is some flag or thing to know for using that type.

2) Function types are not limited to IA scripts : they are also used for field scripts. The 3 examples you gave are of that kind : they are used for NPC dialogs or interactions (I'm not sure about the type 18 though ; it is used by Puck running on Vivi but also for a bunch of other functions not particulary special).

I think the Black Waltz 1 also uses a death function for his last dialog.

As a side note, the "counter enemy" type is not really what I thought it was. I need to check things but it seems to be running anytime a spell takes effect (be it casted by the enemy or the party). It also triggers on counter-attacks or returned spells, unlike the "counter party" type.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-06-28 09:52:57
1) I tried to use the "death" function with an enemy (I don't remember which one) but it didn't work. I didn't investigate much more though, and you can use the usual way "+10000 HP and run the death script in the looping function". Maybe there is some flag or thing to know for using that type.

2) Function types are not limited to IA scripts : they are also used for field scripts. The 3 examples you gave are of that kind : they are used for NPC dialogs or interactions (I'm not sure about the type 18 though ; it is used by Puck running on Vivi but also for a bunch of other functions not particulary special).

I think the Black Waltz 1 also uses a death function for his last dialog.

As a side note, the "counter enemy" type is not really what I thought it was. I need to check things but it seems to be running anytime a spell takes effect (be it casted by the enemy or the party). It also triggers on counter-attacks or returned spells, unlike the "counter party" type.

Ah, I see, thanks for clarifying that. The "counter enemy" function seems to handle stuff like enemy model size or other enemy-related parameters, while the "counter party" function is the one that carries out actual counter-attacks.

On a side note, do you think it will theoretically be possible to add more attacks to an enemy's attack list? Right now, when we want to give an enemy a new attack we have to replace an existing one, but what about extending the list by 1-2 attacks? Is there enough room for that?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-06-28 10:04:31
Yes, that's on my to-do list and I think I'll implement it on the next version.
Right now, I'm working on my own mod though, so the program is on stand by until I finish a proper version.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: jounatsi on 2015-07-12 15:41:54
Is it possible to edit the speech bubbles "shadows" with this tool?

I would like to make them fully transparent or remove them completely because i am using a "GTE Accuracy hack" that causes a small glitch with speech bubbles, but it also reduces polygon shaking and not using it is not an option as characters jitter like crazy without it.

Here is a picture what I meant:
(http://i.imgur.com/LAnfrz3.jpg)

Anyway this is a very fun tool to mess around with, i hope you continue working on it.  :)
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-12 16:19:04
When you edit scripts, look at the "WINDOW_SYNC" opcodes and such. There's an argument called "flags".
Though I don't know it well, here is the purpose of some flags :
3 -> Disable the tail in dialogs
4 -> Mognet dialog
5 -> Hide Window
7 -> ATE dialog
8 -> Usual dialog

Check the 5th box then and it should be ok.

I didn't fully understand what you were trying to do, so maybe I answered wrong. Sorry if that's the case.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: jounatsi on 2015-07-12 17:05:58
I am trying to get rid of those shadow textures/sprites that are on the right side and on the bottom of the speech bubbles, i am not trying to hide the whole window.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-12 17:11:09
Ah okay...
I don't know any solution, but I think the answer resides in the UI textures (in the "Text" panel).

However, I would bet this glitch is caused by emulators subtilities and that it works perfectly on PSX.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: jounatsi on 2015-07-12 17:27:58
I had a feeling it might be there somewhere, now I just have to find it which seems like a impossible task  :|

And yes, the glitch is caused by an emulator.

Anyway, thanks for the help  :)
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-07-18 03:20:03
Just found an interesting glitch.

I set up Nova Dragon so that its multi-target shockwave was Attack Type 8 instead of Enemy Attack since it seemed less random.
When it got used, Zidane, Quina, and Freya all countered since it was a physical attack, but after that, Zidane and Quina were glitched and their animation kept trying to do their last action, if they did anything other then countering, the game would soft-lock and their turns would never happen.

Very Interesting, speaking of which, what is it about the Enemy Attack effect that seems to make it so random? The damage seems to vary from doing 40 damage to over 1000.

*Edit: After looking at the formula, it seems the Random Mod is only divided by 4 for Enemy Attack rather than 8 for party skills. They tried a little too hard to make this game random, jeez.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-18 11:44:12
That's strange... Most of Enemy Attacks are counterable and I'm pretty sure Shockwave is counterable by default.

When doing my mod, I had another tedious bug about counters. The game was not ready to use spells that deal damage several times.
If you add several effect points to a spell animation (both in the "Spell animation" panel and in the "Enemies" panel), you need to make sure no one will ever have a counter action twice for the same spell since that freezes the game.

EDIT: That bug doesn't occur with the Steam version. Only PSX version.

Counter actions are either the enemy reacting to your action (counters, obviously, but also things like Tantarian opening itself) or you reacting to an enemy action (counter, return magic and, most importantly, auto-potion).

To avoid an enemy reacting twice to your action, you have no other choice than to disable the counter (at least more than once) in the IA scripts for the specific spell animations that damage several times.
Code: [Select]
    // Those lines are always in the counter functions already
    if ( ( GetAttackCommandId == 25 ) && ( GetAttackId == 103 ) ) {
        return
    }
    //  Those lines need to be added, replacing the numbers by the spells IDs
    // of the spells with several damage points in their animation
    if ( ( GetAttackId == 100 ) || ( GetAttackId == 101 ) ) {
        return
    }

Here is a list of enemies that can react to your attacks. It's tedious but you would need to add some few lines in their AI to avoid bugs.
I didn't put the enemies that already have a "counter only once" system or those that counter only the "Attack" command.

Code: [Select]
// Disc 1
Yan
Friendly Yan
Armstrong
Ghost
Gizamaluke
Grimlocks (both of them)
Jabberwock
Mimic
Cactuar
Lamia
Sand Scorpion
Bomb (counter fire spells only)
Black Waltz 2 (counter the elemental Black magics only)

// Disc 2
Soldier
Zuu
Sand Golem
Tantarian (put the script after HP update)
Zorn & Thorn
Sand Scorpion (more of them)
Soulcage (counter fire spells only)
Stroper
Zemzelett

// Disc 3
Amdusias
Shell Dragon (only the random encounters)
Epitaph (magic disbled for these battles)
Grimlocks (more of them)
Drakan
Ring Leader
Tonberry (put the script after HP update)
Mover (optionnal : they don't crash the game but don't pass from 2 of them to 1 of them)

// Disc 4
Ash
Kraken (when he's on crystal shape only ; he already has a "counter once" system as a boss)
Trance Kuja

I might add a feature that automatically adds those anti-bug lines inside the AI of these enemies.

Now, about the spells that the enemies can cast and trigger a reaction from you, I see only 2 solutions :
- Make sure the party doesn't have the access to counter abilities by the time those enemies are met...
- Make sure that the enemies use the concerned abilities only as a counter attack : you can't react to a counter so it won't be a problem.


That's unfortunatly another deception from spell animations editing... That begins to make a lot of them  :-\
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-07-18 20:29:53
Haha, shouldn't be surprised that a game as complicated as this has lots of bugs when you start to edit things.

Lots of interesting quirks too, I've been messing around with attack effects to see what happens, certain weird things I've noticed is that editing certain enemy attacks to be "Physical Attack" seems to place some kind of element with that attack depending on the enemy. For example, Nova Dragon was healing some of my characters with Shockwave when it was set to "Physical Attack", yet it's non-elemental by default and no element was set up. Very interesting.

Also, the only reason I can see why counter was glitching earlier is that "Attack Type 8" seems to only be set up for single target attacks, another interesting quirk.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-18 20:37:00
:o
Nice catches.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-07-20 06:41:55
Very Interesting, speaking of which, what is it about the Enemy Attack effect that seems to make it so random? The damage seems to vary from doing 40 damage to over 1000.

*Edit: After looking at the formula, it seems the Random Mod is only divided by 4 for Enemy Attack rather than 8 for party skills. They tried a little too hard to make this game random, jeez.

One thing to note about the Enemy Attack formula is that the formula given in the editor must be wrong, or I'm reading it incorrectly. The formula given is:

Damage = (Attack * power/10 - Defense) * strength

(to keep it simple, I only calculate it for the minimum damage now, not considering the range).

But whenever I do the math I end up with way higher damage numbers than are actually dealt in game. Let's take Abadon and his High Wind attack for example:

Abadon has an Attack stat of 75, a strength stat of 22, and High Wind has a power of 60.
As for the target's defense, let's assume a value of 45, which is pretty much the best that you can have at this point (Genji-Armor, the best Robes and such).

So we fill in:

Damage = (75 * 60/10 - 45) * 22 = 8910

So even with a top defense, Abadon's High Wind attack should deal a minimum of almost 9000 damage to the party! And we know that it's far from that. The formula must be incorrect, or missing a bracket or something. My guess is that it's really pretty much the same as the "Attack type 8" formula, only with a somewhat higher range, as you said.

However, I did notice one (more or less important) difference in my observations: it seems that attacks that use the "Enemy Attack" formula cannot miss, ever (can tirlititi confirm this?). This gives it an advantage over the "Attack type 8" formula, especially in late game where your evasion is usually around 30-35, rendering enemy physical attacks that use "Attack type 8" almost useless due to the way the hit % calculation works.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-20 11:29:51
So much for the formula (I don't remember where I picked it).

Indeed, "Enemy Attacks" can't miss. They can also inflict status aliments and they can take their element in account (though it is strange about it because I think they don't always do and Dogshrapnel just discovered they can have another element, maybe related to the enemy's element).
Actually, the only drawback I found about it is that it doesn't trigger trouble's spreading damage even when using a single target.

There are so many tests to make their to figure out all the subtilities of the different effects... There are even some flags I still don't know anything about.
However, I don't think it is in the last release I made, but I recently figured out the purpose of one flag, the 7th one (left to "Returnable") : it disables the "Hit" or "Death" animation on strike (even though that it's mostly used with spells that don't deal damage and therefore won't trigger it anyway).

EDIT : The right formula for "Enemy Attack" is
Damage = (Power - Defence) * Random[Strength, Strength + (Level + Strength) / 4]
It's exactly the same as "Attack 8" actually, judging from my tests... There shouldn't be more variance in one or in the other.

Note that the "Attack" statistic of the enemy is not used... I begin to think this field as nothing to do with an attack statistic.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-07-20 17:57:53
That's the feeling I got, otherwise the damage enemies do with some attacks would be waaaaay higher.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-07-21 09:31:58
EDIT : The right formula for "Enemy Attack" is
Damage = (Power - Defence) * Random[Strength, Strength + (Level + Strength) / 4]
It's exactly the same as "Attack 8" actually, judging from my tests... There shouldn't be more variance in one or in the other.

Note that the "Attack" statistic of the enemy is not used... I begin to think this field as nothing to do with an attack statistic.

Yeah, that formula looks more like it, and that was also my impression after testing it a bit. The bugs observed by Dogshrapnel still confuse me, though.

It's kinda strange that the Attack stat went completely unused. But then again, it's not the first time in the FF series that an entire stat serves no purpose at all, though in previous games it was always one of your party characters' stats. In FF1, the Intelligence stat was unused, in FF6 it was the Evade stat, and in FF7 it was Magic Defense. It seems every game has its share of bugs, lol.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-07-27 03:46:01
One thing I'm curious about is the other attack types, all the basic physical attacks used by enemies are of the "Attack Type 8" class, so what the heck are the other 7?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-27 10:24:32
I think some of the others matches the weapon's formula.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-07-27 16:10:00
That sounds useful for a few things...
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-07-28 11:22:38
While we're at the subject of attack formulas, I got a couple random questions about some:

1) Is it possible to make other attack types never miss just like "Enemy attack"? Because I'd like that for Flare Star and Blue Shockwave, but increasing their accuracy seemed to do nothing at all.

2) Is there a difference between the "Matra Magic" formula and the "Roulette" formula that for example Ark's Photon is using?

3) How exactly do Tiamat's "Absorb Magic" and "Absorb Strength" skills work? Like by how much do they reduce the target's stat, and does it increase his own stat by the same amount? I think I've read somewhere that he drains half of the target's stat and adds that to his own, but I don't remember where I read that.

4) I've noticed that several attacks which use the "Bad Status" formula also have a spell power (Grand Dragon's Venom Breath or Ark's Propeller Wind, for example), even though it's useless because attacks using the "Bad Status" formula don't use the power byte. So I was wondering: were these attacks actually meant to deal damage in addition to causing the status effect? Maybe they just used the "Bad Status" formula by mistake, when they should be using the "Magic Attack" formula?

Sorry for the many questions, those were just some things that I've been wondering about for a while now.

Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-28 14:12:07
No probl. As said, there are lots of details like these.

1) Not for now. The accuracy formulas are hardcoded in the spell's effect (except for Vivi's Meteor and Comet which are linked to the spell slot).

2) The only difference I would see for Matra Magic and Roulette is the accuracy formula. Roulette always succeed while Matra Magic can miss.
They both don't use the Status field so I use Maelstrom if I ever want a similar effect adding a status.

3) I checked it and it does that :
- Doubles the stat of the user,
- Divide by 2 the stat of the target.

4) I think the programers kind of copy-pasted the spells and changed what needed to be changed, leaving unused fields (such as the power for those "Bad Status" spells) unmodified. I've noticed that the power is usually the same as another spell in the enemy's spell list.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: uzoko1 on 2015-07-28 14:42:20
Hey I sent you a pm last night but I guess you didn't see it, but I actually understand how to apply patches and stuff to the game, but I do not know how to add Blank to the party. I tried asking Leroche when emailing him, but his description was also confusing :/ I do not see an add party function in Hades, but I really am trying to learn how this all works...I just really want blank in my party. whether its adding him in or switching him out with someone else like steiner. sorry for the long post, just really eager to know how.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: uzoko1 on 2015-07-29 04:15:19
So I did tweaking and everything around the tool and notice some things with the skills and weapons. I can get everything working, but again like I said...Blank...also trying to add marcus now too. its confusing, but I really am trying..I tried looking at scenes in the fields when marcus or blank is actually in the party...but I dont see anything that is them. Like when you click on some numbers it says an item ex: 1 is dagger 21 is I think gladius..and so on. I was trying to figure out what will actually get them in my party permanently or what this Initializing thing you were talking bout before. Party_Reserve(2303) won't work until It actually gives me the option to swap party members right? I am getting the hang of some things, but would really like you input. I also looked at your post on qhimm, but I could not figure out where you were talking bout adding models except one part, but you don't go into how to do it, or how to add or remove certain models(party members) like beatrix, cinna,blank, marcus. What I am actually trying to do, is do these 4 people: Zidane,Blank,Marcus, and Beatrix(its okay if not her because complications like fighting her as a boss or just too many different code inputs.
Sorry just posting this if you did not get my Email :/
Or if we can use some type of IM so it can go by quicker..heh
Edit: oh I just noticed you said something about adding him in at a certain time? or removing someone beforehand. So lets say in Evil forest the first area its just Zidane, is it possible to have him there? and when I go to fight the prison cage boss he will be that 4th character? Or should I use this code after I finish evil forest cuz he comes in the last battle of it. So whatever number Steiner is at ice cavern i would remove him from party and then add blank? Can I just load from a save game or have to start over each time to test this?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-07-29 07:47:57
No probl. As said, there are lots of details like these.

1) Not for now. The accuracy formulas are hardcoded in the spell's effect (except for Vivi's Meteor and Comet which are linked to the spell slot).

2) The only difference I would see for Matra Magic and Roulette is the accuracy formula. Roulette always succeed while Matra Magic can miss.
They both don't use the Status field so I use Maelstrom if I ever want a similar effect adding a status.

3) I checked it and it does that :
- Doubles the stat of the user,
- Divide by 2 the stat of the target.

4) I think the programers kind of copy-pasted the spells and changed what needed to be changed, leaving unused fields (such as the power for those "Bad Status" spells) unmodified. I've noticed that the power is usually the same as another spell in the enemy's spell list.

Ah, I see. Too bad about 1, but I guess it can't be helped. I think I'll just lower the evade and magic evade of armlets and gauntlets then, which are a bit too high in my opinion anyway.

The other things are nice to know. That explains why the damage from Tiamat's attacks will sky-rocket after draining the same stat twice. Copy-Pasting of the "Bad Status" spells makes sense, I didn't think of that.

One more question if you don't mind:

I've noticed that the Death and Mini spells used by some enemies don't use the "Bad Status" formula, but have their own "Death" and Mini" formulas, respectively. However, since the same result could be achieved by using the "Bad Status" formula, is there any point to having separate formulas for death and mini? Do they have any advantages/disadvantages over the "Bad Status" formula?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Tirlititi on 2015-07-29 10:48:15
I've figured the Death effect difference quiet recently : if the target is under Zombie, it totally heals him instead of applying the status effect (whatever this status is). The effect Death is the only one to do that (Lv5 Death, for instance, kill the zombies like the others).

There may be a similar thing for Mini but I recall having checked that a long time ago and it seems that "Bad Status" also removes Mini if the target is already under Mini and if that's the status of the spell.

@ uzoko1 : I answer you by e-mails.
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Kefka on 2015-07-31 13:33:35
I've figured the Death effect difference quiet recently : if the target is under Zombie, it totally heals him instead of applying the status effect (whatever this status is). The effect Death is the only one to do that (Lv5 Death, for instance, kill the zombies like the others).

There may be a similar thing for Mini but I recall having checked that a long time ago and it seems that "Bad Status" also removes Mini if the target is already under Mini and if that's the status of the spell.

Ah, interesting, I didn't think of the Zombie status. Thanks. Yeah, Lv5 Death works differently, according to the formula you gave in the editor it doesn't really inflict a status, but rather sets the enemy's HP to a certain value (in this case 0). That's why death resistance cannot protect against it.

I still don't see a difference with Mini, however. It's been a while, but I swear I saw Quale's Mini spell enlarge my already mini'd party again, and it's using the "Mini" formula.

On another subject, I've noticed that Trance-Kuja deals 1.5 times damage with Holy when compared to Flare, even though both spells have the same power. I've made sure that none of my party members wears any equipment that changes Holy damage (and I don't think there is any equipment that makes you weak to it, anyway), yet still all 4 party members took 50% more damage from Holy than from Flare. This leads me to believe that there must be something that allows enemies to boost the damage from a certain element by 50%, similar to how some equipment pieces grant you a damage boost for some elements. Do you know anything about that?
Title: Re: [FF9] General editor - Hades Workshop (0.28)
Post by: Dogshrapnel on 2015-08-05 01:15:34
So I just found out something very interesting.

I removed "Add Status" from Zidane's ability list planning to make it so that he would just use "Soul Blade" for all of his status effects. However, after doing that, I randomly got the Silence effect from the Mage Masher even though it didn't exist for him anymore. So the trigger for weapon status effects might be locked from working due to the ability rather than the other way around. I haven't done any more testing with other characters but it doesn't seem to be a fluke or anything like that.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Dogshrapnel on 2015-08-13 03:13:00
Okay, Gizamaluke is weird...

The editor displays him as having a normal amount of health, so I let the the player be able to poison him since he's fairly hard in the mod I'm working on.

So when I poisoned him...he took over 4000 damage and ended the fight instantly. Tents also heal him for 9999 HP if you use that tactic...

So what gives? Other "Heavy" bosses who die when under 10000 are shown in the editor right? Why is Gizamaluke and perhaps other bosses as well have weird HP values not shown?
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Tirlititi on 2015-08-13 15:49:18
The Max HP of Gizamaluke is rewritten at the beginning of the fight.
Code: [Select]
        SET VAR_B15_1 = ( 65535L - Op2B(SV_FunctionEnemy[HP]) )
        SET VAR_B15_3 = ( ( ( 65535L - VAR_B15_1 ) / 3 ) + VAR_B15_1 )
        SET SV_FunctionEnemy[MAX_HP] =$ 65535L
        SET SV_FunctionEnemy[HP] =$ 65535L
It is set to 65535 and "VAR_B15_1" keeps memory of the initial HP gave to him. When Gizamaluke's HP gets under "VAR_B15_1", he does his death stuff.

"VAR_B15_3" is a threshold for his Water attack. Under 1/3 of his HP (as seen from the player's perspective), he casts Water on the team instead of 1 target.

As an example, let's say you set his Max HP to 10000 in the editor.
After the start of the battle, the variables will be set like these :

Code: [Select]
// Actual Max HP
SV_FunctionEnemy[MAX_HP] -> 65535
SV_FunctionEnemy[HP] -> 65535
// Death threshold
VAR_B15_1 -> 55535
// Multi-Water threshold
VAR_B15_3 -> 55535 + 10000 / 3 = 58868

So yeah, Gizamaluke has the same kind of system than the other bosses but it is more hidden in the script (Kraken and his tentacles also use this kind of system).
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Dogshrapnel on 2015-08-14 05:54:48
Oh really? That's pretty interesting...but also raises the question of why do it differently for these creatures while others are more standard? It just seems weirdly inconsistent to me.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Tirlititi on 2015-08-14 13:46:17
I guess that's because they didn't need it to be consistent. They only needed it to work.
Some smart guy told me you could roughly guess how many developpers worked on this game by looking differences like this in the code.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: resinate on 2015-08-21 18:06:06
can u add an option for ap after battle on monsters?

also is there a way to change battle music on certain battles?
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Kefka on 2015-08-22 14:37:35
can u add an option for ap after battle on monsters?

That option is already there, in every entry in the enemy list below the attack list there's a list of the "groups" (or enemy formations, if you prefer), and there you can edit the AP reward for each group of enemies.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: resinate on 2015-08-22 17:40:40
with this little bit of info is it possible to make new battles or custom battles?
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Tirlititi on 2015-08-22 18:45:43
There's no way to change the music for now. About making new/custom battles, it won't be possible after some time (there are several steps separating us from that). However, it should be possible quiet soon to add some new abilities to enemies instead of having to recycle the old ones.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: resinate on 2015-08-24 00:33:07
any chance of the ability to change passive abilities of characters cuz i notice some have more than others. would be cool to make a mod that enables more of them on more chars.

btw i found a way to customize the battles sorta, i was able to add more monsters. now need to learn how to add different kinds of monsters to a battle
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Kefka on 2015-08-24 07:22:07
If I recall correctly (I can't remember where I've read it, it's been a while), the game allows every character to have exactly 48 abilities in total, both action abilities and support abilities combined. This means that if you want to give more support abilities to a character, you have to remove some of his action abilities to make room for that.

Edit: that's right, it was here, Zande has found some info on it a while ago:

http://forums.qhimm.com/index.php?topic=12648.msg176131#msg176131 (http://forums.qhimm.com/index.php?topic=12648.msg176131#msg176131)

I don't know how difficult it would be to prolong the list of abilities for any character, at least it's not possible right know.

But that leads me to a related question, Tirlititi: I tried to give some support abilities to Beatrix (mainly offensive ones that would be fitting for a master swordswoman like Long Reach, MP attack, Counter, or the various Killer-Abilities), however, there’s an issue with that. While she does now possess these abilities, I’m unable to make use of them because Beatrix doesn’t have access to the support ability menu (see picture).

(http://oi58.tinypic.com/2yv08s1.jpg)

Is there any way to enable the four temporary party members to have access to the support ability menu?

Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: resinate on 2015-08-25 02:12:09
what i wanna know is how can enable beatrix to be addable after disc 3 XD

i wouldnt enable passives cuz if u level her, shes quite OP almost too OP lol esp if u go in and add support for other swords to be used by her
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Tirlititi on 2015-08-25 08:15:47
@ Kefka : I don't know how to solve this problem. It needs investigations but there's a chance that it won't be possible to add supporting abilities without messing with the regular characters' ability learning progress.

@ resinate : You can add Beatrix at disc 3 by editing the game script. You need to add Beatrix with a "PartyAdd" opcode or a "PARTY_RESERVE" opcode. You should change the ones that are already present (in the Hilda Gard 3 scenes, for instance).
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Kefka on 2015-08-26 07:10:09
@ Kefka : I don't know how to solve this problem. It needs investigations but there's a chance that it won't be possible to add supporting abilities without messing with the regular characters' ability learning progress.

@ resinate : You can add Beatrix at disc 3 by editing the game script. You need to add Beatrix with a "PartyAdd" opcode or a "PARTY_RESERVE" opcode. You should change the ones that are already present (in the Hilda Gard 3 scenes, for instance).

Hm, too bad about the support abilities. However, I'm surprised that adding Beatrix as a permanent party member seems to be that easy. Does the rest of the script really support that? I've heard that wierd bugs happen when you add Aerith in FF7 in later stages of the game because she doesn't have dialogue for those story events to come. Isn't that also an issue with Beatrix? What would happen if you come to an event where your current party members have something to say?

But then again, maybe she DOES have dialogue for later events (I haven't looked yet). I don't know the details of the game's development, but there are a couple of hints that she was originally meant to join the party permanently, like Hades offering the Save the Queen in his shop, or the Memoria savegame editor allowing you to edit Beatrix along with the other 8 permanent party members, proving that Beatrix enjoys a permanent slot in the party, unlike Blank, Marcus and Cinna.

If it's really that simple to add her to the party without causing bugs during the rest of the game, then I might seriously consider doing that.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Tirlititi on 2015-08-26 08:34:17
Ah, you made a point indeed. I was thinking of adding her in CD 4 where it won't be a problem anyway since dialogs don't depend on your current team. But in the CD 3, there are a lot of places with that kind of thing.

No, she doesn't have any dialog for those events, and yes it will bug if you don't do anything (from my experience, limited to Oeilvert events, it soft locks if a line of dialog should be said but there's no one to say it).
Here is what is likely to happen with Beatrix in your team :
You get to a cutscene involving your 4 party members (they appear on the field),
However, Beatrix doesn't appear so you see 3 characters instead of 4,
At a point when the missing character should say something, the game soft locks.

A simple (yet tedious) way to fix it is to go to every field with that kind of cutscene and replace Beatrix with a regular party member at the beginning of the "main_Init" function then put her back at the end of the same function.
For fixing it so Beatrix appears, not only would you have to add dialogs and movements for her, but you would also need to add a Beatrix model to the field and I never succeeded in doing it (adding a Beatrix model in the model preloading list is not enough). So it's not possible for the moment.

I'm curious : how do gameshark codes handle those problems? People just take the habits not to run it at problemous moments?
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: resinate on 2015-08-26 20:06:55
is there a way to add another tab/panel for ALL abilities in game like monster spells, and item spells? aka dead pepper, tents.

also is there a way to use an item in menu that can cause bad statues i see a way to heal them but im not able to add them

how do u set how many targets of a spell, from being single or multi when using enemy spells
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Kefka on 2015-08-28 07:37:15
I imagine it would be very difficult to sum up all enemy abilities in one huge table, mainly because they are all assigned to one specific entry in the enemy list, and the enemy's AI has to tell each enemy exactly which entries in the ability list can be used by that respective enemy (and for this, the abilities must have a specific "place" in the ability list). Also, every enemy ability is essentially unique, in that it has its own separate properties. A Dracozombie for example uses a different Thundara spell than Vivi, and also a different one than let's say an Ironite, or an Armstrong. In fact, even those repeating entries in the enemy list that only differ in terms of battle background use their own ability lists each. In theory, you could have a Dracozombie on the world map use different attacks than a Dracozombie inside the Iifa Tree, if you wanted. I'm not sure that a single huge list of all abilities could even work, because in the end, you'd have like 50+ Thundara spells in that list with no way of knowing who uses which one. That's why the current approach of having individual ability lists for every enemy entry is actually much more overseeable.

Whether an enemy attack is single-targeting or multi-targeting is defined in that enemy's respective AI script, and which function it is in depends on when the enemy uses the ability. Most are in the "running on full atb" function, but those that are used as counterattacks or final attacks are used in the "counter party" function or "death" function, repsectively. The targeting information of an ability is displayed like this:

For single-target attacks it is: ( SV_Target = RandomInTeam(SV_PlayerTeam) )

For targeting the whole party it is: ( SV_Target = SV_PlayerTeam )

There are also other targeting codes, for example when the enemy is targeting himself or another enemy and such. If you want to change the targeting of an attack you simply have to overwrite that attack's targeting information with the one you'd like to have.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: resinate on 2015-08-29 01:08:32
if anyone here is REALLY good with scripting, i wanna do a mod on chocobo forest where the timer is set to 10 mins and u spend the time farming unlimited items until time runs out is this possible to code using for loops?

so after playing with items following do not work at all - i think there needs to be a field for accuracy for bunch of stuff to work aka lv? death on items crashes game cuz of missing accuracy

anything with bad status effects will always miss/guard
gravity magic will always deal 0 damage

any chance of fixing these?

i also found a bug when u use an item with multi targeting it consumes entire stack of items lol
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Yugisokubodai on 2015-09-03 22:06:12
I finished translating FF9 without using Hades.
But yesterday, I downloaded the latest version and give some try, then I realize that in the Japanese version:

1. Hades calculated wrongly the pointers for place name in World maps.
2. Hades calculated wrongly the dialogue box width. All box have width 0, even if I change to 3,4, some box still remains 2.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Kuroda Masahiro on 2015-09-10 07:17:44
Hm, so for the time being, not enough is known for doing something like replacing a character for another one successfully?

Curses, and here I was willing to invest 50+ hours into changing every single instance of Zidane, Vivi and Steiner with Blank. Cinna and Marcus. xD

I made a little mod though that turned Zidane into a swordsman and Sarah into a hybrid thief and white mage and let Vivi use Cinna's hammer as a physical weapon. (I lowered Zidane's stats so that he's quick, but nowhere near as strong as the proper fighters and he looks pretty good with a sword.)

I didn't get alot of time to look around into what could be done with it yet, but this really looks like it can renew my interest greatly in FF9.

Years ago, I knew someone who was making something similar to this, but they just seemed to drop off the face of the Earth.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: uzoko1 on 2015-09-11 03:12:55
Hey, I have emailed you because I got back on the project of making my Script work and I got everything working perfectly fine..even found out how to switch party members out that are supposed to be mandatory..except for ones like zidane evil forest and vivi Waltz no.3 cuz they have to do their beginning trance, but I switched the other remaining members. I have two problems left..exclusing the support abilities on Blank and Marcus because I just gave up on that, but Beatrix's support abilities work...with a price seeing how she has zidanes ability set even thought I didnt put a party_battle_data on her...which wasn't much of a problem, until I noticed at lindublum she has a trance bar...I was like sweet...but when she tranced it stayed in that mid trance animation...so that also means I cannot flee from battles. I can't get rid of her trance bar...also I forgot that when you overwrite as a binary you cannot re-open it again in Hades...Feedback?
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: shikulja on 2015-09-26 10:20:49
Hello Tirlititi, whether added to the import \ export text scripts. for a long time waiting for this function. and it is so still and no.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Kefka on 2015-10-27 15:43:14
Hi Tirlititi, I've encountered a problem with a specific battle that I hope you (or anyone here) can help me with. I spent weeks adding more enemies to most battles, so all of the small-and medium-sized enemies appear in groups of 3 or 4, and during playtesting all of them worked quite well, except for the battles with the Hecteyes. For some reason, the game always crashes when I enter a battle with 3 Hecteyes, and and on my old computer I've also experienced a major slowdown during this particular battle.

First I thought that my old and outdated computer was the problem, but I have recently aquired a new and technically up-to-date netbook. The game runs much faster now, and even in the 3 Hecteyes battles there's no more slowdown, however, the game crashes still remain. Any idea what might be causing this? I've been wondering because all other battles with increased enemy numbers (and those were a lot!) work just fine.
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Tirlititi on 2015-10-31 18:31:27
Hey, long time I didn't post anything here !

I've updated the tool to v0.30 (yes, I passed from 0.28b to 0.30 because I'm totally crazy :evil:), you can read the changelog at the end of the post.

@resinate : About Hot & Cold, I'll try to decipher the script and make it a bit more readable. The way it is coded doesn't allow to just "loop for an infinite amount of items" though, so you'll have to get creative to find a way to do it.
About the items incompatible effects, that unfortunatly can't be fixed : there are indeed missing fields, but that's not that I didn't find them, that's because they simply don't exist. Adding an accuracy field for items or such requires knowledge I don't currently have.

@Yugisokubodai : Thank you, but that's strange... The 1st bug you mentioned, I thought I fixed it a while ago and when I check, it's fine. The 2nd bug is different though : the height of windows seems to be calculated automatically in the japanese version. I adjusted the text preview to fit a bit more with that.

@Kuroda Masahiro : It is perfectly possible (though tedious) to replace a character by another, minus the well-known fact that Cinna, Marcus and Blank share some data (the levels in particular) with Quina, Eiko and Amarant respectively. You can't have both Cinna and Quina in the team either, for instance. To replace a character, you can put the following lines inside scripts, at points before you can change your party (in the Hildaguard 3, for instance) :
Code: [Select]
PARTY_RESERVE( 4095 ) // Adjust this argument if you want fewer people
PARTY_BATTLE_DATA( 8, 1, 255, 22, 15 ) // Beatrix
PARTY_BATTLE_DATA( 9, 1, 255, 21, 8 ) // Cinna
PARTY_BATTLE_DATA( 10, 1, 255, 21, 10 ) // Marcus
PARTY_BATTLE_DATA( 11, 1, 255, 21, 12 ) // Blank
NAME( 8, 75 ) // Rename Beatrix (shouldn't be important)
NAME( 9, 72 ) // Rename Cinna (or else he's called "Quina")
NAME( 10, 73 ) // Rename Marcus (or else he's called "Eiko")
NAME( 11, 74 ) // Rename Blank (or else he's called "Amarant")
You'd need to add that kind of script anywhere the party is somehow modified to make it persistant ; or use a similar script to revert the changes if you want Quina, Eiko or Amarant back in the team.
There are bugs that can happen at some point of the game, however. I don't know if the Oeilvert part will be ok, for instance, because the script looks for your party members to see which character should be present in the cutscenes. Also, things that heal the whole party on the fields (regenerative springs...) will likely not work on Cinna, Marcus and Blank because the script misses the healing code for those particular characters.

@uzoko1 : I don't understand what you said... What was the questions?

@shikulja : Ok, I'll try to make that feature. Maybe not for the next update, but likely the next one (once all the texts of the game can be edited).

Kefka's bug is serious and I can't find any way to solve it. Hecteyes' model animations are handled through script and spell sequencer and it seems to make it impossible to have more than 2 hecteyes models in the same battle. For 2 hecteyes, strangely, it seems to work fine.



Ok. For the v0.30, I added few more things. The .hwf files will update so be sure to create it with an unmodified version of the game (and then change the .hwf file name if needed). If it updates well on a modded version, that's fine though.

- Added a "Party Special" panel. It will contain special list of spell and command-related things, that are handled specially by the game. For now, it only contains the Magic Sword requirements (the spells Vivi needs to learn in order to unlock the related Magic Sword) but it should also contain things like Meteor's accuracy formula or Roulette randomness script in the future.

- Added a "Tetra Master" panel. You can modify the name and the random range for the statistics of cards (not pictures yet). You can also modify the card decks used by the NPC. The naming rules for decks are the following :
-- For decks used by NPC in Treno Stadium, Memoria or by the Fat Chocobo, the name of the NPC is used,
-- For the others, the name of the town where you can first meet a NPC playing that deck (provided you don't change the script for that) is used,
-- If decks are used by NPC of several towns, a dot dot dot is added.
Thanks to Froggy25 who totally cracked the Tetra Master deep mechanics btw.

- Added an "Interface" panel. For now, it contains all the menu and special texts that were not available yet, including the casting names of Eiko's Eidolons and a bunch of other things.

- Enhanced several features :
-- Spells : you can decide of the "casting name" of spells. For instance, Fira Sword's name is only "Fira" but a " Sword" is appended at the casting time. You can decide of that.
-- Enemies : you can define the default attack used by the enemies under the Berserk and Confuse status ailments (it will always target 1 random character). Also added the "Link enemies" flag in the groups submenu : it is, by default, used exclusively by the Sand Golem, Movers and Kraken to make several targeting parts for 1 enemy. When enabling that flag, the scripts for all the linked enemies but 1 must be deleted and the remaining one will handle all the attacks and counter-attacks (See Kraken's AI script (https://dl.dropboxusercontent.com/u/98687557/Resources/KrakenScript.txt) for an example).
-- Text editing : in the japanese version, the height of the preview window is properly displayed. It is also displayed (instead of being of infinite size) in all the game versions for menu texts and such, where you can't modify the size of the text window.
-- Script editing : you can determine how many local variables you need in each entry of scripts. Local variables seem to be recognized by the fact the 1st number in their name is odd (such as "VAR_B7_0" or "VAR_A11_0"). You need to make the local variable amount strictly higher than the 2nd number of the name of every local variable you use in an entry. For example, in this post (http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426), I explain how to add more than 65536 HP to Trance Kuja but I make use of "VAR_B7_60". It works by miracle but it would need to set the local variable amount to 61 or higher to properly be done. Note that VAR_B7 are 1 byte-long, VAR_B5 are 2 bytes-long and VAR_A11 are 3 bytes-long. I'll go in details for the next version and use that to make the final version of the script editing window.
The function names are a bit more meaningful now.
Also, the scripts for exiting to the world maps are properly un-parsed now. I think that was the last case of script problems.

Next time, if I'm not distracted by something else, you should be able to modify the name of locations on the World Maps (that'll conclude the non-picture texts tour) and a better script editing window should be available (with the feature to name variables, that'll at last look like something).

Tell me if you find problems ^^
Title: Re: [FF9] General editor - Hades Workshop (0.28b)
Post by: Kefka on 2015-11-01 09:02:07
Hey man, good to see that this program is still getting updates. (After the long break now, I was beginning to worry.)

- Added a "Tetra Master" panel. You can modify the name and the random range for the statistics of cards (not pictures yet). You can also modify the card decks used by the NPC. The naming rules for decks are the following :
-- For decks used by NPC in Treno Stadium, Memoria or by the Fat Chocobo, the name of the NPC is used,
-- For the others, the name of the town where you can first meet a NPC playing that deck (provided you don't change the script for that) is used,
-- If decks are used by NPC of several towns, a dot dot dot is added.
Thanks to Froggy25 who totally cracked the Tetra Master deep mechanics btw.

That's quite interesting, I've always wanted to achieve the highest rank in Tetra Master, but I never bothered trying because getting all different arrow combinations is a pain in the a**. The ability to modify the decks of all opponents will definitely allow for huge improvements, I'll certainly take a look at that.

Also added the "Link enemies" flag in the groups submenu : it is, by default, used exclusively by the Sand Golem, Movers and Kraken to make several targeting parts for 1 enemy. When enabling that flag, the scripts for all the linked enemies but 1 must be deleted and the remaining one will handle all the attacks and counter-attacks (See Kraken's AI script (https://dl.dropboxusercontent.com/u/98687557/Resources/KrakenScript.txt) for an example).

Now this is most intriguing. I've already tried several times to make all three Movers act independently from each other (so that they can attack three times per round instead of just once), but no matter how much I tweaked their battle script, it just wouldn't work. Now I know the reason, and I'll give it another go. By removing that Link flag and giving additional AI scripts to the other two Movers it should work, right?
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Tirlititi on 2015-11-01 12:06:35
Well, yes you can do that. But the movers won't move 3 by 3 anymore when attacking and it will be tricky to reproduce their Delta Attack counter system.
You also have to do few more things about the AI than what you said :
1) Remove (or empty, or write new ones) the "Counter" and "CounterEx" functions, since it messes up with each other mover's HP
2) In the function "Init" of the 1st mover, remove the following lines :
Code: [Select]
        SET VAR_B15_0[MAX_HP] =$ 65535L
        SET VAR_B15_2[MAX_HP] =$ ( 65535L - ( Op2B(SV_FunctionEnemy[HP]) / 2 ) )
        SET VAR_B15_4[MAX_HP] =$ 65535L
        SET VAR_B15_0[HP] =$ 65535L
        SET VAR_B15_2[HP] =$ Op2B(VAR_B15_2[MAX_HP])
        SET VAR_B15_4[HP] =$ 65535L
And insert those instead :
Code: [Select]
        SET VAR_B15_0[MODEL_OFF] =$ 60
        SET VAR_B15_2[MODEL_OFF] =$ 51
        SET VAR_B15_4[MODEL_OFF] =$ 15
You'll see their purpose if you don't do it ;)

3) Also, the Delta Attack is engaged in the "ATB" function. When Movers cast the "Continue1" attack, they normally stop bouncing and form a triangle. It won't work anymore unless all the movers cast that attack. Alternatively, you can put those lines in the script to force that triangle formation instantatly :
Code: [Select]
        SET VAR_B15_0[STAND_ANIMATION] =$ 1
        SET VAR_B15_2[STAND_ANIMATION] =$ 1
        SET VAR_B15_4[STAND_ANIMATION] =$ 1
Set it back to 0 to remove the formation.

Other than that, you can try not to disable the "link" flag and put more useful counters in the "Counter" function ; that doesn't give more turns to movers but that's about the same effect without modifying the IA too much (but that's if you are concerned about having the same IA as in the vanilla game).
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Kefka on 2015-11-01 17:26:48
Wow, thanks a ton man! Those are some really useful tips. I'll try them out right away, and who knows, if it works I might even try the same for Kraken and his tentacles.

Yeah, I was worrying about the Delta Attack, too, so I'm glad that you found a solution for that one.
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: gorildo on 2015-11-04 14:48:32
Hey Tirlititi, thanks for this program. FF9 is one of my favorite games but sadly, there are many things I would like to change. So far I have made a simple .ppf with just 255 accuracy for stat mags and changed steal slots from some bosses like Hilgigars.

It already made the game a whole lot better!!

I look forward to stuff like editing treasures, hot and cold list, and most importantly more items and harder enemies. And that's what I would like to ask.

- Is it possible to have enemies with more than 65000 or so HP? More than 254 items? Removing the damage limit cap? I'm sure it involves some pretty complex stuff but just wanted to know.

But again thank you very much, this is some extremely quality stuff.
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Tirlititi on 2015-11-04 21:31:59
Hey gorildo, glad you enjoy modding the game ;)

Actually, you can already modify few things you ask for. You can modify chest contents by script editing. Chest treasures are not something that are listed in some place, but rather spread around in the fields' scripts. See the "Field" panel and check the script to find the chest functions that give the items.

Somewhat removing the damage limit cap can be easily done in the "Spell Animations" panel : you only need to add several "damage point" and "figure point" to the spell animation sequence. However, there are bugs that may happen then due to counter attacks (explained here (http://forums.qhimm.com/index.php?topic=14315.msg230211#msg230211)).

You can also cheat with the script and add artificialy more than 65535 HP to one ennemy ; an example is given here (http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426) for Trance Kuja.

However, you can't add more than 254 items unfortunatly... You can change the purpose and most aspects of existing items but you have to sacrifice something old for that ^^

Good luck !
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: gorildo on 2015-11-06 00:52:43
Hey thanks, I spent some 2 days trying to figure it out and I finally got something.

On the first field of the list there is this part of the code "Function Code8_Loop"

Code: [Select]
}
                0x27( 127 )
                SET VAR_B9_220 = 600
                SET VAR_B9_222 = 1700
                SET VAR_B5_226 = VAR_C5_7175
                SET VAR_B9_224 = 236
                TEXT_VARIABLE( 0, 236 )
                RUN_SCRIPT_SYNC( 2, 250, 12 )
                if ( 1 ) {
                    SET VAR_C5_7175 = VAR_B5_226
                }

I figured 236 was the code for Potion. I substituted it for "12" on "SET VAR_B9_224" and I got a Sargatanas, as expected.
But what does "TEXT_VARIABLE( 0, 236 )" means? Does it have anything to do with that potion? If not, then is this all there is to it, just substitute that number as in this case and it's okay?

I plan on changing a few chests, but just a few of them.
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Tirlititi on 2015-11-06 09:55:17
Congrats ;)

In short : yes you should replace it with the right number. The following explains why.

The "SetTextVariable" code has the purpose to replace variable part of the texts to one that makes sense.
If you look for the texts, you'll find things like :
Code: [Select]
Received µ!With µ corresponding to the text opcode "[VAR_ITEM]". That "SetTextVariable" is used in the script to tell which item's name should be written in place of that µ. Note: For the Steam version, text opcodes are written more explicitely.
That same "SetTextVariable" is also used for the other text opcodes of the same kind :

Now, if you got it well, you should wonder why, when you picked up the item, not only you got a Sargatanas, but the game also displayed to you "Received Sargatanas" while it should still display "Received Potion" because you didn't change the "SetTextVariable" argument.
That is because the script then calls the function "Zidane_12" and that's the function in charge of adding the item and displaying the related text (and few other things, such as making Zidane face in the right direction, saving in a variable the fact that this item has been took, ...). The function "Code8_Loop" you modified is in charge of setting it up. In the "Zidane_12", another "SetTextVariable" opcode is present :
Code: [Select]
                if ( ( GetItemCount(VAR_GenInt16_224) < 99 ) && ( VAR_GenInt16_224 < 512 ) ) {
                    RunSoundCode3( 53248, 108, 0, -128, 125 )
                    set VAR_GenUInt8_226 = 1
                    SetTextVariable( 0, VAR_GenInt16_224 )
                    AddItem( VAR_GenInt16_224, 1 )
                    WindowSync( "Received [VAR_ITEM]!" )
                } ....
Since you updated the variable "VAR_GenInt16_224" well, it all works fine as intended : check if the right item is not owned 99 times already, display the right item's name and add the right item to the inventory.
Note that regular items have an ID between 0 and 255, the key items have an ID between 256 and 511 and the cards have an ID between 512 and 611. So it also checks whether the item received is a card (in which case, it does slightly different things) or not.

I tell you to modify the number in the "SetTextVariable" opcode because, while it is totally useless here, the same system is not used for every treasure of the game. Most of the time, this system is used for treasures not contained in a chest (and thus not related to any 3D model) and a different system, where there is no "set VAR_GenInt16_224 = some number" setup and you have to change all the numbers in the script, is used for treasures contained in a chest.

For instance, this is a part of the script found in the "ChestA_Range" function for an ether found in a chest in the ruined Prima Vista :
Code: [Select]
                if ( ( ( GetItemCount(238) < 99 ) && 1 ) || ( 0 && ( GetCardAmount < 100 ) ) ) {
                    Wait( 2 )
                    if ( VARL_GenBool_7243 == 0 ) {
                        RunSoundCode3( 53248, 108, 0, -128, 125 )
                        set VARL_GenBool_7243 = 1
                        SetTextVariable( 0, 238 )
                        if ( 1 ) {
                            AddItem( 238, 1 )
                            WindowSync( "Received [VAR_ITEM]!" )
                        } else {
                            if ( 1 ) {
                                AddItem( 238, 1 )
                                WindowSync( "Received [VAR_ITEM] Card!" )
                            } else {
                                AddGil( 16776454 )
                                set VAR_GenInt16_224 = 64774
                                SetTextVariable( 0, VAR_GenInt16_224 )
                                WindowSync( "Received [VAR_NUM] Gil!" )
                            }
                        }
                    }
Here, you have to modify the number 238 into whatever item you want 3 times :
You can see that there is a good portion of the script that is utterly useless ("if ( 1 )" will always trigger). I can say for sure that Square's developpers used some macros, which is a programming thing that may generate script codes like this.

tl ; dr : change the value in the "SetTextVariable" and in the "GetItemCount" lines as well if you find those.
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: GARDIN on 2015-11-11 11:43:02
I do not know how to thank Tirlititi The best game in my life is ff9 And I achieved my dream Amendment to the ff9 Very wonderful your program HadesWorkshop Can not imagine my happiness very thx Tirlititi And I hope in the next release We can edit the songs (I am bad in English sry :-P)
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Tirlititi on 2015-11-11 16:50:26
Glad you enjoy it ^^
Songs are not going to be editable before long though. It's a huge thing and I don't want to throw myself in it before finishing the other stuff.
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Kuja Flarestar on 2015-11-14 18:56:52
Hey! Thank u guys for these awesome programm u created. i recently found a video of zidane casting ultima without crashing/freezing the game. i dont know if its fake or not. So i hoped u guys can help me out a little bit. I`m a huge ff9 fan and admire ur work :). Here ist the YT link of the video: https://www.youtube.com/watch?v=Iwh9X8EMA-I

Best regards
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Tirlititi on 2015-11-15 19:53:55
That's not a fake at all. However, it doesn't totally prevent the game from freezing : casting this Ultima would freeze the game if it didn't kill all the enemies and brought victory.
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: EditorMaster on 2015-11-15 21:06:44
Good job Tirlitit,i  you have team members... I envy you, I wonder which program use for found Offset address ? :)
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Tirlititi on 2015-11-21 18:07:11
Thanks EditorMaster.
In the early development, I used a little program I made myself to search for a few of data patterns regular hex editors can't search. I don't use it anymore because, mainly thanks to qhimm's wiki, I have the offsets of pretty much every "data directory" and know better how to search things using a regular hex editor.


Attention to everyone : someone warned me about a compatibility issue.
You should never import the "Stats" datas of mod files (.hws) from previous versions (before 0.30). It would mess with all of these datas inside the "Stats" panel.
Only "Stats" datas are concerned, the rest of the mod files is fine.
If you already did that and updated your mod without noticing the stats were totally screwed, that's not a problem : just uncheck the "Stats" box the next time you save your mod and it should work fine.
Modifications made to that "Stats" part, however, are lost ; you'll have to do it again by hand. If that's too much of a work, you can send me you .hws file (or even one that contains only the corrupted "Stats" modifications) and I should be able to fix it pretty easily by hand.
I won't fix this compatibility issue since that would make 0.30 stat datas incompatible with the next releases :/
Sorry to everyone bothered by that.
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: resinate on 2015-12-07 14:37:29
RIP my mod to pieces :( soo much work to make that stat system i did lol
Title: Re: [FF9] General editor - Hades Workshop (0.30)
Post by: Tirlititi on 2015-12-07 17:47:27
If that's too much of a work, you can send me you .hws file (or even one that contains only the corrupted "Stats" modifications) and I should be able to fix it pretty easily by hand.
I'm overly busy these few days, but it'd most likely be done by the end of the week.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2015-12-19 20:57:25
Update to 0.31 :
- You can now fully choose which statuses are inflicted (or healed) by spells,
- World Maps have 2 more sub-panels : they allow to modify the name of the different places and modify the random encounters in the different areas. However, you can only use random encounters with the proper battle scene or the game will crash. Also, you can't see where are placed those areas on the World Map yet.
- Improved the script edition a lot :
--- Added a way to declare and use local variables. More details below.
--- Added a list of different known functions and variables, with their descriptions.
--- You now easily generate the value corresponding to different things, such as an attack list for enemy IA, or a button list to get the player's inputs.
--- Added a preview of the field walkmesh when editing a field script. The positions in the code are viewed on this preview.
--- Same thing for the world map. The preview can't be zoomed tough.
--- Improved the argument helpers for several data types, such as positions or colors.

About the local variables, the syntax is this one :
Code: [Select]
local [type] [name] [Default Name]

// example
local uint8 foo VAR_LocUInt8_10

EDIT: You can now use global variable as well: they are shared by the other entries of the script and are declared using the keyword "global" insteal of "local".

[type] can be one of the following : Bool, SBool (same as Bool), Int8, UInt8, Int16, UInt16, Int24, UInt24 and Null (dummied).
For integers (int) and positive integers (uint), the number is the size in bits, so Int16 is 16 bits (= 2 bytes) long.

[name] is the name you want for your local variable.

[Default Name] is optional and is the name of the variable you want to replace. It should have a compatible size. Note that this default name can still be used to refer to your variable.
If you don't specify it, a default one will be attributed. However, it will likely mess with the local variables already used in the script and not declared.

Usually,
int8 are of the form VAR_LocInt8_##
int16 are of the form VAR_LocInt16_##
uint16 are of the form VAR_LocUInt16_##
etc...

Local variable settings can be saved in .hws files independantly of the rest.
I'm planning to create a .hws file containing all the local variables used by the game by default. Once it'll be done, you can import it and declare local variables without fear of collision with the ones existing (not to mention it will largely increase the readability).

A local variable declaration needs to be parsed to take effect. It can't throw an error but if there's a problem, you'll get a warning and the problematic line will be ignored.


The most immediate and practical use is that you can rename a variable once you understood the purpose :
- Check that the variable is local or global by looking at its name.
- If it's a general variable instead, you may declare it global and still use it as a global variable provided you use the right [Default Name].
- Declare the variable anyway ; the only thing left is to choose its name, which should be feasible since you understood its purpose.
- Parse, close the script window and open it back. The cryptic variable's name has been replaced by the name you've chosen.

Example : for some treasures, the variables "VAR_GenInt16_220" to "VAR_GenInt16_224" serve as settings the treasure's position and item.
If you find a script looking like this :
Code: [Select]
Function Zidane_12
    TimedTurn( Angle(VAR_GenInt16_220, VAR_GenInt16_222), 16 )
    WaitTurn(  )
    if ( VAR_GenUInt8_226 == 0 ) {
        if ( VAR_GenInt16_224 == 29999 ) {
            WindowSync( 7, 0, 6 )
        } else {
            if ( VAR_GenInt16_224 >= 1000 ) {
                RunSoundCode3( 53248, 108, 0, -128, 125 )
                set VAR_GenInt16_228 = ( VAR_GenInt16_224 - 1000 )
                if ( ( VAR_GenInt16_228 + GetGil ) > 9999999L ) {
                    set VAR_GenInt16_228 = ( 9999999L - GetGil )
                }
                AddGil( VAR_GenInt16_228 )
                SetTextVariable( 0, VAR_GenInt16_228 )
                WindowSync( 7, 0, 6 )
                set VAR_GenUInt8_226 = 1
            } else {
                if ( ( GetItemCount(VAR_GenInt16_224) < 99 ) && ( VAR_GenInt16_224 < 512 ) ) {
                    RunSoundCode3( 53248, 108, 0, -128, 125 )
                    set VAR_GenUInt8_226 = 1
                    SetTextVariable( 0, VAR_GenInt16_224 )
                    AddItem( VAR_GenInt16_224, 1 )
                    WindowSync( 7, 0, 4 )
                } else {
                    if ( ( VAR_GenInt16_224 >= 512 ) && ( GetCardAmount < 100 ) ) {
                        RunSoundCode3( 53248, 108, 0, -128, 125 )
                        set VAR_GenUInt8_226 = 1
                        SetTextVariable( 0, VAR_GenInt16_224 )
                        AddItem( VAR_GenInt16_224, 1 )
                        WindowSync( 7, 0, 5 )
                    } else {
                        SetTextVariable( 0, VAR_GenInt16_224 )
                        if ( VAR_GenInt16_224 < 512 ) {
                            WindowSync( 7, 0, 8 )
                        } else {
                            WindowSync( 7, 0, 9 )
                        }
                    }
                }
            }
        }
    }
    return
Then you can declare these :
Code: [Select]
global int16 TreasurePositionX VAR_GenInt16_220
global int16 TreasurePositionY VAR_GenInt16_222
global int16 TreasureItem VAR_GenInt16_224
global uint8 TreasureTaken VAR_GenInt16_226
Parse, close and reopen and find this instead :
Code: [Select]
Function Zidane_12
    TimedTurn( Angle(TreasurePositionX, TreasurePositionY), 16 )
    WaitTurn(  )
    if ( VAR_GenUInt8_226 == 0 ) {
        if ( TreasureItem == 29999 ) {
            WindowSync( 7, 0, 6 )
        } else {
            if ( TreasureItem >= 1000 ) {
                RunSoundCode3( 53248, 108, 0, -128, 125 )
                set VAR_GenInt16_228 = ( TreasureItem - 1000 )
                if ( ( VAR_GenInt16_228 + GetGil ) > 9999999L ) {
                    set VAR_GenInt16_228 = ( 9999999L - GetGil )
                }
                AddGil( VAR_GenInt16_228 )
                SetTextVariable( 0, VAR_GenInt16_228 )
                WindowSync( 7, 0, 6 )
                set VAR_GenUInt8_226 = 1
            } else {
                if ( ( GetItemCount(TreasureItem) < 99 ) && ( TreasureItem < 512 ) ) {
                    RunSoundCode3( 53248, 108, 0, -128, 125 )
                    set VAR_GenUInt8_226 = 1
                    SetTextVariable( 0, TreasureItem )
                    AddItem( TreasureItem, 1 )
                    WindowSync( 7, 0, 4 )
                } else {
                    if ( ( TreasureItem >= 512 ) && ( GetCardAmount < 100 ) ) {
                        RunSoundCode3( 53248, 108, 0, -128, 125 )
                        set VAR_GenUInt8_226 = 1
                        SetTextVariable( 0, TreasureItem )
                        AddItem( TreasureItem, 1 )
                        WindowSync( 7, 0, 5 )
                    } else {
                        SetTextVariable( 0, TreasureItem )
                        if ( TreasureItem < 512 ) {
                            WindowSync( 7, 0, 8 )
                        } else {
                            WindowSync( 7, 0, 9 )
                        }
                    }
                }
            }
        }
    }
    return



I hope you enjoy the changes  ;)
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Dogshrapnel on 2015-12-20 18:49:44
Ugh, I don't know why but after editing a ton of monster data to balance their stats better and saving it, it seems like most of it is gone, which considering how long it took sucks. The really weird thing is that some of that data did get saved, but only the basic stats it seems, all of the status effects and HP/MP stats don't seem to exist. Is that a problem or did I just mess something up somehow?
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2015-12-20 19:26:15
That bites :/
I just tried few tests and it seems to work fine for me. Can you tell me :
1) which datas were saved and which datas were not saved exactly,
2) the save process you had (if you saved as mod, then overwrote the binary data or things like that).

I did change a tiny bit of the saving routine in this version, but I can't see how it would have affect that.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Kefka on 2015-12-20 20:48:28
I downloaded the new version, but when I try to start it I get the message that I'm missing the following dll:

wxmsw30u_gl_gcc471TDM.dll

It's not included in the zip folder.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2015-12-20 21:29:32
Fixed, thx for warning Kefka.
Here is also a temporary link (https://dl.dropboxusercontent.com/u/98687557/Resources/wxmsw30u_gl_gcc471TDM.dll) for the .dll only.

You'd also need glu32.dll (https://dl.dropboxusercontent.com/u/98687557/Resources/glu32.dll) and opengl32.dll (https://dl.dropboxusercontent.com/u/98687557/Resources/opengl32.dll). They are much more standard but if I don't know if they are included in Windows by default.
If that's not the case and most of people need them, please let me know so I'll also put them in the archive.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Dogshrapnel on 2015-12-20 21:46:07
As far as I can tell, I would save as a mod mostly, only saving directly to the file when I was testing. It seems like the monster stats were saved as many defense values are different from the originals. It's weird since everything else is still changed, I remember running into this problem before too, so I don't know what the heck I'm doing that's causing this.

Edit* Now I'm noticing that a few enemies DID have their proper stats saved, usually the ones at the start of the list, but the majority didn't, why would it save some but not all?
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2015-12-20 22:06:49
When you save directly to the file, the modifications are cleared and won't be saved by further "Save Mod" calls.

Now that I think about it... it's a really bad choice that I made it work this way... It's been so long that I don't remember why I've chosen it in the first place. Making the modifications persistents would also bring problems though.

Anyway, when you begin to overwrite the binary file, you should keep doing exclusively it and then create a .ppf file using makeppf or something like that.
Or you do like I do : you use 1 file for which you save only using "Save Mod" and another one for which you import the changes and apply them directly.
I also sometimes use only 1 file and create an undoable PPF patch when I want to test. You need to be careful to unapply this patch before creating a new one though. The first method is safer.

In the next version, I'll add a feature that allow to choose which datas exactly you want to save in .hws files, alongside file batching. This way you'll be able to get a .hws file even if you used the "Overwrite binary" feature before.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Dogshrapnel on 2015-12-20 23:05:26
That's unfortunate, it seems I'll have to redo all that work I did due to some problems that caused my binary files to become unusable. Thanks anyways.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Kefka on 2015-12-21 14:19:48
Fixed, thx for warning Kefka.
Here is also a temporary link (https://dl.dropboxusercontent.com/u/98687557/Resources/wxmsw30u_gl_gcc471TDM.dll) for the .dll only.

Thanks a lot, it's working fine now.

Edit: the possibility to modify and create entirely new sets of status effects seems very promising. Am I right in assuming that the various ''No Status'' sets at the end of the list are currently unused? Because all abilities that don't inflict a status use the ''No Status'' set at the top.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2015-12-21 14:46:08
Yes you're right by assuming that.

I didn't test all the possibilities it offers yet. I can tell that :
• "Curing the Trance status" is possible. It empties the Trance gauge and turn the character back to normal (no effect if the character was not in Trance),
• "Curing the Low HP status" doesn't work. At least it doesn't increase the HP nor it writes the HP figure in white.

I guess there are rooms for discovers here.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: R51 on 2016-01-05 16:25:46
This newest version looks pretty great. I've messed around with it some in the past but I was way out of date with my version. :)

I just downloaded 0.31 to play with the world map a bit, but I don't see anything populating in any of the World Map tabs. See the screenshot below:

(http://i.imgur.com/JDHclYP.jpg)

Is this something I've done wrong?
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2016-01-05 17:31:13
Hum... I'm able to reproduce the bug with the japanese version (the World Map panel doesn't work perfectly with that version, though it shouldn't bug like this). I'm not sure, but I think I failed there : I should have make the .hwf file update itself for this version.

Anyway, try deleting the ".hwf" file in your game's folder and force Hades Workshop to scan the file again (you must scan a non-modified version, always). It fixed the thing for me.

Everyone should check if the World Map panel works correctly and do the same if it doesn't. It won't be a problem if you never access to that panel, but it may loose your modifications if you go to it and it bugs and you didn't save.

Thanks for warning, R51. And sorry for the problem.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: R51 on 2016-01-05 17:48:26
That helps a lot, though the Global Map panel no longer has a preview. Does the current version actually show the Global Map visually or did I misunderstand what it's meant to be doing? Thanks for the fast reply.

(http://i.imgur.com/6UAT3E1.jpg)
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2016-01-05 19:04:04
The world map preview is for the script edition. It's just the minimap but it may show the position when it is explicitely written.

(http://img15.hostingpics.net/pics/824032WorldMapPreview.jpg)

That's nowhere as nice as tasior's viewer, but that's a first ^^"
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: R51 on 2016-01-05 19:15:20
Yep, that's why I was checking this out, was for an alternative to tasior's viewer. Looks like this one won't do what I was wanting to look at, but HadesWorkshop is still flippin' awesome. Thanks again for all the hard work on it. :)
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Kefka on 2016-01-10 20:04:29
I've got another question about enemy AI, and was curious whether you, tirlititi, or someone else could help me out here:

Is there a way for an enemy to check if a specific character is in your current party? Because I've been playing with the thought of making Trance-Kuja use Reflect only if either Eiko or Vivi (or both) are in the current party, since they are the only two characters that have reflectable spells. Reflect doesn't bother any of the other six party members, so if Kuja uses it if neither of the two is in your party, he is essentially just wasting a turn.

I've only found one enemy that uses a party member's MODEL_TYPE when targeting, and that's the Doppelgangers created by Epitaph who always use their 9999 damage attack against their corresponding counterpart. However I'm unsure how to incorporate the Model Type check in an 'if condition' (I'm assuming that's what I'd need for Trance Kuja; to check if model type Vivi or Eiko is present, then use reflect, otherwise use a different attack). Could you give me a hint on how to write such a condition properly? My first attempt has been unsuccessful and lead to a crash.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2016-01-10 20:19:10
It would be this :
Code: [Select]
if (#(SV_PlayerTeam[MODEL_TYPE] ==$ 2)) {
  // Vivi is in the team
}
if (#((SV_PlayerTeam[MODEL_TYPE] ==$ 10) | (SV_PlayerTeam[MODEL_TYPE] ==$ 11))) {
  // Eiko is in the team
}
The list for model types is this one (I don't think I've included it in the help yet, I should do it) :
Code: [Select]
Zidane 0 or 1
Vivi 2
Dagger 3, 4, 5 or 6
Steiner 7 or 8
Quina 9
Eiko 10 or 11
Freya 12
Amarant 13
Cinna 14
Marcus 15
Blank 16 or 17
Beatrix 18

That's strange you got a crash though. What was your try?
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: froggy25 on 2016-01-11 11:27:07
Is there a way for an enemy to check if a specific character is in your current party? Because I've been playing with the thought of making Trance-Kuja use Reflect only if either Eiko or Vivi (or both) are in the current party, since they are the only two characters that have reflectable spells. Reflect doesn't bother any of the other six party members, so if Kuja uses it if neither of the two is in your party, he is essentially just wasting a turn.
The AI also uses it to circumvent auto-Reflect, by casting offensive spells on its own Reflect.
There is a quirk with this subroutine: if the reflected spell doesn't find any valid target, it will reflect the spell on the caster (https://youtu.be/fCJUhIG1ESw?t=1m40s).
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Kefka on 2016-01-11 18:19:49
It would be this :
Code: [Select]
if (#(SV_PlayerTeam[MODEL_TYPE] ==$ 2)) {
  // Vivi is in the team
}
if (#((SV_PlayerTeam[MODEL_TYPE] ==$ 10) | (SV_PlayerTeam[MODEL_TYPE] ==$ 11))) {
  // Eiko is in the team
}
The list for model types is this one (I don't think I've included it in the help yet, I should do it) :
Code: [Select]
Zidane 0 or 1
Vivi 2
Dagger 3, 4, 5 or 6
Steiner 7 or 8
Quina 9
Eiko 10 or 11
Freya 12
Amarant 13
Cinna 14
Marcus 15
Blank 16 or 17
Beatrix 18

That's strange you got a crash though. What was your try?

That was a while ago already, but I believe I made it way more complicated than it needed to be. I remember I was looking at Ozma’s AI for comparison, because Ozma uses Lv4 Holy and Lv5 Death only if they hit at least one party member, and that’s a condition similar to what I want for Trance-Kuja and Reflect. Since Ozma has these checks in his looping function, I figured I’d put it in the same place in`Kuja’s AI, and then change his ATB function accordingly, but I guess I messed something up during this (seemingly unnecessary) huge change. Afterwards I suspected that maybe including it in the ATB function as an ‘if condition’ instead might be a better choice.

So what do you suggest would be the best place to insert this in Trance-Kuja’s AI?

The AI also uses it to circumvent auto-Reflect, by casting offensive spells on its own Reflect.
There is a quirk with this subroutine: if the reflected spell doesn't find any valid target, it will reflect the spell on the caster (https://youtu.be/fCJUhIG1ESw?t=1m40s).

That's a nice video, never knew about this bug. And you're right, I forgot completely about auto-reflect! I guess Trance-Kuja's use of Reflect does still make some sense afterall, even without Vvi or Eiko. Then I'd need to make it so he checks for auto-reflect in addition to those two little mages.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2016-01-11 20:18:28
Well yes, Ozma has some checkings in his "loop" function, but that's a bit different. The "loop" function really often serves as a secondary "Init" function that only init things that needs player's and enemy's datas to be loaded.
The game can't check party's level too soon in the fight, because the party is not loaded yet ("SV_PlayerTeam" and "SV_EnemyTeam" are 0 before they are loaded). Hence the checks for party's level is delayed until everything is loaded.

However, besides the fact you can't check for party's level or status or whatever too soon, you can decide to put those checks wherever you want. Here are some possibilities :

1) Put the check in the ATB function : I'd say that's the default choice. When Kuja's ATB bar is full, he checks if it is relevant to cast Reflect on himself. Devs tended to use an additionnal variables here, like "CuragaTarget" (see one of Necron's dummy for this example, but there are a lot of them, starting with Ozma's LV spells target which use a slight variation of that system).
However, nothing prevents you to do the check in the "set SV_Target" line :
Code: [Select]
        case +2:
            if (#(SV_PlayerTeam[MODEL_TYPE] ==$ 2)) {
                set #( SV_Target = SV_PlayerTeam )
            } else {
                set #( SV_Target = 0 )
            }
            break

2) Put it in the "loop" function, in the initializing part of the function. That's what Ozma does for the checks of the party's level. Since those lvls won't change during the fight, you can perform the check once and keep the result all over the fight. That's a good way to do it for things like lvl, model type or auto-status, but that's kinda irrelevant for current statuses, HP and such. Note that you always need at least an additionnal variable here for storing the result, and maybe another one if there is no "initializing part" of the function (that's not so common though). It could look like this :
Code: [Select]
    if ( !initflag ) {
        set initflag = 1
        while ( !( GetBattleLoadState & 16 ) ) {
            Wait( 1 )
            set VAR_GenUInt8_206 = GetRandom
        }
        // you can do it with a boolean like this :
        set myreflectflag = (#(SV_PlayerTeam[MODEL_TYPE] ==$ 2))
        // or, more like what devs usually did :
        if (#(SV_PlayerTeam[MODEL_TYPE] ==$ 2)) {
            set myreflecttarget = SV_FunctionEnemy
        } else {
            set myreflecttarget = 0
        }
        while ( GetBattleState != 4 ) {
            Wait( 1 )
        }
    }
Then, in the ATB function (or Counter function if you want to use Reflect as a counter), you use "myreflecttarget" as your target when casting Reflect, or check the "myreflectflag".

3) Put it at the top-level of the "loop" function (out of any "if" block). This way you can perform the check every frame and add the ability to cancel the casting if it's not relevant anymore at that point. That's more complicated and I won't give an example here, but that's a system used by Black Waltz 2 or Steiner, for instance : if their target dies before the attack is performed, they cancel it and choose another valid (non-Dagger) target. That way they don't take the risk to redirect their attack on Dagger.

I'll make a small update soon. I'll fix that bug with the World Map and improve a bit script readability. I'll also join a file for the naming of variables in all the AI scripts.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Kefka on 2016-01-12 18:51:48
I see, I'll try out your suggestions. Thanks again for your help.
Title: Re: [FF9] General editor - Hades Workshop (0.31)
Post by: Tirlititi on 2016-01-16 13:48:31
Update to 0.31b :
- Fixed that World Map bug ; the config file will update consequently.
- Enabled script edition of World Maps for the japanese version but for the two dummied World Maps.
- You can now declare "global" variables the same way you declare "local". There is no need to allocate them but, by default, they are initialized to 0 at the beginning of the script's execution (when entering a Battle, a World Map or a Field).
- Added a .hws file containing names for all the variables used in the battles. Use "Open Mod" to import it ; it won't mess with any of your modifications besides your own variable naming if you had one.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: gledson999 on 2016-01-17 00:46:44
I'm on a project with a translation with friends to portuguese, and was separated by cities using the "Extract Script Dialog" option being that is already 80% completed, and my question is "Do you have plans to implement the Import Script Dialog option?"


Note: you tool is very precious, congratulation
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-01-17 10:34:41
Yes Gledson, that's what I'll call "file batching". Next main version will be focused on that, promise ^^"
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: gledson999 on 2016-01-17 14:00:28
Oh thanks Tirlititi, you're the best ;)
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Vir on 2016-01-17 17:13:28
Tirlititi, I am thinking of making a mod that fixes stat growth for people who want to do without the variable stats. Probably I'll do this by confining stat bonuses to weapons, with a given set of bonuses per weapon class leading up to each toon's max stats. This does leave the question of missing stat bonuses on joining. Can I make all characters join at lv1 in the field scripts somewhere?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-01-17 18:24:23
Yes I saw your topic.
I just made some tests : contrary to what I thought and wrote, the characters whose levels are taken in account are not the ones in the reserve (the ones available when you're asked to choose your party members) but rather seem to be the 4 party members only.

So, in order to do what you want, you need to locate the scripts that initialize the main cast the first time they join the player. It always look like this :

Code: [Select]
set VAR_B13_21 = 0
SetPartyReserve( VAR_B13_21 )
set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
set VAR_B10_8 = 0
while ( VAR_B10_8 <= 11 ) {
if ( IsInParty(VAR_B10_8) ) {
set VAR_B10_10 |= ( 1 << VAR_B10_8 )
}
set VAR_B10_8++
}
if ( 1 ) {
set VAR_B10_12 |= 1
}
if ( 1 ) {
set VAR_B10_12 |= 4
}
if ( 1 ) {
set VAR_B10_12 |= 2
}
if ( 1 ) {
set VAR_B10_12 |= 64
}
set VAR_B10_14 = ( VAR_B10_10 ^ VAR_B10_12 )
set VAR_B10_8 = 0
while ( VAR_B10_8 <= 11 ) {
if ( ( VAR_B10_14 >> VAR_B10_8 ) & 1 ) {
RemoveParty( VAR_B10_8 )
}
set VAR_B10_8++
}
if ( IsInParty(0) == 0 ) {
set VAR_A6_147 = PartyAdd(0)
}
if ( IsInParty(2) == 0 ) {
set VAR_A6_147 = PartyAdd(2)
}
if ( IsInParty(1) == 0 ) {
set VAR_A6_147 = PartyAdd(1)
}
if ( IsInParty(6) == 0 ) {
set VAR_A6_147 = PartyAdd(6)
}
set VAR_D5_303 = 0
set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 99 ) ) )
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_8 = 0
}
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_10 = 2
}
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_12 = 1
}
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_14 = 6
}
set VAR_A6_148 = ( VAR_A6_149 = ( VAR_A6_150 = ( VAR_A6_151 = 0 ) ) )
if ( VAR_B10_8 != 99 ) {
if ( GetHP(VAR_B10_8) == 0 ) {
set VAR_A6_148 = 1
}
}
if ( VAR_B10_10 != 99 ) {
if ( GetHP(VAR_B10_10) == 0 ) {
set VAR_A6_149 = 1
}
}
if ( VAR_B10_12 != 99 ) {
if ( GetHP(VAR_B10_12) == 0 ) {
set VAR_A6_150 = 1
}
}
if ( VAR_B10_14 != 99 ) {
if ( GetHP(VAR_B10_14) == 0 ) {
set VAR_A6_151 = 1
}
}
if ( ( ( ( VAR_A6_148 + VAR_A6_149 ) + VAR_A6_150 ) + VAR_A6_151 ) == VAR_D5_303 ) {
if ( ( VAR_B10_8 != 99 ) && ( VAR_A6_148 == 1 ) ) {
SetHP( VAR_B10_8, 1 )
}
if ( ( VAR_B10_10 != 99 ) && ( VAR_A6_149 == 1 ) ) {
SetHP( VAR_B10_10, 1 )
}
if ( ( VAR_B10_12 != 99 ) && ( VAR_A6_150 == 1 ) ) {
SetHP( VAR_B10_12, 1 )
}
if ( ( VAR_B10_14 != 99 ) && ( VAR_A6_151 == 1 ) ) {
SetHP( VAR_B10_14, 1 )
}
}
SetStatus( 0, 127 )
SetStatus( 1, 127 )
SetStatus( 3, 127 )
SetStatus( 2, 127 )
SetStatus( 4, 127 )
SetStatus( 5, 127 )
SetStatus( 7, 127 )
SetStatus( 6, 127 )
SetStatus( 8, 127 )
if ( IsInParty(5) ) {
set Setting_OptionalQuina = 1
} else {
set Setting_OptionalQuina = 0
}
if ( ( ( VAR_B13_19 >> 0 ) & 1 ) == 0 ) {
SetCharacterData( 0, 1, 255, 9, 0 )
set VAR_B13_19 |= 1
}
if ( ( ( VAR_B13_19 >> 1 ) & 1 ) == 0 ) {
SetCharacterData( 1, 1, 255, 5, 1 )
set VAR_B13_19 |= 2
}
if ( ( ( VAR_B13_19 >> 2 ) & 1 ) == 0 ) {
SetCharacterData( 2, 1, 255, 6, 2 )
set VAR_B13_19 |= 4
}
if ( ( ( VAR_B13_19 >> 6 ) & 1 ) == 0 ) {
SetCharacterData( 6, 1, 6, 6, 6 )
set VAR_B13_19 |= 64
SetRow( 6, 0 )
}

What you need to do is to cut that last part with the "SetCharacterData" and paste it a little before, between the "RemoveParty" loop and the "PartyAdd" calls.
Tell me if you can't find these initializing scripts. The ones for Eiko and Amarant are found in the entrances of Conde Petie Mountain Path and of Madain-Sari respectively, in the functions "Main_Loop" and "Zidane_Loop" respectively.

However, I don't think it will fix the "Marcus/Eiko ; Blank/Amarant" stat glitch.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Vir on 2016-01-17 18:48:42
By the last part you mean that all characters will join at lv1 if I cut and paste as you say, except Amarant won't if Blank's level is higher than the average party level (only a problem in lv1 games). But Eiko will still gain Marcus' stat bonus, even stat bonus he gained through auto-leveling when joining your party? So we must make Marcus join at lv1 and the player must not let him level to keep Eiko's stats "clean"?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-01-17 18:57:24
I got Amarant lvl 2 by doing this, so I guess Amarant's level will always be the same as Blank's level, regardless of the levels of the rest of the crew.
Otherwise, yes.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Vir on 2016-01-17 19:04:03
Ok, so always kill Plant Brain, Blank, and Plant Spiders in that order. Got it.

Thanks!

I was confused by "contrary to what I thought and wrote." Am I missing a post of yours?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-01-17 19:29:21
I wrote that wrong thing in SetPartyReserve's description inside the editor.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Vir on 2016-01-17 19:44:52
Ok. Thanks again for your help!
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: DarkDemon on 2016-01-17 20:23:08
Thanks for this man.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-01-25 09:42:38
I took Eiko on Lv1 editing Field scripts at Conde Petie Mountain Path in the function "Main_Loop" (Marcus' level was 21)
Code: [Select]
Function Main_Loop
    if ( Global_FieldEntrance == 65535 ) {
        set VAR_B13_21 = 103
        SetPartyReserve( VAR_B13_21 )
        if ( IsInParty(5) ) {
            RemoveParty( 5 )
            set VAR_D5_303 = 0
            set VAR_B1_60 = ( VAR_B1_61 = ( VAR_B1_62 = ( VAR_B1_63 = ( VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 65535 ) ) ) ) ) ) )
            set VAR_B10_14 = 0
            while ( VAR_B10_14 <= 11 ) {
                if ( IsInParty(VAR_B10_14) ) {

to

Code: [Select]
Function Main_Loop
    if ( Global_FieldEntrance == 65535 ) {
        set VAR_B13_21 = 64
        SetPartyReserve( VAR_B13_21 )
        if ( IsInParty(5) ) {
            RemoveParty( 5 )
            set VAR_D5_303 = 0
            set VAR_B1_60 = ( VAR_B1_61 = ( VAR_B1_62 = ( VAR_B1_63 = ( VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 65535 ) ) ) ) ) ) )
            set VAR_B10_14 = 0
            while ( VAR_B10_14 <= 11 ) {
                if ( IsInParty(VAR_B10_14) ) {
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-01-25 16:14:51
Also this works with Amarant at  Madain-Sari in the function "Zidane_Loop" (I took Amarant at lv9 because of  Blank was Lv9 )
Code: [Select]
        set VAR_B13_21 = 199
        SetPartyReserve( VAR_B13_21 )
        set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
        set VAR_B10_8 = 0
        while ( VAR_B10_8 <= 11 ) {
            if ( IsInParty(VAR_B10_8) ) {
                set VAR_B10_10 |= ( 1 << VAR_B10_8 )
            }
            set VAR_B10_8++
        }
        if ( 1 ) {
            set VAR_B10_12 |= 1
        }
        if ( 1 ) {
            set VAR_B10_12 |= 4
        }
        if ( 1 ) {
            set VAR_B10_12 |= 2
        }
        if ( 1 ) {
            set VAR_B10_12 |= 64
        }
        set VAR_B10_14 = ( VAR_B10_10 ^ VAR_B10_12 )
        set VAR_B10_8 = 0
        while ( VAR_B10_8 <= 11 ) {
            if ( ( VAR_B10_14 >> VAR_B10_8 ) & 1 ) {
                RemoveParty( VAR_B10_8 )
            }
            set VAR_B10_8++
        }
        if ( IsInParty(0) == 0 ) {
            set VAR_A6_147 = PartyAdd(0)
        }
        if ( IsInParty(2) == 0 ) {
            set VAR_A6_147 = PartyAdd(2)
        }
        if ( IsInParty(1) == 0 ) {
            set VAR_A6_147 = PartyAdd(1)
        }
        if ( IsInParty(6) == 0 ) {
            set VAR_A6_147 = PartyAdd(6)
        }
        set VAR_D5_303 = 0
        set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 99 ) ) )
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_8 = 0
        }
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_10 = 2
        }
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_12 = 1
        }
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_14 = 6
        }
        set VAR_A6_148 = ( VAR_A6_149 = ( VAR_A6_150 = ( VAR_A6_151 = 0 ) ) )
        if ( VAR_B10_8 != 99 ) {
            if ( GetHP(VAR_B10_8) == 0 ) {
                set VAR_A6_148 = 1
            }
        }
        if ( VAR_B10_10 != 99 ) {
            if ( GetHP(VAR_B10_10) == 0 ) {
                set VAR_A6_149 = 1
            }
        }
        if ( VAR_B10_12 != 99 ) {
            if ( GetHP(VAR_B10_12) == 0 ) {
                set VAR_A6_150 = 1
            }
        }
        if ( VAR_B10_14 != 99 ) {
            if ( GetHP(VAR_B10_14) == 0 ) {
                set VAR_A6_151 = 1
            }
        }
        if ( ( ( ( VAR_A6_148 + VAR_A6_149 ) + VAR_A6_150 ) + VAR_A6_151 ) == VAR_D5_303 ) {
            if ( ( VAR_B10_8 != 99 ) && ( VAR_A6_148 == 1 ) ) {
                SetHP( VAR_B10_8, 1 )
            }
            if ( ( VAR_B10_10 != 99 ) && ( VAR_A6_149 == 1 ) ) {
                SetHP( VAR_B10_10, 1 )
            }
            if ( ( VAR_B10_12 != 99 ) && ( VAR_A6_150 == 1 ) ) {
                SetHP( VAR_B10_12, 1 )
            }
            if ( ( VAR_B10_14 != 99 ) && ( VAR_A6_151 == 1 ) ) {
                SetHP( VAR_B10_14, 1 )
            }

to

Code: [Select]
        }
        set VAR_B13_21 = 128
        SetPartyReserve( VAR_B13_21 )
        set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
        set VAR_B10_8 = 0
        while ( VAR_B10_8 <= 11 ) {
            if ( IsInParty(VAR_B10_8) ) {
                set VAR_B10_10 |= ( 1 << VAR_B10_8 )
            }
            set VAR_B10_8++
        }
        if ( 1 ) {
            set VAR_B10_12 |= 1
        }
        if ( 1 ) {
            set VAR_B10_12 |= 4
        }
        if ( 1 ) {
            set VAR_B10_12 |= 2
        }
        if ( 1 ) {
            set VAR_B10_12 |= 64
        }
        set VAR_B10_14 = ( VAR_B10_10 ^ VAR_B10_12 )
        set VAR_B10_8 = 0
        while ( VAR_B10_8 <= 11 ) {
            if ( ( VAR_B10_14 >> VAR_B10_8 ) & 1 ) {
                RemoveParty( VAR_B10_8 )
            }
            set VAR_B10_8++
        }
        if ( ( ( VAR_B13_19 >> 0 ) & 1 ) == 0 ) {
            SetCharacterData( 0, 1, 255, 9, 0 )
            set VAR_B13_19 |= 1
        }
        if ( ( ( VAR_B13_19 >> 2 ) & 1 ) == 0 ) {
            SetCharacterData( 2, 1, 255, 6, 2 )
            set VAR_B13_19 |= 4
        }
        if ( ( ( VAR_B13_19 >> 1 ) & 1 ) == 0 ) {
            SetCharacterData( 1, 1, 255, 5, 1 )
            set VAR_B13_19 |= 2
        }
        if ( ( ( VAR_B13_19 >> 6 ) & 1 ) == 0 ) {
            SetCharacterData( 6, 1, 255, 6, 6 )
            set VAR_B13_19 |= 64
        }
        if ( ( ( VAR_B13_19 >> 7 ) & 1 ) == 0 ) {
            SetCharacterData( 7, 1, 7, 5, 7 )
            set VAR_B13_19 |= 128
            SetRow( 7, 1 )
        }
        if ( IsInParty(0) == 0 ) {
            set VAR_A6_147 = PartyAdd(0)
        }
        if ( IsInParty(2) == 0 ) {
            set VAR_A6_147 = PartyAdd(2)
        }
        if ( IsInParty(1) == 0 ) {
            set VAR_A6_147 = PartyAdd(1)
        }
        if ( IsInParty(6) == 0 ) {
            set VAR_A6_147 = PartyAdd(6)
        }
        set VAR_D5_303 = 0
        set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 99 ) ) )
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_8 = 0
        }
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_10 = 2
        }
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_12 = 1
        }
        if ( 1 ) {
            set VAR_D5_303++
            set VAR_B10_14 = 6
        }
        set VAR_A6_148 = ( VAR_A6_149 = ( VAR_A6_150 = ( VAR_A6_151 = 0 ) ) )
        if ( VAR_B10_8 != 99 ) {
            if ( GetHP(VAR_B10_8) == 0 ) {
                set VAR_A6_148 = 1
            }
        }
        if ( VAR_B10_10 != 99 ) {
            if ( GetHP(VAR_B10_10) == 0 ) {
                set VAR_A6_149 = 1
            }
        }
        if ( VAR_B10_12 != 99 ) {
            if ( GetHP(VAR_B10_12) == 0 ) {
                set VAR_A6_150 = 1
            }
        }
        if ( VAR_B10_14 != 99 ) {
            if ( GetHP(VAR_B10_14) == 0 ) {
                set VAR_A6_151 = 1
            }
        }
        if ( ( ( ( VAR_A6_148 + VAR_A6_149 ) + VAR_A6_150 ) + VAR_A6_151 ) == VAR_D5_303 ) {
            if ( ( VAR_B10_8 != 99 ) && ( VAR_A6_148 == 1 ) ) {
                SetHP( VAR_B10_8, 1 )
            }
            if ( ( VAR_B10_10 != 99 ) && ( VAR_A6_149 == 1 ) ) {
                SetHP( VAR_B10_10, 1 )
            }
            if ( ( VAR_B10_12 != 99 ) && ( VAR_A6_150 == 1 ) ) {
                SetHP( VAR_B10_12, 1 )
            }
            if ( ( VAR_B10_14 != 99 ) && ( VAR_A6_151 == 1 ) ) {
                SetHP( VAR_B10_14, 1 )
            }
        }

This method works with Quina, games going on and you taking Quina at lv1 but it also makes tiny glitch at armor shop and synthesis shop if you come back to Lindblum, stats for buying item will be displayed only for Quina, instead displaying stats for all party.

Now I am thinking how edit scripts to obtain Blank at lv1 during battle with Plant Brian at Evil Forest  no mater what is your party's level.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-01-25 18:36:23
I found method how obtain Blank on lv1. Soon I will post code how made it.
By the way, I can post scripts for obtaining  Freya and Quina at lv1. If someone interested, please send a message.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-01-26 02:01:58
Tirlititi
There is Russian translation of Final Fantasy IX made by RGR studio, it has all 33 letters of Russian ABC (main difference between US translation and Russian translation). Current Hades Workshop doesn't support it. It will be nice if future revisions would have comparability with Russian translation from RGR studio.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-01-26 08:03:18
Hey vivigix. Congrats for your script edition.

I added a support for a russian version. When I made the charmaps, I've been given 2 for the russian version though (KUDOS and RGR).
What's the difference between them? Are there any official russian translation or are they both fan-made? Is there one clearly better than the other?

If both versions are equally useful, I'll add back both version supports...
For now, you can copy-paste this line in your "HadesWorkshop.conf" file and it should add RGR support (go in "File -> Preferences" to change the charmap).
Code: [Select]
Charmap[RussianPirateRGR]=0123456789+-=*% АBСDEFGНIJКLМNOPQRSТUVWXYZ(!?“:.аbсdеfдhijкlтпорqrstиvwxyz),/+~&БДЖЗИЙЛУÍÌГПФШЩЬЭЯЮÜбвжзмнцйíìглшщэчыùюüЦяфьЫЧ'”_}{∴∵♪→∈×♦§<>←∋↑△□∞♥?????????????«»↓―°★♂♀☺?„‘#※;¡¿
Thanks for telling me about this.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: itoikenza on 2016-01-28 16:13:39
Tirlititi is there any way to make Beatrix replace Quina in menus and battle only? have you ever thought of this? Quina would stay on screen during cutscenes but Beatrix would be everywhere else in its place.

Edit: https://www.youtube.com/watch?v=mBjGozSt_fM check this out! there's also a Steam ver. in the works. Tirlititi, it would be awesome if Hades could edit these versions. i doubt for IOS. but maybe Steam & Android?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-01 07:13:16
Both of them are unofficial pirate translations, both of them biased on US region game.
RGR Studio made better translation they insert 30 letters of Russian ABC, also 4th disk has full translation
Game have no glitches because of translation.

RGR Alphabet
Spoiler: show
(http://i66.fastpic.ru/big/2016/0201/9a/f66b99276a9446e42203e4a0a42ebd9a.jpeg)


Kudos also made  translation, but translation is partial. They just redraw  26 letters of English ABC to 26 letters of Russian ABC, 4th disk has partial translation.
Game has some glitches because of translation.

KUDOS Alphabet
Spoiler: show
(http://i67.fastpic.ru/big/2016/0201/0b/f18f62b0d87b1f4ea6b95fb03484b00b.jpg)


Here is Original US ABC used in the game

Original Alphabet
Spoiler: show
(http://i67.fastpic.ru/big/2016/0201/ad/df53e0a03b7f17e9e67fae766379a8ad.jpeg)

Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-01 13:01:34
Tirlititi, I tried add this line but it doesn't work.

Code: [Select]
Charmap[RussianPirateRGR]=0123456789+-=*% АBСDEFGНIJКLМNOPQRSТUVWXYZ(!?“:.аbсdеfдhijкlтпорqrstиvwxyz),/+~&БДЖЗИЙЛУÍÌГПФШЩЬЭЯЮÜбвжзмнцйíìглшщэчыùюüЦяфьЫЧ'”_}{∴∵♪→∈×♦§<>←∋↑△□∞♥?????????????«»↓―°★♂♀☺?„‘#※;¡¿
Could you please show where exactly I should add this line?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-02-01 18:32:19
@vivigix : Thanks for the deails.

You need to open the file "HadesWorkshop.conf" with a text editor. The text is written using UTF-8 and most text editors can read it perfectly. However, if that's not the case (for instance, if you see no kanjis in front of the "Japanese" charmap, something is wrong), try with another text editor. Notepad++ or Notepad2 can read it for instance.

Once opened, add the line I gave you under the "[Text]", among the other Charmap declarations.
You end up for instance with a file like this :
Code: [Select]
# Hades Workshop configuration file
# Comment lines begin with #

[Preferences]
Charmap=Latin
OpcodeCharacter=µ
MenuColor=0
TextPreview=2

[Text]
Charmap[Latin]=0123456789+-=*% ABCDEFGHIJKLMNOPQRSTUVWXYZ(!?“:.abcdefghijklmnopqrstuvwxyz),/+~&ÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜáàâäéèêëíìîïóòôöúùûüÇÑçñŒß'”_}{∴∵♪→∈×♦§<>←∋↑△□∞♥?????????????«»↓―°★♂♀☺?„‘#※;¡¿
Charmap[Latin][A]=?
Charmap[Latin][B]=?

Charmap[RussianPirateRGR]=0123456789+-=*% АBСDEFGНIJКLМNOPQRSТUVWXYZ(!?“:.аbсdеfдhijкlтпорqrstиvwxyz),/+~&БДЖЗИЙЛУÍÌГПФШЩЬЭЯЮÜбвжзмнцйíìглшщэчыùюüЦяфьЫЧ'”_}{∴∵♪→∈×♦§<>←∋↑△□∞♥?????????????«»↓―°★♂♀☺?„‘#※;¡¿

Charmap[Japanese]=0123456789+-=*% ABCDEFGHIJKLMNOPQRSTUVWXYZ(!?゛:。abcdefghijklmnopqrstuvwxyz)、/・〜&「」…、。ーあいうえおぁぃぅぇぉかきくけこがぎぐげごさしすせそざじずぜぞたちつてとだぢづでどなにぬねのはひふへほばびぶべぼまみむめもぱぴぷぺぽやゆよゃゅょっらりるれろわをんアイウエオァィゥェォカキクケコガギグゲゴサシスセソザジズゼゾタチツテトダヂヅデドナニヌネノハヒフヘホバビブベボマミムメモパピプペポヤユヨャュョッラリルレロワヲンヴ
Charmap[Japanese][A]=『』'城魔南場艇劇村道山洞窟宮砂街黒樹火幹法士森装用地備族下沼古氷輪術体祠性帽鉄属子門使武器石駅剣車馬畑号撃敵腕与専攻定薬全回白指効拳設動金雷師源町果単一数竜大技手黄宝変風鏡剤珠盗板得防頂目更北毒態状中死水見発暗無消列力気避取入精皮秘豆賊氏聖服生天炎切復在現味御加追人率色事赤複返費前闇冷投減桃針線神当路橋角髭月羽爪枯心瑚胸光鎧衣内郷司祭本妖後珊忍憩呪斬女吸方蘇孔理波青上値能収黙化沈倍自調乱半喚相迷眠召混先惑分実必制通験瀕改逃経反治万空原導利止隠固牙象鯨星右育持長鍵形面解意極者教触戒区熱満統免許射貫知熟警日緑
Charmap[Japanese][B]=替要決刀告宣運画江庭園部夢食着三付根束飽興帯転柔尾草奮円頭巾髪野菜銀左棒八閃Ⅱ兜猫飾嘯雑鳴息突章絞狂華六咲命桜海裁獄放魚魂夜戦所最闘個選獣種険冒初作幻確義奥移並誰絶物不受了的弱点終字常猛買名覚同々異未処文削除編成元屋造店鍛冶売書※択認箇具操否位置視世行出即土守殺身今何脱恐睡時好代高湿谷押諸岬漠岸脈盆平島瀬霧去東西陸浅忘外側閉夕川辺近浜血絵対重可向系正期記憶進階段退各合小遠距離速別表示間枚類以補助騎港王国裏徐

#more stuff below...

Save the file and then open Hades Workshop. Go to "File -> Preferences" and change the field "Game Alphabet" to "RussianPirateRGR".
1) If you don't see any other option than "Default", then your text editor probably messed up with the configuration file. Change your text editor.
2) If you see "Default", "Latin", "Japanese" and "Russian" but not "RussianPirateRGR", then you didn't add the line correctly inside the .conf file.

In the case you successfully selected "RussianPirateRGR", it should work.


@itoikenza : There's unfortunatly no way to replace Beatrix inside the menus and battles and not on the field, besides doing what I described several times (replace Beatrix by a normal character at the beginning of the field's "main" function and replace her back in the party at the end of that same function).

I plan to make HW compatible with the Steam version (actually, if everything goes well, the space limitation should be removed, enabling a bunch of cool stuff), but I can't tell before I see it ^^"
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-01 19:07:28
Tirlititi, I added code to configuration, "RussianPirateRGR" appeared at Alphabet. I chose it. But bin file doesn't open as FF9 bin file. Could you check it yourself?

I have a question, if I will edit Spell animation, would it affect to enemies spell animations too or just foe parties spell animation?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-02-01 19:12:08
For your question, yes it'll apply both for the enemy and the party uses of a spell animation.

For the binary file, I can't say... Can you provide me a link with the RGR translation patch? I'll look into it this week.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: gorildo on 2016-02-02 19:42:30
I was wondering a few things:

1 - Is it possible to fix the Marcus/Eiko glitch?

2 - The first time you meet a new char, his level will be higher than 1 unless you're on level 1. This makes it impossible to max mag stones for that char if you level up. Is there a way to disable this check and simply have the character begin at level 1?

3 - Is it possible to disable equipment stat boosts so the stat growth is fixed to its minimum value?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Kefka on 2016-02-02 21:07:09
3 - Is it possible to disable equipment stat boosts so the stat growth is fixed to its minimum value?

Yes, that can be done right in the item section of Hades Workshop. Each weapon or armor has a Stat Set that can be modified to your liking.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: gorildo on 2016-02-02 21:53:36
Yes, that can be done right in the item section of Hades Workshop. Each weapon or armor has a Stat Set that can be modified to your liking.

Yes, but I don't mean the stat boost when equipped, I mean the bonus pool that adds extra stats when you level up depending on what equipment you're using.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-03 05:34:00
2 - The first time you meet a new char, his level will be higher than 1 unless you're on level 1. This makes it impossible to max mag stones for that char if you level up. Is there a way to disable this check and simply have the character begin at level 1?

Yeah,  there is possibility. You should Edit Field scripts where characters fist time join your party.
Also I took Eiko at lv1 when Markus was lv 22

Scroll up all messages and you will find what Scripts you should edit to obtain Eiko and Amarant at minimal levels.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-03 05:38:48
Gorildo
If you want take Freya and Quina at Lv1 you should edit Lindblum Square field scripts and Qu's Marsh Pond scripts.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: itoikenza on 2016-02-03 16:00:24
@itoikenza : There's unfortunatly no way to replace Beatrix inside the menus and battles and not on the field, besides doing what I described several times (replace Beatrix by a normal character at the beginning of the field's "main" function and replace her back in the party at the end of that same function).

I plan to make HW compatible with the Steam version (actually, if everything goes well, the space limitation should be removed, enabling a bunch of cool stuff), but I can't tell before I see it ^^"
 
Too bad about Beatrix, Tirlititi, thanks for considering making steam ver. compatible.

Remember this?!
(https://dl.dropboxusercontent.com/u/50488782/models/itoikenzaFF9Change.PNG)
How about that editing "Change" into any other movelist, or even a custom one called "Killer"
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-04 06:10:09
Remember this?!
Spoiler: show
(https://dl.dropboxusercontent.com/u/50488782/models/itoikenzaFF9Change.PNG)

How about that editing "Change" into any other movelist, or even a custom one called "Killer"
Is this type of Modding works?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-02-04 09:52:31
No, it still doesn't work and I can't give any more answer that I gave at the time itoikenza :/
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Dogshrapnel on 2016-02-05 23:36:24
Just a quick question to ask, I noticed that Lai Strike has its own status formula, does anyone know what the difference between its and bad status's formula is?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: gorildo on 2016-02-07 16:02:29
Yeah,  there is possibility. You should Edit Field scripts where characters fist time join your party.
Also I took Eiko at lv1 when Markus was lv 22

Scroll up all messages and you will find what Scripts you should edit to obtain Eiko and Amarant at minimal levels.

I see now, thanks.

If you have the Freya and Quina scripts please post them too. Also, what exactly is the Quina glitch? Does it affect anything else? Please inform us if you can figure out a fix.

I can't make much sense out of those scripts, so thanks again.  :-D
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-09 16:15:27
Script edition for Blank LV1

Find field "Evil Forest/Nest" CD 1 -function -  Function Main_Loop
Swap this part of script
Code: [Select]
    case +0:
        MoveCamera( 160, 112, 1, 8 )
        Wait( 45 )
        MoveCamera( 256, 224, 30, 8 )
        Wait( 15 )
        RunScript( 2, 15, 12 )
        Wait( 10 )
        RunScript( 2, 18, 12 )
        Wait( 10 )
        RunScriptSync( 2, 16, 12 )
        WindowSyncEx( 16, 3, 128, 137 )
        WindowSyncEx( 15, 1, 128, 138 )
        WindowSyncEx( 18, 2, 128, 139 )
        WindowSyncEx( 18, 2, 128, 140 )
        WindowSyncEx( 18, 2, 128, 141 )
        WindowSyncEx( 15, 1, 128, 142 )
        WindowSyncEx( 18, 2, 128, 143 )
        0xBD( 9, 2798 )
        Music1( 25089, 65535, 50 )
        Model2( 40960, 12, 128, 1 )
        Wait( 15 )
        WindowAsyncEx( 15, 1, 128, 144 )
        Wait( 45 )
        set VAR_B13_21 = 2059
        SetPartyReserve( VAR_B13_21 )
        RemoveParty( 0 )
        RemoveParty( 1 )
        RemoveParty( 2 )
        RemoveParty( 3 )
        RemoveParty( 4 )
        RemoveParty( 5 )
        RemoveParty( 9 )
        RemoveParty( 6 )
        RemoveParty( 10 )
        RemoveParty( 7 )
        RemoveParty( 11 )
        RemoveParty( 8 )
        set VAR_A6_147 = PartyAdd(11)
        set VAR_A6_147 = PartyAdd(0)
        set VAR_A6_147 = PartyAdd(1)
        set VAR_A6_147 = PartyAdd(3)
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1
        } else {
            set Setting_OptionalQuina = 0
        }
        if ( ( ( VAR_B13_19 >> 14 ) & 1 ) == 0 ) {
            SetCharacterData( 11, 1, 14, 21, 12 )
            set VAR_B13_19 |= 16384
            SetRow( 11, 1 )
        }
        SetHP( 11, 9999 )
        SetMP( 11, 999 )
        SetStatus( 11, 127 )
        if ( ( ( VAR_B13_19 >> 0 ) & 1 ) == 0 ) {
            SetCharacterData( 0, 1, 255, 9, 0 )
            set VAR_B13_19 |= 1
        }
        if ( ( ( VAR_B13_19 >> 3 ) & 1 ) == 0 ) {
            SetCharacterData( 3, 1, 255, 5, 3 )
            set VAR_B13_19 |= 8
        }
        if ( ( ( VAR_B13_19 >> 1 ) & 1 ) == 0 ) {
            SetCharacterData( 1, 1, 255, 5, 1 )
            set VAR_B13_19 |= 2
        }
        SetName( 11, 96 )
        set Setting_OptionalQuina = 0
        set Setting_DaggerDepresses = 0
        set Setting_MPx4 = 1
        Battle( 1, 303 )
        break
to
Code: [Select]
    case +0:
        MoveCamera( 160, 112, 1, 8 )
        Wait( 45 )
        MoveCamera( 256, 224, 30, 8 )
        Wait( 15 )
        RunScript( 2, 15, 12 )
        Wait( 10 )
        RunScript( 2, 18, 12 )
        Wait( 10 )
        RunScriptSync( 2, 16, 12 )
        WindowSyncEx( 16, 3, 128, 137 )
        WindowSyncEx( 15, 1, 128, 138 )
        WindowSyncEx( 18, 2, 128, 139 )
        WindowSyncEx( 18, 2, 128, 140 )
        WindowSyncEx( 18, 2, 128, 141 )
        WindowSyncEx( 15, 1, 128, 142 )
        WindowSyncEx( 18, 2, 128, 143 )
        0xBD( 9, 2798 )
        Music1( 25089, 65535, 50 )
        Model2( 40960, 12, 128, 1 )
        Wait( 15 )
        WindowAsyncEx( 15, 1, 128, 144 )
        Wait( 45 )
        set VAR_B13_21 = 2048
        SetPartyReserve( VAR_B13_21 )
        RemoveParty( 0 )
        RemoveParty( 1 )
        RemoveParty( 2 )
        RemoveParty( 3 )
        RemoveParty( 4 )
        RemoveParty( 5 )
        RemoveParty( 9 )
        RemoveParty( 6 )
        RemoveParty( 10 )
        RemoveParty( 7 )
        RemoveParty( 11 )
        RemoveParty( 8 )
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1
        } else {
            set Setting_OptionalQuina = 0
        }
        if ( ( ( VAR_B13_19 >> 14 ) & 1 ) == 0 ) {
            SetCharacterData( 11, 1, 14, 21, 12 )
            set VAR_B13_19 |= 16384
            SetRow( 11, 1 )
        }
        SetHP( 11, 9999 )
        SetMP( 11, 999 )
        SetStatus( 11, 127 )
        if ( ( ( VAR_B13_19 >> 0 ) & 1 ) == 0 ) {
            SetCharacterData( 0, 1, 255, 9, 0 )
            set VAR_B13_19 |= 1
        }
        if ( ( ( VAR_B13_19 >> 3 ) & 1 ) == 0 ) {
            SetCharacterData( 3, 1, 255, 5, 3 )
            set VAR_B13_19 |= 8
        }
        if ( ( ( VAR_B13_19 >> 1 ) & 1 ) == 0 ) {
            SetCharacterData( 1, 1, 255, 5, 1 )
            set VAR_B13_19 |= 2
        }
        set VAR_A6_147 = PartyAdd(11)
        set VAR_A6_147 = PartyAdd(0)
        set VAR_A6_147 = PartyAdd(1)
        set VAR_A6_147 = PartyAdd(3)
        SetName( 11, 96 )
        set Setting_OptionalQuina = 0
        set Setting_DaggerDepresses = 0
        set Setting_MPx4 = 1
        Battle( 1, 303 )
        break
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-09 17:33:02
Script edition for Freya LV1

Find field "Lindblum/Square" CD 1 -function -  Function Main_16 (there is two square areas at Lindblum you need business district's square)
Swap this part of script
Code: [Select]
        if ( GetTimerTime > 3 ) {
            if ( !VAR_B6_56 ) {
                set VAR_B13_21 = 17
                SetPartyReserve( VAR_B13_21 )
                set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                set VAR_B10_8 = 0
                while ( VAR_B10_8 <= 11 ) {
                    if ( IsInParty(VAR_B10_8) ) {
                        set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                    }
to
Code: [Select]
        if ( GetTimerTime > 3 ) {
            if ( !VAR_B6_56 ) {
                set VAR_B13_21 = 16
                SetPartyReserve( VAR_B13_21 )
                set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                set VAR_B10_8 = 0
                while ( VAR_B10_8 <= 11 ) {
                    if ( IsInParty(VAR_B10_8) ) {
                        set VAR_B10_10 |= ( 1 << VAR_B10_8 )

This script would work if only you will fight with Zaghnol during Hunting Festival

Otherwise you should edit other field script at "L. Castle/Conf. Room" - Function Main_Loop, but I didn't edit this script before and don't know could it cause glitches or not.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-09 17:57:19
Script edition for Quina LV1

Find field "Marsh/Pond" CD 1 - Function Main_Loop
Swap this part of script
This script edition would work if you take Quina on 1 CD after Hunter Festival before Gizamaluke if you will refuse join him to the party at Quans House
Code: [Select]
                        }
                        0xA9( -6 )
                        FadeFilter( 6, 24, VAR_B6_17, 255, 255, 255 )
                        Wait( 25 )
                        set VAR_B13_21 = 39
                        SetPartyReserve( VAR_B13_21 )
                        set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                        set VAR_B10_8 = 0
                        while ( VAR_B10_8 <= 11 ) {
                            if ( IsInParty(VAR_B10_8) ) {
                                set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                            }
to
Code: [Select]
                        }
                        0xA9( -6 )
                        FadeFilter( 6, 24, VAR_B6_17, 255, 255, 255 )
                        Wait( 25 )
                        set VAR_B13_21 = 32
                        SetPartyReserve( VAR_B13_21 )
                        set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                        set VAR_B10_8 = 0
                        while ( VAR_B10_8 <= 11 ) {
                            if ( IsInParty(VAR_B10_8) ) {
                                set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                            }

Find field "Marsh/Pond" CD 2 - Function Main_Loop
Swap this part of script
This script edition would work if you take Quina on 2 CD when you start searching the entrance to Fossil Roo if you will refuse join him to the party at Quans House
Code: [Select]
                            }
                            0xA9( -6 )
                            FadeFilter( 6, 24, VAR_B6_17, 255, 255, 255 )
                            Wait( 25 )
                            set VAR_B13_21 = 51
                            SetPartyReserve( VAR_B13_21 )
                            set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                            set VAR_B10_8 = 0
                            while ( VAR_B10_8 <= 11 ) {
                                if ( IsInParty(VAR_B10_8) ) {
                                    set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                                }
to
Code: [Select]
                            }
                            0xA9( -6 )
                            FadeFilter( 6, 24, VAR_B6_17, 255, 255, 255 )
                            Wait( 25 )
                            set VAR_B13_21 = 32
                            SetPartyReserve( VAR_B13_21 )
                            set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                            set VAR_B10_8 = 0
                            while ( VAR_B10_8 <= 11 ) {
                                if ( IsInParty(VAR_B10_8) ) {
                                    set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                                }

I gathered these scripts into one, and made them same for 1cd and 2cd.

The first script edition cause tiny glitch at displaying shops stats for party, if you come back to Lindblum before visiting Gizamaluke.
But don't worry glitch doesn't affect on game play and story line, it will fix after battle with Gizamaluke   


Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-09 18:20:23
Tirlititi
I have a question, and want ask you.
There is a script in the game for Dagger at field Evil Forest/Exit - Function Main_Loop
Code: [Select]
        LearnAbility( 2, 49 )
        LearnAbility( 2, 51 )
        LearnAbility( 2, 55 )
        LearnAbility( 2, 58 )
        LearnAbility( 2, 62 )
As I understood this code made for learning eidolons.

Where I can find script for unlearn eidolons on the CD2?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-02-09 18:56:29
There are two of them, for some reason. During the escape from Alexandria's Castle, the game unlearn those abilities both times Dagger is added to the party.

1st one (story-wise) is found in "A. Castle/Staircase" (1st one) at the end of "Zidane_Init".
2nd one is found in "A. Castle/Underground", still at the end of "Zidane_Init".

I also found one in Zidane's script of "Pinnacle Rocks/Path" (1st one), but I don't think it's ever ran because Zidane can't be controlled in these screens (judging from the "Main_Init" function, it would be ran if the player went in these screens before the Castle escape).

The setting about the eidolons' magic cost is redefined everytime the party is modified, but it's set to 0 the first time in the function "Main_19" of the field "Pinnacle Rocks/Hole" (this function runs once when the dialog with Ramuh is done ; it handles the screen change).

Thank you for the lvl1 scripts :)

@Dogshrapnel : I don't know for Iai Strike. It may be the accuracy that uses another formula. It may be to handle very specific effects ("Death" heals the target if it's under Zombie instead of adding the status for instance).
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-10 06:06:45
Tirlititi thank you for reply.
Final Fantasy IX realised on Android today.
Congratulations folk.

Tirlititi,  do you think it is possible to make Hades Workshop comparable with Android version of FFIX?
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Kivikaki on 2016-02-14 11:13:33
Tirlititi,  do you think it is possible to make Hades Workshop comparable with Android version of FFIX?

I'd like to know this too, because the Android Version looks gorgeous, but i'd really like to play it with some of the great mods that got released.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: gorildo on 2016-02-14 12:27:54
Tirlititi thank you for reply.
Final Fantasy IX realised on Android today.
Congratulations folk.

Tirlititi,  do you think it is possible to make Hades Workshop comparable with Android version of FFIX?

Thanks for the scripts. I believe the first time you meet Freya at the bar in Lindblum, when you get to the name screen, there isn't a script for setting her level right?

By the way, this new version is coming to PC eventually, but the REAL FF IX is on PS1  8-)
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-14 17:40:25
gorildo.
Yeah. You are right. There is no scripts for lv calculation at bar.
Perhaps,  I forgot about another Script edition for Quina LV1.
There might be  another script for modding. I will check it, and if I find it I will post it here.


Script edition for Quina LV1 part 2

Marsh/Master's House" CD 1 - Function Main_Loop
Swap this part of script
This script edition would work if you take Quina on 1 CD after Hunter Festival before Gizamaluke if you will join him to the party at Quans House
Code: [Select]
        }
        switch 2 ( GetDialogChoice ) from 0 {
        case +0:
            RunScript( 6, 12, 17 )
            RunScript( 6, 2, 18 )
            if ( Global_ScenarioCounter < 5690 ) {
                RunScriptSync( 6, 12, 19 )
                set VAR_B13_21 = 51
                SetPartyReserve( VAR_B13_21 )
                set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                set VAR_B10_8 = 0
                while ( VAR_B10_8 <= 11 ) {
                    if ( IsInParty(VAR_B10_8) ) {
                        set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                    }
to
Code: [Select]
        }
        switch 2 ( GetDialogChoice ) from 0 {
        case +0:
            RunScript( 6, 12, 17 )
            RunScript( 6, 2, 18 )
            if ( Global_ScenarioCounter < 5690 ) {
                RunScriptSync( 6, 12, 19 )
                set VAR_B13_21 = 32
                SetPartyReserve( VAR_B13_21 )
                set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                set VAR_B10_8 = 0
                while ( VAR_B10_8 <= 11 ) {
                    if ( IsInParty(VAR_B10_8) ) {
                        set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                    }

Find field "Marsh/Master's House" CD 2 - Function Main_Loop
Swap this part of script
This script edition would work if you take Quina on 2 CD when you start searching the entrance to Fossil Roo if you will join him to the party at Quans House
Code: [Select]
            } else {
                RunScriptSync( 6, 12, 20 )
                set VAR_B13_21 = 39
                SetPartyReserve( VAR_B13_21 )
                set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                set VAR_B10_8 = 0
                while ( VAR_B10_8 <= 11 ) {
                    if ( IsInParty(VAR_B10_8) ) {
                        set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                    }
to
Code: [Select]
            } else {
                RunScriptSync( 6, 12, 20 )
                set VAR_B13_21 = 32
                SetPartyReserve( VAR_B13_21 )
                set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
                set VAR_B10_8 = 0
                while ( VAR_B10_8 <= 11 ) {
                    if ( IsInParty(VAR_B10_8) ) {
                        set VAR_B10_10 |= ( 1 << VAR_B10_8 )
                    }
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-14 17:42:56
Unfortunately I have bad news, Android version has multiple bugs. Soon I will post several examples of bugs, what I found in the game.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: shikulja on 2016-02-18 20:22:29
Tirlititi, I added code to configuration, "RussianPirateRGR" appeared at Alphabet. I chose it. But bin file doesn't open as FF9 bin file. Could you check it yourself?

I have a question, if I will edit Spell animation, would it affect to enemies spell animations too or just foe parties spell animation?
Сконвертируй .bin в .iso например UltraISO. Поидее я так делал. ну или образ тем же UltraISO открой, и достать от туда FF9.img и уже его открывать в программе.
Кудос, хоть была плохая реализация, но зато переведено более живо. Я думал от туда шрифт от RGR вставить и текст переконвертировать под RGR формат таблицы, Но если заниматься, то в шрифте от RGR я тогда парочку косяков с тенью находил, и хотя бы упорядочить их.
Самая большая проблема пока что это импорт\экспорт  надеюсь Tirlititi все таки сделает.
хотя по мне самая важная вещь это увеличить количество букв под текст в PSX образе, к тому же я думаю версия steam далеко не всем понравиться. (мне например не понравились  upscaled  задники, еще со звуком не известно что будет)
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: Tirlititi on 2016-02-20 16:40:45
Update to v0.32 :
- Added a file batching feature ; it allows to extract or import a lot of things in 1 shot :
-- Can export/import texts and UI texts (see below for more informations about the importation process),
-- Can export scripts (no importation yet),
-- Can export field backgrounds.
- Added a Mod Manager tool ; it allows to define which datas should be overwritten when you save (using any of the 3 save methods). Its main purpose is to allow you to create a Mod file (.hws) from an already modded version of the game : just check all the features that differ from the original game.
- Improved the Dialog box automatic resizing. I didn't test it thoroughly, but from what I saw, it seems to calculate the box size for the best result (it always fits the default size when you don't change the text).
- Deciphered quiet a few script opcodes. Some of them have been slightly renamed ("WalkEx" -> "WalkXZY" for instance, for the opcode that makes a character walk to a destination given by 3 coordinates).
- Fixed some UI text opcodes ; it was not normal to have figures in the middle of some UI texts. The figures in battle's UI texts are normal though (it might be the display time of the text).
- Fixed a bug making global declaration always giving the same base variable slot when the base variable was not specified.
- Added Russian RGR charmap in the .conf file. Hades Workshop can't scan the translated version directly though ; I guess shikulja's post was about that ^^"


So, in order to properly import text files, you need some formatting :
The .txt file must start with the following line. Everything before that will be ignored :
Code: [Select]
#HW filetype TEXTFor UI texts, it must be this instead :
Code: [Select]
#HW filetype UITEXTAfter that, you need to specify to which text block corresponds your file using a line like this one :
Code: [Select]
#HW fileid [ID]replacing [ID] by the number corresponding to the text block in the following list :
Code: [Select]
0 : Generic UI
1 : Debug Room
2 : Prima Vista
3 : Alexandria Castle (1)
4 : Evil Forest
7 : Cleyra Trunk
8 : Ice Cavern
18 : Red Rose
22 : Lindblum Castle (Disc 2)
23 : Mist Gates
30 : Terra
31 : Mountain Path
32 : Conde Petie
33 : Alexandria (Disc 1)
37 : Black Mage Village (Disc 2/3)
38 : Mognet Central
40 : Ruined Prima Vista
42 : Quan's Dwelling
44 : Cleyra
47 : Dali
50 : Dali Underground
51 : Gizamaluke Grotto
52 : Bran Bal
53 : Observatory Mountain
63 : Cargo Ship
70 : Treno (Disc 2)
71 : Qu's Marsh
74 : South Gate
77 : Burmecia
88 : Alexandria Castle (3)
89 : Alexander
90 : Alexandria (Early Disc 3)
91 : Alexandria By Night
121 : Shrines
124 : Oeilvert
134 : Pinnacle Rocks
166 : Daguerreo
186 : Hilda Garde III
187 : Ending
189 : Invincible
223 : Treno & Supersoft
276 : Lindblum (Disc 1)
289 : Alexandria Castle (2)
290 : Stormless Cleyra
344 : Pandemonium
358 : Madain Sari (Disc 2/3)
359 : Gargan Roo
360 : Madain Sari (Disc 4)
361 : Fossil Roo
484 : Mount Gulug
485 : Occupied Lindblum
525 : Occupied Lindblum Castle
595 : Lindblum (Disc 3/4)
694 : Memoria
738 : Iifa Tree Roots
739 : Ipsen Castle
740 : Desert Palace
741 : Treno (Disc 3/4)
754 : Ruined Alexandria Castle
908 : Esto Gaza
943 : Lindblum Castle (Disc 3/4)
944 : Iifa Tree
945 : Chocobo Places
946 : Ruined Alexandria
1073 : Black Mage Village (Disc 4)
Then, before each text, you need to write a line :
Code: [Select]
#HW newtext [POS]replacing [POS] by the text's position in the text block.

If you used the "Export Text Block" feature, you only need to replace all the strings "// New Text :" by "#HW newtext" and add the right filetype and fileid at the start of the file.
I thought that it would be better to use "#HW" for the importation's syntax instead of just "//" because those slashs could be found inside the texts you'd want to import.

If you use the File Batching feature, everything is already formatted.

Note that you need to have texts with their opcode marks (the 'µ'). It'll throw a warning if the amount of µ mismatch from the default text's.
Also, dialog boxes can be automatically resized when you import your texts.



Fiou... Next version will likely be about making the program compatible with the Steam version. I don't know if I'll add an Android/iOS support but I don't think so. Steam version should allow to bypass the size limitations though ; I guess the priority after that will be about editing the backgrounds  8-)
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Blankamarant on 2016-02-20 21:58:10
Thank you very much for making such a wonderful tool, together with Memoria I feel again 11 years old playing FFIX  :-)

Update to v0.32 :
- Added a Mod Manager tool ; it allows to define which datas should be overwritten when you save (using any of the 3 save methods). Its main purpose is to allow you to create a Mod file (.hws) from an already modded version of the game : just check all the features that differ from the original game.

Question:
This means that it is possible to patch a patched game file with an other additional mod?
So for example I could patch the game file with the FFIX: Alternate Fantasy mod and then apply over it the modifications of God Save the Queen and Hidden Dialogs hacks?

Sorry if this is a stupid question or has been already addressed, I am using this tool since few days.

By the way, nice to see FFIX is out on PC and Android but still I prefer the original PS1 version.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Tirlititi on 2016-02-21 00:01:58
Thanks !

Well, there are the mods that are compatible between each others and those which are not.

Mods are compatible with each other if they don't modify the same aspect of the game. These could already be used together before that update ; you can just apply the .ppf patches one after the other.

Mods that are not compatible with each other likely change the same things in different manners. So they can't be applied both at the same time. However, with this update, it is indeed possible to choose what you take from each mod and mix them together.
You simply need to open the modded binary files (or use "Open Mod" if you have it in a .hws format) and check/uncheck things in the "Mod Manager" tool. Export them as .hws and then re-open a normal game file and apply all the .hws one after the other.

However, Hidden Dialogs is basically included in Alternate Fantasy so there's no need to mix them.
The other example you gave shows that you can't go in the details because God Save the Queen change 2 things : the items and the (synthesis) shops. If you do this method, you'll have to remove all the other items/shops modifications of Alternate Fantasy. It's better in this case to see how God Save the Queen is made and do the changes directly with the program.

Here are (from memory) what each mod modifies, to check compatibility :
Code: [Select]
Hidden Dialogs : Texts (Cleyra) and Field scripts.
God Save the Queen : Items and Shops.
Vir's mods : Items, Stats, Texts (for some typo mistakes), Spells (Thunder Slash), Enemies (only the Pandemonium trio and Tantarian for the forced exp, I think).
Unleashed : Spells, Stats, Items, Shops and Enemies. Maybe also Commands and Supporting Abilities (I don't remember that being changed).
Alternate Fantasy : All those plus World Maps, a few Fields and Spell Animations.
ATB Speedup : not something modifiable in HW. Compatible with everything else.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Vir on 2016-02-22 15:38:29
I think you were just speaking for example, but for our information, on top of what you mention my mod alters most active abilities and the stone price of most support abilities, characters, a few other monsters than the force exp (to make you fight proper dragons to up Dragon Crest), and text for that sort of thing in addition to fixing typos.

https://docs.google.com/spreadsheets/d/1bQaj0zRxfw6l-nkJRXMssWN9ZosvTZdpm_fVKEnaE0c/edit?pli=1#gid=330958072



I came by to say I'm all for being able to mod one or other of the new versions, esp. PC! Let me know if I could do something to help down that line.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: vivigix on 2016-02-25 07:52:57
These who hoping for compatibility of Hades Workshop with Android version. I have bad news, second cache file - patch.22.com.square_enix.FFIXww.android_googleplay.obb is encrypted with key.
I tried decrypt/extract files with WinRAR and 7Zip but it didn’t work out.
I searched for info in the internet how to decrypt encrypted files with key, but don’t find anything useful.

Currently I know this things:
1 . There is a tool named “JOBB” build in android sdk, with this tool we can decrypt encrypted obb files with key, but we still need the key and tool works under “cmd” what made it hard for use.
2. Cache of the game is 3 nearly Gb. Obb file cannot exceed 2 Gb limit, that is main reason why Final Fantasy’s cache consists of 2 files.
They are:    main.22.com.square_enix.FFIXww.android_googleplay.obb – 1.11 Gb
                   patch.22.com.square_enix.FFIXww.android_googleplay.obb – 1.92 Gb
3. Adaptation for Android and iOS developed under Unity 3D game engine, perhaps Steam version of the game also developing under Unity 3D.
4. The version for iOS size – 1.84 Gb and it isn’t encrypted with key, but it has different data structure.

If someone knows how extract encrypted obb files with key please send a massage.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-25 08:06:59
Сконвертируй .bin в .iso например UltraISO. Поидее я так делал. ну или образ тем же UltraISO открой, и достать от туда FF9.img и уже его открывать в программе.
Кудос, хоть была плохая реализация, но зато переведено более живо. Я думал от туда шрифт от RGR вставить и текст переконвертировать под RGR формат таблицы, Но если заниматься, то в шрифте от RGR я тогда парочку косяков с тенью находил, и хотя бы упорядочить их.
Самая большая проблема пока что это импорт\экспорт  надеюсь Tirlititi все таки сделает.
хотя по мне самая важная вещь это увеличить количество букв под текст в PSX образе, к тому же я думаю версия steam далеко не всем понравиться. (мне например не понравились  upscaled  задники, еще со звуком не известно что будет)

Я у него спрашивал о том что Hades Workshop не сканирует образы с переводом от RGR и не создает hwf файлы, на что получил ответ что по неизвестным причинам вышла такая ошибка в программе и легче заимствовать hwf от образов региона US и все пойдет.
В новой версии 0.32 появился импорт/экспорт.
Насчет количества букв в RGR версии ее увеличили до 30 символов вместо 26. В японской версии количество букв еще больше, в теории существует способ увеличить количество букв, но будет ли такой вариант совместим с Hades workshop не известно.
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: vivigix on 2016-02-25 08:11:23
Update to v0.32 :
- Added Russian RGR charmap in the .conf file. Hades Workshop can't scan the translated version directly though

Hades Workshop can't scan the translated version directly. Perhaps it is because of increased Charmap. RGR version has for 8 character more than original US vesion.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: gorildo on 2016-03-20 20:33:27
In the game, there are 4 mini figures, 3 of which you can pick up (Cid, Burmecia and Brahne). I always thought it was stupid that you couldn't pick up the last one, it just sits there in the Tantalus hideout. In the key items tab, there seems to be enough blank spots to fill one with the mini Prima Vista Theater Ship, but I had no luck trying to make a script to pick up the ship and give some random key item just to test it.

Do you think it's possible? Also, is there a text limit in the game? Would it be impossible to create an NPC, for example?
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Tirlititi on 2016-03-20 23:13:17
Yes it is possible to make the Mini-Prima Vista catchable.
1 ) Go edit Hideout's script and seek the functions "Theater_Ship_Miniature" (any one of those),
2 ) Right-click on the function's name and choose "Add" to add a new function related to Prima Vista's entry,
3 ) In the properties, let the Entry Type to 2 and change the Type to 3 (for a Speak button event),
4 ) Copy-paste the following script in the newly created function :
Code: [Select]
Function Theater_Ship_Miniature_SpeakBTN
    set VAR_GlobBool_158 = 0
    if ( VAR_GlobBool_159 == 1 ) {
        DisableMove(  )
        if ( VAR_GlobBool_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    0x27( 127 )
    HideObject( 255, 0 )
    SetTextVariable( 0, 326 )
    AddItem( 326, 1 )
    WindowSync( 7, 0, 61 )
    set VAR_GlobBool_158 = 1
    if ( VAR_GlobBool_159 == 1 ) {
        if ( VAR_GlobBool_156 == 0 ) {
            EnableMove(  )
            0x27( 255 )
            if ( VAR_GlobBool_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    TerminateEntry( 255 )
    return
5 ) Change the "326" figures to your item ID ; 326 is the ID of the first unused Key item so you may use that slot to create your Mini-Prima Vista as well,
6 ) Go to the "Main_Init" function : you need to make it so the Ship won't appear again upon re-entering the field. Change these lines :
Code: [Select]
    if ( VARL_GenBool_2419 == 1 ) {
        InitObject( 3, 0 )
    }
into these :
Code: [Select]
    if ( ( VARL_GenBool_2419 == 1 ) && ( GetItemCount(326) == 0 ) ) {
        InitObject( 3, 0 )
    }
7 ) There's no 7th step,
8 ) Profit !
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: gorildo on 2016-03-21 11:49:49
Nice! Thanks.

Unfortunately, the text space on those extra key items is minimal. I guess you could replace other key items only used in Disc 1 and 2. Any save files would still be compatible, there would be no difference. It's just flags telling you either got something or not, right?

One addition to the script, that nice sound when you get treasure, "Sound2( 53248, 108, 0, -128, 125 )", I put it right before " AddItem( 326, 1 " in the script, works fine. I assume the 108 is the ID of that sound, the other numbers are identical in chests script for example. Any idea what they are?

A simple tool for playing music/sfx inside HW would be cool to help identify those sounds. I wonder if there are any unused tracks or sfx in the game data.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Tirlititi on 2016-03-21 19:39:07
Congrats for the sound, I didn't think of it ^^
108 indeed seems to be the sound ID. I don't have a clue for the other arguments but I suppose you'd expect the volume, pitch and maybe delay to be parameters. I won't add a tool for playing sounds and musics simply because I would need to convert their format (they are so-called "AKAO files", from the sound programmer's name) and I don't know of it.

However, I may do a list to easily identify them. It's only a matter of testing there.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-24 03:27:29
Hey Tirlititi, first, brilliant work on HW so far. I've messed with it for a while, in a lurky fashion.

Second, I've done a lot of stuff with the file structure of FFIX... or at least enough to be familiar with what's where in a few cases.
That's where my question comes in:
Main character field models are stored globally on the disc... or at least separately from the models cached in the fields themselves.
With that in mind, I'm confused as to why I can't add Freya or Beatrix(characters who are in the party model folder) to the Preload list and load them up in script.
I understand with NPC models, as they're stored in the field itself.

The option to add models to the Preload list is present, but does nothing.
I guess my question most directly is "Is the preload list just a placeholder feature?"
Changing it doesn't actually do anything, except in the editor's internal memory?

Preloading an NPC from a different field, would obviously take a lot of work... but preloading a party member seemed like it should be something that works.
I'm just trying to find out if I'm misunderstanding something, or if the feature really does nothing at all yet.



On a slightly different note, do you have any theories (its listed as unknown, but I'm curious about conjecture) on what the second argument to SetModel does? the argument generally appears to be the same for party characters (that is, Zidane is usually given 93 as the second arg, and Vivi is given a different one, but its usually the same for the same character).

It occurs to me that the parameter might be a radius for the collision area, so models don't clip into each other.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Tirlititi on 2016-03-24 08:08:02
Thanks Satoh !

About preloading models, yes, that's kind of strange. The preloading list does exist in the game's data and you really modify it by adding another model. However, it seems to be not sufficient... It might have to do with this 2nd parameter though, as I don't have a clue about what it does. It might be what you say, but the Moogle on the World maps actually have a 200 value, which is quiet large if it's a collision size...
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-24 18:30:24
I did some testing, I have an answer on the second parameter of setModel.
It determined the height adjustment for message windows, the 'player is here' pointing cursor, and probably some other 2D UI elements.

That's why the moogle's is so high, it's already a flying model.
Incidentally, you see similar things in pigeons, which fluctuate between 93 and 37, which I assume is for the ones that fly versus sitting on the ground.

It also seems to affect the head's up and down tilt for head-look operations. When I set Zidane's to 255 his speech bubbles appeared nearly at the top of the screen, and he looks up into the sky instead of straight ahead when talking to Blank, who is about the same height, right in front of him.

Hope that helps in some way.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-03-27 10:10:42
This is very cool, love that you can edit the battle scene models. Will you make it possible to export and edit the character models too in the future? I was looking at the backgrounds and noticed some of them have animations, how exactly do these animations work. Are tiles being animated? I really wish I knew how they made those pre rendered backgrounds, it's so neat to be able to put unlimited amount of detail into an enviroment like that, I have tried to replicate it in various programs and it always ends up being a major hassle.

But looking at the backgrounds in this editor confuses me, anyone know how these work Textures on planes?

EDIT: I tried to add a sign to the first battle scene, when you fight the fat man. Exported the textures and the obj file then imported it into blender and added the sign, I edit one of the textures and applied that texture to the sign. Reimported it but it seemed to not work, is it even possible to edit the battle scene models/textures?

It broke, I see the parts of the texture is from my custom made texture but the uv's are messed up. I had a custom model but it seems to not have been loaded. I don't understand what the palettes are for, also there are so many texture slots, could anyone who understand how the scene editor works make a small video tutorial showing the process of replacing or editing the battle maps?
(http://i.imgur.com/Y7W2kUA.png)
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-27 17:50:28
HW doesn't truely need the option to export character models, as there are programs that do that already, and exporting them into a usable format would require a lot more effort than, say, making the preloading work.

In theory preloading would source a model and its animations from an existing field, and inject them into the archive that holds the field you're trying to change.

Which would of course be a complicated undertaking, but it wouldn't involve any format alteration. (I'm currently contemplating that issue myself)

That's not to speak for Tirlititi directly or anything. I'm just stating how I see it. There are more important features, and there's a lot of scripting opcodes which are indecipherable...

As for battle scene import, I think its likely that it doesn't work perfectly (as I said before, converting between model formats is no simple process), and possibly you may not have handled the textures correctly... I've never tried it myself. The textures the game uses are a specific 256 color palettized image format, so they can be recolored multiple times, while remaining very small on the disc. This means most images will not work, as they will be in raw 16million color formats.

Of course it's also just as likely that the feature is simply buggy, not for lack of effort, but just because PSX games are pretty strict about what they can and can't load, so any seemingly benign tweak may simply be impossible without better understanding the format.

Some games can only load vertices that fit in an area that is no more than 127 integer divisions away from 0 in any direction. Other games may go as high as 32767. It could simply be that whatever you tried to change, wasn't something the game could load, or possibly, wasn't something the conversion function could handle. There's a lot of possible points of failure with things like this.

It seems likely to me, that adding new vertices, probably won't work without first deleting an equal number from some other area in the scene, as well as counting triangles in the same way. The disc has limited space for storing these things (very very limited) The game also has specifics on what it can and can't do with UVs (some programs can't handle one vertex having multiple sets of UVs).

And as I said, you probably used the wrong kind of image.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-03-28 06:01:35
Yes I'm just an amateur, programming isn't my thing. I prefer creating stuff, so all this is really nothing I can comment on. But still I think it's a very nice tool you've made, mostly because you can see how they made the backgrounds, something I would be very interested in knowing. The elements that are being animated in the backgrounds seem to act like gifs. I don't understand the technical stuff of how the they made the backgrounds work.

As far as I understand it to not mess up the perspective on the backgrounds the camera is static and it's the background textures on the plane that is being animated as the character moves around? But what about the collison mesh, it's so confusing anyone who knows how they made that prerendered stuff work? I think it might be a lost art, unlimited detail in a background is something that with the higher resolution that games can be run in today could look really neat.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-28 08:07:39
First: I in no way intended to imply that I had anything to do with developing Hades Workshop. I'm just a technically minded guy who kinda understands how the game works.

Second, the backgrounds are static images, and there's a script function that replaces some of the tiles with other tiles stored in the same field map, waits a number of frames, and then replaces them with another tile. I don't comprehend 100% how that works yet, but I am quite certain I can spot it when I see it.

You're mostly right on how the camera works, except that it can be changed and moved in the game for specific things. There are a few scenes where the camera moves during a cutscene where the video replaces the background, like in the Evil Forest just after escaping Alexandria at the start of the game.
The camera also moves when looking at different angles of the same room in a map... this happens rarely, but is first seen when Baku (in a dragon mask) jumps from the door. That door is not a new room, just a different camera angle, with a different background image applied to it.

To properly comprehend how that works, I should explain that the walls of a map are actually determined by the shape of the floor... or in other words, you can walk anywhere there is floor, and you can't walk where there is no floor. This theoretical floor is called the walkmesh, and is a 3D model.... just an invisible one. You can actually view a map's walkmesh in HW by opening the script editor and switching the tabs down in the lower left corner.

I'm not sure on the practical side of replacing images, as I said I haven't tried it, but in theory, all you need to do is make a render or painting of the area you want to replace, cut out portions of that picture that need to layer on top of the character in the foreground, and probably some stuff with chopping the image into tiles... I don't think HW handles that yet... for the same reasons it doesn't do preloading models correctly: It would involve a lot of shuffling data around in a messy complicated way.
background images are stored as a collection of 16color palettized tiles that are 32x16 and there can be... I'm not sure exactly how many palettes for a full map. Part of me wants to say 32 per tile package... and some fields have multiple tile packages... The game is kind of a mess looking at it from a 'I want to make changes' standpoint. It was all done for hardware limitations of course, and it performs admirably as a game... but its certainly not user friendly for mods. I'm honestly astonished HW has so many working features.

About character models and such, most of that can be viewed by a program called noesis. You can look that up on your own, as I'm not totally sure how Qhimm handles that topic these days. Last time I came around it was kind of a hotbutton.

As for 'how they made the backgrounds' themselves... They did it in a 3D modeling program, put in loads of detail, rendered a high quality image, then shrunk it until it was small enough to fit in the game. No big mystery really. And actually, some of the stuff you see in the scene may actually be lower in actual quality than the models you see in realtime in modern games... even as old as early PS3 games. They only look nicer most of the time because you don't see them up close. A lot of them have really terrible texturing (there are a few original high definition renders floating around the internet, but only a few), but it looks nice enough when its pixelated. Its kind of like looking at 1990's 3D cartoons... they were amazing at the time, but you look back and realize how awful they really looked up close.

For an example of how the animated tiles work, you can look at Environment Tab > Field Tab > Prima Vista/Engine Room > Edit Script > Function Code1_Loop.
In Code1_loop you should see a number of SetTileAnimationFrame(...) calls. That's where I'd look to start understanding it.
It also helps to be able to run the game with the patch automatically loaded, rather than having to actually patch a copy of the game every time you edit something. I find frequently changing, exporting a PPF patch, and using an emulator that automatically loads the patch while running the game, is an effective way to learn how code works.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-03-28 11:40:11
Even on the PS4 today it would be difficult to achieve as much detail as is in this scene for example.
(http://i.imgur.com/NgD8NGF.jpg)
Rendered scenes today can look fairly realistic, look at this for example, digitally created.
(https://img-new.cgtrader.com/uploads/blog/large_9ff1f249-e5d4-4f13-9879-07f4ff7f3877.jpg)
Compare the two above to what the playstation 4 can do.
(https://i.ytimg.com/vi/AvEXgG04j_U/maxresdefault.jpg)
The thing with pre rendered backgrounds is that they don't even have to be rendered, they could be photos.
(http://www.wallpaperstunnel.com/wp-content/uploads/2016/03/Download-Landscape-Forest-Path-HD-Wallpapers.jpg)
Creating the pictures isn't hard, even animating parts of it isn't hard. I could easily make the branches in the photo above wave or have it rain or simulate a river. If the camera is static it wouldn't even be so hard creating a walkmesh and have a character run through the picture, you would have to know the lens the camera used but it could all be done fairly easily. For perfect accuracy you would ideally have to put out two paralell lines in the photo so you can figure out the perspective lines and where the vanishing points are.

The problem is understanding how the pictures are layered on top of each other and how the cameras are panning through the picture. As far as I know there is no engine that does this automatically today, what would be even more interesting than being able to rip out models and put them into the game again would be someone implementing a pre rendered background feature in unity or unreal or some other engine. This Hades program could maybe give hints on how to program such a feature?
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-28 18:00:58
Oh, I see, you want to replicate the functionality of FFIX, in another game engine?
I can respect that, I've wanted to do something similar for a while, but lack the experience to make a robust engine like FFIX.

I don't know that its exactly how FFIX does it, but the you can make a camera pan by altering the width and height and offset parameters of the frustum in any engine that lets you alter the camera matrix. This would keep the perspective vanishing point locked in one place,(in 3D) while moving the rendered image around on the screen.

Does that help?

As for the layering, unity allows for rendering layers, such that even if an object is behind another, it gets rendered later, and thus on top of everything else.
I suspect the hardest part about replicating FFIX in Unity would be the battle stuff.

As for using the models... that's a tricky subject. I have them, but because of the way they export, one model only supports one animation, so in order to use them one would need to export a duplicate of each model, for every animation. I'm strategizing how to get around that.

For now, I think the best option would be to try to work around the problems you might face in HW, as some cool things can be done with it, if not everything you might wish.

For example, beginning the game in the Festival of the Hunt (which is my pet project for HW. End goal: have a choice in playable character, more enemies and getting into scraps with the other participants.)
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-03-28 23:27:20
The rendered scene that would be moved around by the width and height offset parameteres would consist of several layers of background, also the "walk mesh" and the character would be in perspective, but how would those move around as the textures on the planes are panning around. I think this is by far the most difficult thing to do, harder than creating a battle system. No doubt they didn't use planes like in the image below when they made the FF games, they had figured out some easy pipeline for creating these backgrounds.

Something as simple as:
1. Setup camera
2. Place objects.
3. Render out scene.
4. Create walkmesh.
5. Send the stuff away to someone else who would put them into the game within 2 min with a few clicks.

There are other 3d objects in the scene other than the player too. I think creating those pre rendered backgrounds might be harder than a battle system. A static camera is easy, an animated camera that is lined up with the perspective of all the 3d elements in the scene, mind boggling. Good luck on your mods. ;)
(http://i897.photobucket.com/albums/ac172/DarkSpydaIV/UpdateII.jpg)
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-29 00:43:52
When the camera pans around a scene in FFIX, the camera position does not change. Only the edges of the frustum are altered. It's easy to manipulate cameras in that way in Blender, and the same kind of matrix is used in Unity, though it does require some scripting to alter the camera matrix in that way...but its not really difficult.

The background images aren't rendered anywhere in the scene at all, they're UI elements that have a layer number, which represents a 'distance from camera', and is used to determine when the image is rendered. Closer imaged to the camera get rendered later, so they appear on top of other images and objects.

What I'm trying to say is, its not as difficult as you seem to think it is. Unity already has all the functionality you'd need to do it, probably in only a small number of lines of code, using generous amounts of Camera.ScreenToWorldPoint(...)

You're thinking about the maps as though they're 3D scenes, when really the only 3D part about them is the walkmesh and character model. Everything else is done through 2D layering the same way as menus and speech windows.

As for the camera moving around the scene, it doesn't happen, except in a select few places, and that uses prerendered video with characters dropped on top of it. Those scenes don't support objects overlapping the character models at all, and you can see them actually in front of the foreground in some of those scenes, if only for a few frames, because of that limitation.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-03-29 01:10:43
But if not all of the walkmesh is seen in the camera view and you run to the right, the background image is scrolling but the walkmesh remains static or is it the walkmesh that moves around while the character is being static. Because when you reach the edge of the camera view and the walkmesh goes beyond the camera view, how are you suppose to see the character if he walks off camera. The walkmesh and the characters would have to "scroll" with the background picture no? I'm no doubt missing something.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-29 04:30:22
What I'm trying to say is, computers can render cameras "off center", which is to say, you can move the portion of what is being rendered around, without changing the focal point of the lens, only the edges what it sees. This is what FFIX does. (You'll note in a few places, the character models seem to stretch ever so slightly at different places in the map, that's because they're past the part of the camera lens that would normally be clipped off, and the perspective calculation has become unrealistically drastic....It's hard for me to describe it, but I may be able to show you with a picture.

(http://i.imgur.com/XjWSqYn.png)
Here we see two cameras. the pointed part on the bottom is where the camera is, and the rectangular part is 'what it can see'. On the left is a normal camera. Its focal point is directly in front of where it is in space, and what it can see is equal on the left and right of that focal point.
The right camera also has its focal point directly in front of it, but what it can see, has been shifted far off center, to the right, with anything to the left of the focal point being cut off completely, but much more being visible to the right of it.

(http://i.imgur.com/JckZ5bR.png)
Here we see the camera on the left, looking at a cube that is slight off center from it.

(http://i.imgur.com/E021mVg.png)
And here we see the what the camera on the right sees when looking at the cube from the same location and pointing in the same direction as the first.

Note that the cube looks exactly the same, but appears in a different region of the render area. This is because the camera's position and angle never moved. Only the edges of its periphery were changed.

You can imagine it like being able keep your eyes pointed forward, but shifting your brain's attention to the things in the corner of your eye, instead of what they're pointed at.

That's what I mean by "changing the frustum matrix"
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-03-29 05:10:02
Can the frustrum size be animated in blender, or do you have to animate the camera with scripts. Can the frustrum size track an object through the viewport. I want to try to recreate one of the pre rendered backgrounds in the blender game engine. Do you have the code or would it be difficult to type out?

We could use this as our background, since you can walk under that bridge it'll really sell the effect. Let me know if you could do the code, then I'll start recreating the walkmesh in sketchup and create an updated final fantasy character to run around in the scene. Because we're in a modern engine the character will be able to cast shadows, if you're interested let me know.

By the way I appreciate the explanation.
(http://i.imgur.com/aErJRKN.jpg)(http://i.imgur.com/jmkalFt.jpg)
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-03-29 08:16:07
I honestly don't know anything about the blender game engine. There is an addon that allows you to animate just about everything in blender, called AnimAll. Turn it on and you should be able to keyframe any property by hovering and pressing I. The property you want for the frustum will be in the Camera settings (with the camera itself selected that is, not the regular render settings) and its called "Shift" there will be one for X and one for Y. I don't know anything about object tracking. I know blender has it but I don't know if it has the features needed for FF style panning.

I honestly don't have the time to do any coding for it in either Unity or Blender though, otherwise I'd probably have shown an example... Also finally, lets not get too far off track, this is a thread for Hades Workshop.
Recreating the functional engine of FFIX would probably be best discussed in its own dedicated thread... though I've never had luck actually recruiting coders who had more experience than myself, which is probably what you'd need to do, if you don't know how to code...

Also, worth noting, FFIX for PC will be out soon enough, and may open the door for a lot more modding possibilities.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-04-02 16:56:50
Ok Hades related question, when I try to export the field backgrounds, I want to keep the layers but when I export the background it seems to only export half of the background. Shouldn't there be many tiff files that you could layer in photoshop.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Tirlititi on 2016-04-02 18:37:53
Thanks for the SetModel parameter Satoh, and for the interesting explanations ^^

Battle Scene importing (and even exporting) is not working well indeed. That's a part of the program I started a long time ago and I didn't got back fixing things there, mainly because they're quiet messy to begin with. Actually, I think the best I've ever done with that is exporting a scene, modify the position of 1 vertex and import back the model. The fact that it worked was a big success for me ^^"
I don't think you can use another amount of materials than the default one (and maybe you can't use another amount of vertices either).
Also, the exportation is partial because some scenes have animations (such as Trance Kuja's battle scene, where the crystal is seen floating behind him).

About the field backgrounds, you can export them :
1) Either one by one using the "Background: Manage" button and then "Export". This way, all the checked tile blocks will be exported as different layers of the .tiff image (unless you merge them). I don't know for Photoshop, but Gimp asks about using those layers as new images or using them as normal layers when I open the .tiff image with it.
2) Either by file batching. This way, all the tile blocks will be exported.

As Satoh said, field backgrounds are composed of tiles, which are 16x16 little images (potentially transparent). Those tiles are then packed into tile blocks, which is what you see in HW.

By the way, if you happen to know about image format and have an idea for a better one than .tiff, let me know ^^
.tiff seemed to me the most standard format that supports multiple layers, but if photoshop can't read them as layers, that's a problem.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Lein on 2016-04-03 04:29:34
Yes tiff doesn't seem to have any layers when you open it up in phtoshop. Might be a problem in the future if you'll ever make it possible for people to reimport pictures. But I doubt anyone will ever do that, you can't make the backgrounds higher resolution anyway. I'm trying to recreate the pre rendered effect in another engine and I thought I'd use one of the backgrounds from ff9, if I could export a character model from the game and it's animations too. I could basically recreate a scene exactly as it is from ff9. It's not a big deal, but if you want it to work you could maybe make it work somehow. ;)
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Satoh on 2016-04-04 01:21:18
Yes tiff doesn't seem to have any layers when you open it up in phtoshop. Might be a problem in the future if you'll ever make it possible for people to reimport pictures. But I doubt anyone will ever do that, you can't make the backgrounds higher resolution anyway. I'm trying to recreate the pre rendered effect in another engine and I thought I'd use one of the backgrounds from ff9, if I could export a character model from the game and it's animations too. I could basically recreate a scene exactly as it is from ff9. It's not a big deal, but if you want it to work you could maybe make it work somehow. ;)

I had every plan to reimport new backgrounds at some point. Not everyone cares about a higher resolution.
As I stated Lein, there are other programs that already export the character models and animations to usable formats.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Tirlititi on 2016-04-04 23:21:04
From my point of view, Photoshop is faulty there, cause I found the .tiff layer format in some official .tiff documentation. I don't see why Photoshop doesn't support that feature (as said, Gimp does).

Well then, since SE decided to keep the release of the Steam version for later, here is the v0.33 :
 - Added a MIPS editing feature. MIPS is the coding language shared by all the PSX games. It's the deepest level of game modifications and shouldn't be used carefree. More infos below.
 - You can now add and remove several things, so you don't need to recycle another item to create a new one :
 --- Add/Remove texts in text blocks and battles,
 --- Add/Remove enemy groups,
 --- Add/Remove enemy spells.
 - Completed the list of spell effects, though I only know the effect of "Defless" among the new ones : it unconditionally divides both defences by 2.
 - You can now use the field models of most of the playable characters. Indeed, the problem was that you don't only need to add the character's model in the preloading list, but also link it to a script's entry. The related "InitObject" call is a necessary step to preload the 3D model.
 - Added a background artwork image. It was made by Maxa' (http://maxa-art.deviantart.com/art/Hades-Workshop-598604129) and I'm really glad of it :D
(http://pre13.deviantart.net/be8f/th/pre/f/2016/084/8/a/hades__workshop_by_maxa_art-d9we5wh.jpg)

Here is the step-by-step method to use one of the playable character's model on the field :
1) In the target field's script, choose an object's entry. You'll replace that object by your playable character's model, so you need to choose one you won't use anymore. Modify the scripted events and whatever you want in that object's script ; don't touch the "Init" function yet.
Note : in some future version, you'll be able to add new entries, so you won't have to dummy one. You may also keep the old entry's script and thus use both objects (the old one + the new character's) using a trick : use a global variable and increment it in the object's "Init" function. This way, you'll be able to identify different instances of the same entry and give them different models. See the script of Linblum Soldiers in "Brahne's Fleet/Event" in disc 2 for an example of that system : there's only 1 entry for 2 different soldiers.
In any case, the important thing there is to note the chosen entry's ID (the number used in the related "InitObject" call).
2) Change the Preloading stuff of that field and add your character's model. Here is the list of the ones that can be used for now :
Code: [Select]
Vivi (8)
Dagger_Bis (76)
Zidane (98)
Dagger (185)
Freya (192)
Beatrix (204)
Quina (273)
Eiko (443)
Amarant (509)
Steiner (5489)
I don't think you can use battle models ; there seems to be a problem when using them.
When you add the model, you're asked for a number : enter the ID of the previously chosen entry.
If you don't have enough space, you need to remove some other object.
3) Return to the field's script and modify the "Init" function of your character's entry. Here are the different setups for the animations and sizes :
Code: [Select]
    // Vivi
    SetModel( 8, 61 )
    SetStandAnimation( 148 )
    SetWalkAnimation( 571 )
    SetRunAnimation( 419 )
    SetLeftAnimation( 917 )
    SetRightAnimation( 918 )
    SetObjectLogicalSize( 20, 30, 44 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 57 )

    // Dagger Bis
    SetModel( 76, 91 )
    SetStandAnimation( 2089 )
    SetWalkAnimation( 2086 )
    SetRunAnimation( 2091 )
    SetLeftAnimation( 2088 )
    SetRightAnimation( 2084 )
    SetObjectLogicalSize( 20, 26, 42 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 89, 4 )

    // Zidane
    SetModel( 98, 93 )
    SetStandAnimation( 200 )
    SetWalkAnimation( 25 )
    SetRunAnimation( 38 )
    SetLeftAnimation( 40 )
    SetRightAnimation( 41 )
    SetObjectLogicalSize( 20, 24, 40 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 97, 61 )

    // Dagger
    SetModel( 185, 91 )
    SetStandAnimation( 2089 )
    SetWalkAnimation( 2086 )
    SetRunAnimation( 2091 )
    SetLeftAnimation( 2088 )
    SetRightAnimation( 2084 )
    SetObjectLogicalSize( 20, 26, 42 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 89, 4 )

    // Freya
    SetModel( 192, 94 )
    SetStandAnimation( 2556 )
    SetWalkAnimation( 2553 )
    SetRunAnimation( 2558 )
    SetLeftAnimation( 2555 )
    SetRightAnimation( 2551 )
    SetObjectLogicalSize( 26, 34, 48 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 105, 53 )

    // Beatrix
    SetModel( 204, 100 )
    SetStandAnimation( 2978 )
    SetWalkAnimation( 2975 )
    SetRunAnimation( 2981 )
    SetLeftAnimation( 2980 )
    SetRightAnimation( 2974 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 104, 48 )

    // Quina
    SetModel( 273, 92 )
    SetStandAnimation( 3228 )
    SetWalkAnimation( 3237 )
    SetRunAnimation( 3230 )
    SetLeftAnimation( 3235 )
    SetRightAnimation( 3227 )
    SetObjectLogicalSize( 40, 48, 60 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 45 )

    // Eiko
    SetModel( 443, 63 )
    SetStandAnimation( 7503 )
    SetWalkAnimation( 7518 )
    SetRunAnimation( 7506 )
    SetLeftAnimation( 7516 )
    SetRightAnimation( 7514 )
    SetObjectLogicalSize( 20, 24, 38 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 5 )

    // Amarant
    SetModel( 509, 122 )
    SetStandAnimation( 8307 )
    SetWalkAnimation( 8316 )
    SetRunAnimation( 8312 )
    SetLeftAnimation( 8310 )
    SetRightAnimation( 8314 )
    SetObjectLogicalSize( 30, 35, 50 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 0 )

    // Steiner
    SetModel( 5489, 104 )
    SetStandAnimation( 2001 )
    SetWalkAnimation( 1996 )
    SetRunAnimation( 2005 )
    SetLeftAnimation( 1986 )
    SetRightAnimation( 2010 )
    SetObjectLogicalSize( 30, 35, 50 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 97, 32 )
You can unfortunatly only use those 5 animations each time. The other character animations are field-dependant.


Now, about MIPS.

The available MIPS code is the one from the battle system. Every time you're in battle, that's the code running in the background and processing everything. A convenient part of it handles the spell effects and that's the main modifiable thing for now. You can modify the different assembly-like instructions and they are displayed a bit more readably on the right. The spell effect scripts are called at the "Effect Point" of spell animations. Be sure to check the help ; though it is far from complete, it's still a first introduction to it.

Let's start with a relatively simple example : the effect of "Pure Damage". It consists of these lines.
Code: [Select]
$2 = $29[51] & 0xFF
nothing
$2 = $2 | 0x1
$29[51] = $2 & 0xFF
$4 = $17[8]
nothing
$3 = $4[5] & 0xFF
nothing
$2 = $3 << 1
$2 = $2 + $3
$2 = $2 << 3
$2 = $2 + $3
$3 = $4[7] & 0xFF
$2 = $2 << 2
jump 0xB4CC0
$3 = $3 + $2

// What lies at 0xB4CC0 :
jump 0xB7918
$29[54] = $3 & 0xFFFF
The $ things are placeholder for variables (RAM registries actually). There are 31 of them, most of which that have special purposes.
The brackets are used to retrieve or store a data from the memory. While non-brackets can be seen as temporary variables, for calculation purpose, the brackets ones are used to communicate with the whole system.

Let's get a closer look :
Code: [Select]
$2 = $29[51] & 0xFF
nothing
$2 = $2 | 0x1
$29[51] = $2 & 0xFF
These lines are adding the bitflag 0x1 to $29[51]. That "$29[51]" is a special data that will be used latter by the "jump 0xB7918" call. Note that a lot of spell effects (all I think) end with a "jump 0xB7918" call : it resolves the effect by applying the damage, the statuses, checking if the target should die or change state, run the "hit" animations, etc...
The bitflags "$29[51]" are flags about the effect on the target. The bitflag 0x1 is the one saying "This spell deals damage" so now all you have left to do is to set the amount of damage dealt.

The following lines :
Code: [Select]
$4 = $17[8]
nothing
$3 = $4[5] & 0xFF
nothing
are used to retrieve the spell's power. "$17[8]" is the casted spell's data offset and the 5th data is the spell power (its written in 8 bits, just like the "$29[51]" flags, hence the 0xFF). Now the variable $3 holds the spell power.

Next are those lines :
Code: [Select]
$2 = $3 << 1
$2 = $2 + $3
$2 = $2 << 3
$2 = $2 + $3
$2 = $2 << 2
You can translate them by "$2 = (($3 * 2 + $3) * 8 + $3) * 4" or, shortly, by "$2 = $3 * 100". Since the raw multiplications are slow operations (or were at the time), the devs prefered to use shifts and sums instead.
Next to it, there's also :
Code: [Select]
$3 = $4[7] & 0xFF
$3 = $3 + $2
$29[54] = $3 & 0xFFFF
The spell's accuracy is stored into $3, then added to $2  and stored into "$29[54]", which is the memory place where you need to store the damage number before the "0xB7918" call. Note that the line following a jump call is always executed before the jump actually occurs (there's a delay of one instruction).

To sum up, this code explicitely does that :
1) Add a flag "deals damage" to the effect,
2) Set the damage to 100 * Spell Power + Spell Accuracy,
3) Run the "Apply Effect" code (0xB7918 ; note that it can differ depending on your version of the game).

Check the help to have a list of useful known data addresses. You'll know how to retrieve data such as caster's or target's stats. If you're interested in modifying raw spell effects, I encourage you to check out how most simplest are done. Namely, you should check out these spell effects :
Minus Strike, Lucky Seven, Thievery, Frog Drop, Dragon Crest and Grudge (other "Pure Damage" like effects, with more complex damage formulas),
Defless, Absorb Magic/Strength (another effect than damage, but quiet simple),
Darkside, Drain and Osmose (damage/heal on the caster and use of the different flags),
Chakra (HP and MP heal, and also an example of an effect using a supporting ability),
Curse (change the elemental weakness of the target and display a special text. I suspect the element of the spell Curse to be specially randomized the same way that Roulette's target is randomized ; that's something specially handled by the battle script, but not at the "spell effect" place).

Note that there are a lot of "jump" calls that lead out of the spell effect's range - sometimes to another spell effect's function part, sometimes to another part of the battle script and even sometimes to another part of the RAM script, not battle-related -. You can try to guess what's their purpose (mainly : they do the standard damage and dodge calculations) and treat them as black boxes. You can also copy the address offset and paste it in the "Full Code" area to see the target code.

Since that's complicate even to understand the code (and even more to write one), I'll do samples of custom spell effects and post them here. If you have ideas, you can ask and I'll see if it's reasonably easy to make ^^"


Fiou, I hope some of you will find interests in this version. I'm both glad to be able to modify spell effects and disappointed to have it so complicated ^^"
By the way, to add to the masochism, that MIPS coding thing will surely be useless for the Steam version ; that's one of the first thing they'll have updated for sure.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: gorildo on 2016-04-05 16:21:44
Wow, amazing work with those MIPS codes, it must be possible to do some crazy stuff with it. As an idea for spell effects, is it possible to turn off EXP/Gil gain (like the Break spell) with the Death spell or make an enemy nontargetable while Petrified?

Also, do you think it would be possible to figure out the codes on the game mechanics, to permanently remove the damage limit or use a bigger integer for HP values? What purpose could there be to using just 16 bits for that?

By the way, it's cool that you can add spells now, but then you must manually edit each enemy script. It would be nice to have some samples of scripts for casting a spell randomly or under certain conditions. But that would take a lot of space along with the other scripts, and this thread is getting crazy big. We need somewhere to collect and organize those scripts.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Lein on 2016-04-05 18:08:31
Something that my little brother would appreciate would be a much harder version of ff9. That's something I think you guys should start working on, harder bosses and enemies.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Satoh on 2016-04-06 03:15:16
This brings me a significant step closer to the kind of mods I wanted to make! Awesome, Tirlititi. I didn't expect the model loading to be done so quickly.

I'm curious as to where you found the model IDs (Zidane 98, Beatrix 204). One of my end goals would be to archive all of the NPC models in the same spot as the player models. Hexediting can do that of course, but it won't mean much unless I can begin to understand how the models are organized and labeled.

The models themselves don't seem to have a label anywhere... or not one I've found.

EDIT:
I do realize adding more things to the player model archive with push other data somewhere else on the disc, meaning I'd have to modify HW to look in a new place for it too. But the question is still 'how to better understand why those models are different'
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: froggy25 on 2016-04-06 15:36:42
Excellent job for the MIPS editor, I'll be sure to use it someday :P
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Tirlititi on 2016-04-06 17:26:09
Thanks Froggy. I'll implement the Tetra Master MIPS code someday, since you documented pretty much everything important about it already ^^
But it was tedious enough to implement only the battle code, so I've let that be for another version.

@ Lein : Yeah, someone should totally do that x)
Actually, there are already several (difficulty) mods. I don't think someone will ever bother to make a mod even more difficult than Unleashed.

@ Satoh : I've a list of all the cluster datas and I can easily check the objects' ID. That way I know which model IDs are field-dependant and which are not. For naming them, I looked at the game's script and listed them when I could identify them (there are still a lot of unnamed model IDs btw). I don't think they have any label indeed.

@ gorildo : About manually editing the enemy script, I'm afraid that can't be avoided. Maybe I'll add a few macros that will automatically generate some standard code (Squaresoft's devs had some) but that's not for now.

About what can be edited using MIPS code...
1) Making the max HP a data using more than 16 bits : no you can't. I mean, it would require huge changes and not only in the battle MIPS code but also in the other MIPS codes, not to mention messing up the data tables for enemies and updating all the codes refering to one of the enemy's stats. Besides, you can already kind of increase the HP limit by healing the enemies when they reach a certain limit (http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426).
2) Removing the damage limit : actually, you see that Pure Damage's formulas cap the damage to 9999. If you remove these lines (change them to "nothing" for instance), you can deal more than 9999 damage in one shoot. However, the damage display won't follow and you will still see the 9999 figures, even though the actual damage are more than that. I don't know how it is possible to make the display works properly for that :/
3) Make an enemy non-targetable : it's surely possible, but not easily and not in the "Spell Effect" part of the MIPS code. One would need to search through the full code to see if and where the targeting is handled and add a check for petrified foes. Not possible without a harsh work.
4) Disable reward for Death-dealt enemies : I don't know. That's surely the easiest thing to do, but it depends on how the rewards are calculated. I know that the Exp gain is updated everytime an enemy dies (it's not calculated in 1 shoot at the end of the battle), so maybe you just need to avoid updating that figure if the enemy dies from a Death spell. That's a bit further than the Spell Effect part of the code, though.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Satoh on 2016-04-07 21:03:56
@ Satoh : I've a list of all the cluster datas and I can easily check the objects' ID. That way I know which model IDs are field-dependant and which are not. For naming them, I looked at the game's script and listed them when I could identify them (there are still a lot of unnamed model IDs btw). I don't think they have any label indeed.
It is strange that they would use the same index to refer to each model every time, when they are in different places in each field's data. It seems like there must be a master list somewhere that tells the game why [192] is Freya and [74] is Erin...

Also, there seems to be a problem with adding new preloads to a field in some cases. For example, adding a preload to the list in Lindblum Shopping Area, breaks the model loading in Lindblum Church Area. Adding two causes the game to break altogether with an error of [unknown opcode 0x3F]

Second:
I don't understand what preload list does to the data, but I suspect it may be overwriting part of the RAM or ROM data from the other field. You may want to add a size check and warning/error if this happens. Just a suggestion.
Title: Re: [FF9] General editor - Hades Workshop (0.32)
Post by: Kefka on 2016-04-07 21:10:18
Well then, since SE decided to keep the release of the Steam version for later, here is the v0.33 :
 - Added a MIPS editing feature. MIPS is the coding language shared by all the PSX games. It's the deepest level of game modifications and shouldn't be used carefree. More infos below.
 - You can now add and remove several things, so you don't need to recycle another item to create a new one :
 --- Add/Remove texts in text blocks and battles,
 --- Add/Remove enemy groups,
 --- Add/Remove enemy spells.

Wow, I'm not checking the thread for a couple days, and look what I missed! Amazing update man, I'll be sure to check it out immediately! Adding in additional enemy spells was something I've craved to do for a long time now.

Quote
- Completed the list of spell effects, though I only know the effect of "Defless" among the new ones : it unconditionally divides both defences by 2.

Now this is a very interesting new ability, kinda like Steiner's Armor Break and Mental Break combined, right? And more reliable than LV3-Defless because the reduction is not random. I'll make sure to put this new skill to good use. I've always liked the idea of certain enemies having either pretty high defense (Adamantoise, Iron Giant, enemies made of stone) or magic defense (magical creatures like Agares, Goblin Mage,Magic Vice, all types of Black Mages and such), thus requiring you to use debuffs as a tactical combat element before you can truly hurt them. Likewise, certain enemies should be able to do the same to you, adding another twist to battles.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Tirlititi on 2016-04-08 15:22:57
It is strange that they would use the same index to refer to each model every time, when they are in different places in each field's data. It seems like there must be a master list somewhere that tells the game why [192] is Freya and [74] is Erin...
Not necessarily. It may be some ID chosen by Square's compiler. It was decided which index refers to which model at the game's compilation time and the "master list" doesn't exist anymore.

Also, there seems to be a problem with adding new preloads to a field in some cases. For example, adding a preload to the list in Lindblum Shopping Area, breaks the model loading in Lindblum Church Area. Adding two causes the game to break altogether with an error of [unknown opcode 0x3F]
Arf, that's a problem of Hades Workshop then, not of the game's preloading datas.
There was a bug like this in the past and I thought I solved it, but it seems I didn't. I'll check and fix that bug.

@ Kefka : Yes, that's like Steiner's abilities, but the main difference (besides the fact it reduces both defences) is that it can never miss.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Satoh on 2016-04-09 08:18:41
if it helps, Tirlititi, to reproduce the error, I added Beatrix and then Freya to the preload list in [Lindblum Shopping Area], and after that, even if I remove them again, the game presents an unknown opcode error immediately after starting a new game.

With only Beatrix added, the game made the player object disappear in [Lindblum Church Area]. No changed were ever made directly to [Lindblum Church Area].
Both Freya and Beatrix were loaded into [function_Zidane] index in [Lindblum Shopping Area], and the Zidane_init code was changed to Beatrix's appropriate animation and model IDs.

I don't think I changed any other data anywhere near that part of the game.

How many models can the preload list hold? I think the game supports up to 0x25 individual function calls (I read that somewhere in a hacking note related to a codebreaker code)
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Kefka on 2016-04-09 11:56:03
Those MIPS codes sure look interesting, although quite complicated, and I honestly can't quite make sense of them right now. Does that allow one to basically modify all of the damage formulas in the game? If so, then the first one I'd like to change is Tonberry's Grudge, which has the basic formula:

Damage = 4^(number of Tonberries killed)

Now that damage formula is very awkward in my eyes: The first time you encounter Tonberries it will be all but useless because you haven't killed any Tonberries yet, so it will always deal 0 damage. However, once you've won 2-3 battles against them, they'll start wrecking you, as that formula ensures you'll take 9999 damage once you've killed at least 7 Tonberries. Even 6 dead Tonberries result in 4096 damage, which will more than likely be too much to handle for your average party at this point in the game.

I was thinking of changing the formula to:

Damage = Number of enemies killed by that party member * 10

as it is used in most other FF games. This would result in a more stable damage range for a longer time. However, I'm unsure of how to do that or if it's even possible to make the game count every enemy killed. It would depend on how the game counts the number of killed Tonberries (does it look for the enemy ID each time an enemy dies to check if it's a Tonberry?).

It's also questionable if the number of kills of each party member individually is even counted at all, seeing as even Freya's Dragon Crest simply counts the total number of dragons killed, not just the ones killed by Freya herself. So I'm kinda sceptical about my plan, but hey, maybe someone surprises me by finding a solution?

By the way, nice new artwork for the main page of HW, fits perfectly!
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Tirlititi on 2016-04-09 13:46:02
The counter for Tonberries is not the same as the counter for dragons or steals. You can see the counter increase in Tonberries' AI.

At battle initialization :
Code: [Select]
            if ( !General_TonberryCounter ) {
                set General_TonberryCounter = 1
            }
When a Tonberry dies :
Code: [Select]
        if ( General_TonberryCounter < 254 ) {
            set General_TonberryCounter += 2
        }

The MIPS code, by itself, use the formula :
Damage = 1 << (General_TonberryCounter - 1)
or, equivalently
Damage = 2 ^ (General_TonberryCounter - 1)

That formula is meant for Tonberry's spell only, not for a party's spell, since you encounter Tonberries only at Ipsen's Castle and not that frequently.

Here is a MIPS code that change the damage formula to :
Damage = General_TonberryCounter * Spell Power
              = (2 * NbTonberryKilled + 1) * Spell Power

Code: [Select]
0xB771C: $2 = 32776 << 16
0xB7720: $4 = $2 + 44784
0xB7724: $3 = $4[192] & 0xFF
0xB7728: $2 = $17[8]
0xB772C: $2 = $2[5] & 0xFF
0xB7730: $LO = $2 * $3
0xB7734: $2 = $LO
0xB7738: jump 0xB7748
0xB773C: if ($2 < 10000) $1 = 1 else $1 = 0
0xB7740: jump 0xB7918                                    // Offset of "Apply Effect"
0xB7744: $29[54] = $2 & 0xFFFF
0xB7748: if ($1 != $0), jump 0xB7754
0xB774C: $1 = $29[51] & 0xFF
0xB7750: $2 = $0 + 9999
0xB7754: $1 = $1 | 0x1
0xB7758: jump 0xB7740
0xB775C: $29[51] = $1 & 0xFFFF
On the left part, it looks like this :
Code: [Select]
lui 2 32776
addiu 4 2 44784
lbu 3 4 192
lw 2 17 8
lbu 2 2 5
multu 2 3
mflo 2
j 187858
sltiu 2 10000 1
j 187974
sh 29 54 2
bne 1 0 2
lbu 1 29 51
addiu 2 0 9999
ori 1 1 1
j 187856
sh 29 51 1
I've let the lines "jump 0xB7918" and "$29[54] = $2 & 0xFFFF" untouched because they are used by other spell effects, such as Frog Drop. Because of that, the code fits dead on the allowed space of Grudge's spell effect.

If you use a non-US version, you need to adjust the jump offsets.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Cacahuete on 2016-04-09 15:27:57
Wow Thank you a lot Tirlititi for all this incredible stuff!
I'm amazed with how much work you put into this... seriously, great work!

I've been working on a fighting module, and I have found out there is a "problem" when you add some status effect to most weapons:
when I try to add some status effect to a weapon which originally had none, it just won't work. I guessed it is because weapons don't just use the field from the "status effect" but also some kind of percentage which varies on each weapon (for example, poison knuckles has originally a 40% chance to inflict poison, while avenger has a 5% chance of causing death), and that these weapons I've been trying to change must have a 0% rate of inflicting the status effect.

Am I right when I think this way? If that's the case, do you see this being improved any time soon? I've also been thinking that it might be possible through battle scripting but I know almost nothing about scripting and this seems to be quite a callenge for me.

I've also been searching how the Healing Rod works(so it heals instead of dealing damage), but found nothing. Is this some extra feature inherent to all weapons but only used with this Rod? (Since there is the Healer ability I know this feature may have little use... but I was trying to create some kick ass Rackets that could only heal you and cast some beneffit effects while attacking (: )

And since I've already wrote a lot I'd like to ask if is there any possibility (among the game standards) to make items cast negative values... like a piece that could lower your Magic stat, for instance.


Well, congratulations once again to you and all the people who helped you. I know I've come out with some issues on which you might haven't even thought, but the priority remains in thanking you for making all this possible, I love to see Dagger wearing a dagger, Vivi with a deadly claw... FF9 is my favourite game in the world and the only thing I got to find boring were the repetitive, sometimes meaningless, battles. If I accomplish this changes in a satisfactory manner I hope to show you all what I've been working on!
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: gledson999 on 2016-04-09 19:09:10
Congratulation for this excellent tool, Tirlititi, one question:

Is possible enable beatrix in the group, without replace or swap any character?
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Kefka on 2016-04-09 21:36:45
The counter for Tonberries is not the same as the counter for dragons or steals. You can see the counter increase in Tonberries' AI.

At battle initialization :
Code: [Select]
            if ( !General_TonberryCounter ) {
                set General_TonberryCounter = 1
            }
When a Tonberry dies :
Code: [Select]
        if ( General_TonberryCounter < 254 ) {
            set General_TonberryCounter += 2
        }

Thanks for the quick reply. So this means that I could in theory have the game count every defeated enemy by simply adding that code into the AI scripts of all enemies, right? However, doing that manually for hundreds of AIs would be VERY tedious... I guess I'll try out your suggestion instead.

However, tirlititi, I've just noticed a different problem: it seems that the newest version reads some offsets of the German version incorrectly. In disc1, everything looks fine, but on discs 2-4, there are several panels that show rubbish, even when loading the unmodified vanilla game. As an example, here's acomparison of disc 1 (how it should be) and discs 2-4:

(http://oi63.tinypic.com/24vlflc.jpg)     (http://oi66.tinypic.com/afj1n5.jpg)

(http://oi67.tinypic.com/2din9jb.jpg)(http://oi68.tinypic.com/2z8avev.jpg)

In all 3 discs, its the same panels that are affected: Items, Key Items, Spells, Commands, and Stats (even though in the Spells and Items sections the names are not off, only their description texts). Do you have any idea what's going on or how to fix it?
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Tirlititi on 2016-04-10 12:59:44
Ahah, another version full of bugs, I missed them ^^"

@ Cacahuete : You're assuming right ! I don't know how I did to miss that field, but there's indeed a number for the status accuracy. You'll be able to change it in the next version. And weapons without statuses (plus thief swords) have a status accuracy of 0% as you thought.
About the healing rod's feature, however, I can't find it and it may be hardcoded in the battle code... It doesn't seem to be in the weapon's data.

@ gledson : It's coming closer ^^ For now, you can only add her to the party without adding dialogs or explanation to that (gameshark-style).
Once I find a way to add her properly in the party and verify it works bug-free, I'll add infos and an example in the 1st post of this topic.

@ Kefka : About the enemy counter, there might be a way. There's a counter for dragon-type enemies killed so maybe there's also a counter for all the enemies killed. There might be counters for the other monster types, which could be used as an estimate of the enemy killed amount, but seeing the data offsets (1384 for Frog catching, 1386 for successful steals and 1388 for dragon-type kills) I wouldn't bet those counters exist. It needs investigations...

About the text offsets, I just tried the disc 1 and 3 of the german version and it worked perfectly :/
I'm afraid your discs 2-4 are not really vanilla games. I don't think that can happen, but tell me if you verify the fact that it was non-modified and it still doesn't work.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: gorildo on 2016-04-10 13:59:10
I'm aware of that "hack" to make the enemy have more than 65k HP, it's just that it would be a more "elegant" solution.

1- By the way, seeing how people are interested in changing parties and stuff (Beatrix) I was wondering if it is actually possible to have more than 8 characters at any time. Probably not, but if it were, it would be fun to also have Blank, Marcus and Cinna (there's a portrait of him in the game, but he has no victory pose and I think the game crashes because of it).

2- Speaking of characters, is it possible to enable Zidane to be switched in the party change screen? It would be stupid to have his model walking everywhere but not have him in battle, but I suppose some patience editing scripts could fix that too.

3- When I last tried changing the number of opponents in a group, it didn't work so well.  :-P I believe this feature still doesn't work, any idea how to fix it?

4- Do you think it would be eventually possible to edit and reuse spell animations without having them screw everything up? Hooray for casting Ultima.  ;D

5- Now this one is just about those useless things for compulsive FFIX fans. In the Lindblum castle, in that room you go through to get to the bedroom w/ the moogle, there is a stair where you meet the sailor Erin. I forgot what is the name of the room in the Fields list, I'm on my linux partition right now, but there is an animation of the stair moving, which is never triggered in the game. Is there a switch to get it moving?
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Cacahuete on 2016-04-10 17:51:01
Thanks a lot for the quick reply Tirlititi! I'll be looking forward the new version then! :D

I've been trying to get how does the "Soul blade" technique checks your weapon, but gave up haha  those mips codes seem sweet but by now it's too much for me ^^U  thanks for checking the Healing Rod thing, guess I'll try again to track its effect next time I get some "serius" free time.

You didn't answer about those "negative" stats I asked though... guess it will be difficult to get there without some scripting knowledge since the game is clearly not thought to count on values lower than 0 for the main stats.

Well, thanks a bunch!! I'll be arround to see how it keeps going!

Btw it feels so good having Tetra Master on Hades!
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Tirlititi on 2016-04-10 23:32:27
@ gorildo :
1 - It's possible to add up to 9 characters in the team selection menu. Zidane, Vivi, Dagger, Steiner, Freya and Beatrix + 3 others (not all of them because of compatibility). If you want Cinna, Marcus and Blank, you'll have to remove Quina, Eiko and Amarant for that.
Also, I don't know where you have been told that Cinna had no victory pose. That's false (http://finalfantasy.wikia.com/wiki/Cinna#Gallery) ^^

2 - Yes it is possible. It requires changing the script of all the fields where you are given the choice to change team (Hildaguard 3 and Invincible mainly), but that's not an hard modification. Search for the line "Party( 4, 1 )" and change it to "Party( 4, 0 )". This way, Zidane won't be locked anymore. Those lines can surely be found (I didn't verify but I'm quiet confident) :
- in the Hildaguard 3, it should be in one of the Sailor's functions (not Erin, the other one), perhaps in the SpeakBTN function,
- in the Invincible, it should be in one of the non-model related functions, that is either a "Code" function or a "Region" function.

3 - You also need to modify script there. You only need to change the "Main_Init" function of the enemy's script. If, by default, you have a "switch ( GetBattleGroupId )" line, you can mimic the script there and adjust it to your group set. Else replace the "InitObject" functions by such a switch (with several cases and the "InitObject" inside each case). It looks like this :
Code: [Select]
Function Main_Init
    switch 5 ( GetBattleGroupId ) from 0 {
    case +0:
        InitObject( 1, 128 )
        break
    case +1:
        InitObject( 1, 128 )
        InitObject( 1, 129 )
        break
    case +2:
        InitObject( 1, 128 )
        InitObject( 2, 129 )
        break
    case +3:
        InitObject( 2, 128 )
        break
    case +4:
        InitObject( 2, 128 )
        InitObject( 2, 129 )
        break
    }
    return

4 - Besides Ultima, I don't really know what kind of bugs you're talking about ^^"
There are a bunch of animations with problems when you try to use them for some other purpose than their default one, but that's quiet specific to each one. There's not an unique answer for all of them.
For Ultima, it is not possible to fix the bug and it won't be as long as the spell animation edition stays at its current state. I'll eventually complete that part, but that's not in my nearest projects.

5 - That's a script thing again. There are several solutions for this one, but a good start would be to follow Satoh's advice and look for some code concerning the tile animations (he gave the example of "Prima Vista/Engine Room > Function Code1_Loop").
You should also display the function list and search for the "TileAnimation" functions : that's the ones handling this kind of thing.
For the movements of the characters on the stairs, you should use some "Slide" function, though it won't be easy to make the whole thing stands (you'll need to practice scripting a bit for that :p ).


@ Cacahuete : Ah, I forgot for the negative stats. But as you think, it'd be difficult, even with scripting knowledge. Besides, I don't know if the code calculating the character's stats by the mean of his equipment's stats can be found in the battle script. It may be a code present in another part of the game's datas (as said, there are other MIPS codes in the game : one for the Tetra Master, one for the Field's code, one for the menus... even the PSX bios has a MIPS code). And even if that code was present in the battle MIPS script, there would be a duplicate for the menu's script and you can't access to it so the player would never see the negative effect.

However, since I'd bet on the existence of such a code that calculates the character's stats, I think it can be feasible to implement that feature once we know where it is located. That's not like the HP change that would require huge changes scattered all over the scripts.

I don't understand the Sould Blade effect yet myself (as well as the other status-inflicting effects actually). I just watched at the Physical attack effects and I'll document about them. But the main problem is that the offsets of jumps are highly version-dependant and I don't see a neat way to speak of them.
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Kefka on 2016-04-11 14:59:52
About the text offsets, I just tried the disc 1 and 3 of the german version and it worked perfectly :/
I'm afraid your discs 2-4 are not really vanilla games. I don't think that can happen, but tell me if you verify the fact that it was non-modified and it still doesn't work.

I got it working now by simply deleting the old configuration files and having Hades Workshop create completely new ones. I remember that I had a similar issue with older versions of HW some time ago, and it could be solved just like that.

However, I'm having problems using the new feature of adding/removing enemy attacks. When I try adding 2-3 new enemy attacks, HW crashes pretty often. Has this happened to others, too? Is there a limit as to how many attacks can be in one attack list? Is it a question of available space for each enemy entry?
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: id104335409 on 2016-04-14 12:28:24
Soooo, I'm back. I've been here before in 2011. Why am I here? Because Square Enix finally launched Final Fantasy 9 for PC in the Steam store. Minutes after that CODEX hackers distributed a torrent (naturally). Sooooo, FF9 is on PC now.. Will there be a Hades Workshop for the PC version?
Title: Re: [FF9] General editor - Hades Workshop (0.33)
Post by: Tirlititi on 2016-04-14 13:45:35
Update to v0.33b. It fixes the bugs :
 - The preloading list no longer bypass its size limit,
 - Adding an enemy spell now works fine : it sometimes didn't copy properly the animation sequence,
 - MIPS instructions sometimes created 2 number controls for the same registry ID ; it doesn't do that anymore,
 - Added a few fields to weapon modifications, mainly the status accuracy.

I don't know what's the purpose of the other added weapon fields... I modified them and saw no change in-game but I've let them in case someone figure that out.

Working on making the tool compatible with the Steam version next.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: eXistenZe on 2016-04-14 15:10:47
Steam compatibility would be awesome.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Kefka on 2016-04-14 21:31:11
Thanks for the update, adding enemy spells works perfectly fine now. Indeed, many newly added attacks had no animation sequence, and it was impossible to add one later. Glad to know I wasn't the only one with that problem.
Title: FF9 PC version Released on STEAM
Post by: Lyrithus on 2016-04-16 16:13:18
There has been a release for ff9 on steam for the pc. Could Hades Workshop be adapted for it? or at the least, a tool exactly like it that can do the same things?
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Lyrithus on 2016-04-16 16:14:53
ignore my last post, Tirlititi is already working on it!!!!! WOOO HOOOOO
Title: Path of Souls - by Chronoslither
Post by: Lyrithus on 2016-04-16 16:49:32
https://www.youtube.com/watch?v=pOQkp4YIAGc        <<  the link to the demo video
http://www.insanedifficulty.com/board/index.php?/topic/5412-testers-wanted-final-fantasy-9-path-of-souls-edition-formerly-remix/                << link to the mod and changes

I would Love for this mod to be applied to all four disks. but i have no idea how to do this, althought i know how to use the workshop, i feel its impossible to note or write down all of the disk one changes, and then try to apply them manually 1 by 1 to the other disks. and i couldnt apply the same patch to the other disks, that doesnt work.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Satoh on 2016-04-21 07:46:50
Tirlititi do you have any idea how much flexibility there is in changing the size of a field script? (That is, mow many more instructions can be added to a script before it gets corrupted)

There has to be some limit in theory. Some scripts are already nightmarishly long, and I'm afraid to hazard increasing them with things like switches. (Since my goal tends toward having a choice of characters to play on a lot of different maps, that means changing the preloads on many, and adding switches in place of what would normally be init_Zidane.

I suppose there may be some clever way I could store an array of information at the start, and call up whatever the value is that way... but I'd have to know where there's free space in RAM... and probably a lot of it...
I suppose I should also ask if there's a way to find unused RAM, or a global list of known RAM positions that should never be touched or something.
Those might be useful to have.

Good luck with the Steam port.

EDIT:
Unknown weapon flag 1 (the one left of Ignore Row), is seemingly a [Melee] flag--meaning it explains whether the weapon is ranged or not. It seems to work in correlation to the [Ignore Row] flag.
I have not yet tested the effects of this. It could be damage related, statistical, pseudo-elemental (as in, this attack counts as magic, or something) or something else entirely. I can confirm though, that on disk 1 any weapon that has one flag set, does not have the other.

Still pondering the 4th flag and the two mystery values. I think the two unknown integers are likely 4 unknown bytes, just by the correlation in the ranges I'm seeing. They always tend to be greater than 0x0100, meaning the 0x01 part may be part of a different value altogether.
This is just speculation, but maybe it'll give you an idea you didn't have already. *shrug*
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-04-23 22:31:23
Thanks Satoh, but the unknown integers are displayed properly ; the values are too round to be 2 splitted numbers and the Steam code source name them "offsets" (as signed shorts).

There are usually sufficient free space to add a bit of code (in general, a good big entry would fit in). The problem is that the exact free space is quiet random and can indeed cause trouble if you need to add some constant code to all the scripts ; there are surely several for which you'll be unlucky and there won't be enough space... For now, and for long, the only solution will be to be inventive and grab some space elsewhere in the script (either by shortening the code, either by cutting unneeded lines).
The length by itself will never "corrupt" the script. You'll get bugs if the script that you added is in conflict with the normal script (or if you do things like dividing by 0 :evil: ), but that's all.

It would be really useful to have a list of unused variables, indeed. I know there are a few gaps in the "chest-opened" flags, but I don't know if there are large ranges of unused (and memory card-saved) variables. I don't have time to investigate it for the moment though :/

I updated my Hidden Dialogs (https://www.youtube.com/watch?v=paxguJo6AqA) video with the Steam version ; t'was a good practice to see what problems arise with the Steam version when trying to import the modification patterns from the PSX version.

I have a clearer idea of how Hades Workshop could be made compatible with the Steam version now. Don't expect it to come out before 2 weeks (that's my target time, but I know from experience I always pass it because of technical problems I didn't expect ^^"). You won't be able to use the most basic features of HW with the Steam version at the beginning. Oddly enough, the modification of party's spells and items will be more difficult than the enemies spells and AI, or Field scripts.

EDIT : I've had even more technical difficulties than I thought, and I'm just at the stage of reading datas (after that, I'll need to create modded files). And overall, I'm fed up of this steam version...
I'll definitely make a compatibility update next, but it'll take more time than expected.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Satoh on 2016-04-24 09:21:28
I don't know if it helps or is new information to you, but as the steam version is built from Unity, the Mono disassembler in Cheat Engine can crack open what appears to be the full code library in use by the game... I've yet to decipher exactly how to get at the runtime values of the variables and code I found there.

Also, the character models and world map data are stored in the streaming assets/p0data* files. Had only moderate success handling them since those files seem to be a slightly modified form of the Unity raw asset packages, rather than a normal use which could easily be unpacked and repacked at will.

It seems like the UI stuff is in the maindata, resources.assets, and sharedassets.assets files inside [x86|x64]/ff9_data folder.

All in all, once the mono code is figured out, I wouldn't be surprised if the steam version was 10x more moddable, immediately. (Since everything would be coded in one place, in assembled C# from the look of it.)

Welp. I hope that's useful. This is all just outside my normal range of modding skill, but fascinating nonetheless.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-05-06 04:07:19
Hey so how is the Steam compatibility coming along? I can't wait to dig into it so I can Change party members :D
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-05-06 22:14:42
Hum... here is my progress so far (expect a bunch of errors terminating the program when you look at it) :
HadesWorkshop_ProgressVersion (http://forums.qhimm.com/index.php?topic=14315.msg241705#msg241705)

- I've made some file mapping about the assets and all.
- Most of the texts are readed (the accent/ponctuation errors, I'll take care of it soon ; the opcodes will remain displayed like this for a moment).
- Several Chunk datas are readed (enemy stats and scripts).

[UPDATE 16/05] : Link updated. It can now read Fields, World Maps and Tetra Master related datas. The field background are messed up because I need to find out how the tiles are sorted.
[UPDATE 21/05] : Link updated. It can now read all the datas except MIPS code, Battle Scenes and Spell animations (shared ones ; the enemies' ones can be seen).

Needless to say you can't have a practical use for this version ^^"
Even the PSX files won't be loaded correctly for the time I do the compatibility changes.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-05-08 13:18:33
Awesome thank you for the feed back bud, I wish there was something I could do to help you with this...Also when I tried opening HW just now i got this error.
"This program can't start because wxmsw30u_core_gcc471TDM.dll is missing from your computer. Try reinstalling to fix this problem."
What is that? Can't even google it.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Fraggoso on 2016-05-08 17:14:58
I also receive that error message (and also 4 times with another DLL which is missing).
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: vivigix on 2016-05-09 00:22:58
uzoko1, Fraggoso you should place HadesWorkshop_ProgressVersion.exe in Hades Workshop 33b version folder, there wxmsw30u_core_gcc471TDM.dll file located and other dlls, and program will run.
Tirlititi, I tried open bins in assets folder, but program creashes every time when I am trying open any file named p0data. Perhaps I am doing something wrong. What file can open HadesWorkshop_ProgressVersion?
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-05-09 07:21:37
Open the Launcher.exe file. You're not supposed to know in which file whichever data is : the program does it for you ^^"

I don't put the .dll inside the download link to avoid potential misunderstandings. This is not a working version of the tool, only a way to respond to the "how the progression goes" question by a sample.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Fraggoso on 2016-05-09 20:35:00
uzoko1, Fraggoso you should place HadesWorkshop_ProgressVersion.exe in Hades Workshop 33b version folder, there wxmsw30u_core_gcc471TDM.dll file located and other dlls, and program will run.
Tirlititi, I tried open bins in assets folder, but program creashes every time when I am trying open any file named p0data. Perhaps I am doing something wrong. What file can open HadesWorkshop_ProgressVersion?

Thanks for that and also thanks for Tirlititi to point out that you need to open the launcher.exe ^_^
Seem preatty good so far. Random crashes here and there, but that should be obviouse. ^^
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-05-11 01:31:38
HadesWorkshop 33B version where is that at??? Sorry if I am being blind.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Kefka on 2016-05-11 16:34:49
HadesWorkshop 33B version where is that at??? Sorry if I am being blind.

At the front page of the thread, the big bold "Hades Workshop" right above the list of older versions.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-05-18 22:00:02
Okay so what things are we able to really do right now? I can't alter the scripts in the Field menu of enviornments cuz Hades will just shut down on me. Can I change skills still? Sorry if you said this before, but I am reading and confused haha.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-05-18 22:30:37
Needless to say you can't have a practical use for this version
It seems it was needed in the end...
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-05-20 08:23:10
What do you mean bud? Also how is the hades workshop coming along?
EDIT: Also if I was to configure everything on the old Hades and you get the new one up and running, will I be able to transfer the modded on onto that?
And to add onto that, any key new features that may appear in the new one for steam because it will open a lot more than the psx ver.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-05-21 10:11:43
@uzoko1 : That means you can't mod the game with this version of HW. Only see the datas (and enjoy the program's crashes :p ).
About transferring mods from the PSX version to the Steam version : yes it will be possible minus a few things :
1) MIPS code and Battle Scene model changes won't be importable,
2) Maybe the Spell Animations won't be either for the first versions,
3) All the texts will likely be in that case as well (moreover, Steam's datas have 7 different languages ; you'll need to modify the texts in each one to have a proper mod),
4) It might be that the script importation will be buggy, as there is also 1 script per language. Though they are mostly the same among the different versions, there are few differences (the only one I noticed is the Ragtime Mouse's way of talking : in the US, the dialogs are split in 2 windows while in the french version, the dialogs are in a 2-lines window).

Also, I hope to have more features for the Steam version. Most of the data size limitations will be removed in the next release (they'll still be there for the PSX versions). Later, I think I'll add an IL code modifier looking like the PSX's MIPS code and an Unity Archive editor, to have something a bit more adapted to FF9's assets files.


I updated the WIP link ; most of the datas can be properly viewed now (the field scripts can sometimes crash the program... I think it's a RAM capacity problem, but that's kinda weird). The field backgrounds and texts are still badly displayed.

I'm also planning to create a github project for this, as it's getting bigger and bigger. I'll finish that version first, but tell me if you're interested in coding the tool with me.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-05-21 13:13:44
I am definitely interested in coding, but as you know through our emails, i am no pro...but I also can donate to you if you actually need money for this project, unless its absolutely free, just time consuming. I of course want to be able to do at least these 2 things as soon as things get working: Add and remove people to the party, as you know my Blank, and also be able to allow them to hold whatever they want, I would allow Zidane to hold spears and swords. So those things are the major things I would love to get working personally. Other than that idk what you would want me to help with or how to start. You also know my email, I have been checking constantly everyday these forums and my email for updates about HW, this is all I want, I love FFIX.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-05-22 06:22:30
Also, I am working on the epsxe ver again, For the Evil Forest, I am setting Blank in, how do I set the pluto Blank again? Another question, For the first boss fight, how can I code them into there? it keeps "hard coding" steiner into the battle and no one else. Any ideas? I know it can be done cuz ive seen on youtube but idk how :/
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: froggy25 on 2016-05-29 14:24:11
I'll be sure to contribute if you create a GitHub project for hw :)
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-06-04 09:26:18
Tirlititi have you given up on the mod too...? You haven't been on in a while...
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Pelig on 2016-06-07 19:27:23
Tirlititi have you given up on the mod too...? You haven't been on in a while...

I hope he's still working on it. I'm waiting the steam version of HW sooo much.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: IzzacSturnburg on 2016-06-08 15:34:58
I hope he's still working on it. I'm waiting the steam version of HW sooo much.

He might have some life things to do, so I'll be patient. Doing the same stuff for long periods of time will burn out a person. So I completely understand.

He will come back to it eventually sometime.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Pelig on 2016-06-08 21:42:09
Sure, his life things have priority. No doubt.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-06-09 17:22:37
Actually, I do have an important work to do in the following month and I neglected it too much, so I won't work on HW for some time (unless there's a incredibly bad bug that can be fixed without too much effort).

Also, I lost my magic stick that makes modding games a piece o' cake  :'(

I let another WIP here, more interesting though, cause you can mod a bunch of things with it. I call it a beta release, because there will be much more bugs than usual.

Link removed ; the program has been updated in the first post

Special Warnings

Everything else should work fine, unless it is disabled, like MIPS code edition. Also, contrary to the last WIP, it should still work after a SquareEnix update.

Saving Instructions
As said, you have to backup your files yourself. The program reads a "FF9_Launcher.exe" file and ask you a folder where you want to save your modded files. In any case, never choose the folder in which the selected "FF9_Launcher.exe" lies, either create a new folder either save it in a folder containing another "FF9_Launcher.exe".

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

In any case, a 3rd backup is not a bad idea, unless you don't mind downloading the game again in case of problems.

For the wisest of you, I'll see you when I release a stable version  :P
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: IzzacSturnburg on 2016-06-09 18:05:26
Heeey nice move there Tir, That should keep people composed awhile on the wait. Sorry to hear you lost your magic stick, hopefully you find it.  Thank's for the beta release and your time. Can't wait to see it evolve in the future.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Albeoris on 2016-06-11 00:53:46
Good job! Do you change Assembly-CSharp.dll? If you don't - yes, you can apply Memoria after HW. But items and abilities data will be loaded from external CSV-tables. Otherwise, you get a checksum error.
Any ideas about integration? (:
https://github.com/Albeoris/Memoria
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: itoikenza on 2016-06-13 00:30:13
Tirlititi i can't figure out scripts. I took a look and couldn't find Starting inventory in Cargo Room/Prima Vista's script. can you show me what it looks like? it looks too much like code to me. i wish it were menu driven, but oh! well!  Finally, You said before that changing starting equips, makes the game glitch up. Is this true for psx or just steam. Now REALLY finally, can Blank,Cinna, & Marcus be given Beatrix's moveset? and Beatrix's moveset be given support abilities? Heck! even the equip ability option be enabled for her?
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-06-13 01:07:21
All of what you said is possible, even making their movesets completely customizable, except marcus bugs at treno with garnet. Problem is, as far as I know on HW I cannot get the equip for beatrix or the other 3 to be available and all skills are automatically learned..That is what I have ran into and I have no fix to it.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: itoikenza on 2016-06-13 01:12:12
oh? Marcus bugs? I can do without starting equips and custom abilities, then. Forget that! Now I wanna have a few items available from the beginning in inventory. Can you help. Tirlititi told me it's in the script, for Cargo Room/Prima Vista.

Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-06-13 07:35:31
I didn't say it was in the script (it's not). I said that it was easy to write lines in the code to replace them :
Code: [Select]
    RemoveItem( 236, 7 )
    RemoveItem( 237, 2 )
    RemoveItem( 238, 2 )
    RemoveItem( 240, 2 )
    RemoveItem( 247, 2 )
    RemoveItem( 249, 1 )
    RemoveItem( 253, 1 )
    AddItem( .... )
Put them in the main function of the first Prima Vista's Cargo Room, it's fine (out of any "if" block).

The starting equipements are in the "Party -> Stats" panel, search harder :p

As for temporary characters' abilities, uzoko stated the problem : the game doesn't allow the Supporting Abilities menu to be enabled for temporary characters. A fix for that would require to modify the equip menu's MIPS code (which is not accessible using HW yet).

Here is the fix to have Beatrix & co equip supporting abilities using an hex-editor :
1) Search for the hexadecimal sequence : 00 00 00 00 01 00 42 2c 21 28 40 00 21 20 80 02
2) The following bytes should be something like 8c d2 00 0c     (the 00 0c is important ; the 8c d2 is an offset and changes from disc to disc)
3) Replace those 4 bytes by 01 00 02 20
4) Repeat for all the discs

This allows all temporary characters to get in their "Equip Abilities" menu. However, they still automatically learn any supporting abilities you give to them (I think you'd have to corrupt the memory card saving process to fix that). Also, a few tooltips will be wrong in-game (when you press "Select" on the "Equip Abilities", the moogle tells you that you can't use them ; and the 3-stars mastery icon is not displayed on supporting abilities).
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: itoikenza on 2016-06-13 11:25:34
Thanks, Now i saw something about how if one were to link Dagger's Eidolons & Beatrix's Seiken, one would get 12 free slots to put spells anywhere? is this still true?
Here's the quote:
- Commands spell lists are also limited. You may link 2 commands to increase the limit (they would share the same spells). White Magic and White Magic+ are linked by default, as well as Black Magic and Black Magic+ but you can link Dagger's eidolons (trance and normal) and the 2 Beatrix Seikens (dunno why there is 2 of them) so you win 12 spells to put anywhere for free.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-06-13 15:25:41
[...] you can link Dagger's eidolons (trance and normal) and the 2 Beatrix Seikens (dunno why there is 2 of them) [...]

How many commands am I describing here?

No, linking Dagger's commands with Beatrix's commands is not a good idea. And yes, what I said about linking Dagger's summoning commands together and linking Beatrix's Seikens together to gain 12 spell slots still holds.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: uzoko1 on 2016-06-25 03:40:38
Hey any updates on HW for steam? I have been trying to work with Alberos on his thing, but I love your layout much better haha.
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: GARDIN on 2016-06-28 18:27:35
there is a special issue for stream HadesWorkshop_beta But the problem if you ran the program then the program shut down Then if you tried to open the game ff9  through a program HadesWorkshop_beta will not be able Except If deleted a file (hwf) and here download hades work shop beta for stream    http://forums.qhimm.com/index.php?topic=14315.msg241705#msg241705
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Tirlititi on 2016-07-22 19:57:28
This is the day !

Update to v0.34 :
 - Hades Workshop is now compatible with the Steam version of the game.

You can also use the .hws files created by HW for a PSX file and apply it to the Steam version.

Pretty much everything has been tested and works fine. However, there are the following limitations :
 - MIPS code and Battle Scenes models can't be modified,
- The battle scene of the different battles can't be changed,
 - Text opcodes are displayed raw ; that's not so different from the text tags you can find in any forum,
 - The texts may be imported from a .hws file created for the PSX version, but that's not recommended as the opcodes are not handled,
 - The fields' preloading datas are not the same as for the PSX and can't be imported,
 - Contrary to the PSX version, the spell lists in the "Command" and the "Stats" panels must match (if a character has a command, he must be able to learn all the spells inside it). The exceptions are the temporary characters' commands and Steiner's Sword Magic which don't need to be learnable,
 - The two unused item shops can't be used for now,
 - There's some bug with the fields : I think that's a RAM problem, as fields need a lot of memory to be read. If you look at too many fields without closing/reopening the program, it will likely crash. Same problem for the background batching : you shouldn't be able to export all the background images in one shot.

I write the saving instructions again as they are still valid.

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

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

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

In any case, a 3rd backup is not a bad idea, unless you don't mind downloading the game again in case of problems.

About texts
The support for texts (in the Steam version) is quiet minimal, as the formatting is displayed as it is in the game's files. In particular, you have to write the size of the text box yourself in the 【STRT】 tag when needed, as well as the hexadecimal code to add color, etc...
As said, you shouldn't import the texts from PSX-saved .hws (just unckeck the related boxes), as only the text will be imported and the opcodes will be lost. This is particulary important for text blocks as the game bugs if the texts there don't start by the 【STRT】 tag.

The text preview window doesn't display the opcodes' effect either for now.

Also, there's a special UI text block, called "Localization", which contains generic texts of all the languages available. I let you guess how to properly modify them, but know only that the texts here must be single-line (use the escape character '\n' if you want to add a new line). Also, the format is so easy that the devs themselves messed up with it and there are a few help texts that don't work the intended way :p (I'm thinking of the "OrderTargetHelp" field, which doesn't work in languages other than english and japanese).

About localization
You're asked to choose language when you open the game files. In general, your mod will work only for the chosen language.
More precisely, there are files that are shared by all the languages and files that are not. In this second category, there are all the texts, off course, but also the game's script (AI of enemies, World Map scripts and Field scripts). If you either change a text or a script, it will be ok only for the chosen language.

Handling several languages at once will surely be possible in the future.


What's next?
I'll upload the program's source code on github and create a community project for that. I'll also import my mod Alternate Fantasy to Steam. Don't hesitate to ask if you have troubles importing your own mod to Steam.

I also have a project idea of a Boss-rush mode. It's an idea I've had since a long time, but the 4 discs of the PSX and the preloading system was problematic.

I'll also soon improve a bit the script editor (again) and allow to add entries (and not just functions) ; you'll then have full control over the NPC and so a real mod including Beatrix as a playable character (consistent story-wise) will become possible.
A CIL code editor, similar to the MIPS editor, is also planned. I don't think I'll implement a "CIL <-> C Sharp" converter, but since there are other tools doing that, it'll undoubtly be more simple and more efficient to use.

Fiou, I think I said everything I wanted... Enjoy and see you soon !  8)

EDIT : I forgot to say that there's no check about the file access rights. Verify that HW has the write to read and/or write the files you're manipulating with it or it may crash (or worse, it may bug without telling you anything !).
Title: Re: [FF9] General editor - Hades Workshop (0.33b)
Post by: Vir on 2016-07-22 21:08:39
Congratulations, Tirlititi, and thanks!
Title: Re: [FF9] General editor - Hades Workshop (0.34)
Post by: Pelig on 2016-07-23 08:55:52
Best day of my life ;)
Title: Re: [FF9] General editor - Hades Workshop (0.34)
Post by: vivigix on 2016-07-23 16:54:05
Thank you very much for your job, Tirlitity!!!!!

I have a questions. Are limitations still works? I mean 192 spells total and 48 ability slots for one character or now we can exceed them?
Title: Re: [FF9] General editor - Hades Workshop (0.34)
Post by: Tirlititi on 2016-07-23 17:51:22
The limitations of texts, scripts, number of enemy attacks or groups are no more.
The others are still there. The ones you're talking about are hardcoded in the game, and I mean really hard coded. It would require to rewrite a big part of the game's engine and the game's script to change these numbers. I don't think that'll ever be possible :/
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Gine on 2016-07-24 16:57:08
I'm very glad that it works very well even in thai language.

A big thanks to you. :)
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-07-24 16:59:29
You're welcome, Gine :)

Update to v0.34b :
- Fixed the crash that occured sometimes when you are writing texts or when you use incomplete tags,
- Fixed a bug with the .hws saving of item texts, resulting in loss of data inside the .hws,
- Fixed a crash when editing the preferences (they are not useful for the Steam version yet however),
- Fixed various other minor bug,
- You can now add/remove script entries, thus NPC on the field.

When adding/removing entries, the script will be updated so that functions still refer to the right entries. If an entry is deleted but was still used in the script (if it was initialized in the "Main" function, for instance), the reference changes to the "Main" entry and a warning will be prompted.

So, how do you handle NPCs and the PC with this?

A model on the field is linked to an entry. I will only discuss of the case when there is only 1 model per entry, but using the UID, one can have several models on the field handled by only one entry.
An entry linked to a model must be of type 2 and initialized with an "InitObject" call in the main function.

To create a new NPC (not for Beatrix, see below), you must create a new entry for it. In the field panel, choose "Edit Entries" and add a new one with the entry type 2. By default, the created entry will have the ID number 1 (and the entries that were already there are displaced except for the Main entry). Its ID is its position in the list.

Then, to create functions for this NPC, choose "Edit Script", right-click on the list in the left, then "Add", then choose the created entry and set the function type to a number depending on the function's purpose (let the mouse on the "Function Type" field to have a list of specially handled function types).

It can have several useful functions.
1) The Init function
This is the one defining the object's 3D model as well as its position on the field, animations and such... A standard Init function looks like this for an object's entry :
Code: [Select]
Function ManA_Init
    set VAR_B10_0 = 58
    set VAR_B10_4 = 65163
    set VAR_B10_6 = 192
    set VAR_B10_2 = 65518
    SetModel( 111, 100 )
    CreateObject( VAR_B10_0, VAR_B10_4 )
    TurnInstant( VAR_B10_6 )
    SetStandAnimation( 555 )
    SetWalkAnimation( 599 )
    SetRunAnimation( 598 )
    SetLeftAnimation( 597 )
    SetRightAnimation( 601 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 64, 1 )
    EnableHeadFocus( 0 )
    SetObjectLogicalSize( 1, 40, 150 )
    return
The first numbers are the object's initial position (the coordinates X, Y, the facing angle and then the Z coordinate respectively). For the "SetModel" code, a list of known model IDs is available ; note that the model gives its name to the entry, so the model 111 is "ManA".
Unlike the PSX version, the Steam version can use any model any time. The animations, however, must match with the model. As there is no list of animations yet (if you want to help doing one, that would be cool ^^), you'll have to grab the animation ID from other field scripts, where you know that the animations you seek are used.
It seems that there's no need to add the animation in the "Preload" list of the field. I don't actually know that list's purpose then.

2) The SpeakBTN function
This one is executed when the player approches the model and speaks to him. A standard SpeakBTN function looks like this :
Code: [Select]
Function ManA_SpeakBTN
    ifnot ( IsMovementEnabled ) {
        return
    }
    set VAR_A6_158 = 0
    if ( VAR_A6_159 == 1 ) {
        DisableMove(  )
        if ( VAR_A6_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    0x27( 127 )
    TurnTowardObject( 250, 32 )
    WaitTurn(  )
    WindowSync( 0, 128, 199 )
    set VAR_A6_158 = 1
    if ( VAR_A6_159 == 1 ) {
        if ( VAR_A6_156 == 0 ) {
            EnableMove(  )
            0x27( 255 )
            if ( VAR_A6_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    return
If the player is in a cutscene, we don't want him to be able to speak with the NPC that he's facing, thus the "IsMovementEnabled" check. The following 10 lines are standard for everytime the game removes the control from the player, and the last ones are their counterpart to give it back. The "TurnTowardObject( 250, 32 )" forces the NPC to face the player's character, and the "WindowSync" displays a bubble of dialog.

The same kind of function can be made with the CardBTN function but using a "TetraMaster" line of code instead of the "WindowSync" line. For chests, the SpeakBTN function is perfect to allow the player opening the chest and taking the item inside.

3) The other functions
The other functions are used for the rest of the NPC's behavior. The Loop function often ends by the two following lines.
Code: [Select]
Wait(1)
loop
Which means that the function is executed every frame. There's a Range function that runs when the player's character comes in range of the NPC but don't necessarily speaks to him.
And all other, numbered, functions can be used by the previous ones or by other part of the field's script. They may be used for a tiny part of a cutscene, or a special movement such as a jump, non synchronised dialog (ie. dialog bubbles that are displayed while the player still has the control on his character), or one-time walks...
Note that the cutscene scripts are often writen in a Loop function :
- Either the Main_Loop function is used, manage the cutscene's progression and calls parts of the NPC's script,
- Either the Loop functions of NPC and/or PC are used and comunicate with each other using variables.

NPC models corresponding to a Party's member

There is a special case of entries that normally are present in all the scripts of the game (even if most of them don't have any function and thus are invisible). Indeed, the last 9 entries are each assigned to a potential member of the party, namelly
Zidane,
Vivi,
Dagger,
Steiner,
Freya,
Quina or Cinna,
Eiko or Marcus,
Amarant or Blank,
Beatrix

These entries have nothing special - you can use any model you want, for instance - but one thing : they can be refered to with special entry IDs and be used if they are in the player's team.
For instance, if the following lines are present in Main_Init function, then up to 3 of these entries will be initialized accordingly to the characters in the player's team :
Code: [Select]
InitObject( 252, 0 )
InitObject( 253, 0 )
InitObject( 254, 0 )
They can then be refered using the same special entry IDs for cutscenes and such. An example of use can be found in the script of the field "Oeilvert/Planetarium". In the function "Zidane_17" of this field, there's the cutscene when Zidane reads terran letters and the present characters are amazed. The different calls of "RunScriptAsync( ..., 252, ... )" are used to handle the reactions of the 2nd party member, whoever he is, at the different points of the cutscene.

So, in order to implement Beatrix in these cutscene, you need to create functions for her. Add a new function of type 0 chosing the last of the entries, then write the Init function :
Code: [Select]
Function Beatrix_Init
    set VAR_B10_0 = 364
    set VAR_B10_4 = 63977
    set VAR_B10_6 = 252
    set VAR_B10_2 = 65456
    SetModel( 204, 100 )
    CreateObject( VAR_B10_0, VAR_B10_4 )
    TurnInstant( VAR_B10_6 )
    SetStandAnimation( 2978 )
    SetWalkAnimation( 2975 )
    SetRunAnimation( 2981 )
    SetLeftAnimation( 2980 )
    SetRightAnimation( 2974 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetHeadAngle( 104, 48 )
    return
Replace the first numbers by coordinates (or you can remove those 4 lines and put the coordinates inside the "CreateObject" and "TurnInstant" lines).

With this, Beatrix will be created for this kind of cutscene if and only if she is in your party. You may also need to hide her in the Init function because she shouldn't appear before the cutscene. The line "SetObjectFlags( 14 )" does that.
Then you need to create other functions corresponding to her behavior during the cutscene. Look at the numbered functions for the other characters and create functions for Beatrix with the same ID (type) and with a similar pattern (adapt the dialogs and animations, off course).
By the way, you can add a new text in the corresponding text block beforehand with a right-click on it.

Once everything's done, don't forget to parse your functions and save. Congratulations : you have created cutscene elements for Beatrix !


PS. : contact me if you want to be part of the Github project.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: GARDIN on 2016-07-26 22:12:42
wooooow amazing i love you Tirlititi really thank you
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: IzzacSturnburg on 2016-07-27 15:04:12
Woah nice update Tirlititi~ i missed quite a bit this month it seems. Welcome back from your hiatus, So close to editing skills all the way through! I am impressed with your work as always, tried to edit skill in the ability branch of party and it crashed. But in do time!  I appreciate all your efforts and hardwork~ Love that i can finally add accessibility to the weapons finally to~
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: vivigix on 2016-07-29 16:19:49
Tirlititi, I have a question. I hope you can help me. Steam version has all 4 discs’ data, that means we have all data for access. Could we create mod witch make possible take access places we couldn’t visit after events at Branbal at Terra (the 4th disk)?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Gine on 2016-07-30 09:25:30
I got crash when import environment text but perfectly fine with UI text.

It occur with untranslated text to.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-07-30 12:48:41
Thanks Guardin & IzzacSturnburg :)

@Gine: Ok, thanks for reporting the problem. I'll see what it is (I also plan on making a more complete text support in the next version).
However, I have a few other projects related to FF9 before updating Hades Workshop. I don't think a new version will come out so soon.

@vivigix: You can indeed make those places available in disc 4. For most of them, that's in the World Map's script of the disc 4 you have to unlock things.
But there are two problems:
1) The Iifa roots will still be there, apparently blocking the access. You can't remove them (it would require changing the world's 3D model and pathing).
2) It seems that the event positions allowing you to enter places are also coded in the pathing. The positions where the "!" appears to enter the Observatory Mountain, for instance, is not present in the disc 4 World Map (I mean there's nothing special here).

To solve this 2nd problem, you have to code your own "place entering script". Here is how I would do it:
● At the end of the "Main_Loop" function (before the Wait) of the World's script, add some lines like those:
Code: [Select]
if (( VAR_B6_24 == 100 ) && (World_CurrentTransport==0) && ((MV_WorldPositionX12 - POS_X) <= 30000L) && ((POS_X - MV_WorldPositionX12) <= 30000L) && ((MV_WorldPositionY12 - POS_Y) <= 30000L) && ((POS_Y - MV_WorldPositionY12) <= 30000L)) {
    set VAR_B6_39 = PLACE_ID
    RunScriptAsync( 6, 1, 11 )
}
where (POS_X, POS_Y) is the place's position (that's the hard thing to get) and PLACE_ID is the corresponding ID in the following table:
Spoiler: show
IDPlace NameRelated Function
1Alexandria HarborMain_38313
2AlexandriaMain_38301
3Evil ForestMain_38809
4Ice CavernMain_39061
5Quan’s DwellingMain_40109
6TrenoMain_40353
7South GateMain_39829
8South GateMain_40085
9South GateMain_39825
10South GateMain_40077
11South GateMain_40333
12Ice CavernMain_39569
13Observatory MountainMain_39049
14DaliMain_39305
15North GateMain_38789
16North GateMain_38781
17Gizamaluke’s GrottoMain_39289
18BurmeciaMain_38521
19CleyraMain_38765
20Chocobo’s ForestMain_40329
21Gizamaluke’s GrottoMain_39801
22Qu’s MarshMain_40309
23Pinnacle RocksMain_41589
24Lindblum Dragon’s GateMain_40817
25LindblumMain_41330
26Lindblum HarborMain_41581
27Earth ShrineMain_35729
28Desert PalaceMain_34965
29Mognet CentralMain_33669
30Qu’s MarshMain_35197
31Black Mage VillageMain_35705
32Fossil RooMain_35953
33Conde PetieMain_35697
34Madain SariMain_34417
35Conde Petie Mountain PathMain_34669
36Conde Petie Mountain PathMain_34921
37Iifa TreeMain_35169
38Chocobo’s LagoonMain_41801
39Wind ShrineMain_40001
40DaguerreoMain_41005
41Qu’s MarshMain_40229
42OeilvertMain_39217
43Landing SiteUnused (For Hilda Garde 1 landing)
44Water ShrineMain_37661
45Ipsen’s CastleMain_36377
46Qu’s MarshMain_36649
47Shimmering IslandMain_35385
48Esto GazaMain_34605
49Fire ShrineMain_33601
50Chocobo’s ParadiseMain_33029
51  ? 
52  ? 
53  ? 
54MemoriaMain_35169
55Chocobo’s Air GardenWorld_Chocobo_20
56Chocobo’s Air GardenWorld_Chocobo_20
57Chocobo’s Air GardenWorld_Chocobo_20
58Chocobo’s Air GardenWorld_Chocobo_20
59Chocobo’s Air GardenWorld_Chocobo_20
60Gizamaluke’s GrottoMain_39553

When I say that the "place entering script" is not present in the 4th disc WM, I mean that the related function in the table above doesn't exist and creating one won't work (I just tested that). So you can't use the related function unfortunatly.
● The rest should be handled fine by the script system in place (setting "VAR_B6_39" launches the machinery).
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: rhadamants on 2016-08-06 22:30:47
I have an old patch that did for the PSX version and now that released the STEAM version I want to extract the text of this patch to review and put in STEAM version. But it is giving error when I click Environment to extract the text.
Can someone help me?

Patch PPF to PSX version:
https://drive.google.com/file/d/0B-L82uP4sSErdVczVW4tYTBtLU0/view?usp=sharing (https://drive.google.com/file/d/0B-L82uP4sSErdVczVW4tYTBtLU0/view?usp=sharing)
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: BaconCatBug on 2016-08-10 13:29:15
Yo, this tool is amazing. Just wanna get that out first. :)

Is there any chance of being able to make certain UI elements manually resizable? I have a lot of screen estate to work with and having it all bunched up in the top left corner doesn't help. :( http://prntscr.com/c3yrjh Even just being able to expand the name list sideways and the field picture diagonally would be a huge increase in usability.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: uzoko1 on 2016-08-14 16:01:33
Hey, so noob question. When I open HW.. what file am I opening in steam? I went to the steam folder of FFIX but cannot find anything to open  :/
woops kept opening the old HW...now im just figuring out how to change Blanks skills again
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: itoikenza on 2016-08-17 20:34:33
Tirlititi, how the heck does one make a ppf outta Hades' edits? An "ALL CHANGES" .ppf. not just what is edited after last save?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-08-18 07:49:08
@ rhadamants: I'll check the file batching for the next release. Thx to point out the problem.

@ BaconCatBug: hopefully it will also be doable in the next release. I'm not sure yet how you'll be able to do that (either you'll have to modify the IL script, which is kinda like assembly, either you'll have a more practical tool for that).

@ Itoikenza: you have two options for that. Both of them require the original (non-modified) binary file.
1) Using HW : Open your modified binary file with Hades Workshop and go to all the panels so that data is loaded. After that, replace your modified binary file (which is still opened in HW) by the original game file. Finally, go to "Tools -> Mod Manager" and tick all the boxes you find necessary. Exporting the changes as .ppf will then create a .ppf with all the changes done from the original game.
2) Using MakePPF : download this tool (http://aminet.net/package.php?package=util/misc/makeppf_aos4.lha) (created by the guy who invented .ppf) and create a .ppf with the original file and the modded one. It is a command-line program so you need to open a cmd window (there are plenty of documentation about command-line programs on the web).
IIRC, the command's syntax is
makeppf.exe c -u -d "description here" [original bin] [modified bin] [created ppf name]
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: itoikenza on 2016-08-18 09:11:52
Quote
After that, replace your modified binary file (which is still opened in HW) by the original game file...
I don't have HW in front of me now, can you elaborate via a video or gif? Or more details? I just simply go to File then Open? Then it'll open vanilla right next to modified?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-08-18 09:20:18
Nop, you replace the file on your hard drive.
Let's say your original game is named "FFIX.bin" and modded game is "FFIX_Mod.bin":
1) You open "FFIX_Mod.bin",
2) You do all the stuff with panels and Mod Manager,
3) You rename "FFIX_Mod.bin" to something else and rename "FFIX.bin" to "FFIX_Mod.bin",
4) You export the PPF.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: itoikenza on 2016-08-18 09:26:52
I see, Thanks! I had a sneaking suspicion that HW, would be more likable for ppf makin'... Nao! if only you'd make my dreams come true and make HW able to mod ff8 and Chrono Cross?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-08-18 09:45:32
Haha lol

Unfortunatly, I'm afraid that will never happen out of your dreams ^^"
There are other tools to edit FF8 (dunno about the Chrono series) ; it would be strange to use only 1 program to modify all of Square's games.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: itoikenza on 2016-08-18 09:48:42
No, do it! Nao!
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: BaconCatBug on 2016-08-20 23:43:53
Is it possible to get a Hades Workshop steam mod and Memoria to work together? I'd really like to be able to make the speed boost 2x instead of 5x but also to use a rebalancing mod. :( If it's not possible, obviously that's fine and i'll live with it. :P
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-08-22 16:13:47
No, it's not possible at the moment.
Hopefully it will be possible someday ; or at least include Memoria's features (all of them) in HW.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: resinate on 2016-08-24 07:16:10
hey Tirlititi, can u make a beta version, can u set the Max hp above 65k, i think steam version can bypass this limit. i found this when using a tent on a boss it heals above 9999

also tool crashes when u load up steam version and click on stats tab.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: IzzacSturnburg on 2016-08-24 14:58:51
Heya Tirlititi just checking in~  I'm anticipating the next release so i can go further into skill editing.   Again i thank you for your hardwork~ looking forward to it. Big fan
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: dclem on 2016-09-27 02:42:51
Hi! I'm am trying to edit the Battle spots of enemies locations in the Environment section, but it doesn't seem like its working. does each battle spot correspond to each section of gaia and include dungeons? Can't tell, the text to the right only says: "Alexandria Castle, Hidden passage's lower level" on the steam version.
Also, can Hades workshop export model data along with battle scenes? Models like monsters, eidolons etc. on the psx version?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: miruss89 on 2016-09-27 02:46:47
hey Tirlititi, can u make a beta version, can u set the Max hp above 65k, i think steam version can bypass this limit. i found this when using a tent on a boss it heals above 9999

also tool crashes when u load up steam version and click on stats tab.

Yup happen to me also, steam version crash when on stats tab
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-10-10 12:44:18
Hi.
I just moved to a country I don't know the language yet, so I don't work on HW so much these times. I have a sparse internet also.

I'll check about this crash. Since v0.33 or so, I experience random crashes at times and I don't know the reason (one of them is the extensive use of RAM the field panel asks, but that doesn't explain everything).

@ dclem : The battle spot isn't working on the Steam version yet ; it did on the PSX version but Steam has another way to handle that, not so convenient for me.
HW can't export the models other than the Battle Scenes (and then, it misses a few stuff like the Crystal in the related scene). However, there's this tool (http://forums.qhimm.com/index.php?topic=15957.0) that can do that (about spell effects, only a few are handled, not eidolons). You need to extract the .img for the PSX version but that's not a big deal and it worths it.

@ Resinate : no, the Steam version can't bypass this limit. I don't think I'll ever make it so it can be enabled : though it is in the horizon of possible things to make the HP a 4-bits number (if you look very very focused to the horizon), the technical obstacles are really annoying (the Steam version doesn't help there).
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-10 20:01:27
Any news about extracting and inserting the backrounds, Tirlititi?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: gledson999 on 2016-10-11 00:20:45
It's possible extract text from ppf files?

I want extract to fix something from that PPF?, because the translation was finished in 2006.

link: http://romhackers.org/modules/PDdownloads/singlefile.php?cid=25&lid=258 (http://romhackers.org/modules/PDdownloads/singlefile.php?cid=25&lid=258)
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-10-11 07:10:58
@ Fraggoso : You can already export the backgrounds, you can't import them back. It won't be ready for the next release but maybe for the one after that (or if someone else does that ; the project is on GitHub !).
But since you can export them already, someone can start reworking them. I didn't see anyone doing that yet.
Also, Aelrobis seems to be making some work about it currently (Export/Import). I don't know whether he'll be able to change the resolution or how his solution will be conflicting with HW though.

@ gledson999 : That's likely not possible to do that directly on the .ppf as the text are not stored very consistently in those files. You can try a search using an hexadecimal editor but you are not guaranteed to find the text and you can't change it to a text with another size.

Here is a solution that should always work :
1) Make a .hwf scan on a non-modded game (or surely you have one already),
2) Apply your .ppf to a game,
3) Rename your .hwf scan with the same name as your modded game,
4) Open HW and your modded game with it ; there should be no scan (since you provided it) and it should display the modded datas,
5) Fix your text stuff,
6-Optionnal) You can take the opportunity to go to the "Mod Manager" tool, check all the boxes corresponding to modded aspect of the game, and then use "Save Mod" to have a .hws version of the mod.
7) Save as a .ppf, then close HW, then apply the .ppf to the modded file,
8) Now that you have the modded game with all the right modifications, you can use makeppf.exe (http://aminet.net/package.php?package=util/misc/makeppf_aos4.lha) to create a .ppf file.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-11 19:58:46
@ Fraggoso : You can already export the backgrounds, you can't import them back. It won't be ready for the next release but maybe for the one after that (or if someone else does that ; the project is on GitHub !).
But since you can export them already, someone can start reworking them. I didn't see anyone doing that yet.
Also, Aelrobis seems to be making some work about it currently (Export/Import). I don't know whether he'll be able to change the resolution or how his solution will be conflicting with HW though.

I can't seem to find the exporter for it. Can you pinpoint me into any directions (i presumed it's in HW directly but also I can't find it)?

Edit: Found it!

Edit 2:
After exporting a BG I noticed that a lot of alliasing is going on around some objects.
e.g.
(http://fs5.directupload.net/images/161011/temp/rc2ssepg.jpg) (http://www.directupload.net/file/d/4505/rc2ssepg_jpg.htm)

Is there any way around this?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-10-12 07:42:05
I saw that too. This alliasing is in the image's data and appears in-game :
(http://img110.xooimage.com/files/9/e/a/lol-4f23eac.png)
For some reason that I don't really understand, it's much less visible in-game than there. The file format of images have a documentation, so I'm pretty confident that, color and transparancy-wise, I export the right images. Either Steam's version uses a slightly different file format, either it improves the rendering when it displays the layers.
If you remove those alliasing, that can only improve the quality.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-12 20:37:22
What you're referring to is normal if you work with layers and transparency especially in an old PSone Game.
The export suffers from some weird artifact patterns which is not present in game. Like I said, what you describe is normal transparency issues.

The PSone doesn't have those artefacts:
(http://fs5.directupload.net/images/161012/temp/25dyxim3.jpg) (http://www.directupload.net/file/d/4506/25dyxim3_jpg.htm)
I don't know how to remove those artifacts in a reasonable manner. We're talking 817 pictures. ^^

On a quick note: On the PSX File you can select which pattern to export. In the above these are the bells for an instance. In this example all bells are layered on top of each other.
I couldn't find such an option on the steam version. Is it missing? ^^

Edit:
The Steam Pictures seems to be 2x the size of the PSX File.
If I double the size from the PSX backgrounds and apply my filters, they look way better then applying the filters to the Steam background.
http://screenshotcomparison.com/comparison/187711

Of course this is only a test as I need to adjust the filters.
Would it be possible to export all PSX Files, filter them and use those to insert later on? If yes I would gladly to the whole thing.

Edit 2:
What would be the best way to work on the images so we/you can easily import them later on?
I extracted the PSone Image, scaled it x2 and applied my filter and saved every layer individually. I did this because I think it's crucial later on that the layers from the import match those 1:1 from the export?
If I have the answer I can start right away as I have setup my pipeline the last night.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-14 15:48:10
One question Tirlititi:
Do you think it's possible to find the flag to alter the FPS on the FMV's?
I've several FMV's in beautiful 30 FPS here (interpolated but still it looks in my opinion way better then the 15 FPS >.<) but after switching them out, the engine still forces them to play at 15 FPS.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-10-14 16:15:04
Well, I don't know about these artefacts. I'll look into it but don't hope for a fix too soon :/
You don't have access to the "background viewer" in the Steam version, thus you can't choose which layers (called Tile Blocks in the program) you can export at one time.

It will be possible to import to the Steam version upscaled backgrounds that you got from the PSX version.

I don't know in what format the images will be best for importation. As said, either 1 file per layer or 1 file per background (with all the layers inside). The problem is that I'm not an expert in the image formats. Most of them don't seem to support multi-layered images. I found the .tiff which could do that (but it's not supported very well by Photoshop from what I heard) and I don't know about the others. I would like to avoid editor-specific formats : I know that .xcf supports several layers and a bunch of other features, but it's Gimp-specific for instance.

To be more precise about the format of the Steam background images (I'm writing that from memory, so there might be inaccuracy) :
- Each file contains a bunch of tiles, that is a 36x36 pixels square (compared to 16x16 for PSX).
- However, there is a border of 2 pixels on each side of the square that seem unused (maybe they correct that alliasing thing?), so the used tiles are of actual size 32x32.
- All the pixels are not fully specified with a RGBA value : the 36x36 square is split into 4x4 squares which share a RGB value with possible variations on each pixel (but restricted).
- The tile sorting/layering into Tile Blocks are done in other files, which were extracted from the PSX version and were not modified at all.

So the format is a bit compressed compared to a full specified bitmap file of the same size/resolution (because of those 4x4 squares). I didn't try nor dig anything yet about where those are handled in the game's code. I don't know :
1) If I can remove that compression,
2) If I can enable other resolutions.
Ideally, I can do both, but one of them only will be sufficient to import your upscaled files from the PSX version without loss of quality.

EDIT : About FPS, there's a limit set in the game's code (one limit for menu, one for World Map, etc...) that can easily be raised to 30 or 60 FPS. I don't know if it will need changes at other places but eventually, I'm quiet confident that it won't be too difficult.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-15 13:50:05
For the time being I wouldn't stress that much about those artifacts.

The export from the PSX is way better. The steam backgrounds were only upscaled using an interpolation filter, which really worsens the filtering I use on them.
My main “struggle” is, that I don't know how you plan to do the reimport. ;)

I can extract either one image with ALL layers intact (even the ones which are moving) and get them filtered nicely and save them as a tiff again so we retain all layers in one image.
Memory wise it would be maybe better to use the extension ORA. It’s very convenient as it saves as one file but if you open it with 7 zip all Layers are saved as a png in a Data subdirectoy.
This is not manageable by Photoshop (although a converter could be used I guess) and it could lead to problems as the layers don’t have names but numbers like 001 – 013.png

Okay here goes the final question:
If I need to rearrange all Layers from the import 1:1 to match the export (also by name?) then I'll start right away. I will rip the backgrounds with all moving tiles (doors, flags etc…) in one image with a bunch of Layers. The problem here is that my Gimp shows the Layers as German names like Seite 1 which is Site 1 in US. This is confusing to me as I used my US/NTSC FFIX to rip the background.
But I don't know if things get too complicated…? ^^

You could also implement the import as a psd. The file format is afair well documented and Gimp can load psd files as well, so the coverage is very good.
If you have anything to mention further, please do so as at the moment this will be a really big task as it is and I don’t want to break anything or in the worst case wasted time on both ends. ^^

Maybe it would be good if we could test one background before so we/I can use that as a basis and get the things off the table which hinders the import.

The images vary in size: ORA has the best with 2.76 MB, Tiff with 4.28 MB opposed to a whopping 6.7 MB PSD.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-16 12:15:14
I've finished ripping all backgrounds into separate folders containing one tiff with all layers.
But something doesn't look right in some backgrounds:
(http://fs5.directupload.net/images/161016/temp/x8tnc7fl.jpg) (http://www.directupload.net/file/d/4510/x8tnc7fl_jpg.htm)

This is taken directly from disc 1 "Burmecia/Palace" the third of them.
The rain really looks broken to me. These instances don't happen as often.

I only saw it on 2-3 images so it's not big a deal but still, something must be done or else those can't be filtered properly all tough I could filter the base image (without the moving broken rain of course ^^
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: resinate on 2016-10-16 20:38:44
btw guys for the higher fps, just use CE and scan for 15 fps in world map or 30 in town. scroll all the way down to bottom u should see XXXXXXXX-XXXX 16 numbers/letters set it to 60 check box.

also any word on the ability for higher than 65k hp on steam version.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-18 20:28:23
Quick update: I've finished more than 40 Backgrounds with all the filtering and separating the Layers etc... and I got my process really down.
I'll work further on it after Tirlititi finished the import so I can know if this works and/or need tweaks at my end. But I'm very confident that all the filtering really shouldn't take that long. :)

Keep up the fantastic work, Tirlititi. ^^
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: blahitzmunchii on 2016-10-29 02:48:50
hey is there any reasons for,the steam version freezes when i click on the stats tab?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-10-31 00:30:41
hey is there any reasons for,the steam version freezes when i click on the stats tab?

I just tried it and it works on my end.
Did you try with version 0.34?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-10-31 08:38:07
Hi everone, version 0.35 is now available :
- You can now poorly modify the IL script code (more details below),
- In the same panel, the feature called "Macro" allows to do pre-generated IL script modifications. For now, only two are availables :
--- Unlock Ability Learning for Beatrix : allows Beatrix to learn abilities like a regular character and to use supporting abilities (more below),
--- Disable Cheats : remove the booster features of the Steam version. The speedup is still available but it also speeds up timed game phases, like Hot & Cold or the 30 minutes Alexandria event.
- Fixed the export/import text batching,
- Fixed several bugs in scripts edition (when I say "script" alone, I mean the field/World and enemy AI scripts).

Two notes about IL scripts :
1) It is an assembly-type script, so it will be very very hard to decipher (plus, as said, the way HW displays it is not the best...). I can't imagine someone doing proper things if he doesn't have the source/decompiled C# code to compare with.
2) The list of IL instructions can be found here for instance :
https://en.wikipedia.org/wiki/List_of_CIL_instructions
IL and CIL are synonymous.

One of the most useful IL type to look at and modify must be "btl_calc" : every methods of this type are useful. It contains the same battle mechanics as the available MIPS code in the PSX version : damage calculations, status adding, special spell requirements... I modified a bit a version of the these methods to make it a bit more convenient (I changed the names of those "CalcSub" methods). You can find it here :
https://dl.dropboxusercontent.com/u/98687557/Resources/BtlCalc.cs

About IL Macros, they modify one or several methods ; if you modify those methods yourself aside of that, the related macro will not be available anymore. I'm planning on adding options for them also, so you can decide if you want to disable all the cheats or just some of them for instance. One of their point is also that they will be updated and the bugs (if any) will be fixed without for you to change everything if a bug is found for a macro.

About the "Unlock Ability Learning for Beatrix", you need to do two things so that it works : apply the macro and give to Beatrix AP requirements to her abilities (and optionnally supporting skills). She then will be like a normal character, which also means that her abilities won't be available from the start. You can make her learn her standard abilities by adding this code inside the field scripts when you recruit her for the first time :
In "A. Castle/Queen's Chamber" (the 3rd one when the fields are not sorted alphabetically ; there are functions with "Queen_Brahne" and "Bandersnatch" in the list on the left),
In the function "Beatrix_Loop", go at the very bottom of the function, there is a line "Battle( 0, 916 )" which is the battle against Bandersnatch.
Add these lines right before that battle :
Code: [Select]
        LearnAbility( 8, 149 )
        LearnAbility( 8, 150 )
        LearnAbility( 8, 151 )
        LearnAbility( 8, 152 )
        LearnAbility( 8, 2 )
        LearnAbility( 8, 5 )
        LearnAbility( 8, 6 )
        LearnAbility( 8, 10 )
        LearnAbility( 8, 14 )
        LearnAbility( 8, 16 )
        LearnAbility( 8, 19 )
        LearnAbility( 8, 24 )
Then parse and confirm.

Also, I checked and you can use this macro for the same purpose on Marcus, Blank and Cinna (if you give them abilities to learn). Their ability AP progression will even be conserved if you save/load the game, but, judging from the source code (maybe gjoerulv can confirm that, or someone tests it), they will be saved on the ability AP slots of the corresponding regular character : If Marcus learn abilities in disc 2, Eiko will have abilities learned as soon as you recruit her.
The script opcodes "LearnAbility" and "UnlearnAbility" should do the trick for that.
Beatrix has not this kind of problem since she doesn't share her character slot with someone else. Her ability learning progression is saved properly.

About the "Stats" panel bug now...
I wasn't able to reproduce it, but I think I know where it comes from : you somehow don't have the same Assembly-CSharp.dll as me.
You may try to reinstall FFIX to fix that problem (don't forget to copy your saves and such). I will need to fix it anyway because I don't want HW to be dependant on having the exact same files as the normal ones. I spent quiet some time trying to fix that already, though...
If one of you three who have the bug can check something for me :
- Check that you can go to the "CIL code" panel and that if you apply the CIL macro "Unlock Ability Learning for Beatrix", there's no bug (the tool doesn't crash, can save the Steam mod and the works will run fine (check up to the Main Menu screen)).
- However, if you apply the other macro "Disable Cheats", then check that it won't work (either HW crashes when you save the Steam mod, either the game crashes when you launch it afterward).

If both checks goes how I think, then I know why the stats panel bugs.

About field backgrounds, I've tried to adjust the alpha channel (despite it was adjusted according to the standard picture format, which is called DXT5 btw). I think it's a bit better now but it's still far from clean. I couldn't find why it's not the same as the in-game pictures, but that may be related to how they draw it. Each tile is actually, unlike for the PSX version, used for UV mapping and the background is rendered as a 3D model composed of planes one behind the others.

I think the next release will be a bug-fix for this stat panel thing. I will try to add a few more macros as well : if you have ideas, toss them at me !
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: itoikenza on 2016-10-31 10:04:17
I have a idea/request? Remember how I wanted to edit "Change"? To be a custom movelist? Have at it! Macro Style! Please Tirlititi? PSX ver. Of Course!
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: vivigix on 2016-10-31 11:56:28
itoikenza you are asking too much,  Tirlititi already took maximum of PSX version.

Tirlititi Thank you for your job.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-10-31 15:48:45
Thanks Vivigix.

Well, that's a valid point, even for the Steam version. It will require to modify the btl_cmd types only, I think.
If you're lucky, I can find out where the related MIPS code lies (I'm sure it is in the editable MIPS code somewhere... I only got to find it in an assembly code of 78710 instructions :D). Then I can give you a .hws file (I'm not planning to make macros for MIPS, no ^^").
Which PSX version are you using again? The US?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: itoikenza on 2016-10-31 15:56:14
the US one, Tirlititi. Thanks for considering!
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Baby5 on 2016-10-31 19:45:48
Hi everone, version 0.35 is now available :
- You can now poorly modify the IL script code (more details below),
- In the same panel, the feature called "Macro" allows to do pre-generated IL script modifications. For now, only two are availables :
--- Unlock Ability Learning for Beatrix : allows Beatrix to learn abilities like a regular character and to use supporting abilities (more below),
--- Disable Cheats : remove the booster features of the Steam version. The speedup is still available but it also speeds up timed game phases, like Hot & Cold or the 30 minutes Alexandria event.
- Fixed the export/import text batching,
- Fixed several bugs in scripts edition (when I say "script" alone, I mean the field/World and enemy AI scripts).

Two notes about IL scripts :
1) It is an assembly-type script, so it will be very very hard to decipher (plus, as said, the way HW displays it is not the best...). I can't imagine someone doing proper things if he doesn't have the source/decompiled C# code to compare with.
2) The list of IL instructions can be found here for instance :
https://en.wikipedia.org/wiki/List_of_CIL_instructions
IL and CIL are synonymous.

One of the most useful IL type to look at and modify must be "btl_calc" : every methods of this type are useful. It contains the same battle mechanics as the available MIPS code in the PSX version : damage calculations, status adding, special spell requirements... I modified a bit a version of the these methods to make it a bit more convenient (I changed the names of those "CalcSub" methods). You can find it here :
https://dl.dropboxusercontent.com/u/98687557/Resources/BtlCalc.cs

About IL Macros, they modify one or several methods ; if you modify those methods yourself aside of that, the related macro will not be available anymore. I'm planning on adding options for them also, so you can decide if you want to disable all the cheats or just some of them for instance. One of their point is also that they will be updated and the bugs (if any) will be fixed without for you to change everything if a bug is found for a macro.

About the "Unlock Ability Learning for Beatrix", you need to do two things so that it works : apply the macro and give to Beatrix AP requirements to her abilities (and optionnally supporting skills). She then will be like a normal character, which also means that her abilities won't be available from the start. You can make her learn her standard abilities by adding this code inside the field scripts when you recruit her for the first time :
In "A. Castle/Queen's Chamber" (the 3rd one when the fields are not sorted alphabetically ; there are functions with "Queen_Brahne" and "Bandersnatch" in the list on the left),
In the function "Beatrix_Loop", go at the very bottom of the function, there is a line "Battle( 0, 916 )" which is the battle against Bandersnatch.
Add these lines right before that battle :
Code: [Select]
        LearnAbility( 8, 149 )
        LearnAbility( 8, 150 )
        LearnAbility( 8, 151 )
        LearnAbility( 8, 152 )
        LearnAbility( 8, 2 )
        LearnAbility( 8, 5 )
        LearnAbility( 8, 6 )
        LearnAbility( 8, 10 )
        LearnAbility( 8, 14 )
        LearnAbility( 8, 16 )
        LearnAbility( 8, 19 )
        LearnAbility( 8, 24 )
Then parse and confirm.

Also, I checked and you can use this macro for the same purpose on Marcus, Blank and Cinna (if you give them abilities to learn). Their ability AP progression will even be conserved if you save/load the game, but, judging from the source code (maybe gjoerulv can confirm that, or someone tests it), they will be saved on the ability AP slots of the corresponding regular character : If Marcus learn abilities in disc 2, Eiko will have abilities learned as soon as you recruit her.
The script opcodes "LearnAbility" and "UnlearnAbility" should do the trick for that.
Beatrix has not this kind of problem since she doesn't share her character slot with someone else. Her ability learning progression is saved properly.

About the "Stats" panel bug now...
I wasn't able to reproduce it, but I think I know where it comes from : you somehow don't have the same Assembly-CSharp.dll as me.
You may try to reinstall FFIX to fix that problem (don't forget to copy your saves and such). I will need to fix it anyway because I don't want HW to be dependant on having the exact same files as the normal ones. I spent quiet some time trying to fix that already, though...
If one of you three who have the bug can check something for me :
- Check that you can go to the "CIL code" panel and that if you apply the CIL macro "Unlock Ability Learning for Beatrix", there's no bug (the tool doesn't crash, can save the Steam mod and the works will run fine (check up to the Main Menu screen)).
- However, if you apply the other macro "Disable Cheats", then check that it won't work (either HW crashes when you save the Steam mod, either the game crashes when you launch it afterward).

If both checks goes how I think, then I know why the stats panel bugs.

About field backgrounds, I've tried to adjust the alpha channel (despite it was adjusted according to the standard picture format, which is called DXT5 btw). I think it's a bit better now but it's still far from clean. I couldn't find why it's not the same as the in-game pictures, but that may be related to how they draw it. Each tile is actually, unlike for the PSX version, used for UV mapping and the background is rendered as a 3D model composed of planes one behind the others.

I think the next release will be a bug-fix for this stat panel thing. I will try to add a few more macros as well : if you have ideas, toss them at me !

Hmm...I have the stat panel crash problem every single time, and I still get it with a fresh copy of FF9 Steam. In the meantime, could you please provide a copy of YOUR Assembly-CSharp.dll so I can try replacing with that and see if the crash still happens? I think it's a small enough file. Thanks.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-11-01 07:33:36
Hold everything ! A new problem has just popped.
It seems that if you modify something in the "Items/Key Items" panels and export the mod to Steam, then the battle won't start properly in-game (either a black screen either you can see enemies with very few luminosity).

The saving/loading of .hws files seems to work fine still. Nothing's lost as long as you use that saving method.

Fixing that asap.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: itoikenza on 2016-11-01 07:50:27
Tirlititi, does the macro for giving Beatrix learnable skills work for PSX?
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Baby5 on 2016-11-01 10:20:22
Hold everything ! A new problem has just popped.
It seems that if you modify something in the "Items/Key Items" panels and export the mod to Steam, then the battle won't start properly in-game (either a black screen either you can see enemies with very few luminosity).

The saving/loading of .hws files seems to work fine still. Nothing's lost as long as you use that saving method.

Fixing that asap.

I also noticed some issues with loading .hws files from PSX version.

If I load a full Spells list from PSX into Steam, my cutscenes get messed up(they slow down extremely even under superspeed F1 and the camera does not focus on the scene, as well as weird objects appearing). For example, in the Vivi puts Garnet's white mage cloak on fire scene in disc1, Vivi and the 2 knights of pluto get into T-Position(default standing position with arms widespread) and move around weirdly.

If I load a Command list from PSX to Steam, my Sword Magic list gets completely emptied on Steiner with no way to remedy that. All save files also show as "corrupted" if I load Command list(but not Spell or other list). If I save a file with the new Command list it works fine, but then shows "corrupted" in-turn if I restore the original Command list(while my original save files get reverted to non-corrupted).

If I load a full Shop list from PSX into Steam, my shops also get messed up. For example, Cinna is supposed to sell Potions, Phoenix Downs and Tents(normal item shop) but is now selling some really advanced stuff(Diamond Sword and other Oeilvert Shop items).

Also want to mention that the "list of Status" in the Spells panel shows really weirdly when opening a FF9 Steam. For example, the first one in the list should show No Status but is actually showing Petrify+Venom+Trouble. However it acts correctly in-game and applies No Status. I copied to the status list from PSX down to note which number refers to what status for the time being...

Can someone who does not have the Stats panel Freeze bug please upload me their copy of Assembly-CSharp.dll so that I can test if the freezing problem really comes from that? Thanks.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Tirlititi on 2016-11-01 17:19:50
Check your PMs, Baby (I didn't think I would write that someday).

Yes, importing the .hws mods from PSX has issues because of the text formatting which is totally different and I don't make the conversion. If you untick the boxes "including texts", you should have no problem though (I did that for my Alternate Fantasy).

The "list of status" bug should have been fixed also.

@ Itoikenza : No, those CIL Macros don't work for the PSX version.
The PSX's basic language is MIPS : it's a set of instructions and every single PSX game uses them to communicate with the PSX machine.
For computers, there is a lot of those basic languages and CIL is one of them.
So you can't use MIPS in computers and you can't use CIL for PSX : they don't understand these languages. It's like speaking greek to a french guy, he just won't understand :D
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Baby5 on 2016-11-01 19:27:32
Okay so from testing
On a fresh copy of FF9 that was just installed with no mods(that I got from Steam)
1. HW 0.35 did not crash my Stats tab when clicked on it(compared to 0.34b which completely froze the program and Windows would say stopped working close it), but there was nothing displayed on the Stats tab at all. I could go back and forth to Spells and Stats tabs without it freezing/crashing.
2. The Status list still shows as Petrify+Venom+Trouble for No Status.
3. Both CIL Macros apply perfectly fine. There is no crash, they save just fine, they can be applied individually or one after the other(they can also be unapplied). Running the game with it just fine as well(I only loaded one save quickly so I have not checked for bugs with no cheats, but the game loads fine).

After modifying a fresh FF9 with the Assembly-CSharp.dll that I received(replacing the old file that came originally with FF9)
1. HW 0.35 finally loads the Stats tab correctly with the names and all.
2. The Status list now correctly shows No Status as the first option.
3. Both CIL Macros apply perfectly fine too, no crash.
EDIT: HW0.35 works fine with the new copy of Assembly-CSharp.dll that I received but the game does not load. It stays stuck on black screen.
Also note that my Assembly-CSharp.dll is 3967KB while the one I received is 3923KB.
EDIT again: After comparing the two files side by side in a hex editor, the content looks different. The last address in my copy of Assembly-CSharp.dll is 003DF9F0 while the one in the file I received is 003D49F0. This is probably the reason for all the freezes and weird things happening, the contents of the addresses dont match. It seems there are 2 kinds of Assembly-CSharp.dll for FF9 Steam out there.

Another bug that I get often:
There is also a crash that occurs occasionally for me right after selecting the language when opening FF9 in HW, but it does not occur every time(Windows says program has stopped running). This happens with both versions 0.34, 0.34b, 0.35(I have not tested older versions) and regardless of FF9 fresh or modded.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Ignotus on 2016-11-01 20:37:47
1. I just downloaded the latest version, 0.35, and whenever I choose to open a bin file, I get a message that hadesworkshop.exe has stopped working and it closes. I am on Windows 10 x64.
2. Is it possible to replace the in-game world map used for navigation using Hades Workshop? I mean the map that is shown when you press the [back] (xbox controller) button on the overworld areas.
The in-game map is horrendous. I can barely navigate with it because it is such low quality.
Title: Re: [FF9] General editor - Hades Workshop (0.34b)
Post by: Fraggoso on 2016-11-01 23:14:23
1. I just downloaded the latest version, 0.35, and whenever I choose to open a bin file, I get a message that hadesworkshop.exe has stopped working and it closes. I am on Windows 10 x64.
2. Is it possible to replace the in-game world map used for navigation using Hades Workshop? I mean the map that is shown when you press the [back] (xbox controller) button on the overworld areas.
The in-game map is horrendous. I can barely navigate with it because it is such low quality.

You have to open the FF9_Launcher.exe in Hadesworkshop. ;)

@Tirlititi Is it really 0.35? I can only find 0.34b on the 1st Page.
Title: Re: [FF9] General editor - Hades Workshop (0.35)
Post by: Tirlititi on 2016-11-02 07:57:44
@ Fraggoso : It is 0.35, I only forgot to change the thread's title (to check the version, go to "about" (F1)).

@ Ignotus : If you use the Steam version of Final Fantasy IX, then do as Fraggoso said. If you use a binary image of the PSX version, then it is corrupted because it still works (for those, at least, I'm sure there are not 50 different official versions floating around).

@ Baby5 : Thank you for the report.
The occasional crash when you select the language is troublesome ; I had this regularly, for a lot of different versions of the tool, and everytime I think I've fixed it, then another one pops up somewhere else...
In 0.35, I fixed a few of them so maybe that won't happen anymore there. However, I know for sure that the program crashes if you're browsing the "Fields" panel too long (after looking at ~120 different fields on my PC, but that should vary depending on the PC). I didn't succeed at fixing it.
The difference in size is normal. As long as there are different versions of Assembly-CSharp.dll, their file sizes will likely not match. The offsets are all internal though. There is no other file that have offsets pointing in Assembly-CSharp.dll, so that's strange your game crashes.

As a reminder : Hades Workshop can read only non-modded files. For the Steam version, only Assembly-CSharp.dll needs to be clean : the resources file and p0dataN and such can be modded as long as they still contain the normal files (they are archives). That means :
1) HW does not work if Albeoris's Memoria was applied on your game (the mods that don't change Assembly-CSharp.dll, like the Audio Fix, works fine),
2) HW does not work if you give it to read a modded Assembly-CSharp.dll even if it was generated by HW. That's why there are those saving instructions and that's why you should make .hws files ("Save Mod"), which are light files created very fast and that contain all your modifications and are portable if ever FF9 gets officially updated.

It might happen that HW successfully reads and modifies modded games, but it's luck-based and if the modded file don't differ too much.

Since Baby5 just re-installed the game from Steam and it didn't work, then either Steam distributes different versions of the game depending on something (you don't have a Japanese version, right?), either I missed an update or such. I'll re-install the game as well to check.
Title: Re: [FF9] General editor - Hades Workshop (0.35)
Post by: Baby5 on 2016-11-02 09:01:03
Here is a copy of the Assembly-CSharp.dll that I have
https://ufile.io/14c13

This is not modded.

If you load this one in your FF9, do you see the Status list get messed up too?
(No Status shows as Petrify+Venom+Trouble) etc.

I think this is why many people are getting the Stats panel to crash/freeze/not-load as well, we have a different version of FF9. It's not the japanese version and has no japanese language option either. It has English US UK, French, Italian, Spanish.
Title: Re: [FF9] General editor - Hades Workshop (0.35)
Post by: blahitzmunchii on 2016-11-02 18:13:31
hey i dont know if anyone asked this yet but is there a way to mod it so you can add blank into the party i was able to find anything.
Title: Re: [FF9] General editor - Hades Workshop (0.35)
Post by: resinate on 2016-11-02 19:36:44
can u add in break damage to steam version. cuz tents have break damage on heals. you tent on a boss with 65k hp ull see what im talking about its possible now
Title: Re: [FF9] General editor - Hades Workshop (0.35)
Post by: Tirlititi on 2016-11-03 08:24:07
Yes it is possible to add break damage limit. For tents (I also experienced it with Chakra and Pumpkin Head when I gave those skills to bosses), that's a non-intended bug. I don't know what it does in the Steam version, but in the PSX one, it displays a green 9999 even though it damages the target.
The new damage cap should be at 32767, or maybe 65535. The Max HP limit can't be increased as said.

@ blahitzmunchii : You can do the same as for Beatrix minus the fact that you need to remove Amarant from the party for that. Depending on what you want to do exactly, it may be easier with CheatEngine or such. I copy/paste a post I made a while ago :
It is perfectly possible (though tedious) to replace a character by another, minus the well-known fact that Cinna, Marcus and Blank share some data (the levels in particular) with Quina, Eiko and Amarant respectively. You can't have both Cinna and Quina in the team either, for instance. To replace a character, you can put the following lines inside scripts, at points before you can change your party (in the Hildaguard 3, for instance) :
Code: [Select]
SetPartyReserve( 4095 ) // Adjust this argument if you want fewer people
SetCharacterData( 8, 1, 255, 22, 15 ) // Beatrix
SetCharacterData( 9, 1, 255, 21, 8 ) // Cinna
SetCharacterData( 10, 1, 255, 21, 10 ) // Marcus
SetCharacterData( 11, 1, 255, 21, 12 ) // Blank
SetName( 8, 75 ) // Rename Beatrix (shouldn't be important)
SetName( 9, 72 ) // Rename Cinna (or else he's called "Quina")
SetName( 10, 73 ) // Rename Marcus (or else he's called "Eiko")
SetName( 11, 74 ) // Rename Blank (or else he's called "Amarant")
You'd need to add that kind of script anywhere the party is somehow modified to make it persistant ; or use a similar script to revert the changes if you want Quina, Eiko or Amarant back in the team.
There are bugs that can happen at some point of the game, however. During the Oeilvert part, for instance, the script looks for your party members to see which character should be present in the cutscenes. I think Eiko will be on the field instead of Marcus and so on... but for Beatrix, you need to add script animations and such specially for her.

Instructions on how to modify the scripts can be found in the following post. It is needed for Beatrix inside those problematic fields like at Oeilvert (otherwise the game softlock), and it is optionnal for Marcus, Blank and Cinna (without it, you see the corresponding regular party member on the field).
http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890

For completeness, I put below the typical "Init" functions for Beatrix, Blank, Marcus and Cinna. I add a "jump" animation in case you want them to jump because, in the Steam version, there can be a "bug" which makes those jumps unavailable under certain conditions.
For the record, that "bug" works like this :
1) An animation has to be loaded in the RAM before it can be used by a character/model,
2) In the PSX version, the only animations loaded in the RAM are the very basic ones for all the party cast + the ones specified in the "Preloading" datas,
3) In the Steam version, an animation is loaded in the RAM (if it weren't there already) most of the time at the moment it is required,
4) The opcode "SetJumpAnimation" is buggy in the sense that it won't load the corresponding animation ; I think it's the only one doing that,
5) Animations can also be loaded in the RAM when entering the field using the "Preloading" datas ; it is less convenient and it needs to be linked to a model for that.
Code: [Select]
Function Beatrix_Init
    SetModel( 204, 100 )
    CreateObject( 0, 0 )
    TurnInstant( 0 )
    SetStandAnimation( 8566 )
    SetStandAnimation( 2978 )
    SetWalkAnimation( 2975 )
    SetRunAnimation( 2981 )
    SetLeftAnimation( 2980 )
    SetRightAnimation( 2974 )
    SetJumpAnimation( 8566, 4, 23 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 104, 48 )
    return

Function Cinna_Init
    SetModel( 107, 87 )
    CreateObject( 0, 0 )
    TurnInstant( 0 )
    SetStandAnimation( 9889 )
    SetStandAnimation( 470 )
    SetWalkAnimation( 761 )
    SetRunAnimation( 105 )
    SetLeftAnimation( 104 )
    SetRightAnimation( 107 )
    SetJumpAnimation( 9889, 5, 22 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 96, 61 )
    return

Function MarcusA_Init
    SetModel( 109, 100 )
    CreateObject( 0, 0 )
    TurnInstant( 0 )
    SetStandAnimation( 12011 )
    SetStandAnimation( 474 )
    SetWalkAnimation( 367 )
    SetRunAnimation( 365 )
    SetLeftAnimation( 368 )
    SetRightAnimation( 364 )
    SetJumpAnimation( 12011, 9, 24 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 96, 61 )
    return

Function Blank_Init
    SetModel( 5467, 87 )
    CreateObject( 0, 0 )
    TurnInstant( 0 )
    SetStandAnimation( 5041 )
    SetStandAnimation( 462 )
    SetWalkAnimation( 5225 )
    SetRunAnimation( 5222 )
    SetLeftAnimation( 5223 )
    SetRightAnimation( 5224 )
    SetJumpAnimation( 5041, 9, 25 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 96, 61 )
    return
Title: Re: [FF9] General editor - Hades Workshop (0.35)
Post by: blahitzmunchii on 2016-11-03 15:34:00
thanks!!
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: Tirlititi on 2016-11-07 07:25:30
Version 0.35b is up. All the changes apply only to the Steam version :
- Fixed the black screen bug in battles when you modified an item,
- Improved the reading/modding of Assembly-CSharp.dll,
- Added a "Break damage limit" macro, be careful that it will bug with certain bosses,
- You can now change the model of the enemies.

So, for the reading/modding of Assembly-CSharp.dll, it should allow people like Baby5, who has slightly different version of the game, to use Hades Workshop without problem (Baby5, you can use the file that you uploaded : stats panel and status lists and other things should work fine now).

The "Break damage limit" has a problem which is not related to the game's engine but with the AI of several bosses : they have 10000 more Max HP than normally and are not supposed to die, ever (they terminate the battle before they reach 0 HP). For these bosses, if you hit them so hard that they reach 0 HP without passing through the 1HP-9999HP range, they will die for real and, from my experience, the game will sofltlock.
I don't know how to fix that... Any fix will be AI script related anyway.

The enemy model feature is all fresh. I just figured out this week-end that it shouldn't be too hard to be done with the Steam version. To properly modify the model (you can only choose models of enemies btw), you need to change the model in the 1st page of an enemy's data and then modify that enemies' attacks spell animation sequences. Indeed, in the spell animation sequences, there are lines like "Play Animation" ; since the animations of the previous model and the animations of the new ones will likely not match, you need to change the numbers of these lines (check the spell animations of the default enemies that have the chosen model).
In the future, I will make it so you can add/remove different kinds of enemies in an battle, and I hope the "Battle Scene" field will work soon as well. This way you can take out the full potential of choosing an enemy's model.

I looked about modifying Defend/Change abilities, but that's a bit more complex than I thought. They are specially handled at various points in the code and I need to see which ones to modify and how.
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: itoikenza on 2016-11-07 09:48:41
Thanks for looking into Defend/Change for me, Tirlititi! i'm prob the only dude looking forward to that kinda edit
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: Gine on 2016-11-07 17:02:53
Thanks for update :)
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: Baby5 on 2016-11-08 17:35:05
Thanks for trying to make the workshop compatible with our different version of FF9. :)

I tried the 0.35b, and indeed it did not crash at the start anymore(i can see the Final Fantasy IX Logo) so that's an improvement! But then I tried to modify something in the Commands menu(I replaced Medeo in SFX into Firaga) and saved. Weird things happened the moment I got into a battle. All my characters were showing at 9999 HP and 999 MP(which was definitely not the case on the save I loaded), full trance and ATB bar, but could not get a turn(the Commands do not show up in battle). Then an enemy did 4 damage infinitely to Quina and it kept showing 4 damage over and over(without Quina's HP ever decreasing)...

I am sticking to version 0.34b for now. Even though I cannot have access to modifying Commands and Stats, at least the game does not crash. I am hoping the workshop becomes fully compatible with all versions of FF9 at some point.

Thanks again!

Edit: Okay, after further testing with version 0.35b
Spells panel works just fine, and the Status panel has been completely fixed. I can create new Status sets completely.

Shops panel has also been fixed(it used to show Daguerreo's inventory as Ipsen Castle and I had to go to each location one by one to track which was which). Now Daguerreo's list is showing as Daguerreo correctly.

Commands panel works fine now. Before, the workshop would crash the moment I clicked on any Commands(such as Summon) probably because that was linked to the Stats panel(which crashed when clicked) and I would have to force it to close through Task Manager. I have not tried modifying Commands much yet since it seem the Stats panel must match(according the post about the Steam version), which brings us to the next point

Stats panel does not crash in the workshop. You can edit it. But if you edit anything at all, the problem mentioned above occurs. I tried something simple such as replacing Garnet's Healer support ability with Restore HP instead. Anything of the sort completely messes the game up and all battles freeze in an infinite loop of damage or heal numbers. (Also Reflect's red sparkles somehow weirdly get frozen in place)
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: Gine on 2016-11-12 16:54:23
I found small bug with editing UI Texts.

If edit or translate in UI Texts. It cannot skip cut scene in game.

It just appear with notice box with no text.
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: Tirlititi on 2016-11-12 17:43:45
Thank you both for reporting those bugs.
I'll try to fix them but now I'm on a small pause for HW.
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: Tirlititi on 2016-11-24 20:44:24
Update !
I wondered whether I should call it v0.36 or not, because there is some cool new stuff. But I finally opted for 0.35c (that gives an excuse for not working on backgrounds... plus 0.36 would make it sound as if I was almost over with it).

So:
- You can now choose the Battle Scene of battles for the Steam version (it was already available for PSX),
- Changed the way you add a new spell to enemies : you can now copy an attack from any battle and add it somewhere else,
- You can now add new enemies (not new battles) : with the same copy/paste principle, you can make battles with any combination of enemies,
- Improved a bit the attack sequencing for enemy attacks (all the codes have a name and a description of what it does now),
- Fixed the stats panel bug, making battles unplayable if you modified in for the Steam version,
- Fixed the UI text bug (in particular with the cutscene skip), the UI texts are still quite unpleasant to modify though...
- Found the meaning of a flag for spells (it became rare enough to mention it).


So, about adding enemies, there are a few constraints and some step-by-step method to follow:
1) Copy the enemy you want to add (right-click), then go to the battle where you want to add him and paste.
2) Copy some attacks for that enemy: it is advised to copy/paste attacks from its original battle since then the sequencing and animations will match. You can get any other spell as well though (but then you need to modify the spell sequence or the animations will look weird).
3) Select those new attacks you copied and change their field "Animations" -> select the new enemy.
4) Similarly, select the new enemy and change its "Default Attack" to one of those you added (it's only used for Berserk/Confuse),
5) Modify at least one of the enemy Groups to include the new enemy in it.
6) Click on "Edit Entries", select the last entry named "Object" in the list, Add one entry (it will pop between that Object and Zidane's entry) and change the entry type to 2,
7) Modify the AI script to include an AI for your enemy. You might copy/paste the AI of the original battle sometimes (for regular enemies mainly) but you can also use a very basic AI:

7-a) Function Main_Init
Add a line "InitObject" with the new enemy's entry for the first argument and 128, 129, 130 or 131 for the second (one that is not taken already). If you added more than once of the new enemy inside the enemy group, add more lines like these.
Example: I added 2 Abominations in a battle with 1 Adamantoise and so I added the two last "InitObject" lines
Code: [Select]
Function Main_Init
    InitObject( 1, 128 )
    InitObject( 2, 129 )
    InitObject( 2, 130 )
    return

7-b) Add a function of type 0 (Main) for your enemy's entry (right-click on the function list for that). Nothing absolutly required there so you can just write a single "return" and parse.
Example: I let this example so you don't forget to add a main function nor a "return" line.
Code: [Select]
Function Abomination_Init
    return

7-c) Add a function of type 5 (ATB).
You're not forced to make an AI as complicated as the ones the game has. You can go with something as simple as a "GetRandom" for selecting the attack and basic SV_Target selection.
Example: My Abomination has two different attacks: Silent Slap which is single-target and Fira which is Multi-target. I make it so Silent Slap is used 2/3 of the time and Fira the remaining third.
Code: [Select]
Function Abomination_ATB
    if ( GetRandom % 3 ) {
        set SV_Target = RandomInTeam(SV_PlayerTeam)
        Attack( 4 )
        return
    }
    set SV_Target = SV_PlayerTeam
    Attack( 5 )
    return

7-d) Counter, CounterEx, Loop and Death functions are optionnal.

Lastly, you may customize the enemy's attacks/stats.

Important things to note:
- There seems to be a limit to how many different enemy datas can be in a single battle. You can have up to 3 different enemies in the Enemy List (otherwise, the game softlock when the battle starts). You can have up to 4 enemies in total in one battle anyway, counting duplicates.
- Same thing for enemy attacks : you can have up to 18 different attacks. I have no idea why there is this limit...
- When you are done with adding enemies/attacks, you should always have the list of attacks used by the first enemy followed with the list of attacks used by the 2nd enemy, etc... I'll try to remove that condition in the future but for now, it's better to respect it.

I also made a more extensive example of what can be done with this feature. And a video out of it.
https://www.youtube.com/watch?v=ODoALz8p_Kw
You can download the mod there (both .hws to see how I did and Steam files to play that battle) :
https://www.dropbox.com/s/0a2ct2r7r4i92wy/PC_PandeMadness.zip?dl=1
You can see that cameras can't be customized very well ^^"

I'll be off for work next week ; when I return, I'll see what can be done about field backgrounds.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: vivigix on 2016-11-26 11:56:53
Tirlititi I just watched video on YouTube,  it is amazing.
Thank you for your job. You are the best.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Fraggoso on 2016-11-30 23:18:45
Backgrounds, Backgrounds, Backgrounds ;D
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Baby5 on 2016-12-07 13:22:00
Thank you for this update! It works like a charm now, I have not encountered any bugs yet with the most recent version.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: itoikenza on 2016-12-11 00:29:14
 Wow. Tirlititi, you are a saint! A god among Programmers... Please don't forget my silly request of modding "Change" & "Defend"?!

Sent from my MotoE2(4G-LTE) using Tapatalk

Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Epiphoskei on 2017-01-19 00:25:00
Thank you, this is tremendous. In 3 hours I managed to do what I have wanted for ten years. I managed to hard-code the growth cap of Tetra Master cards at 255.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: resinate on 2017-01-25 12:11:00
is there a way to change the starting consumable items? or change items on a field map?
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-25 12:42:07
Yeah, the "simple" way to choose the starting item is by giving them through the script of the first "Prima Vista/Cargo Room".
Code: [Select]
AddItem( 236, 10 ) // Give 10 potions to the playerYou remove the default starting items with these lines :
Code: [Select]
RemoveItem( 236, 7 )
RemoveItem( 237, 2 )
RemoveItem( 238, 2 )
RemoveItem( 240, 2 )
RemoveItem( 247, 2 )
RemoveItem( 249, 1 )
RemoveItem( 253, 1 )
I think you can put these lines in the "Main_Init" function as it should run once at the start (I don't think it runs again after the Masked Man fight, but it should be checked).
The best place to put them is in the "Zidane_Loop" function though, next to the "Sure is dark..." line ("WindowSync( 2, 128, 34 )").

The starting items are defined in the CIL method "ff9item::FF9Item_Init". You might change the values there as well, but I don't recommend it as it could be a feature in a future version of HW to have a panel for automatically changing these starting items.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: resinate on 2017-01-25 12:53:02
yea i cant find the scripts ur talking about. are u using a different tool?

also any chance of adding in for steam version, higher than 65k hp it is possible to go above max in pc version. found this by messing with cheat engine
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-25 13:55:47
You have to write those lines in the script.
The scripts themselves are found in the panel "Environment -> Fields" which is present in HW since a long time.

Also, you can't go above 65 535 HP in PC version. HP and max HP are ushort. I don't know what you made with Cheat Engine, but you certainly did not set the HP to more than 65 535. Maybe you did change a temporary buffering of the HP, but that can't be used in the long run.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: resinate on 2017-01-25 22:33:30
but this will blow ur mind, use a tent on a end game boss
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: gorildo on 2017-01-29 20:31:37
I was thinking of trying something: addind an NPC to, say, Daguerreo's Library that can reset your characters stats, maybe charging a price. It sounds doable, but I'm unsure what to do. Could text limits be an issue? Because some dialog would be necessary...

Or maybe use an existing NPC.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-29 21:31:30
On PC version, you have no text limit and you can add any NPC that you want (it'll be a bit tedious to get his animations, though, because they are not yet documented).
However, the big problem here is that you can't manipulate the stats of the characters through scripts :/
Nor levels, not strength/magic, etc... The only things you can somehow manipulate are the Max HP and Max MP, using a kind of bug, but you have to be in a battle to change them, and I'm pretty sure the changes will revert when the character levels up.

In the future, I plan to add custom functions available in scripts, so you could do what you want with the stats, but that's not for now.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: gorildo on 2017-01-29 21:49:47
I was thinking of a function that "introduces" the character to the party, like the first time you meet them.

Say, you talk to an existing NPC, he gives you a list of the chars in your party, pay 100k and the character is reset. I thought it would be simple.

But thanks. Btw, I meant PS version, Pc version is ew. :o
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-29 22:39:18
Nice catch :D

Well, yes, but the PC version has no problem of space capacity ^^'
You can add a few text in the PS version, but you can't add NPC : you'll have to use an existing one indeed.

The usual script function to talk to a NPC is [TheModel]_SpeakBTN. It presents like this :
Code: [Select]
Function OldManOrSomething_SpeakBTN
    // Keep the first few lines : a player can talk to a NPC only if he has the control
    ifnot ( IsMovementEnabled ) {
        return
    }
    set VAR_GlobBool_158 = 0
    if ( VAR_GlobBool_159 == 1 ) {
        DisableMove(  )
        if ( VAR_GlobBool_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    0x27( 127 )
    WaitTurn(  )
    // Keep the following 3 lines if you want the NPC to face Zidane when he talks
    set VAR_GlobUInt8_16 = GetEntryAngle(255)
    TurnTowardObject( 250, 32 )
    WaitTurn(  )
    // The following are the animation of the NPC while he talks
    SetStandAnimation( XXX )
    RunAnimation( XXX )

    WindowSync( 0, 128, XXX )     // This line must be changed : choose your custom dialog here
    // For dialogs with different choices, use "GetDialogChoice" to know the one chosen
    if ( GetDialogChoice == 0 ) {     // 0 is the first choice. Let's say the dialog is "Do you want to restart your stats? Yes/No"
        if ( GetGil < 100 ) {
            WindowSync( 0, 128, XXX ) // Not enough money
        } else {
            WindowSync( 0, 128, XXX ) // Which character?...
            if ( GetDialogChoice < 8 ) { // Let's say the ninth choice is a "Cancel" choice
                SetPartyReserve( 0 )       // Explained below
                SetCharacterData( GetDialogChoice, 1, 255, 255, 255 )  // By using 255, you don't change the value
                RemoveGil( 100 )
                RunSoundCode3( 53248, 1045, 0, -128, 125 ) // Optional : play a sound. This one is the "buy something" sound
                SetPartyReserve( 255 )
            }
        }
    }

    // Go back to a standard animation and turn back to its previous facing angle
    WaitAnimation(  )
    SetStandAnimation( XXX )
    RunAnimation( XXX )
    set VAR_GlobBool_158 = 1
    if ( VAR_GlobBool_159 == 1 ) {
        if ( VAR_GlobBool_156 == 0 ) {
            EnableMove(  )
            0x27( 255 )
            if ( VAR_GlobBool_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    TimedTurn( VAR_GlobUInt8_16, 16 )
    WaitTurn(  )
    return

I am not sure how it'll work. It seems indeed that you can change the level this way, but you can't choose which level exactly. However, you're lucky because it seems to be possible to go back to lvl 1 (I didn't test it though).
Normally, the new level is the average of the (other members of the) party reserve's level, but if the party reserve is empty, it's 1. You just need to empty the reserve while calling "SetCharacterData" and put it back to normal afterward.

The dialogs must contain some [INIT_MULTICHOICE] opcode. If you have troubles with that, tell me. You can add a new dialog with a right-click on the dialog list (it always add it at the end).

EDIT : Warning. To use a large number in a script (more than 32767), you need to append 'L' to it most of the time.
For instance, use "100000L" and not "100000". It will bug otherwise (that makes me think that I should throw a warning there...).
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: gorildo on 2017-01-30 18:44:42
A quick question, when editing enemy attacks, are the attacks identified by IDs or variables in the script? For example, an enemy that casts Thundaga, does the script explicitly refer to that spell, or to the ID (or slot) "occupied" by the list of attacks in each enemy entry?

Say, if you replaced such a spell with any other, would the enemy refuse to cast that spell?
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-30 19:17:17
It refers to the ID, which is indeed the slot of the attack. If you replace a spell by another one, he will try to cast the new spell in place of the old one (what might happen is that the targets are not compatible with the new spell animation, and so not all the targets are affected).
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: gorildo on 2017-01-30 19:34:10
I thought so. I guess as long as you substitute a single targeting spell for a single targeting and a multi for a multi, it ought to work.

Another thing, when adding scripts to heal an enemy (to simulate more than 65k HP), isn't it better to set it to heal x amount y times when it is below 20,000 instead of 10,000? That way, the lowest it can get is 10,001, not triggering <10,000 conditions.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-30 19:49:25
The best is to use the < 10 000 condition in the sense you'll need to heal less times. If there is that "HP less than 10 000 => end the battle" system, you can use it and make an alternate branch that heals the enemy instead of ending the battle.

That's what I did there (http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426).

If you use a < 20 000 condition, that's all ok though.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: resinate on 2017-01-31 08:45:14
is there any method to enabling these
*debug moggle shop
*save in menu
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-31 14:51:09
The debug moogle shop can be enabled field by field. It has no point though since it doesn't do anything.
In each of Moogle's scripts, specifically near the beginning of the functions "Moogle_Make_SpeakBTN", you have those lines :
Code: [Select]
            set VAR_B7_9 &= 127
            set VAR_B7_10 = ( 71 | ( VAR_C6_372 << 4 ) )
            if ( VAR_B3_1 >= 0 ) {
                set VAR_B7_10 |= 8
            }
            while ( VAR_B7_9 < 128 ) {
                RunSoundCode3( 53248, 1362, 0, -128, 125 )
                EnableDialogChoices( VAR_B7_10, VAR_B7_9 )
                WindowAsync( 2, 8, 3 )
Replace the line "set VAR_B7_10 = ( 71 | ( VAR_C6_372 << 4 ) )" by "set VAR_B7_10 = ( 103 | ( VAR_C6_372 << 4 ) )" to enable the debug choice. You can also replace it by "set VAR_B7_10 = 127" to enable all the choices (since the mogshop will be invalid, trying to use it in-game will bug though).

There is no leftovers of a "Save in menu" option. It might be a hoax.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: JBedford128 on 2017-01-31 15:38:18
I assume he refers to enabling the Save option in the menu (which was used for debug purposes). At the very least the menu name and description are left in the data.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-01-31 16:22:49
Ok, I suppose I didn't search enough.
Anyway, in the MenuUI.cs source file, there is no "Save" option.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: aidolu12 on 2017-02-02 13:08:28
Hi Tirlititi, seems the tool has really advanced since i used (Final Fantasy Formula IX).

I am on the start of a new project, and interested on asking if was it possible to create a MIP CODE that let an item give exp or ap to the characters.

Thank you for all your work.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: Tirlititi on 2017-02-02 16:26:58
Hi Aidolu ! Welcome back :D
Unfortunatly, while it is surely possible to do it, I don't know how... The MIPS code could certainly access to the AP and exp of the characters (in battle - it wouldn't be usable in menu anyway -), but it would require the expertise of a good person who does RAM analysis to find which sequences to use to retrieve these values.

There's a list of known fields in the MIPS help that you can access in the spell effect codes. There are HP, stats, trance gauge, level and activate supporting abilities, among others, but there's no exp nor AP (and I think it's not in the same structure so you wouldn't find them even by trying every possible figures).

In order to increase the level, that's this sequence :
lbu:     $1 = $19[122] & 0xFF
addiu: $1 = $1 + 1
sb:      $19[122] = $1 & 0xFF

However, I would bet that it would have only a twisted effect to directly change the level value :
1) Max HP/MP will most likely increase, but not the other stats (strength...),
2) The exp doesn't change so it will need more time to level up once again after that,
3) It may even be possible that the level gets reverted back to normal at the end of the battle. In this case, the only noticeable difference will be the effectiveness of spells like Lvl 5 death or so...

Sorry, I kind of deserted the PSX version for the Steam version now... Well, when something can be done for both, I do it (copy/paste the spells of enemies, for instance), but MIPS is just too related to the PSX version to get improved.
Title: Re: [FF9] General editor - Hades Workshop (0.35c)
Post by: aidolu12 on 2017-02-03 07:48:14
Hi Aidolu ! Welcome back :D
Unfortunatly, while it is surely possible to do it, I don't know how... The MIPS code could certainly access to the AP and exp of the characters (in battle - it wouldn't be usable in menu anyway -), but it would require the expertise of a good person who does RAM analysis to find which sequences to use to retrieve these values.

There's a list of known fields in the MIPS help that you can access in the spell effect codes. There are HP, stats, trance gauge, level and activate supporting abilities, among others, but there's no exp nor AP (and I think it's not in the same structure so you wouldn't find them even by trying every possible figures).

In order to increase the level, that's this sequence :
lbu:     $1 = $19[122] & 0xFF
addiu: $1 = $1 + 1
sb:      $19[122] = $1 & 0xFF

However, I would bet that it would have only a twisted effect to directly change the level value :
1) Max HP/MP will most likely increase, but not the other stats (strength...),
2) The exp doesn't change so it will need more time to level up once again after that,
3) It may even be possible that the level gets reverted back to normal at the end of the battle. In this case, the only noticeable difference will be the effectiveness of spells like Lvl 5 death or so...

Sorry, I kind of deserted the PSX version for the Steam version now... Well, when something can be done for both, I do it (copy/paste the spells of enemies, for instance), but MIPS is just too related to the PSX version to get improved.


Oh though MIPS where for both, I was thinking on passing to STEAM version when you just released the tool for it, but I had these problems with the tags for the colors and text filling, then I move from my country to another so until now I did not have time for it. Is it possible to edit the effects for the STEAM version, I will download it again (I bought it but it was installed on my PC from my hometown.)

Further than that, just to thank you again, this tool has improvised to impressive levels, and my mind to, to make better mods.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Tirlititi on 2017-02-10 23:28:44
Update to v0.36:
- Added a Background Editor Tool. It allows to convert images into Steam background format files and then import them. More on that below.
- Added a CIL Macro to make the engine accept the converted backgrounds (in particular, for changing the resolution).
- Added support for the backgrounds that contain titles (Ice Cavern entrance, Qu's Marsh entrance, etc...).
- Fixed the CIL Macro "Unlock Ability Learning": it made the few stage battles at the start of the game bug.
- Improved the Script Editor (replaced the default variable names, added a few safety checks when parsing functions, added support for single-lines comments, ...).

So, the big new thing is the background editor. Thanks to it, upscaling and modifying backgrounds is possible. There are still a few flaws with the quality (people noticed seam lines or black pixels in-game). With a bit of work on the images, it can be perfected though.

A big hurray to Fraggoso who started to upscale and fix the images.

If you want to import custom backgrounds, you should first go to "CIL Code -> Macros", apply the "Custom Backgrounds" macro and save the Steam mod: it will make the engine compatible with the custom backgrounds (in particular if you change the resolution). If you don't do it first, do it last :p

So, the background editor gets available once you got to the "Environment -> Fields" panel. It has 3 panels itself :
- Converter -> From a few images (1 image per layer), create a Steam formatted file (.tex) of the background that can replace the default files in the game's assets.
- Mass Converter -> Same as converter, but it can do several fields consequently. Hopefully, the program doesn't run out of memory too soon (backgrounds are very RAM consuming).
- Mass Importer -> Take the .tex files and import them in the game's assets (in the StreamingAssets folder, p0data11.bin to p0data19.bin).

The converter lets you verify that the images are loaded correctly and that they match with the tilesets. There are several parameters:
1) Background Image: Select one of the layers of the background. All the layers must be in the same directory and be named
SomeName0.bmp
SomeName1.bmp
SomeName2.bmp
etc...
For multi-background fields (such as the Prima Vista's Cargo Room, that has 2 cameras and thus 2 images), it must be
SomeName0_0.bmp
SomeName0_1.bmp
...
SomeName1_0.bmp
...
Each of the bmp (or tga or tiff) must contain a layer which correspond to one of the field's tile block.
The Gimp add-on save-layers-tiff-24 (http://wiki.panotools.org/Multi-Layer_TIFF_editing_with_the_Gimp) is perfect for generating each layers with the right name from the .tiff images exported by HW.
2) Destination Folder: Where to save the Steam formatted file. The name of the .tex file is generated to match the background and should not be modified.
3) Use Game Tiling/Custom Tiling: Unavailable for now. In the future, this will allow to import entirely custom backgrounds, but for now, they need to match the normal ones (same number of layers, each of them placed at the same place in the whole image...).
4) Field: Choose the field corresponding to your background image.
5) Sort Layers by depth: The layers can be sorted either by their ID (the ID is used in the scripts, for instance) or by depth. Hades Workshop export the layers of the backgrounds by depth so you can usually let it checked.
6) Revert Layer Order: When checked, the foreground-most image is numbered "0" while it's the background-most image when unchecked. With the Gimp add-on, the order is reverted.
7) List of Tile Blocks: Select a few of them to verify that the layer match with the tile block. A greyed area is drawned where the layer is expected to be.
8) Resolution: By default, resolution is 32, meaning 32 pixels per tile. If you use upscaled images, modify this (resolution can go up to 123 for now, which is a bit less than 4x the Steam resolution and is already huge files ; a resolution of 64 seems honest for me).
9) Compression Quality: Select the compression algorithm to use. High quality is slower while low quality is faster. In any case, it doesn't change the file size of the output, only the time required to convert it.

Finally, there's also the case of backgrounds containing a title. Since those titles are present for every languages in the Steam version, you need to have layers for them in every languages as well (usually, it's 2 layers per language). The English (US) title layers should be at their usual places, and the other title layers must come after all the others in this order :
English (UK), Japanese, German, French, Italian, Spanish.
Again, the layers as they are exported by HW are in the correct order.

In the Mass Converter panel, you find the same parameters but the image file names are also indexed by the field ID (or are inside a folder indexed by the field ID). With the default settings, "Field0\Background1_2.tif" corresponds to the 3rd layer of the 2nd background of the 1st field (Prima Vista/Cargo Room). You may also use the indexing of the real IDs of the fields (used in the scripts among other places) instead of their order. With that option, Prima Vista/Cargo Room has an ID of 50 and thus should be placed in the folder "Field50" instead.
A window displays how many backgrounds were spotted and converted and whether there was a problem.

In the Mass Importer, you select a FF9_Launcher.exe. You can choose the one that is currently opened in HW, but the program may crash then after leaving the background editor (that's quite harmless if you weren't making a mod besides the backgrounds though).


One last thing, I've been told that this version crashes on start (when opening a game). But it works just fine for me, so can anyone confirm that it crashes or that it works correctly? Thank you.

I'll soon write a post about the current status of FF9 modding. What has been done and what can be done next.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-11 00:36:55
Hey, Tirlititi, one of the WiP builds crashed. One that is made sometime after 2017-02-03. This 0.36 release seem to be working.

Anyway, thanks for all your work! I have a lot of stuff to do now. Expect me to bother you with "artifacts" again :D

Edit: I spoke too soon. This version does crashes, but after reading fields from PSX disc1 (US version), not steam version.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Tirlititi on 2017-02-11 12:05:52
Updated to fix that. There was indeed a weird behavior in the compiler that I didn't know. Thanks Meru :)
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-11 15:05:42
Update works past that point, but there seem to be another problem:
Open FFIX PSX -> Environment -> fields -> open synthesyst's "Manage" dialog and close it, switch to weapon shop (or possibly any field) then back to synthesyst -> crash.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-11 17:34:36
The newest Version still doesn't work for me... the older one still working. :/
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-11 19:42:56
Hey, Tirlititi, I seem to found a problem with the most recent HW.
Alexandria/Main street 1
It exports (and expects on import) 2 new tileblocks (page14-15) that look like this
(https://i.imgur.com/SuyAlGE.png)
This is the one that has a title. Selecting single language or all makes no difference. In wip build it wasn't the case though.
And judging by in-game results they are being used...???
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Tirlititi on 2017-02-11 20:37:52
Hum... those are the English (UK) tiles. It seems that I don't handle them correctly.
The thing is, they are not used in-game: the US tiles are used instead of the UK for nearly all the titles (all except South Gate).

I'll try to fix that (and the other problems) but you can bypass it for now by copying the English (US) layers and replace those ill tiles by the US ones. If I understand correctly, what happens now is:
- The title is not present for UK so I export something incorrect (I meant to export a duplicate of the US but I made a mistake),
- When converting, the US title is imported and then the UK title is imported over it, so this fuzzy title is used in place of the US (the others should be correct).
So yeah, replacing the UK title with a duplicate of the US title should be ok. The only field for which it matters is exporting the title correctly.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-11 21:18:18
Tirlititi, okay then I have a surprise for you. Here is what happens if I replace those layers as you said  :mrgreen:

(https://i.imgur.com/J9x6YZN.png)
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Tirlititi on 2017-02-11 22:29:34
Pft.
That no good surprise.

Remove the problematic images then. Just delete (or rename) the "Backgrounds10.tif" and "Background11.tif" and do it again. In the Mass Converter, there are warnings if a few images are missing, but I forgot to throw a warning in the Converter so it will tell you it did just fine without them (and it will be right, I tested, period, no more bad news about that  :-X ).
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-12 15:38:50
The program works fine on my working laptop (from the company with Win 7). On my normal PC (win 10) it refuses to open neither the psx binarys nor the Launcher from the steamversion...
Is there any way I can give you and error log of some sorts?
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-12 17:05:45
Tirlititi
About these black dots: https://i.imgur.com/cDpUCJT.png
I'm not sure this is something I can work out on my side...
This is how HW's tileset looks like: https://i.imgur.com/QEY1WNv.png

Edit: also, I just noticed that this particular (green) layer has a clear signs of antialiasing. This could be the reason why these squares are slipping-in -> by being averaging with nearest pixels.
In that case the question is, why this layer gets scaling and/or antialiasing while other (tickets tent) - don't? Can we enforce that for all layers to (possibly) get a smoother picture?
My original layer does not have any half-transparent/antialiased pixels. Whatever opaque color or full transparency.

On a side note, I wasn't able to process this particular image fully with the errors "can't allocate memory" for a couple of last (biggest) layers. HW wasnt using more than 300megs of ram though.
The problem seem to be went away after I patched executable with largeaddressaware flag. Maybe just a coincidence... dunno.

Edit2: also any idea what would happen if we'll patch texture to be processed with trilinear mode instead of bilinear? (if anything). Also maybe patching it for point filtering mode may remove this processing of the green layer?
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Tirlititi on 2017-02-12 17:21:48
Maybe it has something to do with premultiplied alpha...
The way FF9 handles the alpha is pretty bizarre ; they kind of still use the PSX way to do things in that regard. The best is to use image with only 2 alpha values: fully transparent and fully opaque (or half-opaque for the semi-transparent layers). I'm not saying it will fix the problem, but it worths the try. It's also a big argument for reworking entirely the engine about it, and get rid of the tiled format (this way, any alpha value could be used for any layer).

EDIT: About the "can't allocate memory" error, I also got it once and, by trying again right after, without even closing the program, it worked. I don't really know why it sometimes throws that error (maybe when requesting too much RAM space at once, it can be refused?).
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-12 17:24:16
Thats what I do. I only have fully transparent and fully opaque. Also pls see my edits above.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Tirlititi on 2017-02-12 17:44:36
I don't know why this layer is green. I thought you colored it on purpose... It's not green in the Steam version, right?

I don't know about trilinear filtering, you're the one doing tests about it. Here are the different modifications done on the images:
1) As I explained to you, the tiles in the atlas are 36x36 instead of 32x32 and the 33x33 center region will be used by the 3D engine. So when importing the backgrounds, I need to somehow expand the 32x32 tiles into 36x36 tiles ; the center region is kept and the borders are averaged with the color of the tile next to it. In the mean time, I also gives color to the transparent pixels because they will have an impact on the DXT5 compression. Currently, I average the transparent pixels with the opaque pixels belonging to the boundary of the object near to it, but I tried a lot of other methods, and the default atlas doesn't do it like that.
2) The atlas gets DXT5-compressed. All the pixels are packed into 4x4 blocks with a few color variations in them. I use an external library for that (Squish) that is quite efficient. The compression quality parameter is used at this point to compute more fitting color variations in those 4x4 blocks.
3) The atlas is rendered by the game's 3D engine: the 33x33 square at the center of the tiles are used as textures for 3D quads (couple of triangles in fact) and the whole thing forms a kind of flat 3D model.
4) The rendering is scaled depending on the resolution. I have no idea of which algorithm is used there and I can't help you if you want to change it at this step.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-12 17:55:49
I did colored it on purpose. Here is exact layer i used https://dl.dropboxusercontent.com/u/110558786/Report/Square28.7z

The rendering is scaled depending on the resolution:
what i am saying is, game has different approaches for different layers. Or at least it looks like it. "Tickets" tent and most of the textures looks like scaled with "point" method. They show hard edges and no artifacts. While some layers, like this green one seem to be processed differently. You can see it is "blended" into the background. These half-transparent green edges is not my doing nor it is related to DXT because it is not present in decompressed HW's output as I've shown on 2nd image.

So my theory is, these black dots are slipping in because of that "other processing" game does for this layer.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-12 19:17:55
Here is what i mean:

I create all layers like so - hard edges, no antialiasing:
(https://i.imgur.com/ubVUs9V.png)

Some layers look in game just like that even after adjusting to my resolution.

Some layers, on the other hand, start to look like this all on their own:
(https://i.imgur.com/NM9t4Cb.png)

Now I have not checked all the layers out there, but incidentally layers that look like so also have a black dot issue.

Also as I described before, issues appear even on exporting and re-importing the same thing without modifications (grid issue being one of that)
There probably is a weird behavior in-engine, or even a bug, but original textures don't make it apparent because their tile paddings are precisely a copy of the tile's edge-pixel. (Or it could be Silicon's workaround for Unity's crappy tiling)

It is up to you of course what to do about that, but I think it is easier to create textures in a compatible way instead of figuring out what engine does there.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-14 09:48:21
Hi Meru, are you creating all layers from scratch?
The engine is really nitpicking on the Layers. Slight variations done to the background layers opposed to all other layers can yield very bad results like gray/black seams and/or the dot's you're mentioning.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Kaldarasha on 2017-02-14 11:26:19
A reason why those filtering does happen is probably that a few parts of the backgrounds are in fact 3D objects and the games filtering (bilinear or trilinear) does affect these objects.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-14 12:07:46
A reason why those filtering does happen is probably that a few parts of the backgrounds are in fact 3D objects and the games filtering (bilinear or trilinear) does affect these objects.

Nope, FFIX doesn't use any kind of 3D realtime models. Some 2D alpha effects like smoke is used but they not part of the static backgrounds and thus can't be filtered.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Kaldarasha on 2017-02-14 16:16:26
Nope, FFIX doesn't use any kind of 3D realtime models. Some 2D alpha effects like smoke is used but they not part of the static backgrounds and thus can't be filtered.

There are some realtime models, but that's not what I meant. When I'm correct the problem does only occur on the layers, which can hide an object/character. I remember, that someone wanted to make a similar engine as FF7 by using Blender and encountered a problem with these layers, because he couldn't easily copy the way as Square did it for the game. So he placed the layers in the 'room' similar as an object. And that is what I assume the port team did with the BG's of FF9. That would explain why the texture filter is working on these layers.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-14 16:32:37
Hi Meru, are you creating all layers from scratch?
The engine is really nitpicking on the Layers. Slight variations done to the background layers opposed to all other layers can yield very bad results like gray/black seams and/or the dot's you're mentioning.
Not sure what do you mean by "from scratch". You mean layer edges? Sometimes yes, sometimes no, but this doesn't matter. BTW the problem can be seen on some of your older screenshots of synthesist too.
Edit: of course for the final product all the layers must be redone. Leaving them as is and simply swapping backgrounds just makes things different kind of ugly from what it used to be with default backgrounds.

The dots are there because this is how HW creates textures. The problem is that these dots are outside of the range that must be shown on screen. I think that instead of trying to fix the engine, it is better mimic the way Silicon created textures. I dunno what the engine does there, nor I want to know, but these dots (and probably grid as well) look like a product of averaging with nearest pixels, like bilinear or better resampling or fxaa-style antialiasing (unlikely in this case since I think it works in screen-space only). When it happens that the nearest pixel is a black dot - sometimes we can see it on screen, when it happens to be imperfectly mirrored edge pixel - we see grid. The grid is very hard to spot if you deal with 64x64 tiles but quite easy with default ones.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-14 18:09:32
Not sure what do you mean by "from scratch". You mean layer edges? Sometimes yes, sometimes no, but this doesn't matter. BTW the problem can be seen on some of your older screenshots of synthesist too.
Edit: of course for the final product all the layers must be redone. Leaving them as is and simply swapping backgrounds just makes things different kind of ugly from what it used to be with default backgrounds.

The dots are there because this is how HW creates textures. The problem is that these dots are outside of the range that must be shown on screen. I think that instead of trying to fix the engine, it is better mimic the way Silicon created textures. I dunno what the engine does there, nor I want to know, but these dots (and probably grid as well) look like a product of averaging with nearest pixels, like bilinear or better resampling or fxaa-style antialiasing (unlikely in this case since I think it works in screen-space only). When it happens that the nearest pixel is a black dot - sometimes we can see it on screen, when it happens to be imperfectly mirrored edge pixel - we see grid. The grid is very hard to spot if you deal with 64x64 tiles but quite easy with default ones.

I just wanted to know if you're doing the layer edges by hand instead of using a template (either PSX or Steam).
And yes, I also have these dots. It doesn't distracted me too much but they're there. :/
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-14 18:19:52
Fraggoso
Heh, I was too focused on the problem we were discussing ^^
The templates you are talking about I am using of course, but only for now. They will have to be redone by hand at some point. Maybe with vector masks (https://i.imgur.com/zeeepfQ.png) maybe something else, not sure yet.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-14 18:22:44
Fraggoso
Heh, I was too focused on the problem we were discussing ^^
The templates you are talking about I am using of course, but only for now. They will have to be redone by hand at some point. Maybe with vector masks (https://i.imgur.com/zeeepfQ.png) maybe something else, not sure yet.

I found it easier editing them via a new alphamask and just adding or deleting. That way you can instantly see if there're some problems.
But yes, they CAN look nice and it's a shame that Silicon Studio did that weird upres of the images as the seams aren't 1:1 anymore like they used to be on PSX. Now they look a little bit Frankenstein. >.<
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-14 18:51:07
Speaking of layers, I am curious about different thing. For each of the moving objects in PSX version, HW creates only a single layer. This includes everything: doors, flags, water, clocks... how they were animated then? PSX engine was distorting and moving the layers in various ways? But for example that fan from a picture I posted above (that is on the disabled layers). You can not create all these layers by moving or distorting the fan on PSX layer.

Edit: in addition to that. It is known that all the moving objects and most of the scenes even were originally created in 3D by various artists. So instead of distorting a layer they should have made a few "shots", the same way we see in PC version? So does the HW output for PSX really complete?
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-14 19:18:10
Speaking of layers, I am curious about different thing. For each of the moving objects in PSX version, HW creates only a single layer. This includes everything: doors, flags, water, clocks... how they were animated then? PSX engine was distorting and moving the layers in various ways? But for example that fan from a picture I posted above (that is on the disabled layers). You can not create all these layers by moving or distorting the fan on PSX layer.

Edit: in addition to that. It is known that all the moving objects and most of the scenes even were originally created in 3D by various artists. So instead of distorting a layer they should have made a few "shots", the same way we see in PC version? So does the HW output for PSX really complete?

I don't understand what you mean exactly. ^^;
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-14 19:25:21
I mean that in PC version animation is done by swapping layers at a right time. But in PSX, textures contain only a single layer, so there is nothing to swap. There are 2 possible outcomes. Whatever PSX engine generates extra frames on-the-fly based on that single layer, or HW's texture output is not complete.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-14 19:29:20
I mean that in PC version animation is done by swapping layers at a right time. But in PSX, textures contain only a single layer, so there is nothing to swap. There are 2 possible outcomes. Whatever PSX engine generates extra frames on-the-fly based on that single layer, or HW's texture output is not complete.

Are you sure?
If I use HW to rip the psx tiles they're animated and are only tiles, so I suppose those are layers themself. But of course, I'm no technican. :/
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Meru on 2017-02-14 19:41:19
Are you sure?
If I use HW to rip the psx tiles they're animated and are only tiles, so I suppose those are layers themself. But of course, I'm no technican. :/
I see. Now that you say it. It turns out to get a complete output I must check all the checkboxes 1st for that particular animation. Never bothered with that >__<
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-14 19:44:21
I see. Now that you say it. It turns out to get a complete output I must check all the checkboxes 1st for that particular animation. Never bothered with that >__<

Yes you have to check the tiles or else you'll not get all the layers but only the base backgrounds +, if there're moving tiles, only the first aniamtion cycle.
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-15 22:29:02
I can confirm that hw now operates with win 10. :)
I'll update tomorrow after I spend some more time testing it but for now I could load, convert and import as well as do the macro for the highres backgrounds.

Thanks!
Title: Re: [FF9] General editor - Hades Workshop (0.36)
Post by: Fraggoso on 2017-02-16 11:10:05
Okay everything seems to work.
I also tested the multi name fields and they also work and after deleting 10 as well as 11.tiff the behaviour of the field and seams are normal again.

As I also tested to Waifu the title I get this result: http://screenshotcomparison.com/comparison/200783

Aren't the titles half alpha instead of full or opaque? I don't know why I have those blacks in it. ;P
Still the background for the names benefits from a better gradient.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-16 14:03:40
Updated to v0.36b to fix that crash at the beginning. That surely was the dumbest error I ever made in a release...

I also tested other algorithms to convert the background into the atlas, but without better result, so I kept the last one. I won't go back to it for now ; next time I'll tackle the problem by the "remove the tiling concept" approach.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Meru on 2017-02-16 20:14:24
BTW I still have a crash issue with PSX
Quote
Open FFIX PSX -> Environment -> fields -> open synthesyst's "Manage" dialog and close it, switch to weapon shop (or possibly any field) then back to synthesyst -> crash.
These exact steps crash it 100% of times.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-16 20:41:54
Ah yes, I was able to reproduce that bug (the PSX backgrounds are not displayed correctly in the viewer also). I forgot to check where it comes from, sorry :/
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Meru on 2017-02-17 07:12:55
Tirlititi
I keep forgetting to ask. Are there any plans to support 32bit version? Or it is already supported and I didn't noticed?
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-17 08:34:17
It is already supported, you just copy the outputs of HW into the x86 folder instead of the x64.
The two folders are, with the exception of few files ignored by HW, carbon copy of each other.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Fraggoso on 2017-02-17 10:44:55
Hey Tirlititi, we talked about the FMV's in one of our sessions.
I've interpolated them from the choppy 15 FPS to a more fluider 30 FPS

https://onedrive.live.com/?authkey=%21AHBfnOAR4A5MdCU&cid=C52FE2188BAD82E8&id=C52FE2188BAD82E8%21422&parId=C52FE2188BAD82E8%21421&o=OneUp

When I just put them in the folder they play as 15 FPS.
Maybe, because you want to move away from the backgrounds, you could give it a try? ^^
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Meru on 2017-02-18 14:33:35
Tirlititi
I just realized that you mentioned "seam lines" along with black pixels when posted HW 0.36. I feel like there was a little confusion. In case with "seam lines" you was right. They appear because of doing things incorrectly or taking shortcuts/sacrificing quality for the sake of doing things faster. I wouldn't try to fix these things though. Better not to make them to begin with. Black dots, on the other hand, are a totally separate thing. Too bad I realized this just now.

Anyway, I wanted to ask a different thing. It would probably be a good idea if files in texture output folder will not be overwritten before checking for image compliance with a selected item in dropdown list. Would prevent losing textures to accidentally selecting a wrong item. (Using .tmp file may work too.)

Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-18 17:21:37
@Fraggoso: yeah, i'll do some test to see if it can be modified easily. I'll probably need a FMV as well, not MBG (they may use a different FPS parameter). You're sure you can replace the FMV with .mp4 files? The normal format is .ogg for FF9 FMV.

@Meru: Yeah, all those tiny defects suck, but I gave up trying to fix them with hand-made twisted solutions. They'll surely go away once we change the engine to non-tiled backgrounds.
I'll think about making a .tmp file and rename it only if the process was successful (no error thrown).
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-18 17:24:56
So, I've been developping Hades Workshop for a bit more than 5 years now. I accumulated quite a lot of knowledge about Final Fantasy IX, a game I love, and about its in-depth functioning. Now the Steam version is out and the possibilities it allows in the long-term are enormous. I'm not planning to give to HW more time than I currently give - I have a full-time work besides that - so I feel that either HW's development should involve more people, either it will just keep going at this rate, that can be slow sometimes. I made the github project (https://github.com/Tirlititi/Hades-Workshop) page some time ago in that perspective and I hope people will get interested in contributing.

This post serves several purposes:
1) It's a list of what I currently believe to be feasible in terms of FF9 modding. I tried to make it exhaustive but I excluded what I think should never be related to HW (a save editor -> gjoerulv already made a good one ; Messing with the aspect ratio -> it's better done with an external program...).
2) It shows what you can do to participate to this program. You don't necessarily need to know programming to help: a lot of things can be done only with patience and/or different computer skills. What you surely need though, is a certain amount of passion for this game.

If you want to contribute to the project, the best ways to contact me are either send me a PM here, either send me an e-mail at:
laroche.clement1 at gmail.com

I color each of the points depending on what kind of skill it requires to be done.
Blue: You need to know how to use some aspects of HW.
Red: You need to know C++ programming.
Brown: You need to know C++ programming and get to know the source code of HW.
Green: You need another specific skill, like 3D modelling or Unity coding.
Of course, I plan to do them myself if nobody comes and propose his help. I'm usually focusing on the brown points and I'll most likely keep doing that.

EDIT 1: I started to strike out what has been done already.
EDIT 2: since I retired from modding, everything that is not stricken out will not be done by me.

MODDING THE ASSETS
'Assets' are the name that Unity gives to the game's resources, including 3D models, textures, interface aspect (UI), musics, sounds. I'll focus on these but maybe you'll think of something else as well.

The files p0data1X.bin with X ranging from 1 to 9 contain Field related data (backgrounds),
The file p0data2.bin contains Battle related data (3D models of the battle scenes),
The file p0data3.bin contains World Map related data (3D models),
The files p0data4.bin and p0data5.bin contains the other 3D models and their animations respectively (3D models of enemies and player characters in battles and 3D models on the field),
The files p0data6X.bin with X ranging from 1 to 3 contain the musics and sounds,
The files levelX (in particular level1 and level2) seem to contain the UI datas,
The file mainData contains a 'ResourcesManager' file needed for authentifications of most of the other assets.

The assets are not in the same formats in PC as their PSX counterparts. Also, those formats are not custom to FF9 and thus it would be way better to export/import them rather than adding a feature in HW for modding them directly.

The textures are mostly DXT5 compressed. I already use a library to compress/decompress them (Squish) so I can add a feature in HW to convert them into more usual formats (bmp, tga, tiff...).
The 3D models are Unity-serialized FBX models. They can now be deserialized into FBX but serializing them back doesn't work correctly.
The UI data format is some kind of Unity based binary format. I don't know if it's a standard binary, but it represents things like GameObject, MonoBehavior, Transform, etc... It shouldn't be hard to figure out how to mod them for anyone who knows a bit about Unity.
Musics and sounds are all in the .akb format, which is also easy to read (Audacity does that). It seems that it's not so easy to export files in the .akb format but FF4 modders also encounter this format and they found there way out (for what I understood, .akb is only .ogg with a different header).


ADDING FEATURES TO HW
There are two kinds of features that can be added to HW: adding tools and adding panels.
A panel is an aspect of the game or of the gameplay that could be modded in HW. It usually allows to modify datas that are very specific to FF9 and so adding a panel requires getting to know the binary format of the aspect you want to mod.
A tool can be made for simplifying the life of the modder. They could also be standalone programs, but using the capacities of HW would surely be simpler for most of them.

Here are examples of tools that would be nice to have:
A Damage Calculator: Allowing to get the ranges of damage done by spells/attacks against specific monsters, under specific circumstances. Also useful for the chances to hit and the chances to add a status. All the precise formulas are now known things, so it would only require to code the tool and give it a nice UI.
A Unity Assets Viewer: There are already Assets viewers. Not all of them work correctly with FF9's assets, but some of them does (UnityEx 1.1.5 for instance). The use of a Unity Assets Viewer specific to FF9 would be to be able to find the assets more easily (most of the time, the names of the assets are opaque and they're not their real file names). It would also be useful to make converters to common file formats (like DXT5 <-> .bmp converter for images).
A Randomizer: I made a randomizer for the PSX version, but porting it to the Steam version would require to use more of the power of HW for reading the FF9 Steam datas.
A changelog automatic generator: Adding a tool that compares the data from the game opened with the data from a HWS file and generates a summary of its changes may be useful (for generating changelogs but also for a potential textual format of HWS, because why not).

And here is a list of new possible panels to add:
Walkmesh Editor: With the possibility to import custom backgrounds, it would be nice to be able to edit or create the walkmeshs as well. Walkmesh are the paths on which the characters can walk, so making new areas requires being able to make walkmeshes. Their format is not too complicate (and is already readed by HW) and so the work there would be to implement a convenient way to modify them in 3D. It could also be a possibility to import 3D models (untextured, unanimated...) to use as walkmeshes, but there will be parameters to adjust in HW anyway, as a walkmesh is not only a 3D model. The best solution may be to add a walkmesh support to the Background Editor tool.
Camera Editor: Also needed along with walkmeshes to create new fields, but there are also the battle cameras that should be editable. As of now, the only camera movements available in each battle are the ones already there. Being able to add new cameras make the variety of the enemies' attacks stand out. It'd also be a great tool for making dialog moves in battles.

There's also the possibility to make the tool compatible with the Android and iOS versions. Most of the datas should be the same for what I know, only packed differently.


IMPROVING HW CURRENT FEATURES
There are some features in HW that are currently only partial or missing some database.

Listing the IDs of the resources:
3D Models: Most of them are already listed. Listing them all is very useful because it makes the field scripts way more readable: you know which entry is associated to which object through its model ID. That's how you can easily spot the entry of Zidane, for instance. There are a few of them missing, though, and the list should be completed.
Animations: That will already be a longer job. Fortunatly, there is already a list of the field's model animations, but it's a bit imprecise for my tastes: it only links the ID and the file name of the animations. A better list would link the ID with the name of the animation and the model that uses that animation. Fortunaly, the file name kinda contains these informations already (for instance, there is "ANH_MAIN_F0_VIV_LAUGH.anim") but not all are explicit. Also, the same kind of list exists for battle animations, but none of the file name is explicit there.
Musics: Listing the musics and find their ID shouldn't be too hard for someone who knows the game well and which music is played at which occasion. That would be useful for the script editor.
Sounds: Same as for musics, but there are more and it will need more precision and/or testing to accurately identify the sounds. Also, you have to come up with simple and adapted names for those sounds, which won't be an easy task.

Overall, listing the IDs of the resources is useful for making the script editor better. It will also come in handy for exporting/importing the assets if HW gets a Unity Assets Viewer.

Completing the modding features:
Spell Animations: For now, there are a lot of unknown instructions in the spell sequencing. You can effectively make multi-hit attacks (great thing they removed a few of the potential bugs in the Steam version) but the possibilities given by this feature is limited. One thing to do is to complete the instructions (and the arguments), but it won't be enough: a lot of the useful stuffs are hidden in what are currently called the "Play model on target" instructions. Without talking about the 3D models of the SFX, it would be nice to, let's say, make a spell that consecutively launch a Thunder SFX and a Fire SFX. A lot of things need to be learned about the Spell Animations file formats.
Enemy Spell Animations: I've worked on this one pretty recently so it is more complete. It should be perfected by displaying convenient informations about the instructions' arguments: for now, the animations, cameras, sound, etc... that you want to run are only identified by a number. Being able to import more sounds usable here should also be done.
Character Progression: I had some fun to make the Curve editor, to see how the HP/MP/Exp progressions were climbing and how to *comfortably* move those progression curves. It was kind of like coding a pencil tool for an image editor. However, it never has been my priority to complete that, so it was left in a state that is quite unconvenient. By the way, if I recall correctly, the default progression curves are piecewise quadratic functions. It could be useful to add a way to input the function instead of drawing them (or even import them from a spreadsheet).
World Maps: Aside from the 3D model, a better grasp of how the different locations are placed could be worked out. A few of the locations are given their coordinates directly in the scripts (chocobo treasures), but not all of them (the towns/dungeons, the topography and different battle areas). Not much to do here besides that, because a lot is coded in the game's script ; a World Map viewer would come in handy in the script.
Text Editor: Surely one of the most useful part of HW that needs big improvements. The text opcodes are handled by HW for the PSX version, maybe not fully but still quite well. However, for the Steam version, the text opcodes are all displayed raw. One thing to do is to display correctly the in-game text we get in the Text Editor window. It is standard work but I haven't done it yet. Another thing would be to convert the PSX text opcodes into Steam text opcodes, and vice versa. That won't be of huge use, but that would allow translations and mods to be compatible both for the Steam and the PSX versions at once. Last but not least, it should be possible to switch languages in HW at any time, as well as being able to add pieces of text for all the languages at once.
Multi-language scripts: Speaking of multi-language, the scripts (enemies' AI, field and World Map scripts) are also language-dependent. The script modifications should expand to the script of all the languages, as much as possible, and notify when it can't be the case because of the differences.
Background Editor: It is a young feature of HW and has a room for improvements. There seems to be some seams left when importing images and that should be fixed. Also the background file format, as they are handled (exported mainly) is the worst possible in term of memory management (each layer is of the size of the full image, usually transparent on 90% of its surface, and saved as uncompressed RGBA format). Finally, creating new fields from scratch requires algorithms for computing the tileblocks, their depth, the walkmesh, the camera position, etc... I would say that it could be automatized with few to no user adjustments if we ask for a 3D model and are able to convert it to the structures mentioned above.

The Script Editor can be improved further, in many many ways. Here are a few possible improvements that were not already mentionned:
Figuring out the purpose of each of the local and global variables in each of the World Maps/Fields scripts, and renaming them. I did that already for the enemies' AI, and it shouldn't take too long to do it for the World Maps, but it is a big task for doing it for all the fields. However, the mini-games, the cutscenes, the progression, the treasures and a few dozens of other things are written in these field scripts. Making them more readable and exhibit how they are coded will make their modding much easier. It's a work that should definitely be done on the long-term and we should only focus on a few fields to begin with that are of primary interest (the chocobo places, the World Maps, the Airships...).
Making macros, automatically generated script, would come in handy too. They used some for sure during the development of FF9 and it would save quite a few copy/paste when coding the script. A few possible macros would be:
- Generating the default script for a talkable NPC or a moogle,
- Generating the default AI (with the random attack picking system),
- Generating the default script for item picking (in a chest or on the ground),
- Generating the script for a ladder,
- Generating the script for leaving a field (opening a door as an option)...

Modding the engine:
What I call the game's engine is basically the CIL code. It can be tweaked a bit, but that's all but satisfying. A big improvement would be to reverse engineer the CIL code into C#. There are a few tools that can do that already (.NET Reflector, JetBrains dotPeek, ...) so it's not like we should rediscover the wheel ; hopefully there is or there will be some library that we can use to do that. Albeoris's Memoria does that already better than HW, but it completely screw up the format by delegating a lot of the classes to an external .dll, making it impossible to come afterwards and mod something else on top of it...

For the time being, and because it can make things way simpler, the CIL macros are a good option to mod the engine, so we should add more. For instance:
- Changing the FPS limit: It has been asked a lot, and it's definitelly feasible, but a few things have to be changed there and there. The model animation factory seems to be adjusted for a particular FPS limit, and the walking speed is also dependant on the FPS if I recall correctly.
- Modifying the Supporting Abilities: This one is tougher than it looks. The supporting abilities really are melted with the battle system, and it wouldn't be easy to make an automatic way to mod them. It's not an impossible task either.
- Making the base commands moddable: The commands like "Defend", "Item"... are specially handled by the engine so changing the spell(s) linked to them is ineffective and/or buggy. There is also a few spells specially handled by the engine and it would be nice to have a simple way to configure that.
- Removing the tiled background system: This was an idea for easing the background image importation, but it turns out to be less simple than expected. Each 32x32 tile has a different depth, which makes the rendering of one big image instead of plenty of little tiles complicated. Currently, I don't think it's feasible without creating more problems.
- Maybe adding analog support: I don't know why all the types/keys of controllers are not supported. It may be because of Unity's engine, or it may be because of FF9's engine. If it's the latter, fixing it shouldn't be such a problem. There is a list of input codes in the class NGUITools, with "KeyCode.JoystickButton" from 0 to 19. Maybe there are more to add, or maybe they are not handled well...
- Being able to add new things to fixed lists: It's quite vague, but it would be nice, for example, to add more possible battles, or fields, instead of needing to change the existing ones. There are things for which it is highly improbable that we can add more, because the engine is calibrated for it. What we may hope to be able to add are battles, fields, world maps, text areas, 3D models, animations, shops, levels (increase the max), battle scenes... What will unlikely be possible to add are spells, commands, supporting abilities, items, spell animations...
- Implementing new functions to the game's script: That is something unavoidable at some point. For now, the enemy AI, field and world map scripts are limited by the features decided by the developers. It is for instance impossible to get access to a character's strength from the field's script, or to give exp or AP, or to have any information about the Tetra Master cards (except for the number the player has). There are rooms for adding more functions, it only needs to be done and make HW compatible with it.
- Same thing for spell effects: Increasing the variety of effects a spell can have will definitely be a plus for most mods. I'm thinking of a spell that can turn an ally to trance that can be used only if the trance gauge is already up to a certain pourcentage for instance. Also, the only effects that can decrease the MP are MP Hammer and Ryuken for now, which is quite poor.
- Make the encounter rate the same as for the PSX version.
- Allow for more languages: There are russian and portuguese translations out of there, maybe more. I guess they replace an existing language with the translation, which is fine, but will likely ask for workaround when playing mods. Adding languages to the game engine can make it easier. Also unlock the japanese language in the main menu.


FIXING HW'S CODE
I started coding Hades Workshop a long time ago and it would need some reworking here and there. There are memory leaks to fix (I start with the most boring thing so you stop reading this paragraph now :D), some structures could replace list of arrays, for some reason, I was reluctant to use std::vectors for a long time and they could also find their place...
There are also a few things to complete or code better. Usually, I comment them with the words "TODO" or "DEBUG". Someone told me the other day that he couldn't stand a final release of a program that has those words in its source code. So you know what we need to do if we want to see the birth of a v1.0 ^^


MAKING NEW MODS
Well, yes, that's the point of the whole thing in the end ^^"
Difficulty mods or those that refresh the abilities are the natural mods made by HW. But it can of course do much more. Here are random suggestions.

Boss Rush: I wanted to make one, but I can't really handle developing HW + improving AF from time to time + making a boss rush. I don't have a clear idea on how the characters should progress, be it their levels or their abilities available. Still, a boss rush could refresh the game a lot, making tactical battles and faster playthrough than usual.
Kuja mod: Well, the battle model(s) need to be replaced (as well as a lot of icons and images), and it will be a huge work about the cutscenes, but that is in the range of doable things: tell the story from Kuja's point of view.
New Game +: If correctly balanced, it could be pleasant to be able to run the game with all the abilities from previous playthroughs unlocked. If the levels are re-initialized to 1, it can be made possible to max the stats with several playthroughs.
Importing the mods from PSX to Steam: currently, except for the texts, it is quite easy to do that. Either the mod was already in .hws format and can be imported with HW, either it was a .ppf or modded .bin and a trick can convert them into .hws (using the Mod Manager). The most obvious one is Unleashed. I contacted LandonRay a few years ago to ask him the permission to convert his mod into .hws (the point was to be able to translate it more easily) and he never answered... So I'm not porting it now, as a revenge :D But it can be done.
A Bug Fix: There are a few bugs left in the Steam version. I don't recall them all, but there's the Thunder Slash glitch, the Marcus/Eiko stat glitch, Ozma's AI, Necron's return magic guard, the Tetra Master rank bug, mini effect or cure not persisting after trance or detrance, the fact that the last card of a Tetra Master deck is never used by the opponent (to be confirmed), for some reason the rope in the well of the Mount Gulug doesn't display correctly (speaking of which, Eiko is clearly standing with her HD model a few screens later, while she should be lying down ^^), people say there are still sounds missing even though I thought it was fixed, correct the few typos mistakes (I know only one in french, the description of the Cid VIII statue in Lindblum; also, a few have been fixed for the port, in english). For those who really can't stand any bug, there's also the Puck skip, the Mistodon skip, the Madain Sari moogle skip, the World Map stuttering... I must forget some, but that's a little list already. Of course, some of them may be fixed by Silicon Studio in the future.


GROWING THE COMMUNITY
Qhimm is a great forum. I received a lot of help and feedback here from people knowing their stuff. However, because Final Fantasy VII is so overwhelmingly represented here, there's little room for a big community about another game (I might be wrong though, but neither FF8 nor FF10 modding had a piercing impact here for now). Also, when it comes to FF9 mods, it seems to me that people have a hard time finding us. It's my fault as well, because I don't actively spread the words and I don't even have any social network activity.
Nevertheless, I feel that more people could be interested in FF9 mods than those who seriously search about it.

Additionally, there's basically one topic now about HW, and considering the variety of questions one can have about it, I don't think it's enough.

The obvious place to speak about FF9 modding is the FF9 Steam forum, I guess. There's also the FF9 sub-forum of the FF Modding community on Steam ; it is more clear. The thing is, there are mods to be played and for that it is easy to make a topic listing all the available mods (there are not a tons of them). But it would be nice to also have tutorials and demonstrations about HW. Even a proper shapping of all the tips, suggestions and procedures people gave in this topic (mostly me, but also a few others) would be very useful. And it would tell people that modding can be easy if you have the will to do it. I'm the kind of guy that consider everyone should have the possibility to play a game his own way (that's why I give myself the right to mod to begin with) and that goes with a correct documentation about the available tools.

Also, the more different mods there are, the bigger the community is, that's about sure. It however needs a proper place to sort them out.

- -- --- ---- ----- ------ ------- -------- --------- ---------- ----------- ------------ ------------ ----------- ---------- --------- -------- ------- ------ ----- ---- --- -- -

Well, that's just about everything about that.
I have no idea of how far FF9 modding will go, but I hope I gave an overview about where it could go. The rest is up to us.

Keep enjoying this game, it deserves it  ;)
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Fraggoso on 2017-02-18 17:52:44
@Fraggoso: yeah, i'll do some test to see if it can be modified easily. I'll probably need a FMV as well, not MBG (they may use a different FPS parameter). You're sure you can replace the FMV with .mp4 files? The normal format is .ogg for FF9 FMV.

@Meru: Yeah, all those tiny defects suck, but I gave up trying to fix them with hand-made twisted solutions. They'll surely go away once we change the engine to non-tiled backgrounds.
I'll think about making a .tmp file and rename it only if the process was successful (no error thrown).

Yeah it's ogg. The uplaoded from googledrive was just a wip to see the difference in FPS. ^^
I can upload one mbv as well as an fmv to test out if you want.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Albeoris on 2017-02-20 16:10:56
Tirlititi
Now the source code of Assembly-CSharp.dll is available on GitHub.
https://github.com/Albeoris/Memoria

What about working together? :)
I can invite you as colaborator.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Pelig on 2017-02-21 15:52:10
Hi guys. I need help. I'd like to remove the stat growth from the characters. I think it's a simple thing to do, but i'm a total newbie with script editing.
If you can help me, i'll be very grateful.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-21 16:47:10
There is a possible solution with HW, but it will be easier to do it with Albeoris's Memoria.
Also, you need to be a bit more specific: you want the stats to remain the exact same from lvl 1 to lvl 99 or you want to remove the system that "equiping stat boosting equipments increases the stat growth" ?
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Pelig on 2017-02-21 17:32:13
Both of them.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-21 18:02:02
Go to CIL Code, then search for "ff9level" in the list on the left, then "FF9Level_GetDex", then Edit Code.
Spot the following lines near the bottom of the code and remove them:
Code: [Select]
ldarg.1
ldc.i4.s 10
div
add
ldloc.2
ldfld 0x4000885 // FF9LEVEL_BONUS::dex
ldc.i4.5
shr
add

Then do the same for the "FF9Level_GetStr", "GetMgc" and "GetWpr". The codes are pretty similar and you always have to delete the lines between that "ldarg.1" and the second "add" below it.

With that, characters will keep their default stats whatever their level. Their max HP/MP still increase a bit ; see the "Party" -> "Stats" panel for that.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Pelig on 2017-02-21 18:20:28
Thank you so much! You made my day!
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Lenthyan on 2017-02-23 00:56:42
Hey Tirlititi, would it be a lot harder to just remove the stat growth from equipment stat bonuses?

This is a great tool, thanks for the hard work!  :)

Go to CIL Code, then search for "ff9level" in the list on the left, then "FF9Level_GetDex", then Edit Code.
Spot the following lines near the bottom of the code and remove them:
Code: [Select]
ldarg.1
ldc.i4.s 10
div
add
ldloc.2
ldfld 0x4000885 // FF9LEVEL_BONUS::dex
ldc.i4.5
shr
add

Then do the same for the "FF9Level_GetStr", "GetMgc" and "GetWpr". The codes are pretty similar and you always have to delete the lines between that "ldarg.1" and the second "add" below it.

With that, characters will keep their default stats whatever their level. Their max HP/MP still increase a bit ; see the "Party" -> "Stats" panel for that.
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-25 12:25:40
Hi Lenthyan, sorry for the late reply.
It's not harder to only remove the stat growth from the stat equipment boost. You only need to delete fewer lines.
Only delete these ones:

Code: [Select]
ldloc.2
ldfld 0x4000885 // FF9LEVEL_BONUS::dex
ldc.i4.5
shr
add
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Lenthyan on 2017-02-25 21:29:11
Awesome, thank you very much!
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Pesmerga on 2017-02-26 23:41:44
hello  Tirlititi,  can you confirm this if its a bug or not because when i try to replace roulette then make a new spell, set target type on
enemy (single) only, then i save my mod, patched into my iso then play on emulator when i play game then using quina abilities (the one i replace the roulette) sometimes is quina is facing on my party then using the skill in my party . i think there is a  bug in there.


quina abilities
goblin punch
lvl5 death
lvl4 holy
lvl3 defless
doom
roulette ---------- this one i was talking about whatever i do, same result quina is using abilities to my party, i set target type enemy (single only).
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-02-27 08:49:18
It's not really a bug, but yes, it's normal. Roulette, like a few other spells, is specially handled by the battle engine.

Roulette's target is randomly chosen among the fighters (50% for an enemy, 50% for a player character),
Amarant's Curse element is randomly chosen among all the elements,
Amarant's Spare Change reduces the gil of the party (the damage calculation doesn't depend on the spell slot),
Meteor has a special random check that can make it use its second spell animation instead of the 1st one,
Comet has a special random check for a miss,
The spells under the commands "Summon" (x2) and "Eidolon" can randomly get flagged "short_summon" that reduces the damage and swap the spell animation,
The spells under "Swd Mag" verify Vivi's availability,
etc... there are a few other minors things like that.

The best way to bypass that is to use another spell slot (one of the "None" spells) instead of changing the spells like Roulette or Meteor (unless you want to keep that special treatment).
Also, most of the time, that treatment happens only if the spell is in its original command (if you make Roulette a command of Black Magic, it won't be random anymore).
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Pesmerga on 2017-02-27 20:22:08
Thanks for advice, btw this tool is awesome  :)
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Tirlititi on 2017-03-01 22:46:29
Thanks :)

Update to v0.37:
- Added a tool, the "Unity Assets Viewer". It allows to open the asset files of the Steam version and export them - not import yet -. It is a stand-alone tool in the sense that you don't need to open the game with the main frame for it (actually, it will recommended not to open both the assets and the game's datas of the same game at the same time),
- Fixed a few bugs, the field backgrounds should work fine with the PSX version now, and I added a few of the things asked (the background converter now starts with .tmp files, you can choose to export the backgrounds with their internal ordering...).

As said, the assets viewer can't import files yet, but that won't take long. What makes it stand out as an Asset Viewer is that it goes fetch the real name and hierarchy of the files, making them more easy to identify. It also gives a few additional informations about some files for the same purpose. Also, it can automatically convert the images extracted to a standard format (.png, .tga, .tiff or .bmp).

The files are exported in the folder "HadesWorkshopAssets" from the game's root directory. They'll likely be re-imported from there as well.

With this, it will not only be easy to complete the lists of IDs I wrote about, but also to use one's custom assets and import them in the game.
See the kind of things (http://imgur.com/a/kPrh6) you can find in the "sharedassets2" file for instance :D

Isn't that neat?

For now, only images are auto-converted. In the future, it would be great to have a converter for the sounds/musics and the 3D models ^^
If anyone volunteers !

EDIT: There seems to be a few bugs with the last patch of the Steam version. I haven't look at it yet but make Steam mods with cautious (.hws files are independant so they're a safe way to save mods anyway).
Title: Re: [FF9] General editor - Hades Workshop (0.36b)
Post by: Fraggoso on 2017-03-02 07:39:45
Wow, those are big changes for the mod community!
Nice tirlititit! :D

Edit:
Okay, so we basically can also start on upscaling the textures now! :D
Do you know how the textures are compressed? With mipmaps, without (or does the engine generate them on the fly?)?
Or are they really stored as png's for example?
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Shinryu on 2017-03-07 01:55:08
Hello, I'm new by there and I just discovered some great mods (fullscreen, alternate difficulty..) and your editor for the great FF9 ! :D
Thank you all for your hard work ;) I also wanted to try and create some mod for this lovely game but I am unfortunately not that skilled by now..
Well, I just want to create some simple (I guess) mod actually. Well, I have some nice idea that could be great if it's was possible to bring them to the game.. 

So, firstly, it's about the exclamation mark and card icon when you approach an NPC.. I know that this stuff, the card icon specially, is coming from the mobile version of the game for gameplay convenience. And in the end it's also help those who want to play with the keyboard and mouse but when you want to play the game with the gamepad only it's become more useless.. so I was thinking to add some option for makes it to appear or to disappear depending on how you want to play or if you need it. In another hand, I'm aware that thanks to that we can now clearly see if a NPC wants to play card as there is no card icon for other NPC. But it could also help those who want to play the game in the old fashion way by spamming the square button :D So an option for this icon would be nice I think. 

Or at least, I wanted to reduce those icons.. the fact is that in some small area with a lot of NPC, the screen is full with lot of those icons popping up when you walk past someone.. xD
So a way to reduce them with the option to make the card icon to disappear or not would be a perfect addition for the game.

Finally, a nice idea that can help those who want to get the Excalibur 2 weapon while speedrunning the game without leaving any items behind on the way there.. anyone knows that when you come closer of any interactive stuff (chest, hidden item, for climbing up..) each time there is an exclamation mark that appears. Also, anyone knows about the (pretty useless ?) hand that appears pointing to your character when you are standing there for a while.. So my idea would be to makes some or all of the exclamation mark to appear when you are standing there (like for the pointing hand) showing you all the hidden items around you. That way you can clearly see all the items that you can grab without wondering if you missed any in a house or elsewhere.. ;) Of course it's could be a waste of time by standing there waiting for the items to appear so we could either make an option to always make them visible or even better just tweaking the standing time needed to showing up the exclamation mark so that way the icons don't always fill up the screen and we would lost less time for grabbing items. In the game, there is already the option for activate or deactivate the pointing hand so we just have to mod this option by allowing hidden items to appear that way the hand option become more usefull too :D

Well, don't know how hard it could be and if it's even really possible doing that but would be great if someone can give me some thought about which of my ideas is possible to realise or how to better use the Hades Worshop if it's could help for that.. I already tried searching in the CIL Code and other function but no dice for now.

Also, I have checked some of the pages but not all of them so I don't know if someone else have already proposed same ideas as me so sorry about that if it's was already asking.

Hoping for some answer ;)
Thank you ! :D
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Pesmerga on 2017-03-07 02:51:02
@Shinryu actually u can easily remove the time limit in getting the  excalibur 2 using this tool so u dont need to rush your game. ;)  go to
environment---->fields-->memoria gate to space and edit script:


 if ( GetTime <= 43200L ) {
        InitCode( 3, 0 )

remove the [ if ( GetTime <= 43200L ) { ]

and this one

 if ( ( ( ( IsMovementEnabled == 1 ) && ( VARL_GenBool_7730 == 0 ) ) && ( VAR_GlobBool_145 == 0 ) ) && ( GetTime <= 43200L ) ) {

remove this line : && ( GetTime <= 43200L ) ) {

Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Fraggoso on 2017-03-07 21:16:59
As soon as tirlititi finish the import on the texture the exclamation bubbles as well as the card bubbles can be replaced by a dummy texture without any data in it. 
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Shinryu on 2017-03-08 03:58:28
Hello, well as I thought my request was more a daydreaming I guess.. xD
Will also check some other workaround but I am waiting for the work of tirlititi if it's could make the trick for that part :D

>Pesmerga Thank you but there is really more simple method for doing this and I have already changed the timer on my PS1 version for this weapon in my long play.. now I wanted to play on the steam version with some mod like I had imagined for fun or challenge.. not just changing the timer for excalibur 2 ^^ but I will remember that kind of modification in the script to see if I can use it for other stuff in another way :D

Well, thank you all ;)
Hope some news soon !
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Meru on 2017-03-08 08:39:47
Removing textures by replacing them with dummies is a bad approach.
Hiding card icon this way is probably possible, but that will still leave the exclamation mark in a displaced state.
(https://i.imgur.com/qxLeNCN.png)
And hiding exclamation mark may remove it even in places you don't want.

As for hand icon, that one can be disabled in settings.
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Tirlititi on 2017-03-08 09:23:55
Yes, replacing the bubbles with empty textures would not be a very satisfying solution.

Both your questions are best done with engine modification. I guess you can remove the bubbles with HW, modifying the CIL code but I don't know which methods take care of them ; I'll check this evening if I can find something.
Showing the treasures is way more tricky. There are two kinds of treasures: those placed in a chest (linked to a 3D model) and those on the floor (not linked to a 3D model) and I don't know if it's reasonably feasible to show the position of the second kind.
Albeoris's Memoria is more suited for that kind of stuff (it can already spot the objects linked to a 3D model and wrap a box (https://imgur.com/zGyHt3g) around them).
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Fraggoso on 2017-03-08 09:34:00
Why the heck the exclamation bubble got shifted?
Well I don't mind the both bubbles to be honest, but as long as there maybe a solution on the horizon that's always welcome.
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Meru on 2017-03-08 09:37:42
Why the heck the exclamation bubble got shifted?
Well I don't mind the both bubbles to be honest, but as long as there maybe a solution on the horizon that's always welcome.
Icons are centered on a character. Be it one or two. So making one invisible does not remove the shift. One must hack the engine to take care of that =(
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Fraggoso on 2017-03-08 09:39:46
So not even a full alphasmasked texture wouldn't work? :/
What a bummer. ^^
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Meru on 2017-03-08 09:41:32
Well it would look exactly as my screenshot, that's not a photoshop (except the red question mark), I tried it before posting  :mrgreen:
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Fraggoso on 2017-03-08 09:43:52
Thanks for the info Maru. :)
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: Tirlititi on 2017-03-08 18:13:38
Ok, those bubbles (exclamation and card) are handled by the class "EIcon".
The easiest way to disable the card bubble is to replace a "2" by a "1" in the method "EIcon::PollCollisionIcon".

Code: [Select]
ldc.i4.2 // Replace this 2 by a 1
call 0x600091F // EIcon::PollFIcon
ldc.i4.1
stloc.0
That's near the middle of the method.

In order to remove both bubbles (for NPC only, treasures still have their own bubble), I think you can remove those four lines + the four lines that are a bit below them:
Code: [Select]
ldc.i4.1
call 0x600091F // EIcon::PollFIcon
ldc.i4.1
stloc.0

There are also bubbles in the World Map (Chocobo, airships and beach bubbles). For disabling all of them, the best is to "return false" at the start of the method. The two first lines can be changed into these:
Code: [Select]
ldc.i4.0
ret
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: dclem on 2017-03-09 02:10:18
Its Sharon DaSilva from Steam.
http://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=20

I actually just tried the "EnableMove()" command (placed right underneath the Random battle command) and Garnet was still locked up.
The random battle command can go anywhere in the MainInit section, right?

Okay, here's what I got in A.Castle/Hallway MainInit:
Now you can see what's missing.

Code: [Select]
Function Main_Init
    set VAR_GlobBool_159 = 0
    set VAR_GlobUInt8_17 = 255
    set VAR_GenBool_191 = 0
    if ( VAR_GenBool_184 == 1 ) {
        set General_FieldEntrance = 10000
    }
    set VAR_GenBool_184 = 0
    set VAR_GenInt16_9 = 65535
    if ( VAR_GenUInt8_13 == 9 ) {
    } else {
        if ( ( VAR_GenUInt8_13 == 2 ) && ( VAR_GenInt16_9 < 0 ) ) {
            set VAR_GenUInt8_13 = 9
        } else {
            if ( VAR_GenInt16_9 < 0 ) {
                set VAR_GenUInt8_13 = 0
            } else {
                set VAR_GenUInt8_13 = 1
            }
        }
    }
    set VAR_GenInt16_11 = 65535
    if ( VAR_GenUInt8_14 == 9 ) {
    } else {
        if ( ( VAR_GenUInt8_14 == 2 ) && ( VAR_GenInt16_11 < 0 ) ) {
            set VAR_GenUInt8_14 = 9
        } else {
            if ( VAR_GenInt16_11 < 0 ) {
                set VAR_GenUInt8_14 = 0
            } else {
                set VAR_GenUInt8_14 = 1
            }
        }
    }
    SetControlDirection( -10, 0 )
    SetRandomBattleFrequency( 150 )
    SetRandomBattles( 1, 915, 915, 915, 915 )
    InitCode( 1, 0 )
    InitCode( 2, 0 )
    SetDialogProgression( 0 )
    if ( General_ScenarioCounter < 8500 ) {
        if ( General_ScenarioCounter <= 7060 ) {
            set VAR_GlobInt16_30 = 308
        }
        if ( General_ScenarioCounter >= 7100 ) {
            set VAR_GlobInt16_30 = 5
        }
        if ( General_ScenarioCounter >= 8000 ) {
            set VAR_GlobInt16_30 = 305
        }
        if ( General_ScenarioCounter >= 8200 ) {
            set VAR_GlobInt16_30 = 306
        }
        switchex 4 ( VAR_GlobInt16_30 ) {
        case 308:
            set VAR_GlobUInt8_24 = 1
            InitObject( 14, 0 )
            InitObject( 31, 0 )
            InitObject( 13, 0 )
            MoveCamera( 166, 190, 1, 8 )
            break
        case 5:
            set VAR_GlobUInt8_24 = 0
            InitObject( 25, 0 )
            InitRegion( 17, 0 )
            InitRegion( 18, 0 )
            InitRegion( 19, 0 )
            InitCode( 24, 0 )
            break
        case 305:
            set VAR_GlobUInt8_24 = 10
            InitObject( 27, 0 )
            InitObject( 33, 0 )
            InitObject( 28, 0 )
            InitObject( 4, 0 )
            InitObject( 5, 0 )
            InitObject( 6, 0 )
            InitObject( 7, 0 )
            InitObject( 8, 0 )
            InitObject( 9, 0 )
            InitObject( 10, 0 )
            InitObject( 11, 0 )
            MoveCamera( 180, 180, 1, 8 )
            ShowTile( 14, 0 )
            ShowTile( 24, 0 )
            break
        case 306:
            set VAR_GlobUInt8_24 = 24
            InitObject( 27, 0 )
            ShowTile( 14, 0 )
            ShowTile( 24, 0 )
            InitRegion( 22, 0 )
            InitRegion( 23, 0 )
            InitRegion( 21, 0 )
            InitCode( 24, 0 )
            SetFieldCamera( 1 )
            SetControlDirection( -6, 0 )
            RunSPSCode( 0, 130, -1, 0, 0 )
            RunSPSCode( 1, 130, -1, 0, 0 )
            RunSPSCode( 2, 130, -1, 0, 0 )
            RunSPSCode( 3, 130, -1, 0, 0 )
            RunSPSCode( 4, 130, -1, 0, 0 )
            RunSPSCode( 5, 130, -1, 0, 0 )
            RunSPSCode( 6, 130, -1, 0, 0 )
            RunSPSCode( 7, 130, -1, 0, 0 )
            RunSoundCode( 1792, 124 )
            while ( SyncSounds != 0 ) {
                Wait( 1 )
            }
            RunSoundCode1( 16903, 124, 31 )
            RunSoundCode1( 16897, 124, 0 )
            set VAR_GenUInt8_8 = 25
            RunSoundCode2( 34305, 0, 180, VAR_GenUInt8_8 )
            set VAR_GlobBool_167 = 0
            break
        }
    } else {
        if ( General_ScenarioCounter < 8600 ) {
            set VAR_GlobUInt8_24 = 100
            set General_FieldEntrance = 309
            InitObject( 25, 0 )
            InitObject( 15, 0 )
            InitObject( 26, 0 )
            InitObject( 29, 0 )
            InitObject( 32, 0 )
            InitObject( 16, 0 )
            MoveCamera( 320, 224, 1, 8 )
            RunSoundCode( 0, 98 )
            while ( SyncSounds != 0 ) {
                Wait( 1 )
            }
            set VAR_GenUInt8_8 = 125
            RunSoundCode1( 16897, 98, VAR_GenUInt8_8 )
            set VAR_GlobBool_167 = 0
        } else {
            set VAR_GlobUInt8_24 = 0
            InitObject( 25, 0 )
            RunSoundCode( 0, 98 )
            while ( SyncSounds != 0 ) {
                Wait( 1 )
            }
            set VAR_GenUInt8_8 = 125
            RunSoundCode1( 16897, 98, VAR_GenUInt8_8 )
            set VAR_GlobBool_167 = 0
        }
        InitRegion( 20, 0 )
        InitRegion( 18, 0 )
        InitRegion( 19, 0 )
        InitCode( 24, 0 )
    }
    if ( General_ScenarioCounter >= 8000 ) {
        ShowTile( 14, 0 )
        ShowTile( 24, 0 )
    }
    if ( VAR_GlobBool_158 == 0 ) {
        0x27( 127 )
    } else {
        0x27( 255 )
    }
    Wait( 2 )
    Wait( 2 )
    if ( VAR_GenUInt8_13 == 9 ) {
        SetTextVariable( 2, 0 )
        WindowAsync( 6, 0, 56 )
        RaiseWindows(  )
        WaitWindow( 6 )
        set VAR_GenUInt8_13 = 0
    }
    if ( VAR_GenUInt8_14 == 9 ) {
        SetTextVariable( 2, 1 )
        WindowAsync( 6, 0, 56 )
        RaiseWindows(  )
        WaitWindow( 6 )
        set VAR_GenUInt8_14 = 0
    }
    set VAR_GlobBool_159 = 1
    if ( VAR_GlobBool_158 == 1 ) {
        set VAR_GlobBool_158 = 1
        if ( VAR_GlobBool_159 == 1 ) {
            if ( VAR_GlobBool_156 == 0 ) {
                EnableMove(  )
                0x27( 255 )
                if ( VAR_GlobBool_144 == 0 ) {
                    EnableMenu(  )
                }
            }
        }
    }
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    return
[/CODE}
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-20 10:06:23
what is the script command to change which music plays during a battle? I've searched endlessly, and can't find a code.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-21 21:47:46
Now if someone else asks a question, you'll hope right on it.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: Tirlititi on 2017-03-21 22:10:14
I already answered that music question, the first time you asked me.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-22 14:13:01
no...?
that was about adding a timer and random battles to Alexandria disc 3- after Beatrix and Steiner montage fights.
I don't remember asking about music until now.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-24 07:07:56
Tirlititi, please answer my question, I've searched, scanned every possible function list, can't find it.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-26 10:56:49
Okay, if you're certain I asked you this question the first time, PLEASE link me where I said that, cause I can't find it.
But I know of a fact I did not ask such before; just lying so you don't have to help me with your tool?
The "help tab" doesn't tell me in anyway how or what each function (in this case: MUSIC) is and what it does. So who else am I to turn to when no help is given?
If I had such a tool, I would help anyone who had a question how to do something with it, regardless of what kind of "beef" I may have with them.
I ain't asking you nothing more than a simple question, which for you, would take like, what? Few seconds to answer? Given you are the master of Final Fantasy IX's script. The only person in the world who literary knows how everything works in the game.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: Fraggoso on 2017-03-26 11:01:14
You jump the gun real quick ain't you?
Maybe he's out of town attending other business...really get some patience if you need help.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-26 13:56:53
will you please leave me alone? i didn't ask for your words.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: Fraggoso on 2017-03-26 16:32:41
Oh Jesus here we go again huh?
I just gave you a nice advice. If you don't care that's you problem.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: Tirlititi on 2017-03-26 16:54:14
Okay, if you're certain I asked you this question the first time, PLEASE link me where I said that, cause I can't find it.
But I know of a fact I did not ask such before; just lying so you don't have to help me with your tool?
If that makes you happier...
http://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=20#c133258593400587717

You're lucky though, I found the file where you can determine which music plays for which battle a few days ago. It's the files "BtlEncountBgmMetaData.txt" and "WldBtlEncountBgmMetaData.txt" that are in the resources.assets.
For each field, there's a list of the ID of the battles that are used in this field and the ID of the music that plays for it. If a battle is not preset, the music doesn't change. I didn't test anything though, just guesses.

And yes, I'm not at home and I have less time than usual for FF9 related things.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-26 23:31:44
Oh Jesus here we go again huh?
I just gave you a nice advice. If you don't care that's you problem.

there ain't no "here we go again". its a simple leave me alone don't talk to me.

If that makes you happier...
http://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=20#c133258593400587717

You're lucky though, I found the file where you can determine which music plays for which battle a few days ago. It's the files "BtlEncountBgmMetaData.txt" and "WldBtlEncountBgmMetaData.txt" that are in the resources.assets.
For each field, there's a list of the ID of the battles that are used in this field and the ID of the music that plays for it. If a battle is not preset, the music doesn't change. I didn't test anything though, just guesses.

And yes, I'm not at home and I have less time than usual for FF9 related things.

okay, so i'm blind af. totally did not see that. I'm sorry i did ask about the music just said it as "battle theme".
and it was still unclear to you to...
but good to hear you found its location at the start. i'll see what i can do.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-27 09:29:24
Okay,
what a headache...
got it to work.
figured out:
0 - normal battle theme
61- friendly theme
35- boss theme.
111- hunter's chance theme.
that last one's replaced in the sound mod

battle not present had the 'don't stop music' flag checked.
got it.

side question:
will a font customizer come to HW anytime soon? Be nice to change the ugly Arial font, and make some longer text fit with text size.
can you change freya's spell animation sequence, so if you change one of her native skills to like Curaga, she doesn't glitch and perform the "jump" animation?
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: Tirlititi on 2017-03-31 17:05:22
I'm not planning to make a font customizer ; Memoria is surely more fitted for that. For Freya's spell animation, it seems to be specially handled in the FF9SpecialEffectPlugin.dll so we don't have control of it. A workaround could be to swap the two animation files (in p0data5.bin, I guess).
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-03-31 23:20:21
so sad...

any idea where the font the game uses is located, which file?

going back to the random encounters. Have you ever got a lockup after adding random battles to a field (like Quan's dwelling) that never had it before?
Cause that's what's happening now.

EDIT: will there be a model extractor/importer in the future?
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: iamthehorker on 2017-04-05 06:43:25
I was trying to use your tool to create my own mod, but I'm having some issues. When I attempt to export a .ppf file with HW and patch the game with ppf-o-matic I get the binblock error. Why is that? I know I'm using v1.0 (not v1.1) of FF9 and I'm not applying the patch to the wrong disc. Is there something I'm missing? Applying your Alternate Fantasy patch works fine, it seems to only be with my .ppf files exported from HW that I get this issue.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: iamthehorker on 2017-04-07 18:07:56
I think my problem may be different than what I originally thought it was. Moving ppf-o-matic, HW, and my .bin files all into the same folder has made the binblock error disappear for some reason. However, if I start a new game after applying my mods the game goes black during the first fight with Baku.

I originally thought Alternate Fantasy was applied correctly because I received no binblock error when applying the .ppf, but the game also goes black at the same place when I tried to play it. The battle music is played but no visuals are shown. What could cause that error?

Edit: So, this is weird. It turns out patching the original FF9 images using ppf-o-matic gave each file some bad sectors. In some emulators this is apparently okay, but with the one I was using (Mednafen/Retroarch) it made the game unplayable. I found some similar complaints about this same issue on the Retroarch forums. I used the program CDmage to scan for bad sectors and repair them. Now everything runs fine. Might be useful information for anyone using this tool, thought I would give this update.

Edit #2: If you use CDmage to fix bad sectors DO NOT use the Repair Corrupted Sectors option. Use Rebuild Sector Fields option with only the ECD and ECCP/ECCQ options selected or else it won't work.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: vomitrocious00 on 2017-04-08 23:08:22
Hi, just curious as to how you can edit the items you receive as rewards or found in the world?

Like for example in the alternate fantasy mod you find a Dragon's Hair in the spot where you would typically find Kain's Lance and at the end of the Mognet Central quest your reward is an Orichalcon instead of the usual Protect Ring
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: Tirlititi on 2017-04-09 07:11:04
@dclem: I worked on a partial model converter. With the next release, you will be able to export the models as .obj (Wavefront) format.

@Iamthehorker: Ok, so there are two things there I think:
1) The sectors are not updated properly. I have no idea of how I should update them: there is periodically a block of data (0x130 in size) that has informations about the sectors. I never cared to touch them as they have no impact when using ePSXe and Psx. I guess there is a checksum in those blocks of datas ; if you can link me to a description of that checksum (on Retroarch maybe?), I can try to implement a sector repairing for "Export as PPF" and "Overwite Binary".
2) The bin/block fail is another problem. What "Export as PPF" does is looking at the file on your hard drive and create a PPF from the differences of the hard drive file and the modifications done in HW. That's why it is important to use it only on files that were not modified previously ; it's always a patch "Current version you have -> Current version you have + modifications done in the editor or imported via .hws". I don't really know why it gave you that error though, but that's not because of the sectors.

@Vomitrocious00: These items are set in the Field and World scripts. First go to the "Items" panel just to load them up, then go to the "Fields" panel, search for the field where the treasure or reward is and click on "Edit Script".
It may be different from cases to cases, but usually:
- For items found in a chest, you have (on the left of the window) a few functions called "Function Chest_Init" or "Function Chest_Something". In one of them, there is what happens when you open it, including the item you receive (since you went in the "Items" panel, you can click on the number defining the item and see the corresponding item's name).
- For items found on the ground (no 3D model related to it), it's usually the same kind of things, but with a "Function EntryX_Something" instead and they are a bit more difficult to spot as there are also other "EntryX" that are not related to items.
- For rewards and items given, that's in the midst of the dialog cutscene where the reward is given. If Stilzkin is the one giving you the reward, search in the "Function Stilzkin_...", if it's Artemicion, try "Function Artemicion_..." etc... The cutscenes are also sometimes handled by a "Main_..." function so you can search in those as well.
- For chocographs, bubbles and cracks, there are 3 functions defining the rewards (one for chocograph, one for bubbles and one for cracks). If I recall correctly, they are "Chocobo_..." functions.

Once you found the number defining the item, change it to what you want (there may be a couple of lines where you need to change them, but they are always next to each other), then Parse the function and then Ok.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: iamthehorker on 2017-04-09 23:20:03
@Tirlititi
I did not see any documentation on the checksums itself, only that it was recommended to use an ECC correcting tool on the RetroArch forum:
https://forums.libretro.com/t/bad-sector-836-on-mednafen-psx/6354

I'm sure the documentation exists somewhere I just haven't found it. Maybe for now just include a message about it? It seems somewhat common for people to recommend using a program like CDmage to fix this problem.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: resinate on 2017-04-11 19:56:16
whenever i mod the game and save it im not able to reopen the game in the editor i have to keep redoing it from orginal file.

also any way to change what the auto abilities can do? like i wanna change auto float to auto trance and stuff

also any chance of adding in magic stones on level up?
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-04-11 21:48:33
I worked on a partial model converter. With the next release, you will be able to export the models as .obj (Wavefront) format.

Good to hear!

Is there a way to increase the enemy's HP above 65535? Making a harder challenge, but spells that can automatically hit 9999 damage (ex. Climhazzard, Dragon's crest etc.), makes it easy to defeat enemies with only 65535 hp, never mind 32767.
If its possible to increase enemy HP, how did you increase the damage limit as well? I see the methods involved, but what to place to increase it?

And the eidolons,
are these hard codded to a specific spell slot?
If I make an eidolon (say Bahamut) out of Vivi's spell slots, and use the effect "Eidolon common" The spell will only perform animation 1 regardless if Boost is equipped or not. Yet, Dagger and Eiko's default summon spell slots don't.

I've tried to set Vivi's abilities with Dagger's summon abilities (from the Stats panel) but that only made the battles lockup with glitches, so I had to physically replace Vivi's current spells with Dagger's eidolons.
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: resinate on 2017-04-12 00:14:36

dclem  just add regen to the bosses lol thats what i did

also i saw that we can add any monster to any battle how do we do this?
Title: Re: [FF9] General editor - Hades Workshop (0.37b)
Post by: dclem on 2017-04-12 02:51:39
Did it before, doesn't work too well in the end.
besides, FFIV & TAY bosses go over 65535. I think the max went to 200000... 250000. And the limit damages go over 32767, (I've seen 49167 damage).
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-12 19:40:30
Thanks iamthehorker.

Update to v0.37c. Since I didn't put a changelog for v0.37b, I also state what was added for it:
- Improved the Unity Assets Viewer
--- Can now import the files back,
--- Can automatically remove the AKB headers from audio files to have proper .ogg (re-importing them put that header back),
--- When importing the images, they are converted back (you can choose the format),
--- Can export 3D models.
- Tweaked the way the background images are exported/imported in order to keep the alpha informations. You can also now import them without compression (RGBA format - the files are 4x bigger).
- Fixed a few bugs, completed the list of 3D model names.

For importing the images (including backgrounds), not all the formats could work. I saw a few textures that are "Alpha only" and should be kept as it. Usually though, converting into RGBA is fine, 32bpp but without quality loss, and DXT5 is 8bpp with a bit of quality loss.

The exporting of 3D models is far from perfect. You can export most models from p0data4 (NPC, characters, enemies, accessories...), models from p0data2 (battle scenes and weapons) and a handle of effects in p0data3 (World Map) but not the whole World Map. What is exported is the geometry and texture information, but not the animations. Also, other (unknown) informations are lost during conversion, so these models will likely have a few problems for importing them back when an imported will be there.
You need to export the related file ".fbx" of type "GameObject" and the related textures in the Viewer. It generates a .obj (and .mtl) that can be used by Blender for example. It happens sometimes that the related textures are not properly linked, so in that case you need to open the .mtl with a text editor and replace the "TextureNotFound" by the name of the textures yourself. I also saw a few models (Amarant, Earth Guardian...) that are a bit fragmented (maybe that normal and the animations fix it though).
All in all, I don't guarantee that all the models are exported properly. I've tested a lot of them, but the format is still full of unknowns.

For the background exporter/importer, I changed the alpha format to fit more the format of the internal files. In these, most layers (lights, candles...) are fully opaque but made transparent using their blend mode (Substractive usually). In order to see them properly in a texture editor, you need to setup the blend mode of these layers manually (maybe I'll export them in the future if I find how to).

@dclem: Increasing the max HP can be done with a trick that I describe here:
http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426
It is not possible to just increase the possible max HP. It would require huge changes. For the Damage limit, I replace all the 9999 in these methods by the new value (only Tonberry's Grudge is limited by another mean).
For the eidolons, it is linked to the spell slot and the command slot IIRC.

@Resinate: you right-click on an enemy then copy -> paste it in another battle.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-04-13 04:26:16
im using ur newest version and theres no right click option anywhere in ur tool

is this steam part of the tool only? cuz im modding psx one
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-13 08:37:56
Awesome update to HW! And nice alternative to increase map HP!
The bug with increasing damage limits...
Could I just remove the if ( #( SV_FunctionEnemy[HP] <$ 10000 ) ) { from all bosses that use it, and not make the game soft lock?

And about importing.
I right click on the file in the assets viewer and import selection is always grayed out.

If I wanted to change a sprite image, (ex. FaceAtlas) Could I use any size png image, or does it have to be the exact size of the original sprite image?
FaceAtlas size is 1024x512, would I have to keep my custom sprite at this size to import it working?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-13 09:37:54
@resinate: Oh yes, I forgot you were on PSX, sorry. Adding enemies is not available for the PSX version unfortunatly (only adding spells/groups are).

@dclem: No, if you remove that "if" block, the game will softlock because you'd kill the bosses and it's not intended.
You can import images of any size. The UV coordinates being scaled, the textures of 3D models will fit nicely if they are upscaled. For some other textures, changing the size could bug (I think the "SquareEnix/Silicon Studio" and the opening screen must be of fixed size). You should check for the Atlas textures, but I'd guess they will be fine.
You can't import assets if the same game files are opened in the main Hades Workshop frame. You have a warning about this...
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Fraggoso on 2017-04-13 09:43:29
Dclem you have to open HW and navigate to the asset viewer without loading anything.
I did the same mistake.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-13 10:17:38
Oh, so, with increasing damage limit that's a natural bug. In these events I'd have to only defeat the bosses with abilities that don't cross over 10000.
Usually, (like battling trance kuja) I would defeat him by hitting 14734 damage, and the game didn't soft lock. Does it only soft lock if the player hits exactly the damage limit 32767?

Thanks for pointing out the assets viewer, you two.

for the eidolons, where is this IIRC spell and command slot?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-13 13:04:34
the importing feature...
working like a charm!
replaced the game over sprite, and it worked out fine and perfect!
I had to keep the original size intact though, or else it wouldn't fit the whole game frame screen.
my sprite was 640x480, and the original was 1543x1080. I imported mine the way it was, tested it, and the sprite appeared in the lower left hand corner of the game screen.
Resized my sprite to the original size "1543x1080". Fits screen perfectly.

If this can work as smooth, so can replacing the models.
I exported weapons (finally) and get to finally boast them from their original low poly state. If the charm continues, I could import weapons from FFXII here too.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-04-14 06:05:53
have u been able to find any ways to hot swap monsters in certain battles?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-14 17:59:06
About the models importing...
looks like I can't import models back in the game. It crashes anytime a battle loads/inits.
Or the model replaced comes into scene.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-14 19:51:57
IIRC = If I Recall Correctly. I said that eidolon's jewel powerup was linked to the spells and commands slots ("Ramuh"'s spell slot and "Summon"'s command slot for instance).
No, you can't swap monsters in certain battles in the PSX version.
There's no model importer yet.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-14 23:58:42
whoops, here I am, searching HW for an abbreviation.
If I add Dagger's spells to Vivi's spells from the "Stats" panel, will that guarantee battle lockups and glitches?

No model importer? Explains everything.
I want that now, cause FFIX is about to become "Unleashed", so far off the leash, it won't be called Final Fantasy anymore. I'm excited.
Tirlititi, you are literary a god, making all these dreams come true.

The audio importing is 1000% more efficient, and a whole lot faster and convenient.
Hopefully, some gray areas like renaming characters from stats panel could be possible, like psx.

Do you by chance know where the game engine find/handles the font used? Maybe I can replace on my own.


Thanks to you,
anything's possible.

https://gaming.youtube.com/watch?v=v0puOOJit4M&feature=share
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-04-17 05:14:45
is there any way to change how often they can earn ability stones on levelup?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: flumpy on 2017-04-17 21:09:50
hey there is there a patch for the pc version to restore the Hidden Scenes? the link on the first page is for the PlayStation version
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-17 22:13:13
Yep, the hidden scenes are included in my mod (Alternate Fantasy) but I forgot to make a stand-alone for it. Thanks for pointing this out.
So here it is: a link for the Hidden Scenes (https://www.dropbox.com/s/ejifo5amf4kkcyc/PC_HiddenScenes.zip?dl=1) patch for PC.

The Magic Stone progression is defined in the CIL Code, so it's a bit tedious to change. It's the method "ff9level::FF9Level_GetCap" :
Code: [Select]
public static int FF9Level_GetCap(int slot_id, int lv, bool lvup) {
PLAYER pLAYER = FF9StateSystem.Common.FF9.player[slot_id];
FF9LEVEL_BONUS bonus = pLAYER.bonus;
FF9LEVEL_BASE fF9LEVEL_BASE = ff9level._FF9Level_Base[ff9play.FF9Play_GetCharID((int)pLAYER.info.menu_type)];
if (lvup) {
int num = (pLAYER.cur.capa != 0) ? 0 : 5;
int num2 = 0;
FF9LEVEL_BONUS expr_53 = bonus;
expr_53.cap += (ushort)(num + num2);
}
int num3 = (int)fF9LEVEL_BASE.cap + lv * 4 / 10 + (bonus.cap >> 5);
if (num3 > 99) {
num3 = 99;
}
return num3;
}
In term of CIL Code, the main operation ("int num3 = ...") is those lines:
Code: [Select]
ldloc.3 // fF9LEVEL_BASE
ldfld 0x4000890 // FF9LEVEL_BASE::cap
ldarg.1 // lv
ldc.i4.4 // Multiply by 4
mul
ldc.i4.s 10 // Divide by 10
div
add
ldloc.2 // bonus
ldfld 0x400088B // FF9LEVEL_BONUS::cap
ldc.i4.5 // Right-shift by 5 ( = Divide by 32)
shr
add
stloc.0

I have no idea of where the font used is defined.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: flumpy on 2017-04-17 23:27:47
thanks a bunch
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: flumpy on 2017-04-17 23:50:50
i followed your instructions in the read me after overwriting the files  when i launch the game it doesn't go past the splash screen with ff9 logo..

edit - its all good i wasn't running the latest build
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-04-18 01:39:11
oh i see now CIL coding is only for steam man it sucks PSX version has so much limits....

LMAO!!! in ur mod did u really do this? Thievery has been replaced by Transcend : bring Zidane to Trance cuz i did this LONG LONG time ago lol
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-18 02:53:37
I have no idea of where the font used is defined.

:(
I'll ask Albeoris.

Tirlititi
something's going wrong with HW, anytime I try and save the mod .hws, it creates this huge 1.63 GB file, and 2.78 GB resources.assets when saving steam mod. why?
If I try to play the game with that big file, it will freeze the pc, by using up all the system RAM.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-04-18 11:42:39
what are u editing cuz u could be editing more files than normal if ur doing really adv stuff
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-18 12:18:41
I'll ask Albeoris.
Yes, do that. Now that I think of it, I think that Memoria can already change the text font.
For your other problem, you need to be more specific indeed, as Resinate said.

@Resinate: yeah, I saw that you made a spell like this also, but Transcend was already in the first (english) release of my mod and therefore I was the first of us to have the idea  :evil:
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-18 12:21:49
I don't think I did anything more advance than before.
The only thing I did differently this edit was import that LocalVariableSettings_v1.hws, then my mod after it.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-18 12:47:11
now this makes no sense.
I just reinstalled the game, an opened an older .hws that always worked, and now it doesn't. Still does the same thing.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-18 12:50:43
LocalVariableSettings should have no impact at all on the Steam modded files. It's only used for displaying the local variables properly (in AI scripts only for v1).
If resources.assets is the huge file, then it is most likely some corrupted texts. Verify the names and helps of the different things and the dialogs (in HW, after you import your mod). You may find a fuzzy one.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-18 13:01:07
Does that also explain the huge .hws file too? I don't create steam mods without first save the .hws, and if the .hws is a huge file like now, resources.assets will be too.
I just tried a backup .hws on all original non-modded files of the game, and yet it did the same thing.

could you test my mod .hws file and see if anything's wrong with it?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-18 13:26:06
okay, so I took so some benadryl, and took things slowly, using the modification manager through each save. and came to a conclusion, it was something in the world map section...
the section "common data", I had edited the world map/Places texts, probably had too long of a text, resulting in a oversized .hws and resources.assets.

I had this problem a long time ago, forgot how I fixed it, now I see how. I never touched, World Map/Places texts, cause it always corrupts something!

Thanks as always, Tirlititi!
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-04-18 22:08:20
Tirlititi can u make a video tut of how to use the steam script system like ones u found for magic stones? i dont know how to edit them lol.

also is there any way to change in battle menus to be ALOT smaller? like 50% to 75% smaller?

also i noticed in the steam version when i modded the shops no changes were applied in the game even tho files say they were changed.

also for psx side of the tool if u rename a monsters spell it crashes the tool instantly
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-19 22:40:16
last question to finalize another game,

Tirlititi,
I still have this weird bug when adding random encounters to an area that never had it. (ex. Quan's Dwelling)
After the battle ends, the player will become frozen and so will any background animations. Even if I add/had EnableMove() function, it still freezes/locks in place
How do you fix this? There have to be more commands to add than just SetRandomBattleFrequency()

And, how do I prevent the title intro area text from displaying the first time you access a new field, like Quan's dwelling?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-19 22:57:23
Ah, maybe you need to add a function "Main_Reinit" to the script for those fields. That's a function that runs at that point (when the game returns to the field after a battle).

Check out the script of a field in which there are random battles (or even non-random battles), they usually have this function ; I won't test now, but I guess you can simply copy the script from it and paste it into a Reinit function that you add in your modified field (right-click -> Add function -> choose function ID to be 10).

Also, maybe you'd need a "Zidane_Reinit" as well ; IIRC ( :p ) there is one most of the time in order to setup the footstep sounds again after a battle.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-20 00:50:21
I'm testing this right now...
And is it possible to change which enemies is encounters in the world map?



side note:
found a bug,
It seems if I put a battle from field to another, the battle music will not play, instead it "acts" like if the "Don't stop music" flag is checked (which it isn't)
example:

the Mandragoras are only found on the world map, right; so if I put them on a field (like Iifa Tree) the battle music will not play, and the "don't stop music" flag is oddly applied.
Then, of course, after winning the battle, the music will go dead silent until the player enters another field background that calls to play the IIfa Tree's bgm again.
A weird bug, yes.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-20 04:28:43
I tested it, and it looks like I do need the Zidane_reinit; footsteps did not play.

while the control over the player was regained, other glitches happened:
see video after battle:

https://www.youtube.com/watch?v=jWFCpQsozb8

And of course the battle music not playing bug, which is a no go. Need that battle bgm playing!

EDIT: looked through some fields, don't see a "Zidane_renit" function. Just Zidane_11 and such...
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: kenichi on 2017-04-22 15:56:56
is this tool support that characters;
İ-Ö-Ü-Ç-Ğ-Ş-ı-ş-ç-ö-ü-ğ.

Same ı wrote it. and anyone tell me how to use this. Please just basic information detailed miex my mind.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-04-23 05:06:04

Tirlititi  is there any way to enable use of stones/abilities on off chars on psx side of the tool? if u have the patch for it?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-23 20:58:31
UPDATE: I found the how to add Zidane_renit function, but have yet to see any other field that have Zidane_reinit naturally.
What goes in this function...?
I tested around, I added random battles to the entrance of Daguerreo (which already came with a Main_reinit) function but no Zidane_renit function, and the footstep sounds (and background image) was perfectly working after the battle.

I'm guessing the other fields that have random battles don't exactly use the term "Zidane_reinit" but is one of those...Zidane_17, Zidane_11 functions?

And the battle audio only playing for enemies set in there native fields,
Do the fields backgrounds have ID's like enemies have ID's? Cause maybe I have to mod the BtlEncountBgmMetaData.txt.txt for this bug to be fixed...
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-23 23:25:25
I solved the battle music not play bug!
My details, served as a tutorial:

for battle music not playing:

if you add an enemy to a field where the enemy isn't originally located.
You have to edit the BtlEncounterBGMMetadata.txt
find the field your adding this enemy too's ID number,
and add that enemy's original
    "107": "125"

to the field slot.

Example:
I have Hilgigars as random encounter in Memoria Ruin,
to make the battle music play, do this:

Find an enemy that is oringially from the Memoria/Ruin field, get their ID number. Find this ID number in BtlEncounterBGMMetadata.txt
now you see the ID number of the field: Memoria/Ruin.
(Its 2909)

And you see underneath "2909" Two enemy id numbers:
Iron Man(929) and Chimera(955). This is correct, because originally these are the only two enemies fightable in the Memoria/Ruin field.

So now, we just simply add Hilgigars enemy ID to this section:

Original:

  "2909": {
    "929": "0",
    "955": "0",

to:

  "2909": {
    "929": "0",
    "955": "0",
    "107": "125"

"107" is Hiligars's ID number and 125 is the BGM audio ID number. (In my case, its "Protecting my Devotion" song changed to: "The Eidolons Shackled" from FFIV.

The World map is the same thing:
it has ID's to certain locations on the WOrld Map (ex. Bentini Heights/Donna Plains etc.)

How I find field ID numbers that don't already have enemies, I count up the list from a field that does.

video result:

https://www.youtube.com/watch?v=5rtU3rhqars
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-24 15:10:52
@resinate: I thought I had a patch for that, but I can't find it anymore...

@ddclem: yep, fields have ID, like pretty much everything.
You can also get the ID from the Script Editor: write a line "Field( 0 )" anywhere in a script and you'll have the list of fields displayed on the right. Selecting a field there will write the appropriate ID instead of the "0".

For the "Zidane_Reinit", yes it sometimes doesn't exist and there's a "Zidane_11" or whatever instead. But then that function "Zidane_11" is called from the "Main_Reinit" (there's a line "RunScriptAsync( 0, 250, 11 )" ). Using directly a function Reinit, there's no need to call it from "Main_Reinit".
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-24 17:01:24
thanks for the info! More convenient! Fixed a problem error I had in Eidolon's Cave before.

and progress update;
will there be a proper model importer in HW? I don't think saving the new model i want imported back as a .fbx is working... then again, there are lot of export options for .fbx...
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-24 20:13:12
the Zidane_reinit, do you know exactly what I can copy and paste into this field, I'm not getting anywhere with getting the footsteps sound back.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-24 20:21:30
It usually looks like this:
Code: [Select]
Function Zidane_Reinit
    RunSoundCode( 4616, 914 )
    RunSoundCode( 4616, 923 )
    RunModelCode( 16, 25, 4, 914 )
    RunModelCode( 17, 25, 4, 923 )
    RunModelCode( 18, 25, 4, 1 )
    RunSoundCode( 4616, 914 )
    RunSoundCode( 4616, 923 )
    RunModelCode( 16, 25, 13, 914 )
    RunModelCode( 17, 25, 13, 923 )
    RunModelCode( 18, 25, 13, 1 )
    RunSoundCode( 4616, 914 )
    RunSoundCode( 4616, 923 )
    RunModelCode( 16, 38, 0, 914 )
    RunModelCode( 17, 38, 0, 923 )
    RunModelCode( 18, 38, 0, 1 )
    RunSoundCode( 4616, 914 )
    RunSoundCode( 4616, 923 )
    RunModelCode( 16, 38, 8, 914 )
    RunModelCode( 17, 38, 8, 923 )
    RunModelCode( 18, 38, 8, 1 )
    return
However, the sound IDs change from field to field (as the footstep sound changes). Check out the "Zidane_Init" function to get those.

There will be a model importer eventually. You won't be able to re-import the currently exported models though.
But I said that already.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-24 21:22:58
Excellent! I was on the right track! Now that you mention the sound ID, that's why it still isn't playing! makes sense.

Okay,
For the finale, what is the script command to the end with game? Ending the game with the "The End" sprite, and skipping the final two FMVs?
Ex.: the game to ends after the final boss.
Oh and also, how do I make the "Quan's Dwelling" title not show when you first enter it?

Thank god the model importer, tho!
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: DanTsukasa on 2017-04-25 11:10:39
Progress on this program is fantastic! Amazing work here Tirlititi!
1 step closer to possibly having an exportable FF9 world map (with UV's), really looking forward to this.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: livegood118 on 2017-04-25 22:09:34
Hi,

Thanks for this great tool - great to see twenty years after release that FFIX is getting the attention it deserves.

I've been trying to install the fixed stats mod by Vir with Hades Workshop on the Steam version of the game (http://forums.qhimm.com/index.php?topic=16703.0)

Unfortunately I'm getting a crash when the game loads up and I'm wondering if you'd be able to help me with it.

When I download the Steam version of the fixed stats mod there's four separate files ("FF9 Fixed Stats D1 - D4"). This is what I do:

1. Load up the FFIX launcher (located in the folder where x86 and x64 is) in HW
2. Click on Open Mod
3. Load in each of the four files after one another, unticking each time (I've checked the item browser and the stats seem to be changed properly)
4. Click on Save Steam mod and save the files in the hades workshop mod folder
5. The two files created as a result of this process are a resource file and a C sharp file.
6. I drag and drop the files from the Hades workshop mod folder so that they replace the existing files

However, when I boot the game, I get the White FFIX Title and then absolutely nothing afterwards  :-\

Verifying the integrity of the game cache gets it working again so it'd definitely something I'm doing wrong with HW that's causing the issues.

Thanks for any insight you can provide.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: livegood118 on 2017-04-25 22:41:51
Hmm - I read a few more forum posts and I did it without moving over the C-sharp file.

It seems to have worked!

But will I run in to problems further down the line if I don't include it?

Edit: Hmmm - I did the cheat to give me level 99 and my stats only reached vanilla levels without equipment. Does the Lvl 99 cheat on the steam version bypass the MAG/STR/SPD/SPR bonus you get each level? Also were the resources files produced supposed to be the exact same size, down to the byte?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-04-26 17:51:33
@livegood118: The Assembly-CSharp.dll is important for Vir's mod. I'll take a look at it.
However, you'd only need to import 1 file, not 4.

@dclem: The titles are background tiles. You manage them in the script with functions such as "ShowTile" or "SetTileColor". For Quan's dwelling, it happens in the first half of the "Main_Loop" function.
For ending the game, it's a special call to "Field( 16000 )". It triggers the ending cinematics though (based on the the CIL Code of "EndingMain").

@DanTsukasa: I don't know about the World Map model. I surely went a step further for it, but it may still be a long way. Plus that's not my personnal priority.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-26 20:13:16
I see that field(2934) in Field: last/cw mbg 1
Can I simply put the Field(16000) in Necron's (Loop) function after his death animation?
And for canceling the trigger o f the cinematics, in the CIL code do I just remove all the commands:

callvirt 0x6000A79   // MBG::LoadMovie

callvirt 0x6000A7B   // MBG::Play


If I can't remove the cinematic for this ending field(16000)

How can I make a MUsic BGM play during Necron's death?
I've tested so far, trying to run a sound code to trigger Music with ID 41, but that didn't work.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: livegood118 on 2017-04-27 07:47:43
@livegood118: The Assembly-CSharp.dll is important for Vir's mod. I'll take a look at it.
However, you'd only need to import 1 file, not 4.

Yeah, unfortunately the patch didn't apply correctly after only moving the resource file over (Observable by items still giving +1 to stats). Maybe it'll wreck my save if I try to do anything mid-game?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-27 12:19:11
yeah, i want the ending set after the death of final boss, literary right after; somewhere I can put this ending script command in Necron's script, and not one the fields backgrounds.
how do I trigger a music track to play during battle? this only for an alternative I'm testing.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Fraggoso on 2017-04-27 12:58:53
Dclem when do you will release your sfx patch?
Are you not going to add any sfx like the ones you used from FFXII?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-27 19:40:04
I never added any sfxs, I used some from FFXII as tests, then replaced with FFIX afterwards.
the sfxs is done -  with only an exception:
The eidolon summons sfxs could not be found; but that's mostly due to the fact that it's like composed of like, 26 different sfxs ranging from all different types of sounds no one could recognize, not even an id to identify them. They also play at different timed intervals, which gave me major problems when attempted to fix the squeal of some of the sounds they make.

Menus:
I can't find the FFIX psx menu sounds, after replacing it with my testing ones, not that these sound any different than what came with steam.
I also fixed sound bugs that occurred with events like: the lightning not properly playing during the Prima Vista theater stage fight:

https://www.youtube.com/watch?v=Un_iSLZtO1c

compare that to the vanilla version's sound. That's one among many.

the patch will be available after I find those menu sounds again.
if you can't do with the new menu sounds.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-04-30 21:54:31
yeah, i want the ending set after the death of final boss, literary right after; somewhere I can put this ending script command in Necron's script, and not one the fields backgrounds.
how do I trigger a music track to play during battle? this only for an alternative I'm testing.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-01 22:04:51
hey Tirlititi is there a way to make a psx patch to expand number of auto abilties on chars so i can use all of them on every char?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-02 08:42:31
Something is wrong with the Disc 1 first entrance Alexandria Main Street title tile block.
It won't remove even if I remove the ShowTile and SetTileColor commands! It just sits there permanently on the screen every time this field is accessed by the player!
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-02 22:37:03
@livegood118: Indeed, the .hws provided by Vir are not working for now. Use this one instead (I compiled it from his .ppf):
https://www.dropbox.com/s/14ger23aouudy9p/FF9%20Fixed%20Stats.hws?dl=1

@dclem: In battle, the script line is "RunBattleCode( 37, 2929 )" for running the end-game cutscenes, starting right after Necron's battle. Put it in the "Main_Init" function, next to the InitObjects.
I don't know for playing a music during a battle, other than modifying the BgmEncounterData thing.
In Alexandria's Main Street, you probably removed the lines "ShowTile( 11 and 12, 0 )" in the "Main_Init" function, which isn't good. Those lines are here to hide them. The code used to display it once is in the "Code14_19" function (which is called in the "Alexandrian_GirlA_Loop" function since the title appears the same instant as her).

@resinate: Not really. It might be possible to increase that limit on Steam but not on PSX. What you can do is transforming learnable spells into learnable auto-abilities in the "Stats" panel (you have the learnable ability lists). However, the total of "learnable spells + auto-abilities" can not exceed 48. You can only trade-off.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-03 07:33:05
What about editing the CIL code for the Field (16000) not trigger those ending cinematics? What do I remove to not make the FMVs play, just skip right to the THE END sprite?
(Assuming the "Prologue FFIX music will play regardless).
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-03 07:49:06
Tirlititi is there any word on being able to modify the auto abilities like changing auto haste to auto trance? or changing them into auto protect/shell? and change stuff like 20% hp to like 80%? stuff like that. we can mod spells and all that. just asking
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-03 07:55:35
nope, says in HW help, cannot change the effects of supporting abilities.
one would hope to have an supporting ability that prevents zombie or mini.
i called it, "Faith" and "thinking big".  :?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-03 08:19:08
What about editing the CIL code for the Field (16000) not trigger those ending cinematics? What do I remove to not make the FMVs play, just skip right to the THE END sprite?
(Assuming the "Prologue FFIX music will play regardless).

Nothing happens after putting the Field(16000 next to (InitObject) in Main_Init section of Necron script.
Just sits there with a blank screen
and this in the output_log.txt

Code: [Select]
  at HonoBehaviorSystem.Update () [0x00000] in <filename unknown>:0
 
(Filename:  Line: -1)

InvalidProgramException: Invalid IL code in EndingMain:HonoUpdate (): IL_009c: stfld     0x0400179d

and wasn't there a tutorial somewhere on to create new enemies? or least modify an existing one to my preference?

I'm tying to make series of bosses, with at least 22 spells, and 8 dummy objects to cast most of it for the enemy, much like Necron.

Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-03 10:33:43
EDIT: The Memoria Engine modifier now provides a simpler way to modify supporting abilities: see the documentation in "StreamingAssets\Data\Characters\Abilities\AbilityFeatures.txt" after installing Memoria.

@resinate: It is possible, but on Steam version only, and it requires editing the CIL code, again.
Since Memoria Engine will allow to do it more conveniently, I stoped developping CIL macros for that. However, changing a HP +20% into a +80% is quite simple and can be done like this:
1) Find the method "ff9play::FF9Play_GetSkill",
2) In the second half of the method, spot these lines:
Code: [Select]
ldarg.1
ldind.ref
ldarg.1
ldind.ref
ldfld 0x40008AB // FF9PLAY_SKILL::max_hp
ldarg.1
ldind.ref
ldfld 0x40008AB // FF9PLAY_SKILL::max_hp
ldc.i4.s 10
div
add
conv.u2
stfld 0x40008AB // FF9PLAY_SKILL::max_hp
There is a similar code 4 times in a row, for HP+10%/20% and then for MP+10%/20%.
3) Replace the two lines.
Code: [Select]
ldc.i4.s 10
div

// Replace it by:
ldc.i4.s 80
mul
ldc.i4.s 100
div
This changes it into +80%

@dclem: First, I would like you to stop double-posting like that. You have a button to edit your messages ><
It makes it difficult for me to answer cause I have to browse the page, and besides it makes you ask the same question several times for nothing.

Secondly, you could read what I told you: it's "RunBattleCode( 37, 2929 )" in battle, and not "Field". If you tried that, you would have seen that 2929 is the field ID and so can be replaced by 16000 for your purpose.
And for the CIL code of the cinematics, I don't know. But I suspect it will be difficult to remove those steps like that. You'd better replace the cinematics by some black screen cinematic during 0.1 second or something similar.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-03 19:37:55
let me just stop,
I'm better than this.

take my pill and just.

The script:
Still doesn't work either way, but if you can't figure it out, I've got an alternative.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-04 21:30:14
its fine im sticking to the psx version for now, im not able to port the mod to steam it breaks the game if u load an auto save
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-11 00:10:58
is there a way to make a global variable that can be called upon on every battle. i wanna use a life system where certain bosses have x amount of lives when it hits 0 then battle is won.

pretty much like this: var life = 10: if (HP == 0 && life == 0) {end battle} else {if (HP == 0 ) {Restore HP to full: life =-1}}
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-11 13:45:30
It's the same trick as artificially increasing the max HP limit of bosses. You can find a very detailed example of how to do it for Kuja here (http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426). It's similar for any boss (in particular those who have this kind of system "when under 10 000 HP -> dies").
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-12 00:19:45
u sir thanks soo dam much for that script. i did some tweaks of my own and my god its amazing lol

i have found that it cant be applied to all bosses tho sadly but ones i needed were able to do so
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Kefka on 2017-05-13 14:58:03
@Tirlitit: on the topic of Enemy AI editing: this may seem like a dumb question, but is there a way to make it so that Zorn and Thorn don't immediately lose their charged magic after every single attack? I'm looking for ways to make this battle at least a little bit harder, but simply boosting the power of their spells won't really be sufficient considering that it's so easy to prevent them from using them in the first place. I was thinking of maybe making it so that you'd need 2-3 attacks on a charged clown to cancel their spell instead of just one. But my efforts so far didn't really accomplish anything. Thanks in advance for any help.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-13 16:31:18
It's is possible to do that without a lot of changes.

Zorn and Thorn both have a flag stating whether there spell is available or not. It's "VAR_GlobUInt8_28" of Zorn (or "zornpoweron" if you imported the LocalVariables.hws, which is recommended for AI modding), and it's "VAR_GlobUInt8_29" for Thorn (or "thornpoweron").

When their spell becomes available, that flag is set to 1, and when it's not available anymore, it's set back to 0. What you need to do is turn those variables into counters instead of flags: you set it to 3, for instance, and you decrease it at each attack, canceling the spell only if it reaches 0.
CounterEx becomes like this:
Code: [Select]
Function Zorn_CounterEx
    if ( GetAttacker == SV_FunctionEnemy ) {
        if ( GetAttackId == 7 ) {
            set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
        }
        return
    }
    if ( GetAttacker == thorn ) {
        if ( ( GetAttackId == 13 ) || ( GetAttackId == 14 ) ) {
            set zorn[PREVENT_ATTACK] =$ 1
            set thorn[PREVENT_ATTACK] =$ 1
            set SV_FunctionEnemy[ATB] =$ 0
            set zornpoweron = 3                                         // HERE: setup the number of attacks required to cancel the spell
        }
        return
    }
    if ( #( SV_FunctionEnemy[HP] <$ hp ) ) {
        set hp = FirstOf(SV_FunctionEnemy[HP])
        if ( ( GetAttackCommandId == 18 ) || ( ( GetAttackCommandId == 27 ) && ( GetAttackId == 122 ) ) ) {
            return
        }
    } else {
        set hp = FirstOf(SV_FunctionEnemy[HP])
        return
    }
    if ( zornpoweron ) {
        set zornpoweron--                                         // HERE: decrease the counter instead of directly set it to 0
        if ( zornpoweron==0 ) {
            BattleDialog( 24 )
        }
    }
    set SV_FunctionEnemy[STAND_ANIMATION] =$ 0
    set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
    return
And in the counter:
Code: [Select]
    case +2:
        if ( zornpoweron ) {
            set zornpoweron--
            if ( zornpoweron==0 ) {
                BattleDialog( 24 )
                set SV_FunctionEnemy[STAND_ANIMATION] =$ 0
                set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
            }
        } else {
            set SV_FunctionEnemy[STAND_ANIMATION] =$ 0
            set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
        }
        return
    case +3:
        if ( zornpoweron ) {
            set zornpoweron--
            if ( zornpoweron==0 ) {
                BattleDialog( 24 )
                set SV_FunctionEnemy[STAND_ANIMATION] =$ 0
                set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
            }
        } else {
            set SV_FunctionEnemy[STAND_ANIMATION] =$ 0
            set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
        }
        if ( ( !zornpoweron ) && ( !thornpoweron ) ) {
            set #( SV_Target = thorn )
            Attack( 6 )
            set waitingpowerthorn = 1
        }

And you do the same for Thorn. They have a symmetric script.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Kefka on 2017-05-13 18:53:06
Yay, I've just tried it out and it works like a charm! Thanks a ton! Now it's finally possible to make the Zorn and Thorn battle more challenging. After a bit of testing I can say that when you need 3 hits on a clown it's still possible to knock them out of the charged state, but you need to be real quick, and they will get off their attacks quite frequently now.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-14 04:42:16
hey Tirlititi whats max value of a variable in a script like ur HP life counter. how many "lives" can a boss have lol
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-14 10:03:59
It depends on the type of the variable actually.
Code: [Select]
UInt8 -> contains a value between 0 and 255
UInt16 -> contains a value between 0 and 65535
UInt24 -> contains a value between 0 and 16777215
Int8 -> contains a value between -128 and 127
Int16 -> contains a value between -32768 and 32767
Int24 -> contains a value between -8388608 and 8388607
Bool -> contains 0 or 1
The more the max value is, the more the variable takes of memory in the RAM. The following infos are important when you declare variables or use new variables in the script:
 - A variable of type "Int8" or "UInt8" takes only 1 byte of RAM, meaning that you can use both VAR_LocUInt8_0 and VAR_LocUInt8_1 without problem, for instance.
 - A variable of type "Int16" or "UInt16" takes 2 bytes of RAM, so if you use one, you can't use a variable that directly follows its numbering and is of the same type: you can use both VAR_LocUInt16_0 and VAR_LocSometype_2, but not VAR_LocUInt16_0 and VAR_LocSometype_1.
 - A variable of type "24" takes 3 bytes of RAM, so you need to let a gap of 2 in the numbering of variables that you use.
 - A variable of type "Bool" is special: it takes only 1 bit = 1/8 byte and has a special numbering. The number specifies the bit position in the RAM, not the byte position like the ones above. So VAR_LocBool_8 corresponds to the first bit of the second byte, meaning that you can't use both VAR_LocBool_8 and VAR_LocInt8_1 at the same time. More generally, you can't use AR_LocBool_N and VAR_LocSometype_[N/8] at the same time without conflict.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Kefka on 2017-05-15 16:44:25
Tirlititi, another question regarding enemy AI, mainly about certain symbols used: what exactly is the difference between:

"if ( GetRandom % 2 ) {"     and     "if ( GetRandom & 2 ) {"

I've always assumed they're pretty much the same ( a 1 in 2 chance), or how does the difference between the "%" and the "&" affect propability? Like for example in the Tantarian ATB function, it contains a switch that goes like this:

            switch 2 ( GetRandom % 4 ) from 0 {
            case +0:
                set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
                Attack( Edge )
                break
            case +1:
                set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
                Attack( Doom )
                break
            default:
                set #( SV_Target = SV_PlayerTeam )
                Attack( Paper Storm )
                break

Now the Random Number selected is a 1:4 chance, however the switch only has 2 possibilites (0 and 1), so half of the time the default attack is used instead of the switch (meaning that Tantarian has a 25% chance of using Edge, a 25% chance of using Doom, and a 50% chance of using Paperstorm, right?). Now If I were to increase the GetRandom to % 5 or % 10 or such, it would increase the chances for selecting Paperstorm and lower the chances for the other two attacks, correct? Just to make sure I'm reading things correctly.

And the other question: some enemies (Trance Kuja in this case) use HP-related conditions like this:

    if ( ( FirstOf(SV_FunctionEnemy[HP]) - 10000 ) < ( ( FirstOf(SV_FunctionEnemy[MAX_HP]) - 10000 ) >> 1 ) ) {

I'm unsure of how to read this, what's the meaning of the ">>1" at the end? All I can say from observation is that Trance-Kuja never counterattacks when his HP are near max, but does so quite frequently when his HP drop below a certain point (about half his max HP, roughly).
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-15 17:05:56
% is the modulus operator, it gives the remainer of the euclidean division. You nailed it right (all your assumptions about Tantarian's AI are correct).
& and >> are bitwise operators, in the sense that they have a meaning on the bits rather than numbers.
https://en.wikipedia.org/wiki/Bitwise_operations_in_C

What you need to remember most of the time, it's that "GetRandom % 2" and "GetRandom & 2" are indeed equivalent, but it's not the case anymore with larger numbers.
"(GetRandom % N)==0" is a 1/N chance to occur.
"GetRandom % N" is a (N-1)/N chance to occur.
"GetRandom & 1", "GetRandom & 2", "GetRandom & 4" are all 1/2 chances to occur.
"GetRandom & 3" is a 3/4 chance to occur (it's the independant probability of having either "GetRandom & 1" or "GetRandom & 2").

For >>, you can see it as divisions.
"A >> 1" is the same as A/2,
"A >> 2" is the same as A/4,
"A >> 3" is the same as A/8,
etc...
The result is always truncated (5 >> 1 = 5/2 = 2 for instance). There exists only integral numbers in FF9.

For Kuja's AI, it indeed connects the counter-attack only if Kuja's HP are below half of his Max HP without counting the extra 10 000 HP (so it's half of his in-game visible Max HP, not the number that appears in the datas).
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Kefka on 2017-05-15 18:32:10
Thanks for the quick reply, it starts to make more sense now. So "GetRandom & 3" is basically like "GetRandom & 1" and "GetRandom & 2" in succession, resulting in 75% chance total (two 50% chances).

And for example, "GetRandom & 7" would then be like "GetRandom & 1" plus "GetRandom & 2" plus "GetRandom & 4", resulting in 3 x 50% chances = 87,5% final chance, right?

I'm gonna read that wikipedia page thoroughly sometime, I guess it'll be really helpful to non-programmers like me.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-15 22:34:38
Thanks for the quick reply, it starts to make more sense now. So "GetRandom & 3" is basically like "GetRandom & 1" and "GetRandom & 2" in succession, resulting in 75% chance total (two 50% chances).

And for example, "GetRandom & 7" would then be like "GetRandom & 1" plus "GetRandom & 2" plus "GetRandom & 4", resulting in 3 x 50% chances = 87,5% final chance, right?

I'm gonna read that wikipedia page thoroughly sometime, I guess it'll be really helpful to non-programmers like me.

You look like you pretty much understand how things work here.
Unfortunately people just think everyone is supposed to know this stuff.
thanks for reminding me how much i suck at math.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-16 20:04:45
now what you gonna do?

keep being silent?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Fraggoso on 2017-05-16 20:07:11
If he replies I highly doubt you'll understand anything so why asking?
Are you that eager to get slammed with mathematics?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-16 20:13:01
I'm not playing with you no more. don't f*ucking talk to me anymore.

*talkin' about "ain't attackin my illness". get yo lyin' ass outta here!
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-16 20:21:33
Stop that now.

I had no reason to post anything, as there was nothing new concerning the tool and no new question (unless I'm blind).
Covarr had to act once already, that's not so you pick up the fight 5 minutes after. So dclem, stop being rude against people giving of their free time for the others, you included. And Fraggoso, there is no need for you to come to inflame the conversation.

If you have a problem with me, do it by PM. And if I don't answer in the following 24h, don't take it as an insult.

EDIT: Here we go... Thank you Covarr.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Covarr on 2017-05-16 20:21:59
My no drama warning wasn't just for the other thread. Both of you get a vacation. In the mean time, I suggest you reread the rules, particularly the "Don't be a d*ck" rule. ~Covarr
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-16 23:13:01
hey Tirlititi i saw a video of someone showing off ultima doing multiple rounds of 9999s im wandering how can i do this LOL
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-16 23:21:57
did it bug in the video?
my guess would be to edit it's spell sequencing, adding numerous effect points. (damage/figure)
boom.

then again, it is a special move, with 0 power so...


Does anyone know how to work enemy AI's? no manual, no nothing. i really just want to get this over with.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-17 05:39:12
also im really stuck on this bug. ozma works perfectly fine on disc 4 but same battle and scripts on disc 3 cause ozma not to appear in battle at all....
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-17 06:16:08
did you change the script at all? alternating the script got's to have something to do with it.
I know there's two Ozma enemies. (One for friendly battle completed and one not???)
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-17 13:48:24
@resinate: About Ultima doing multiple rounds of 9999, it is as dclem said. The guy added damage points and figure points in Ultima's spell sequencing. He also turned it into a magical attack (hence why it deals damage while it is normally not a damage-dealing spell).
However, his video works only because the damage are enough to end the battle. Usually, spell animations state when they are over, so the battle resumes after them and it can go to the next awaiting attack. That's not the case with Ultima and it's like it never ends. However, since the enemies are all dead after it in this case, there's no need to go to the next attack and the battle ends on a victory.
I don't know any way to use Ultima's spell animations properly in battle. According to my tests, it's not something that can be fixed with the current version of HW (we need to go deeper to the spell animation's structure).

About Ozma, that's strange... Can you show me the script that launches the battle? You're not talking about the non-modded way to fight Ozma, right? Cause it is perfectly possible to fight it on disc 3 in the normal game and without bug.

@dclem: The best way to learn for now is to import the "LocalVariables.hws" and try to understand some parts of the default scripts.
There are also descriptions of how the battle variables/functions work in the "Function List" panel. Here are some of the most useful ones:
Code: [Select]
Function -> Attack and AttackSpecial
Function -> RunBattleCode
Function -> BattleDialog
Variable -> SV_EnemyTeam, SV_PlayerTeam, SV_FunctionEnemy and SV_Target
Variable -> GetAttacker, GetTarget, IsAttacking, GetAttackId, GetAttackElement, etc...
Variable -> GetBattleState
Var Code -> RandomInTeam
Var Code -> [DATA_ACCESS]
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-17 15:52:33
EDIT: learned everything i needed to know
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-18 01:13:05
@Tirlititi got this imported and see it changes some variables to words more readable. but still a little.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: vivigix on 2017-05-18 09:07:41
Fraggoso, thanks for your HD background mod, you done great work.

Tirlititi, there appear a question about compatibility of HW with HD background mod, I tried explore Fields on Environment, but textures of field do not display as they should.
I understand it is because of files replacement. Would you add Fraggoso's HD mod support in future revisions of HW?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-18 10:03:23
Yes, I need to implement the compatibility for upscaled textures. I'll do that probably for the next version.
Other than the displaying/exporting of the backgrounds, there should be no problem.

Also, if you want to make a mod compatible with Fraggoso's HD mod, it is quite easy: go to the panel "CIL Code -> Macros -> Custom Backgrounds", then write 64 as a parameter and then click on the "Apply Macro" button. The downside is that your mod will then be compatible only with Fraggoso's mod (or potentially the others that would double the resolution of the backgrounds) and not with the normal backgrounds.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-19 08:30:48
Tirlititi found a bug with the editor for psx version. u have no limits on scripts so when u add too many lines in ff9 it breaks other scripts. like i made some mobs unkillable cuz of this.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: elberuss on 2017-05-20 14:02:14
Hi Tirlititi! i am a new menber!

In first place, , congratulations for you great GREAT work with tool, i love ffix and i love the possibilities that can be made with your tool  :-D

I've spent the last few days playing with the possibilities of the modding tool and  now, i have a query of type "bugs" that i hope we can resolve ease :

when i edit stats enemy in stem version, how to HP,Def, items drop or steal and Scripts. And i save a new mod steam, this values dont save, only save the battle scene but rest of all dont will be save

note : i try edit stat of party por example And saved correctly (When I play the changes they are reflected)





Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-20 15:22:36
Hi elberuss,

You're not the first one to tell me that, but that's very strange... I have no problem at all changing enemy stats.
Are you sure you replace the files p0data2.bin and p0data7.bin after saving Steam Mod? And you replace the game's files by them?

Which enemies do you try to modify?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-20 22:58:04
Will there be an ETA on an update with HW?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-21 04:02:21
its not changing stats its changing the scripts adding few lines for hp system. and its on the psx version not on steam one
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-21 11:35:53
I'll look into your problem resinate, but there should be a script limit for PSX. There was an efficient one at some point at least, but maybe I fuzzed with it somehow.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: elberuss on 2017-05-21 12:10:29
Hi elberuss,

You're not the first one to tell me that, but that's very strange... I have no problem at all changing enemy stats.
Are you sure you replace the files p0data2.bin and p0data7.bin after saving Steam Mod? And you replace the game's files by them?

Which enemies do you try to modify?

Thank you for taking a moment for this problem :)

Yeah, i replace the steam game files p0data2.bin and p0data7.bin for me mod steam save files. In fact, If I modify anything else sections (as : party, items, inventory) the changes they are reflected in game play. At the moment i try edit stats of:  masked man (baku), mu, fang ... (the first enemys of the game)  and only save the battle scene,but the rest of all changes not reflected in the game play.

PS. i am modder and a software programmer (javascript, phyton, c++  :roll:),  if I can be useful you with anything only tell me ;)

Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-21 17:43:10
heres a video of a nasty script bug i found in your editor causing my bosses to have infinite HP

https://www.twitch.tv/videos/146000744

quick sum up:
when i put this in:
    if ( #( SV_FunctionEnemy[HP] <=$ 10000 ) && ( VAR_LocUInt8_60 <= 5 ) ) {
        set VAR_LocUInt8_60++
        set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
    }

it reverts to this bugged version:
    if ( #( ( SV_FunctionEnemy[HP] <=$ 10000 ) && ( VAR_LocUInt8_60 <= 5 ) ) ) {
        set VAR_LocUInt8_60++
        set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
    }
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-21 23:17:23
Use this instead:
Code: [Select]
    if ( (#( SV_FunctionEnemy[HP] <=$ 10000 )) && ( VAR_LocUInt8_60 <= 5 ) ) {
        set VAR_LocUInt8_60++
        set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
    }
Sorry, the operator's parser is totally dumb (it has no concern for the operation's priorities). It will be fixed eventually but until then, you'll need to write a lot of parentheses.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-21 23:51:53
ok i found out dont use var int8_60 its being used for frog counts use int8_80 its not used at all in game
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-24 05:37:31
Tirlititi, three questions.
1. You know Freya's broken Jump Spear-Trance? How she doesn't even jump in the air and remain in the air and rain spears until her trance is over. Is there a way to fix this?

2. Is there a way to change default names in steam version?

3. Is it possible to add enemy health bars?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-25 06:38:44
i used a timer to tell how many counters i used per 50k hp

heres an example of what i did:

under INIT where all variables are assgined i added these at the end
    set VAR_LocUInt8_80 = 5
    ChangeTimerTime(VAR_LocUInt8_60 * 60) 1 counter per 1 min since we can use upto 99 counters
    ShowTimer( 1 )

under loop or counter i did this

    if ( #( SV_FunctionEnemy[HP] <=$ 10000 ) ) {
        if ( VAR_LocUInt8_80 > 0 ) {
            set VAR_LocUInt8_80--
            ChangeTimerTime(VAR_LocUInt8_60 * 60) 1 counter per 1 min since we can use upto 99 counters
            set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
        } else {
             if ( #( SV_FunctionEnemy[HP] ==$ 0 ) ) {
                  ShowTimer( 0 ) 1=true:0=false
             }
        }
    }



i use a substract system so u know when timer is at 0:00 u know hes on his last life
with it ending every battle at 0 u dont have to reset it back to 0 every battle u can simply re-use it. dont use VAR_LocUInt8_60 cuz this controls number of frogs in game

only thing i wanna learn is how to ID attacks so i can add special attacks when a life is consumed


Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-25 18:07:03
@resinate: frog catching can be accessed through "GetFrogAmount" but not through a local variables.
Reminder (this is in the help):
- Local variables area of effect is an entry. Outside that entry, a local variable can't be accessed and trying to do so will access to another local variables instead. The number of local variables (or moreover the allocation size for them) is specified by "allocate N" in the local variable panel.
- Global variables area of effect is a script. Be it a field script, a battle script (AI) or a world map script, it's a kind of variables that are shared by all the entries but not usable for long-term systems.
- General variables are shared along the whole game and also saved in Memory card / Steam saves.

I finally understood parts of your last post, but it's hard... "how to ID attacks" doesn't mean anything. I guess you mean you want to have scripted attacks like, let's say, Beatrix's ending moves, right?
You need to check how it's done in those battles (I can't check it myself right now). It mainly consists of:
1) Pausing the battle and hide the UI (some "RunBattleCode"),
2) A call to "AttackSpecial",
3) Ending the battle, optionnally flagging the enemy as defeated ("set SV_FunctionEnemy[DEFEATED_ON] =$ 1").
Another important thing for you to look at is the special attack's animation sequencing. It's inside it that you find the pieces of dialogs, which spell animation is performed, etc...

@dclem
1. That's not a bug. Freya's trance works like this.
2. You can't change them using Hades Workshop yet, but you can do it with Memoria (it's in the function "CharacterDefaultName" of the file "FF9TextTool.cs").
3. Not with HW neither. That's changing the engine quite a bit and can be done with Memoria as well, but chances are that I'll never include such a feature in HW.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-25 20:07:54
Wow! Memoria can do many extraordinary things.
No bigge about the health bars. But hopefully the default name change will come to HW soon.  :)

And Freya's trance's supposed to work like this?
But on psx, she jumps in the air and stays there raining spears until her trance is over.
Is that what was intended to be done in steam version? Her not jumping in the air and remaining there?

I'm quite baffled it was meant to be this way in steam.  :-\
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-25 21:21:59
Oh? I didn't spot that bug... It should do the same as in the PSX version.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-25 21:30:11
Yeah! Another bug Silicon Studios created!
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-25 23:13:26
Tirlititi u need to fix the psx limition u set it too low for item helps, if u dump clean items table and reimport it its flagged for not enough room to apply item texts

so now i went thru and deleted ALL item/key item text from patch and it loads up empty but in game all the key items still have random bits of text.

i think the editor might be bugged out really bad.... wish there was an ezer way to talk to you
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-26 11:33:27
No, no. You don't force him to make a change with anything. When he gets the time on his terms and deems it necessary, he will make the change.
But he is not a slave to anyone's command.
That's with anyone and their mod, too. (Me three)

Instead of "need", how about: "will there be" a fix for the psx limitation.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: resinate on 2017-05-27 04:08:44
EDIT
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: gorildo on 2017-05-30 16:39:06
I was thinking of playing ff9 again but I lost my last mod. It had very few changes, but most importantly the script mods for the chars joining at lvl1. I noticed the script editor has been updated, some variables have different names now.

I was checking out the Lindblum Conference Room (it's the only lvl 1 script I dont have, the older ones from vivigix I have saved), and I noticed this SetCharacterData function, and now there's this Update Level flag. Does it have anything to do with that?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-30 17:16:50
If the "update level" flag is checked, the character's lvl is updated to the average level of the current party members (the ones added through "SetPartyReserve"). Else, the level doesn't change (I guess it's initialized to 1 but not sure).

@Resinate: Thank you for reporting this bug. The PSX version is not my priority, but I'll check that eventually.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-05-30 17:45:38
I was sent here regarding the chat/card icons issue, when you remove the lines from hades workshop and approach a NPC in the game it freezes the game. I'm trying to get rid of cheats/chat/card icons and fixing the music. I'm also waiting for a mod that modifies the UI of the battle system.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: gorildo on 2017-05-30 18:01:24
I ask because when you get Amarant, for example, you have that flag active for all chars

Code: [Select]
  }
        if ( ( ( VAR_GenUInt16_19 >> 0 ) & 1 ) == 0 ) {
            SetCharacterData( 0, 1, 255, 9, 0 )
            set VAR_GenUInt16_19 |= 1
        }
        if ( ( ( VAR_GenUInt16_19 >> 2 ) & 1 ) == 0 ) {
            SetCharacterData( 2, 1, 255, 6, 2 )
            set VAR_GenUInt16_19 |= 4
        }
        if ( ( ( VAR_GenUInt16_19 >> 1 ) & 1 ) == 0 ) {
            SetCharacterData( 1, 1, 255, 5, 1 )
            set VAR_GenUInt16_19 |= 2
        }
        if ( ( ( VAR_GenUInt16_19 >> 6 ) & 1 ) == 0 ) {
            SetCharacterData( 6, 1, 255, 6, 6 )
            set VAR_GenUInt16_19 |= 64
        }
        if ( ( ( VAR_GenUInt16_19 >> 7 ) & 1 ) == 0 ) {
            SetCharacterData( 7, 1, 7, 5, 7 )
            set VAR_GenUInt16_19 |= 128
            SetRow( 7, 1 )
        }

Why all chars have the "update level" flag checked? Their level doesn't change, only Amarant  :-o
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-05-31 08:40:04
Ok question, is it possible to change the font in the hades workshop for steam version of the game?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-31 16:28:46
@Lein: For icons, if the CIL mod I proposed doesn't work, then there's no solution with HW as of now.
For font, it can't be done with HW (or it is a CIL code that I don't know about), but it can be done with Memoria for sure.

@gorildo: Actually, these codes are not executed because the "if" conditions are not satisfied, except for the 1st time the character enters the team.
You can see that, for Marcus/Eiko replacement and the other replacements of the same kind, that "SetCharacterData" is out of an "if" block in order to let the (already initialized) character to get re-initialized.

Either these "if" blocks are here because they used macros, either they wrote it because it was useful for debugging purpose (they surely had a debug room that could move them to an advanced place in the game, skipping the normal initialization of the characters).
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-05-31 17:12:17
Yes your method did work, not removing the lines but putting ret at the top solved the problem. As for the font, memoria isn't very compatible with hades workshop. You either have to choose to be able to change the font or do all the changes that you're able to do by using hades workshop. I prefer using hades workshop since with that you don't have to install anything. You simply drag some files into the game folder. I want to use these mods for a friend of mine and I wouldn't want him to have to perform the modding himself, hades workshop is preferable which is why I think it's a shame that whenever you've not got something figured out you tell people to use memoria. Your program is better! Create more of them macros, they're very nice.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-05-31 20:36:48
That's because Albeoris worked hard to make the engine moddable and his way of doing things is better than mine in that regard (he has more "macros" and allows to recompile the whole engine while you can only tweak a few things with HW). It's much better to wait for a Memoria-HW compatibility than re-inventing the wheel twice. Since you care about organizing FF9 modding efficiently, you should know it's better not to do that.

Congrats on the icon script :)
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-05-31 23:02:11
It's much better to wait for a Memoria-HW compatibility than re-inventing the wheel twice.

Yaasss!
The time will come we'll see Memeoria+HW together!

Two men working together to make one unique, --- I can't wait!  ;D
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-01 03:09:59
What I would want to see with memoria is for it to be possible to make the mods produced with memoria something you can upload online and have some other person put into the game without having to do any modding of their own. Yes for the hardcore gamer/modder it's not much to ask to download memoria and install the program and then edit the ini file yourself. But for those who aren't aware of what kind of mods they're looking for, maybe someone who plays the game for the first time, this is a bit too much to ask of them. It would be nice to just tell someone, hey download this zip and throw the files into the game folder and it fixes all the flaws that exist in the port.

That's a nice feature of your program Tirlititi, that the mods are portable. The way I see it, ideally you would want to literally merge hades workshop with memoria. Hades workshop has a nice interface, memoria has an ini file. How about somehow implementing memoria's features into the UI of hades workshop and through hades workshop make the mods portable. Make one super modding program, what are your plans in the future regarding this Tirlititi?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-03 06:41:44
Tirlititi,
You know the bug with the Back attack, how the ATB doesn't halt for 5 seconds like in the PSX?
Is there a fix to this?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-03 13:43:01
I can't believe it another thing that needs fixing in the port, the encounter rate. I was able to walk through the evil forest and the ice caverns without a single random encounter. Were the philippino boys who made this port dropped on their head at birth, wtf. Is there some mod that enables random encounters again? Also there's another problem, autosaving, I know people might like it but what's the point of the savepoints then? The game was easy as it was already, now when there are no random encounters and if you die at a boss you can try immediately again, did they turn this into a interactive comic book?

Is there some way to fix this?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-06-03 14:05:01
@dclem: I didn't think of it, nice catch (I don't know how easily it could be fixed though... it's also an engine thing).

@Lein: I think Memoria can increase the encounter rate. It's not about "fixing it so it's the same as the PSX", but rather "enable high encounter rate cheat just like there is a no encounter cheat".
One of the problems for making this rate the same as the PSX is that I don't know exactly what was modified. See here for some details:
https://www.gamefaqs.com/boards/197338-final-fantasy-ix/75389893
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-03 14:40:10
@Tirlititi: I found the entry in your program hades workshop, every encounter rate seems to be at 20 while the max encounter rate is 255. Which means you're not likely to ever encounter random battles. I went through some of the ice cavern scripts and raised the encounter rate to 200, I assume this will fix the encounter rate. Problem is that there is like 700+ scenes and the encounter code thingy isn't at the same location in every script, in some I couldn't even find it like at the end of the ice cavern I found no encounter rate at all. Makes sense since at that point in the game you're with zidane alone, but still I know that when you return to the cave later in the game there are random encounters. It would be nice if there was some value somewhere that affected the encounter rate of all scenes. So you can just change that to 200 and you'll have a fight every 10 steps or so.

It doesn't have to be exactly the same as the ps1 game, just a lot more. To be able to run through evil forest and ice caverns without a single random encounter is stupid, what's the point of all those enemies if we never get to fight them. As for memoria, Tirlititi with hades workshop I managed to remove the icons when you chat, I don't think memoria can do that.

Man I just want to play a pc version of the same game that was on the ps1. I'm just gonna throw this out there in case someone would be able to do this with memoria without much effort.

•Disable cheats
•Disable autosaving
•Remove card/chat icons
•Increase encounter rate so it's similar to the ps1


•Change the font
•Resize the battle UI

So much that needs fixing and I've only been able to disable cheats and removed icons, new problems pop up as you keep playing the game. There are even some problems I'm ignoring such as:

•Wacky sounds when you walk
•Wacky sounds in general when doing certain stuff, just sounds too loud or off somehow
•No mist at the world map

And I've heard while reading on the forums that while you fight there are some issues too, issues I haven't encountered yet, pun not indended. When there's a mod that fixes the first 4 we release it as a mod on the steam forum and on here, so people can play the game as it was meant to be played. Tirlititi you're the master modder, I'm willing to help you anyway I can, I added you on steam so just send me orders and I'll do my best to help you achieve a pure/restoration mod.

EDIT: As for testing if Memoria can fix any of these issues, nope can't install it. Some kind of compatibility issue.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: sutebenukun on 2017-06-03 17:14:00
Hiya!

I have a question. I've been using your Alternate Fantasy mod and I'm very happy with it! The only thing is after beating the game once (with Beatrix of course lol) I decided to make Beatrix and Steiner much more different from each other. Specifically I gave Beatrix access to Quadraslash and took away Stock Break from her and made Shock and Climhazzard skills exclusive to her (I also gave her an "ultimate skill" that's locked behind getting the Excalibur II which I made her ultimate weapon to make up for the fact she doesn't get a Trance).

Now that I solidified Beatrix as a Holy Knight/ Paladin I decided to make Steiner the very opposite of that; a Dark Knight. I've changed a lot of his skills to reflect his new status as a dark knight (with a couple as homage to FFT) but was wondering if it were possible with Hades Workshop to create unique damage/effect formulas?

For example, I'd like to have Steiner required to sacrifice some of his hp with most of his skills, including the non-damaging ones. Is this possible to do?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-03 22:08:09
I prefer to increase random encounters in HW. I went through every single field that has random encounters. (Some were maxed out because of tiny fields) and they all encounter like in the PSX.
With some extra areas though weren't completely maxed because of movability, but that's not a problem.
I also noticed that...(and I dunno if I'm hallucinating, but) if you run with speed boost, the encounter rate is more frequent than just running without speed boost. (Seems to stop you more often, maybe because of more steps???) No lie! Never the matter I tried to make sure it was frequent even without speed boost on.
Some of the SetRandomBattleFrequency are located in the Main_Init, or Main_Loop (I believe). And there's sometimes more than one of them because (of?) different scenarios of the field.
Like with Oeilvert, there are two SetRandomBattleFrequency functions, one that's during the retrieval of the Gulug stone, and the other during Hilda Grade 3 events.
Bottom line, I was able to get that fix no problem.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-04 01:23:54
Did you set every scene to a reasonable encounter rate, something that is similar to the PS1? And is it a drag and drop hades workshop mod? If it is do you mind sharing that, it's not that I couldn't spend 12 hours editing every scene in the game but since you've already done it maybe you could save me the trouble? But only if the encounter rate is reasonable, if it's too high like once every 3 steps it becomes a problem.

But I bet your mod probably comes with a lot of other bullstrawberries, doesn't it? Meh I just want vanilla FFIX, I'm gonna wait until tomorrow if I have no answer to this question I'll start working on the hades workshop edit to every scene. Multiple encounter rates then. I wish I wouldn't have to wait for these replies from your master programmers. I think we can all agree that the best mod would be a mod that makes the game like the original one on the ps1.

If I get this to work then the green ones are fixed and brown ones still to go before the game is playable:

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

•Change font
•Sound fixes to certain sounds
•Disable autosaves
•Resize the battle UI
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-04 04:17:07
I went through every scene in hades workshop and increased the encounter rate, I put most values at 175-255, in hard areas such as at the end I put every scene at 255 so you'll be really exhausted at the bosses. But what might happen because of these encounter rates is that the characters become overleved at the bosses. So just to be sure that the game suddenly don't become a grind with easy bosses...how do I increase the difficulty of bosses by say 25%.

I tried increasing Garland's hp by 25000, but it reverted back to his old hp. I read that it has to do with when enemy has x amount of hp left play an event. I'm willing to go through each boss and increase the difficulty on each one by a bit, but I need to know how to increase the hp of enemies which has events in them. Say Beatrix, Kuja, Amarant, Garland etc. Then the game will be balanced out, or be a bit more of a challenge I suppse. Then all that's left is:

•Battle UI
•Font
•Disable autosaving (crucial)
•(Perhaps exchanging some of the sounds for better ones)

I noticed the sounds in particular when they walked into the ice caverns, the footsteps sounded too loud and off. Also when they applauded at Alexandria, it sounds really high pitched, like it's coming out of a radio or something. Anyway it's not a priority, changing boss hp and disable autosaving is next, any ideas?

EDIT: I tried to see if the encounter rate had improved and at a value of 200 I got one fight in all of the ice caverns.  At max value 255 you're likely to have a fight every 7 steps. After 7 running steps you're definitely out of some small area and after you enter the next scene the counter resets right. This means that if it's just a brief scene that you can run through in 10 or so seconds, for example in the tall grass at the marches or pretty much most scenes you're likely to not ever fight a battle even at the maximum encounter rate! What a pain to have spent two hours editing those values only to see it hardly making any difference.

If there was some way to make the maximum value 255 correspond to say 4 running steps you would increase the chance of running into an enemy in a small scene. You think there is some way of making this happen?

EDIT2: Is it possible that the changes to the frequency of battle don't occur because I'm using an old save. Does the changes only take affect after you start a new game, because the changes I made seem to make zero difference. Walked through all of Burmecia without a single encounter, this is truly game breaking.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-04 05:12:17
Meh I just want vanilla FFIX

that's why you do it yourself.

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

•Change font
•Sound fixes to certain sounds
•Disable autosaves
•Resize the battle UI

You don't have to keep repeating this, you've said this numerous times already.  :roll:

I wish I wouldn't have to wait for these replies from your master programmers.

well, learn it sometime. We and everybody else is not on here 24/7 to be your constant beck and call; your slave.
patience is of virtue, and wait for such to be done.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-04 05:25:10
Yeah personally I don't really care for changing the music to FF4 music, I saw you had done that in your mod you also had changed the window textures and probably other stuff. I just want to fix what's broken not add a bunch of stuff to the game. I keep repeating the things I want to fix hoping that some might be able to point me in the right direction. The ugly chat icons were removed, the sampling rate of the sounds was improved, the cheats were removed. (except the speed up cheat, would love to know how to get rid of that)

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

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

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

>>>For just the sounds fix, replace files p0data62.bin + p0data63.bin. Just don't use the original p0data61.bin file with this, it won't make any sense.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-04 05:46:13
Yeah your mod is more about enhancing the look and feel of the game, turn it into something new and fresh. My mod as little as I've managed to achieve on it is just going to restore the game to it's original state and then maybe make it a bit more difficult.

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

•Change font
•Fix encounter rate
•Disable all cheats
•Increase sampling rate of sounds
•Remove chat/card icons
•Disable autosaving
•Resize battle UI
•Sound fixes to high pitched sounds
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-04 05:52:00
Yeah your mod is more about enhancing the look and feel of the game, turn it into something new and fresh.
is that what he thinks?

okay then.

two more things:
(https://s4.postimg.org/3x9yalz5p/image.png)
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Fraggoso on 2017-06-04 07:36:24
Oh Jesus here we to again...
I'll only ask one thing: why the f u c k does anyone really want a very high encounter rate?
Random encounter are a bad design decision. I hate it how I can't avoid them (in the psx era) unless there's  gf or materia which can prevent it.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-04 08:07:21
Fraggoso in case you're not aware of how games are structured, you play through a level, it's often repeating patterns you engage in. Jump on those platforms or shoot those incoming enemies. Is it really fun, not really but you still do it because you're looking forward to the reward. You endure the tedious task of killing enemies because you're looking forward to the reward which can come in the form of story or a new area to explore, a good game should be frustrating.

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

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

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

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

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

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

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

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

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

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

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

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

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

Now, we need to add the information that only Steiner's attack should remove HP to him (he's not the only one to cast spells using that "CalcSub_203" method). You can do it like that:
Code: [Select]
if (v.caster.bi.slot_no == 3) {
    // Do you stuff
}
In CIL:
Code: [Select]
IL_POS0: ldarg.0
IL_POS1: ldfld 0x40007EC // CALC_VAR::caster
IL_POS2: ldfld 0x400022D // BTL_DATA::bi
IL_POS3: ldfld 0x4000272 // BTL_INFO::slot_no
IL_POS4: ldc.i4.3
IL_POS5: bne.un IL_POSEND
// Do your stuff
IL_POSEND: // After the "if" block

If we put that together at the start of the method "CalcSub_203", we end up with a method like this:
Code: [Select]
ldarg.0
ldfld 0x40007EC // CALC_VAR::caster
ldfld 0x400022D // BTL_DATA::bi
ldfld 0x4000272 // BTL_INFO::slot_no
ldc.i4.3
bne.un IL_003E
ldarg.0
dup
ldfld 0x40007F6 // CALC_VAR::ct_flags
ldc.i4.1
or
conv.u1
stfld 0x40007F6 // CALC_VAR::ct_flags
ldarg.0
ldarg.0
ldfld 0x40007EC // CALC_VAR::caster
ldfld 0x4000229 // BTL_DATA::max
ldfld 0x4000809 // POINTS::hp
ldc.i4.3
shr
conv.i2
stfld 0x40007F8 // CALC_VAR::ct_hp
ldarg.0
ldfld 0x40007F0 // CALC_VAR::at_pow
ldarg.0
ldfld 0x40007F1 // CALC_VAR::df_pow
sub
dup
stloc.1
ldc.i4.0
bgt IL_0055
ldc.i4.1
stloc.1
ldarg.0
dup
ldfld 0x40007F7 // CALC_VAR::tg_flags
ldc.i4.1
or
conv.u1
stfld 0x40007F7 // CALC_VAR::tg_flags
ldarg.0
ldfld 0x40007F3 // CALC_VAR::at_num
ldc.i4.1
bge IL_0077
ldarg.0
ldc.i4.1
stfld 0x40007F3 // CALC_VAR::at_num
ldloc.1
ldarg.0
ldfld 0x40007F3 // CALC_VAR::at_num
mul
stloc.0
ldarg.0
ldfld 0x40007EE // CALC_VAR::cmd
ldfld 0x400028B // CMD_DATA::info
ldfld 0x4000293 // SELECT_INFO::short_summon
brfalse IL_009B
ldloc.0
ldc.i4.2
mul
ldc.i4.3
div
stloc.0
ldloc.0
ldc.i4 9999
ble IL_00AC
ldc.i4 9999
stloc.0
ldarg.0
ldfld 0x40007F5 // CALC_VAR::flags
ldc.i4.8
and
brfalse IL_00C8
ldarg.0
dup
ldfld 0x40007F7 // CALC_VAR::tg_flags
ldc.i4.2
or
conv.u1
stfld 0x40007F7 // CALC_VAR::tg_flags
ldarg.0
ldloc.0
conv.i2
stfld 0x40007F9 // CALC_VAR::tg_hp
ret
(If you copy-paste it, verify that the "IL_POS" numbers are correct: the program tends to update them automatically and not always the right way.)
I tested and it worked wonder for me.

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






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

No comment about the trendy "autist" insult... That is a very dumb one.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-04 10:58:16
Lein, as it was already said, you can't expect everyone to have the same priorities as you. Besides, modding is something that requires time.
I told you that increasing the encounter rate back to normal means understanding what was changed in the Steam version. Those figures that you increased in the fields' scripts are exactly the same between Steam and PSX: if you want to have an encounter rate consistent and balanced as in PSX, that's not what needs to be fixed. If you want a quick and dirty fix, then you're done.
And yes, keeping repeating a few bullets is not going to make those go faster.

thank you.  :)

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

+1
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-04 11:13:20
Good that you put dclem back in line, as for the mods. Yeah I checked that too, the values are the same between pc/ps1, so there's something else that lowers the encounter rate. As nice as it is to have the game on steam the original game isn't broken. Up until there are mods that fix this port I'll use the original game through an emulator and I'll recommend my buddy to do the same.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Covarr on 2017-06-04 13:39:02
Enough, you guys. Warnings issues. Drama deleted. Now stop it. ~Covarr
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: elberuss on 2017-06-04 17:17:01
Hey guys!

i am trying add a extra atack in to a loop :
Code: [Select]
            set #( SV_Target = SV_FunctionEnemy ) // i set the target
            AttackSpecial( 3 ) // atack
            while ( IsAttacking != 0 ) {
                Wait( 1 )
            }
            RunBattleCode( 35, 0 ) // continue battle
            while ( GetBattleState != 4 ) {
                Wait( 1 )
            }


But fail
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: sutebenukun on 2017-06-04 19:10:27
@sutebenukun: Hey, glad to see you enjoy it and want to personalize it :)
Unfortunatly, it is not convenient to modify the spell effects, and you can't go very far. It's in the CIL Code, more precisely the class "btl_calc".
Hades Workshop's CIL Code is quite buggy: it sometimes crashes if the edited methods are too big. It seems that you can't edit the main method related to spell effects ("CalcMain") without crash. You can however edit the sub-methods and put the HP cost in them.

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

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

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

Now, we need to add the information that only Steiner's attack should remove HP to him (he's not the only one to cast spells using that "CalcSub_203" method). You can do it like that:
Code: [Select]
if (v.caster.bi.slot_no == 3) {
    // Do you stuff
}
In CIL:
Code: [Select]
IL_POS0: ldarg.0
IL_POS1: ldfld 0x40007EC // CALC_VAR::caster
IL_POS2: ldfld 0x400022D // BTL_DATA::bi
IL_POS3: ldfld 0x4000272 // BTL_INFO::slot_no
IL_POS4: ldc.i4.3
IL_POS5: bne.un IL_POSEND
// Do your stuff
IL_POSEND: // After the "if" block

If we put that together at the start of the method "CalcSub_203", we end up with a method like this:
Code: [Select]
ldarg.0
ldfld 0x40007EC // CALC_VAR::caster
ldfld 0x400022D // BTL_DATA::bi
ldfld 0x4000272 // BTL_INFO::slot_no
ldc.i4.3
bne.un IL_003E
ldarg.0
dup
ldfld 0x40007F6 // CALC_VAR::ct_flags
ldc.i4.1
or
conv.u1
stfld 0x40007F6 // CALC_VAR::ct_flags
ldarg.0
ldarg.0
ldfld 0x40007EC // CALC_VAR::caster
ldfld 0x4000229 // BTL_DATA::max
ldfld 0x4000809 // POINTS::hp
ldc.i4.3
shr
conv.i2
stfld 0x40007F8 // CALC_VAR::ct_hp
ldarg.0
ldfld 0x40007F0 // CALC_VAR::at_pow
ldarg.0
ldfld 0x40007F1 // CALC_VAR::df_pow
sub
dup
stloc.1
ldc.i4.0
bgt IL_0055
ldc.i4.1
stloc.1
ldarg.0
dup
ldfld 0x40007F7 // CALC_VAR::tg_flags
ldc.i4.1
or
conv.u1
stfld 0x40007F7 // CALC_VAR::tg_flags
ldarg.0
ldfld 0x40007F3 // CALC_VAR::at_num
ldc.i4.1
bge IL_0077
ldarg.0
ldc.i4.1
stfld 0x40007F3 // CALC_VAR::at_num
ldloc.1
ldarg.0
ldfld 0x40007F3 // CALC_VAR::at_num
mul
stloc.0
ldarg.0
ldfld 0x40007EE // CALC_VAR::cmd
ldfld 0x400028B // CMD_DATA::info
ldfld 0x4000293 // SELECT_INFO::short_summon
brfalse IL_009B
ldloc.0
ldc.i4.2
mul
ldc.i4.3
div
stloc.0
ldloc.0
ldc.i4 9999
ble IL_00AC
ldc.i4 9999
stloc.0
ldarg.0
ldfld 0x40007F5 // CALC_VAR::flags
ldc.i4.8
and
brfalse IL_00C8
ldarg.0
dup
ldfld 0x40007F7 // CALC_VAR::tg_flags
ldc.i4.2
or
conv.u1
stfld 0x40007F7 // CALC_VAR::tg_flags
ldarg.0
ldloc.0
conv.i2
stfld 0x40007F9 // CALC_VAR::tg_hp
ret
(If you copy-paste it, verify that the "IL_POS" numbers are correct: the program tends to update them automatically and not always the right way.)
I tested and it worked wonder for me.

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






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

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


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

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

    if ( #( SV_FunctionEnemy[HP] <=$ 10000 ) ) {
        set SV_FunctionEnemy[HP] =$ 0
        return
    }
    Wait( 1 )
    loop


its Ok, when i play and the saganar life if 650 or less, display dialog ok, but freija atack dont have more efects, whats i make wrong?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-06-04 20:03:39
@sutebenukun: You access to the CIL Code using Hades Workshop, there's a panel "CIL Code", the list of classes (including "btl_calc") is on the left and the classes' methods ("CalcMain", "CalcSub_203", etc...) appear next to it once you selected a class.

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

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

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

Alrighty, I looked in the actual program but the only option I see is MIPS Code. And while it'll let me edit it for the PSX version, it brings up a window saying it has been disabled for the Steam version, which is the version I'm attempting to modify. Am I doing something wrong?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-06-04 20:38:21
Oh?
Either it's a bug, either you don't have the latest version of the tool. I hope it's the latter ^^

You can see the version in the "About" window (F1). If it's not v0.37c, get the newest version in the opening post of the thread.
If it is v0.37c, then I guess it's a bug. Maybe try to open only the Steam version? (You have to select the FF9_Launcher.exe.)
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: sutebenukun on 2017-06-04 21:14:03
Oh?
Either it's a bug, either you don't have the latest version of the tool. I hope it's the latter ^^

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

My apologies, I had the 0.34 version so I just downloaded the latest and the tab is available and working! I hate to be a hassle but I was fiddling around with the Stats category and was wondering how I might give Beatrix the ability to go into Trance. I created a specific skillset for her and connected it to her Seiken command a la Zidane's link with his Skills, but was wondering if that was enough to give her a Trance or if there was something more I would have to do.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-06-05 09:49:03
Hum...
I couldn't successfully add a trance to Beatrix ; you need at least two things for that:
1) Making this character a permanent party member, that is removing the flag "temporary character" in the "SetCharacterData" call (in fields scripts),
2) Add a trance model to the list of character models, in the CIL "btl_init::..ctor" method.

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

With that, however, the trance gauge appears and fills correctly, but the game freezes once it's fully filled. So there has to be something else that I didn't spot :/
Also, the "temporary character" flag determines whether the game will use the temporary character or the permanent counterpart (Marcus/Eiko for instance). So for adding trance to Marcus, Blank or Cina, it would also require something else (maybe changing the condition (1) for the trance bar to appear).

Interesting. I was wondering about adding trance to "guest" characters. I bet there's an animation call that it's missing when you activate trance and that's why it freezes, just a hunch. I haven't looked at this games data too hard yet.

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

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

Lastly, is there something I can use to preview .fbx models?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Lein on 2017-06-05 15:08:07
Reading your talk I thought of a mod that might be worth doing in the future, imagine replacing all the silly characters that are over the top, for example Eiko and Quina with characters that are a bit more mature. Maybe the summoner in the ruined village could be garnet's older sister, or maybe an old granny. Quina could be replaced by some character that isn't so fat, maybe some muscular wild man.

The modeling and animation wouldn't be difficult to do, what might be difficult is to remake entire cutscenes, thinking specifically of the love letter event in Alexandria. Just throwing this out there, because if Final Fantasy is suffering from anything it's silly characters.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: gorildo on 2017-06-05 17:06:29
Hey, so I tried deselecting the "update level" flag and indeed the characters do join at lvl. 1. Specifically, I tested it with Freya at the Conf. Room in Lindblum castle and Quina. The other chars were at level 50 (I downloaded the save from GameFAQs). Instead of joining at level 33, they join at lvl 1. I haven't tested it anywhere else.

However, this would be a problem for Eiko, I assume. For Blank/Amarant, it's probably okay, because Blank is in the party for a very, very short time. But when Marcus join at CD2, I take it Eiko level will be that of Marcus?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tetraspore on 2017-06-05 21:59:55
Reading your talk I thought of a mod that might be worth doing in the future, imagine replacing all the silly characters that are over the top, for example Eiko and Quina with characters that are a bit more mature. Maybe the summoner in the ruined village could be garnet's older sister, or maybe an old granny. Quina could be replaced by some character that isn't so fat, maybe some muscular wild man.

The modeling and animation wouldn't be difficult to do, what might be difficult is to remake entire cutscenes, thinking specifically of the love letter event in Alexandria. Just throwing this out there, because if Final Fantasy is suffering from anything it's silly characters.

I don't think we are able to utilize custom meshes quite yet for player characters, so my current mission is to try and give some characters some alternate costumes that already exist (hooded Zidane, Knight Zidane, hooded Garnet, dress Garnet, short/long hair, etc). I could use a list as to what model is what, or something to preview the FFIX models with. The autodesk FBX previewer closes as soon as any FFIX model is opened.

I've personally always had a soft spot for Eiko and Quina, but I like the idea. The pre-rendered cutscenes would be out of the question. Scripted cutscenes would probably be more doable.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tetraspore on 2017-06-06 23:49:22
Hum...
I couldn't successfully add a trance to Beatrix ; you need at least two things for that:
1) Making this character a permanent party member, that is removing the flag "temporary character" in the "SetCharacterData" call (in fields scripts),
2) Add a trance model to the list of character models, in the CIL "btl_init::..ctor" method.

With that, however, the trance gauge appears and fills correctly, but the game freezes once it's fully filled. So there has to be something else that I didn't spot :/
Also, the "temporary character" flag determines whether the game will use the temporary character or the permanent counterpart (Marcus/Eiko for instance). So for adding trance to Marcus, Blank or Cina, it would also require something else (maybe changing the condition (1) for the trance bar to appear).

Where can I find that script to edit the temporary character flag? I want to ditch Cinna for Quina while retaining marcus and blank. If possible, I'd like to put Marcus over Steiner, but it seems the slots are specifically set up for specific characters? Meaning Marcus will always share a slot with Eiko?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: sutebenukun on 2017-06-11 02:02:34
Interesting. I was wondering about adding trance to "guest" characters. I bet there's an animation call that it's missing when you activate trance and that's why it freezes, just a hunch. I haven't looked at this games data too hard yet.

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

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

Lastly, is there something I can use to preview .fbx models?

I hate to keep bothering you, I looked into what you told me about the SubCalc's but I honestly haven't the foggiest idea how you discovered Physical Strikes subcalc, I have Steiner using the absorb strength/magic, the quadraslash effect you used, and the ???def-less (and a couple others) if I can find out how you found the subcalc's I should be able to go into those effects subcalcs and add the HP reduction conditional for Steiner, yes?

Also one quick thing, I saw that tere was a UI rescaling mod posted on the steam community but it looks like it requires memoria to use, if I recall correctly Hades Workshop and Memoria are not compatible with one another so I wouldn't be able to utilize that mod, would I?

Thanks for all your help, I really do appreciate it.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: elberuss on 2017-06-11 18:22:35
Srry guys, I know that yous are talking about more technical things but ...

the corret way to edit "spanw" enemys is with battle spots?

Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-11 20:30:54
Enemies on the world map is used from battle spots; but Tirltiti said it was buggy, (and it's not fixed in this current version, it doesn't work if you change it).
In the field, battle 'spawns' are handled in the SetRandomBattleFrequency~set enemies battles for that field. 1-4.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: elberuss on 2017-06-11 20:42:12
Enemies on the world map is used from battle spots; but Tirltiti said it was buggy, (and it's not fixed in this current version, it doesn't work if you change it).
In the field, battle 'spawns' are handled in the SetRandomBattleFrequency~set enemies battles for that field. 1-4.

thanks, this explained why me changes no working
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-12 02:35:47
You're welcome.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: n3wb13 on 2017-06-12 07:44:26
I'm trying to use Hades Workshop to open the p0data*.bin file under FINAL FANTASY IX\StreamingAssets\. However, the program just crashes with an error message. So can anyone help me please? Sorry if I post this in wrong way:

Code: [Select]
Problem signature:
  Problem Event Name: APPCRASH
  Application Name: HadesWorkshop.exe
  Application Version: 0.0.0.0
  Application Timestamp: 58ee662c
  Fault Module Name: HadesWorkshop.exe
  Fault Module Version: 0.0.0.0
  Fault Module Timestamp: 58ee662c
  Exception Code: c00000fd
  Exception Offset: 029ccb53
  OS Version: 6.3.9600.2.0.0.256.49
  Locale ID: 1033
  Additional Information 1: e860
  Additional Information 2: e86090bc8c91ffd3c86d18fa8cdf1f70
  Additional Information 3: de7f
  Additional Information 4: de7f9705878d75421aa697c1b4f19d18
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Fraggoso on 2017-06-12 08:11:44
You need to open the launcher not the bin files.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: n3wb13 on 2017-06-12 09:44:12
You need to open the launcher not the bin files.

Whoops, my bad. Now everything works fine. Thank you very much for your help :roll:
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: dclem on 2017-06-18 04:17:02
Tirlititi,
I think I see some of the requirements for model importing in game.
with tis settings:
.FBX
Binary
version:
FBX201300

only got one weapon import with crashing but,
still not working fully; tried replace characters with mine and game still crashes...  :-\
Only close I got was with replacing "Eiko"; the model was there, but it was textureless.
Modify message
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: elberuss on 2017-06-18 14:28:17
I am trying search "regena" status (for revitalia or winds dragons) but i cant find,
its posible edit script of these status?
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: DanTsukasa on 2017-06-28 02:28:04
I saw that the software now has a viewer for environment walk meshes, though its a little fiddly at the moment, I was wondering if you have support planned for the cameras too, and exporting the camera+environment to FBX/DAE at all.

Making edits and new sections in outside 3D Software would be faster than in-tool for the majority of areas I'd think.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-06-28 10:36:05
Yep, I'm working a lot on 3D exportation/importation format these days. Not on walkmeshes yet (because they have a few features that are not standard in 3D models so it'll be more tricky), but I'm starting to understand the FBX format.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: DanTsukasa on 2017-06-28 13:17:08
I'm curious, how do the walkmeshes differ from anything else?

I always figured they were exactly the same as any kind of mesh, just set to collision and non-renderable ingame, made up of only vertexs and faces the same as everything else.

Is this not the case? If so I wonder why they'd be any different.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-06-28 15:26:29
Walkmesh contains a few informations about "how the objects behave" on each triangles. For instance, there is a data about which kind of step sound should be used when walking on it, or whether it is in the shade or not.

Also, each triangle has specified neighborood to let the characters moving from one triangle to another. Most of the time, that can be computed automatically from the mesh (if there is a common edge or not), but you may want to not make some connections, or on the contrary add connection between distant triangles to make kind of teleporters (though that could be better done by script).

Here's the known walkmesh format so far:
Code: [Select]
struct FieldWalkmeshDataStruct : public ChunkChild {
public:
uint32_t magic_walkmesh;
int16_t unknown1;
int16_t offset_x2;
int16_t offset_z2;
int16_t offset_y2;
int16_t offset_x;
int16_t offset_z;
int16_t offset_y;
int16_t offset_x3;
int16_t offset_z3;
int16_t offset_y3;
int16_t unknown4;
int16_t unknown5;
int16_t unknown6;
int16_t unknown7;
int16_t unknown8;
int16_t unknown9;
int16_t active_walkpath;
int16_t active_triangle;

uint16_t triangle_amount;
uint16_t triangle_offset;
uint16_t edge_amount;
uint16_t edge_offset;
uint16_t animation_amount;
uint16_t animation_offset;
uint16_t walkpath_amount;
uint16_t walkpath_offset;
uint16_t normal_amount;
uint16_t normal_offset;
uint16_t vertex_amount;
uint16_t vertex_offset;

// As many as "triangle_amount"
uint8_t* triangle_unk1;
uint8_t* triangle_stepsound;
uint16_t* triangle_unk2;
uint16_t* triangle_walkpath;
uint16_t* triangle_normal;
uint16_t* triangle_unk4;
uint16_t* triangle_unk5;
uint16_t* triangle_vertex1;
uint16_t* triangle_vertex2;
uint16_t* triangle_vertex3;
uint16_t* triangle_edge1;
uint16_t* triangle_edge2;
uint16_t* triangle_edge3;
uint16_t* triangle_adjacenttriangle1;
uint16_t* triangle_adjacenttriangle2;
uint16_t* triangle_adjacenttriangle3;
int16_t* triangle_centerx;
int16_t* triangle_centerz;
int16_t* triangle_centery;
uint16_t* triangle_unk9;
uint16_t* triangle_unk10;

// As many as "edge_amount"
uint16_t* edge_flag;
int16_t* edge_clone;

// As many as "animation_amount"
uint16_t* animation_flag;
uint16_t* animation_frameamount;
int16_t* animation_framerate;
uint16_t* animation_counter;
int32_t* animation_currentframe;
uint32_t* animation_frameoffset;

// As many as "walkpath_amount"
uint16_t* walkpath_unk1;
uint16_t* walkpath_unk2;
int16_t* walkpath_minx;
int16_t* walkpath_minz;
int16_t* walkpath_miny;
int16_t* walkpath_offsetx;
int16_t* walkpath_offsetz;
int16_t* walkpath_offsety;
int16_t* walkpath_unkx3;
int16_t* walkpath_unkz3;
int16_t* walkpath_unky3;
int16_t* walkpath_unkx4;
int16_t* walkpath_unkz4;
int16_t* walkpath_unky4;
uint16_t* walkpath_triangleamount;
uint16_t* walkpath_trianglelistoffset;
uint32_t** walkpath_trianglelist;

// As many as "normal_amount"
int32_t* normal_x;
int32_t* normal_z;
int32_t* normal_y;
int32_t* normal_overz;

// As many as "vertex_amount"
int16_t* vertex_x;
int16_t* vertex_z;
int16_t* vertex_y;
}
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: DanTsukasa on 2017-06-29 07:43:54
Walkmesh contains a few informations about "how the objects behave" on each triangles. For instance, there is a data about which kind of step sound should be used when walking on it, or whether it is in the shade or not.

Also, each triangle has specified neighborood to let the characters moving from one triangle to another. Most of the time, that can be computed automatically from the mesh (if there is a common edge or not), but you may want to not make some connections, or on the contrary add connection between distant triangles to make kind of teleporters (though that could be better done by script).

Thats interesting, most modern games do that based on the material assigned, I'd never considered that they might do it based on the polygons themselves, but I suppose Ps1 was better at handling polygons than multiple materials, or so I've heard.

Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Robo Jesus on 2017-07-02 01:15:59
Hiya!

I have a question. I've been using your Alternate Fantasy mod and I'm very happy with it! The only thing is after beating the game once (with Beatrix of course lol) I decided to make Beatrix and Steiner much more different from each other. Specifically I gave Beatrix access to Quadraslash and took away Stock Break from her and made Shock and Climhazzard skills exclusive to her (I also gave her an "ultimate skill" that's locked behind getting the Excalibur II which I made her ultimate weapon to make up for the fact she doesn't get a Trance).

Now that I solidified Beatrix as a Holy Knight/ Paladin I decided to make Steiner the very opposite of that; a Dark Knight. I've changed a lot of his skills to reflect his new status as a dark knight (with a couple as homage to FFT) but was wondering if it were possible with Hades Workshop to create unique damage/effect formulas?

For example, I'd like to have Steiner required to sacrifice some of his hp with most of his skills, including the non-damaging ones. Is this possible to do?
I believe its possible given the other changes and mods that have been done using this program, but there is no readme's at the moment to explain things.

Like, I just started using this modding tool, and I'm trying to recreate the associated status effects for some magic spells using HadesWorkshop, but once you start looking through the "Effect" descriptions, it starts becoming confusing. Some of the effects state that they can bring with them status effects, but others do not. So "Fire" is a "Magical Attack", but if I want it to have the chance to inflict "Heat", do I need to change the "Magical Attack" to something else like "Bad Status" or "Enemy Attack" or "Apply Effect"? Or can I leave that as "Magical Attack" and just add the status and accuracy to it?

These things are not explained well there with that. :(

Still, given the other changes that have been done, I do believe that what you want to do is possible here with that.  :D


EDIT; Also, it seems that if you mod an iso without first opening up HadesWorkshop on the unmodded iso and letting it create its .hwf file, it prevents you from using HadesWorkshop on the modded iso afterwards. So for those using isos and emulators and wanting to use other mods while modding extra things on top of that, they need to use HadesWorkshop first and get that .hwf file created before anything else. An odd observation I had to point out.


Anyways, I'm enjoying this modding tool immensely, and am having fun messing around with things as I go. :D
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: nameokh on 2017-07-09 16:14:07
helo, I have a problem with add mods.

I have ff9 for pc, and I think it's not a steam version.

I open the program (hades workshop) load the FF9_Launcher.bin, and I modify some things, weapons, stats, etc. And I save the mod.
It's saved in a raw file. <<I've tried adding .hws>>

No matter what folder I put it, x64, FF9_Data, Managed, Resources, etc.
Even in the same place as hades workshop or the FF9_Launcher.

When playing ff9, the changes do not apply.

What should I do?

thanks ;)

Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Fraggoso on 2017-07-09 16:59:57
I don't think there's another LEGIT version besides the Steam version.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Meian on 2017-07-09 18:37:51
When I enable the Steam cheats option in hades Workshop, the game always chrashes, any idea?

The AlternateFantasy mod only works with steam cheats disabled?


Edit: Solved, I was marking the magic sword in cure spells  :P


Sorry if I write something wrong, I'm spanish.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Tirlititi on 2017-07-20 16:23:47
Nice to see that you solved your problem without me Meian ^^

Update to v0.38 :
- Updated the UI libraries ; the program opens faster,
- Improved the 3D model exporters (see below),
- Improved the "Preferences" and configuration file:
--- In the "Preferences" window, you can now select the background resolution in order to display/export the backgrounds properly even with a mod. By default, the resolution is 32 but you should set it to 64 if you use Fraggoso's or Meru's HD mod.
--- Most of the options are saved in the "HadesWorskshop.conf" file, meaning that the program remembers when you change the settings.
- Fixed a bug making the world map battle spot changes inefficient for the Steam version,
- Fixed a few bugs with the importation of files in some archives.

The .dll have changed: you need to extract them and you can dump the ones used by the old versions.

So, I am sorry for not making the importer yet but it was a pain to install, learn and use the FBX libraries. You can now export the 3D models in the following formats:
- FBX binary version 7500,
- FBX text version 7500,
- DXF,
- DAE,
- OBJ.
It seems though that only the two FBX versions formats are handled without problem. The OBJ version also works fine but doesn't have any bone or animation.
Blender unfortunatly can't import those FBX files (to my knowledge) and I couldn't find a nice and free replacement for it. Autodesk has everything you need, but it's not free most of the time. You can use FBX Review (https://www.autodesk.com/products/fbx/fbx-review) to see the models (but not edit them) and you can import them in Unity. If anyone knows a free FBX editor (or converter), that would be very nice.

In order to export a 3D model, it's like for the last version: in the Unity Assets Viewer, verify that you have some "Automatically Convert 3D Models" option checked, select a file ".fbx" of type "1 (Game Object)" in one of the archives, and then right-click -> export selection. You can export the models from the archives p0data2 (weapons and battle scenes), p0data3 (a couple of World Map objects) and p0data4 (everything else: characters, accessories, monsters...). You need to export the related textures separatly.
It creates a single .fbx file containing the model + its skeleton + all its animations (most of them are automatically extracted from the p0data5 archive).

The models as they are exported are near complete. They only miss the texture animations (for Sealion's core, for instance (there are few of them)). Also, the material properties are mostly exported as custom properties and they can be ignored by the FBX editors (maybe Unity uses them): it mostly means that you'll see black textures when they should be transparent, which is also fairly rare.
It may also happen, for some reason, that the name of the texture(s) is not found and thus you can't see the textured model. For the FBX text version, you can fix that by opening the model with a text editor and specify the texture's name in the field "Path" of the related "Video" clip. Otherwise, a good editor allows you to select a texture.

The models that are not in the p0data4 archive are upside-down. It seems that everything in the p0data2 and p0data3 archives are upside-down since that's also the case for the textures. Nothing troublesome.

Finally, about the animation speed, it seems that the field models are properly timed but the battle models are twice faster than they should. For what I understood, all the models are timed in 60 fps but since the battles are played in 30 fps, they had to fasten the animations.

That's all there is to know. If you want to help to list the different models' animations, now is the time ^^
I saw that there are more unused animations than I thought: the party members have some unused animations and I saw a couple of enemy models with unused ones as well. All in all, it's very rewarding to be able to see all these animations :D

Next, I will do that model importer. It should take less time since I already have the file formats (both the FBX and the game's internal format). I will also see how the texture animations are made.
Title: Re: [FF9] General editor - Hades Workshop (0.37c)
Post by: Fraggoso on 2017-07-20 16:40:34
Great to see that you're still engaged tirlititi!
Awesome work! :)
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: vomitrocious00 on 2017-07-20 18:14:35
Is it possible to remove Dagger's "failed to concentrate" issue with HW?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-07-20 18:37:29
Yes.
In the panel "Environment -> Fields", search for the field "Blue Narciss/Bridge" near the end of the list (there are 2 of them, select the top one) and click on "Edit Script".
You'll see a list of functions on the top-right of the window: select the "Function Main_Loop". Browse the function's script ; around the middle of that function, you can find these lines:
Code: [Select]
        set Setting_OptionalQuina = 1
        set Setting_DaggerDepresses = 1
        0xDB( 2, 0 )
        0xDB( 7, 0 )
        set Setting_MPx4 = 0
        SetHP( 0, 9999 )
        SetHP( 1, 9999 )
        SetHP( 3, 9999 )
        SetHP( 2, 9999 )
        SetHP( 4, 9999 )
        SetHP( 5, 9999 )
        SetHP( 7, 9999 )
        SetHP( 6, 9999 )
        SetHP( 8, 9999 )
        SetMP( 0, 999 )
        SetMP( 1, 999 )
        SetMP( 3, 999 )
        SetMP( 2, 999 )
        SetMP( 4, 999 )
        SetMP( 5, 999 )
        SetMP( 7, 999 )
        SetMP( 6, 999 )
        SetMP( 8, 999 )
Replace that "set Setting_DaggerDepresses = 1" by "set Setting_DaggerDepresses = 0", then click on "Parse" and then confirm.

Unfortunatly, it's not enough: you need to do the same thing for a few other scripts (the game turns that flag on regularly even if it's supposed to be on already). Search for that line "set Setting_DaggerDepresses = 1" in the following field scripts:
- function "Zidane_54" of the field "Palace/Sanctum",
- function "Zidane_Init" of the field "Esto Gaza/Altar" (1st one),
- function "Eiko_Init" of the field "Gulug/Path" (4th one, right under the "Well").
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Covarr on 2017-07-20 18:46:10
I have ff9 for pc, and I think it's not a steam version.
You don't know what version you have? Where did you get it?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: vomitrocious00 on 2017-07-20 20:53:13
I can't wait to try it. Thanks, you're the best!!
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: DanTsukasa on 2017-07-21 02:42:07
Nice update, great work as always.

Tirlititi, I wanted to ask, have you come across the cameras for the environments at all? They don't appear to be located in the same place as the walkmeshes, which is a bit of a surprise.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-07-21 09:04:18
Thanks Dan.
The field cameras are in the same file as the tiling data (what defines the different layers of the backgrounds): the ".bgs.bytes" file (in the p0data1X archives). I should be able to read them properly now. I'll do that for the next update (maybe not export the cameras, but at least use them as the default cameras in the field script window).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: vomitrocious00 on 2017-07-22 20:49:49
Question regarding Ragtimer. For some reason I keep getting the Final Question wrong regardless if I answer True or False. Where would I look to change those type of values? The version I'm working on kept most of the changes you made to the enemies in your Alternate Fantasy mod. Something else I found curious is he now drops Dark Matter as opposed to the original Protect Ring even tho I changed all of his drops in the Enemies tab, is there somewhere else that needs to be modified as well?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-07-22 21:37:03
The correct/wrong answers are in the functions "True_CounterEx" and "False_Loop". Specifically these lines:
Code: [Select]
if ( 27789 & ( 1 << questionid ) ) {
    set endbattlestep = 6
} else {
    set endbattlestep = 4
}
"endbattlestep = 4" makes the Ragtime Mouse cast its "Correct" reaction while "endbattlestep = 6" is the wrong answer.
The number "27789" encodes the correct/wrong answers as bitflags. If you look at the binary writing, you have:
27789 (decimal) = 0x6c8d (hexadecimal) = 0110 1100 1000 1101 (binary)
That means, reading the binary from right to left, that the questions with ID 0, 2, 3, 7, 10, 11, 13 and 14 must be answered with "False".

Notice that I added a couple of lines right above it for my mod:
Code: [Select]
if ( questionnumber == 16 ) {
    set endbattlestep = 6
} ....
If it's the 16th time that you see the Ragtime Mouse, attacking any of "True" of "False" will be a wrong answer. So what you have is normal: you must do something else to answer the riddle. It's a kind of Epimenides paradox.

For his drop, there's a subtility in his script (schematically):
Code: [Select]
if ( (successrate >= 80) && (successrate < 100) ) {
    ....
    set true[DEFEATED_ON] =$ 1
} else {
    ....
    set ragtime_mouse[DEFEATED_ON] =$ 1
}
So you're getting the drop of the enemy "True", which is a dark matter in my mod until you change it. The Ragtime Mouse drops a dark matter + Exp + Gil.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: vomitrocious00 on 2017-07-22 22:09:34
Oh cool...hmm it didn't even occur to me to just attack ragtimer, that's a good bit. The last part about his drop, would that be located in one of those functions as well? I'll try this once I get home. Thanks a lot, man! :)
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-07-22 22:19:04
You're welcome :)
Yes, that last part is in the function "Ragtime_Mouse_Loop".

However, attacking a defensless creepy animally show leader doesn't seem right to me :/
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: MDS0LDI3R on 2017-08-02 14:49:30
Does this editor allow you edit the in game time clock? If not do anyone know of an editor that does?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: davaammu on 2017-08-11 10:17:16
hey got one question to ask you, trilititi. i have installed the mod but why when i go to alexandra after getting hilda grade 3 airship during ipsen castle story progress beatrix is not at that location? i cant recruit her at all. need help. do i need to start a new game to get the mod effect or i can load a save? i loaded a save before head to ipsen castle but beatrix isn't at alexandra castle on that location.

also if i need help how do i contact you for instant mesage?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tedrainbow on 2017-08-12 21:25:03
How to find the magic stone values in the Playstation version and other stats growth in the editor ?
I can not find anything to editor Or is it not possible?
Thank you very so much ^^

Formula original:

Speed = Basic Speed + [Level / 10] + [Bonus Fragments / 32]

Force = Basic Force + [Level * 3/10] + [Bonus Fragments / 32]

Magic = Basic Magic + [Level * 3/10] + [Bonus Fragments / 32]

Psy = Basic Psy + [Level * 3/20] + [Bonus Fragments / 32]

Change to

Speed = Basic Speed + [Level * 2/10] + [Bonus Fragments / 44]

Force = Basic Force + [Level * 2/10] + [Bonus Fragments / 44]

Magic = Basic Magic + [Level * 2/10] + [Bonus Fragments / 44]

Psy = Basic Psy + [Level * 2/10] + [Bonus Fragments / 44]
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-08-13 20:05:25
@Tedrainbow: it's not possible for the PSX version. It's part of the MIPS code, but not even the one that is available using HW.

@davaammu: maybe you didn't select the english (US) language. Either that or you didn't install the mod properly. I got your messages but I have been away for some time (and will probably be away some more).

@MDS0LDI3R: No you can't do that. The Memoria save editor can do that.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: GARDIN on 2017-08-14 19:24:10
why you not rename all songs in Hades workshop this will make it easier for a user ?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: sutebenukun on 2017-08-15 03:31:08
Hiya Tirlititi,

I was still wondering if you could tell me how you found the subcalcs for that one ability so that I can find the others myself. Also is there a way I can use Hades Workshop to allow Steiner access to his Magic Sword without needing Vivi in the party?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-08-15 12:14:53
@sutebenukun: As said, the whole btlcalc source code is available here:
https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0
It contains everything hardcoded for the spell effects in battle.
The Magic Sword requirement is different since it is about the availability inside the menu, and not the effect during the casting of the spell.
Albeoris has a good part of a slightly modified source code of the game on his github project there: https://github.com/Albeoris/Memoria/tree/master/Memoria/Engine/Battle
You see that there's a btl_cmd::DecideMagicSword function and a BattleHUD::DisplayCommand function that are handling the Steiner/Vivi magic sword combination.
You may also get the source code of the game using a CIL decompiler (JetBrains DotPeek is free but it can only show you the code, not modify it).

@GARDIN: I need to have a list of the musics and their related ID for that. If you want to do it, you're more than welcome (see this post (http://forums.qhimm.com/index.php?topic=14315.msg248197#msg248197)).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: ammudava on 2017-08-15 23:17:45
is there a blank mod?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: blues on 2017-08-16 14:06:58
First, thank you so much for this excellent resource. It's enabled me to extensively modify the game with minimal hassle.

That said, as has been pointed out, the CIL editor is pretty buggy in that many methods simply cannot be edited without crashing HWS. I wonder, would it be possible to prevent these crashes in the next build? Or is the plan to wait for Memoria compatibility (which would presumably eliminate the CIL editor entirely and replace it with something more user friendly)? I'd really like to do things like cleanly (no work around) increase Darkside's HP drain and introduce true turn-based combat (which Memoria can easily do I guess, but I prefer HWS for various reasons).

Also, is there a more effective way to add enemy skills than copy pasting preexisting skills? I ask because when one uses the copy+paste method it completely breaks all of the enemy's pre-existing skills, requiring tedious manual correction.

EDIT: I should also mention that there are a few methods that have apparent errors in them even if no change is made by the user/modder. For example, opening btl_stat::AlterStatus, making no edits, and then trying to close it via OK (instead of Cancel) will report the following errors and prevent closing:

 - IL_012E : 'IL_03B0' is out of range for tbis instruction's short form
 - IL_0135 : 'IL_029B' is out of range for tbis instruction's short form
 - IL_0139 : 'IL_029B' is out of range for tbis instruction's short form

("tbis" seems like a misspelling of "this"). The result is that no edits can be made to AlterStatus since it cannot be saved (that is, closed via OK) due to these apparent errors.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tetraspore on 2017-08-17 00:45:07
Great work! I can't wait for an importer. I'm itching to whip up some custom costumes.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Fransguf on 2017-08-22 19:42:18
Any update on adding full range of analog movement available to the Steam version? It's literally the only thing holding me back from playing it.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-08-24 09:37:57
@ammudava: Disabling the cheat is part of the mod. If you want to play with cheats, you have to change the mod: you can do that by opening an un-modded game with HW, importing the .hws file ("Open Mod") and then go to "CIL Code" -> "Macros" -> "Disable Cheats" and disable the macros. Then "Save Steam Mod" creates files similar to my mod but with cheats re-enabled.

@blues: The plan is indeed to wait for Memoria compatibility for CIL code. You can do very small tweaks to the game's engine but as you say, there are bugs and I don't plan to fix them since editing the C# code will be 10x better.
I will fix that copy/paste bug for the next release. I have no idea why there is such bug but you might want to use the version 0.37c of HW in which this bug shouldn't occur. It is the only way to add new spells/enemies.
Thanks for the pinpointing the misspell of this "this" ^^

@Fransguf: I guess it will be doable by editing the C# code, so you have to wait for HW-Memoria compatibility.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: ammudava on 2017-08-25 14:08:08
nice https://www.facebook.com/photo.php?fbid=1874000566170908&set=ecnf.100006829488989&type=3&theater

this is me, although i am quite stupid but i learn. i am Dava ammu a indian girl
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: GARDIN on 2017-08-25 23:15:42
Tirlititi sorry for the late delay you have to give you a playlist  ff 9 music HadesWorkshop because I'm lazy man  :mrgreen: the important thing in this file is everything you need to complete a project music psx there are all songs arranged HadesWorkshop missing 4 music the most important explanation is how you can change songs ff9 to any games squaresoft an example is given how you can change a song ff9 Battle Theme to music FF8 The Man With the Machine Gun it works well It can be reversed and changed songs ff8 to ff9 or any games squaresoft but I did not explain it because it would not help you change songs ff8 to any games squaresoft and anything you want to inquire about, you can ask me and i'm sorry my bad language in English  ;D

http://www.mediafire.com/file/en9amnfdd7re9ma/ff+9.rar
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: blues on 2017-09-04 13:24:21
@Tirlititi: Thanks for the update. I know you've probably been asked it a million times already and that it's probably pretty hard, if not impossible, to predict, but any thoughts on when HW-Memoria compatibility will arrive? Also, I wonder if there'll ever be the ability to edit the worldmap (clicking the tab for it in HW instantly crashes HW) so as to, e.g., correct its texture problems (misaligned grid, permanent Mist on all continents regardless of where one is in the story, etc.)? Or is that possible already via some other method and I'm just missing it?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: ammudava on 2017-09-04 23:53:21
why is everone keep ask for the HW memoria compatible? even if they are not compatible, so what? you can still play it with either hw or memoria, and to me memoria isn't better than hw since memoria have some minor problem when patching it, troublesomee.

stop asking stupid question and let the author do his job!! if you are not satisfied just because hw and memoria not compatibel, than quit ff9, not one force you!!

https://www.facebook.com/photo.php?fbid=1874000566170908&set=ecnf.100006829488989&type=3&theater

this is me, although i am quite stupid but i learn. i am Dava ammu a indian girl
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: blues on 2017-09-05 12:22:43
@ammudava: I definitely appreciate the time and labor that goes into a project like this; the first line of my original post thanked the author, whose efforts have immeasurably (and for no compensation!) enhanced my experience with an already fantastic game, for this very reason. I was merely curious, and so asked a simple question, and would happily take a "I have no idea" as an answer if that's what the answer ends up being. As for why it matters at all, there are certain things Memoria can do better/more easily than HW (see, e.g., engine modification, which HW has problems with due to the buggy CIL editor), and there are certain things HW can do better/more easily than Memoria (see, e.g., property editing). Why wouldn't I be interested in a union of these two amazing tools into one super-tool?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-09-05 12:56:27
No problem, Blues. I have indeed no clear idea on when that would happen and I'm not going to make wild guesses (I'm already wrong on those when it depends solely on myself... I can only be extremely wrong since it depends on both Albeoris and me there).

I couldn't reproduce the crash on the World Map panel though. That panel works properly for me. Can you confirm that opening an un-modded game, then selecting the "English (US)" language, then immediately going to the "Environment -> World Maps" panel results in a crash? If it doesn't crash, please try to find how you got that crash so I can reproduce it.

You can't correct those errors in the World Map panel anyway, though. The "mist covers the whole planet early game" problem was already there in the PSX version and I'm quite sure that it wouldn't be easy to edit a world map such that only a part of it is misted.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: blues on 2017-09-07 13:20:12
@Tirlititi: Regarding the crash, I tried on a clean file and the tab seems to work. I'm not sure what in my mod is preventing it from being opened... if I can figure it out, I'll let you know. Odd, since there doesn't seem to be any other issues.

Regarding the World Map Mist, I'm currently tooling about in the Blue Narcissus and it's still coating the entire World Map. It's been a while since I played the PSX version, but I'm fairly sure that the Mist did abate by this point and the sky was blue, not white. Seems like another function of a poor Steam port, although I suppose it could be a result of my mod somehow...

EDIT: Loaded up a clean (non-modded) FF9 Steam and the all-encompassing Mist is still there. Google Image search suggests the skies should be blue. Guess it's another port problem alongside broken SFX and mis-aligned worldmap textures.  :-\
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: gledson999 on 2017-09-21 14:27:49
Could be possible add Boost, Enc none and max magic stone features from PS4 release to PSX?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Weisshuf on 2017-10-05 16:48:49
Hi guys,

I recently started with Hades Workshop. I have a few questions:
First: Is there a maximum Hp cap for enemies? I'd like to push them over 65k, like in other FFs.
Second: I saw that Ark from the Alternate Fantasy Mod could actually hit twice. Hows that?
And last: Where or how do I change the Status Set? Sometimes, when I changed a causing ailment, a other spell had this change too.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-10-06 08:17:41
@gledson999: No, very doubtfully. I guess you *could* simulate an "encounter none" and a "9999 damage" booster with tedious work (you can handle encounters and there rate in field scripts and you can know when a button is pressed, and also you can change the damage formulas in MIPS code). I wouldn't recommend to try it anyway, it's not worth the effort by a large scale.

@Weisshuf: There is a Max HP cap for enemies and it can't be just removed like this. It can however be bypassed using a trick in the AI script:
http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426

Doing damage twice can be done in the "Environment -> Spell Animations" panel. When editing the animation sequence, you should spot two important line: "effect point -> damage point" and "effect point -> figure point". The first is about dealing damage and spell effects (such as statuses), the second is used afterwards for displaying the damage number. You can see how I did that with "1000 Needles" by opening my mod with HW for instance. You should care about a few issues with adding more damage point if you're modding the PSX version:
http://forums.qhimm.com/index.php?topic=14315.msg230211#msg230211

About Status Sets, they work like the "Primary Stat Sets" for the items or the "Card Sets" for the Tetra Master decks: there are a limited number of sets and changing a set will change it for all the objects using that set.
If you want to use a whole custom status set (let's say "Trouble + Freeze") for only one custom spell, then you need to choose an unused status set in the list (all the "No Status" at the bottom are unused) and then use "Edit Status Set". This way you won't change anything for the other spells (by the way, theses sets are shared with the enemies spells).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Satoh on 2017-10-07 06:55:37
Nice to see this is still going.
I took the liberty of aggregating some information from FFIX Steam about animations.
this file is a bit of an eyesore, but maybe it will be a bit easier for someone who wants to help organize animation information.
It is by no means well organized, but its a bit more concise than the scripts themselves.

The format here is that each line represents one Model ID as noted in the script files.
The first number is the ID of the previous SetModel command, the second is the Name of that model (from Hades_strings.h), and after that is all of the animation IDs ever assigned to that model in any script. I made note of whether it was Walk, Run, Jump, Inactive, etc. If there's just a number with no text, its an arbitrary animation that was assigned with the RunAnimation command. The end of the line should have END... as the last marker, just in case the linebreaks get messed up.

so it looks like this:
Code: [Select]
192, Freya, Stand = 2556, Walk = 2553, Run = 2558, Left = 2555, Right = 2551, Jump = 12871, Stand = 6484, 12866, Stand = 12870, 6480, Jump = 12864, Jump = 12872, Stand = 805, 837, 807, 439, END...
Note that you'll see a LOT of Stand = ... in there, because the game assigns any type of repeating animation to Stand during cutscenes.

I have obviously not hand checked these. I used a machine search through all of the scripts and took it on good faith that animations between SetModel should correspond to that model, since objects always seem to assign models in object order.

I may try to organize this more later, or I may not find the time to, but I want the file out there just in case.
https://pastebin.com/wBQdu1AL

EDIT:
I did it this way because some NPCs share animations, and some animations are specific to one scene, and occasionally the game assigns running animations to the walking or standing slot, so it was sort of hard to figure out how to label any of it, so I just compiled a list of which models (should be, untested) compatible with which animations.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: TW_Bear on 2017-10-07 07:07:37
Hello. Is it possible to use this tool for translation? I tried to use it, but only was able to change names of equipment, spells, their descriptions, but i can't change dialogs. Also, is it possible to change game fonts? I'm translating game to Russian, and Cyrillic characters looks kinda funny, having big space between each letter. Sorry for bad English. And thank you for answer in advance.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Fraggoso on 2017-10-07 09:24:41
I think the game already has a Russian translation?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: TW_Bear on 2017-10-07 09:34:50
Yeah, there is one version of Russian fan-translation for Steam, but not everyone satisfied with it, cause many things different from ENG and JAP version.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-10-07 09:35:05
Thank you very much Satoh :)
I'll need names for the animations but knowing with which animation code they are used will be of a great help! Not to mention which model(s) use them.
As I said some time ago, there is a database for animations inside the game's source code, but I need mostly naming them. You can find that database here (search for "AnimationDB"):
https://www.dropbox.com/s/71ban3ghh589nag/Source_Database.cs?dl=0

@TW_Bear: For changing the dialogs, it's in the "Environment -> Texts" panel. You need to double-click on a text to edit it.
However, there is already a russian translation out there, using Albeoris's tool, as Fraggoso said ^^'
https://vk.com/club598031?w=wall-598031_6136%2Fall
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Satoh on 2017-10-07 10:03:26
Apologies. Been quite some time since I checked the thread, still haven't caught up 100%.
Looking at that DB, I can already see that some of these should be easy to name. There's a number of patterns to the strings, such as ZDN being an obvious Zidane.

I'll spend some time looking at this and see if I can't hack something together for... some of it at least.

EDIT: Ok, a lot of this looks pretty easily deciphered, but is there something specific you need from the list? Character names, super short animation names, or any specific formatting?

The animationDB strings are labeled in a {ANH, what type of object uses, what part of the game used, who specifically uses, name of animation}
Some of the generic NPC names might be annoying to decipher but it should be something that can be cross referenced with models.
I'll get to work reformatting the strings for now, but if there's a specific format you want for the names, do mention it.


EDIT2:
Ok, fair warning, this file is 472 kb, which can take a while to load in pastebin, I'm sorry for that.
But this is the only way I can see to upload it...
These names aren't fully resolved, but they should be at least understandable at now.
I can remove any data from it if you want, like the NPC/Important NPC/Main category, and the Field_V# category. I believe the Field Version is something to do with quality, as higher numbers appear to correlate with being closer to the camera in fields... that's a guess, it's probably NOT important, but I left it in just in case.
There's also a list for Battle and World animations, but I separated those out because I figured most of the usage would be for field scripts. (and they would make the file larger than I could upload.)

Second warning, it will take a while to load and may stall some browsers while it does.
https://pastebin.com/D0cMB7B1


Unreleated EDIT:
I've noticed a few scripting foibles while playing with the steam version...

the IsButton family of commands do not universally work with directions and other buttons. They seem to work fine with OK, Cancel, and Card, but other things like Select may not always work. I believe this is because the Steam game has some of those functions hard coded, rather than emulating PSX controller input.

I was trying to write an animation test script, where you'd control the animation ID with key inputs to increase or decrease... it worked to a degree, but only the OK, Cancel, and Card buttons actually registered in the field, so I've been revising it and haven't quite gotten it to work yet.

I did learn two other things while doing this.
1. It may be tempting to try to assign a new model to an object that has one already, but it results in a partial soft lock. (the Exit menu still works, but the rest of the game is frozen)
2. Animations may not look very nice when played on the wrong model, but it is safe(the game won't lock) to assign the wrong animation to a model.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-10-14 12:57:34
Thanks you Satoh for this other animation list :D

I think the "IsButton" worked well for directions in the PSX version. That'd be a shame if they don't work anymore :/
Here's a list of the buttons :
Code: [Select]
0 : Select
3 : Start
4 : Up
5 : Right
6 : Down
7 : Left
8 : L2
9 : R2
10 : L1
11 : R1
12 : Triangle
13 : Circle
14 : Cross
15 : Square
16 : Cancel
17 : Confirm
19 : Moogle
20 : L1 Ex
21 : R1 Ex
22 : L2 Ex
23 : R2 Ex
24 : Menu
25 : Select Ex
Use the power of 2 for the number in the script.
For instance, "8" corresponds to 2^3 -> Start button. "40" corresponds to 2^3 + 2^5 -> Start or Right button.

You see that there seems to be duplicates: there is "Square" but also "Moogle". In fact, the first will always react to a square button input while the second one will react depending on the player's settings (in FF9 config menu). Same for the L/R buttons and there "Ex" counterpart.
Maybe you can try both "Select Ex" and "Select". However, I know that my controller's select button has trouble with several games and FF9 is part of them.

The "Start" button, at least in PSX, is triggered if the player pauses the game and then unpause it, but it triggers only once.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Satoh on 2017-10-16 02:38:19
Well, I was trying to put it all inside the Zidane_Loop function... which maybe is too much code for that and won't work...
I noticed that a lot of stuff prefers to call synchronous code inside the Loop function, instead of letting the code be inside it...

Maybe I just need to rethink everything I was doing from the ground up.

Although, I didn't know about the Ex versions of the buttons... I wonder why there are two copies.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-10-16 09:47:08
The copies are for the remapping of the buttons: you can remap them in FF9 config menu just like the others. I think the "Ex" version is the remapped button while the normal is the controller button ignoring the remapping.
I don't think there's any limit on the code you can put/execute in a loop function. However, I thought that maybe "IsButton" doesn't work with the directional arrows and only "IsButtonDown" works with them.

The theoritical difference can be seen in this kind of loops:
Code: [Select]
while (1) {
    if (IsButton(16)) {
        AddItem( 1, 1 ) // Add 1 Dagger everytime the player presses "Up"
    }
    if (IsButtonDown(16)) {
        AddGil( 1 ) // Add 1 gil every frame as long as the button "Up" is pressed
    }
    Wait(1)
}
In practice, maybe they disabled the check of "IsButton" on the arrows for some reason. They use "IsButtonDown" for sure for special windows such as the Treno Action bidding (for selecting the amount of gil you want to bid).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Satoh on 2017-10-20 19:59:28
This is an unrelated comment to my previous ones, but I have a suggestion to help with editing.

Show the ID numbers somewhere in the Strings and Fields lists so they can be easily compared with the numbered text file exports.

The Fields especially take a really long time to load in the editor when it first opens, so opening the editor to check one small detail can actually take some time
(I clocked it at about 5 minutes to load all the fields, during which time the editor was busy and couldn't be used, so I had to wait for it to finish. Also each field in the list seems to take about 2 times as long to load as the previous one, which gets quite slow after going through 817 fields twice. I'm assuming that's a limitation of how they're stored, and can't be fixed.)

Having the Field names and ID numbers export to text would be helpful, and so would being able to see the ID numbers in the editor, so the names would match up.

I often use the text dump to do a mass text search to find the code I want to inspect, but once I find the right text file in the scripts, I have to figure out which field it is in the editor by counting from the top of the list.

Simply listing ' 1 Prima Vista/Cargo Room ' instead of only ' Prima Vista/Cargo Room ' in the list box or somewhere on the editor panel would help a lot.
I'm sure the same is true with Strings, but I haven't looked far into those yet.


Back on the subject of animations, it seems like some characters Jump animations might not work in every field. I'm still trying to figure out if that's the case or if I'm just doing something wrong. This is why I started the animation tester in the first place, funny enough, if only I could get it to work haha.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-10-20 20:39:40
About the ID, I'll do things like that if I think about it.

About the jump animation, they are very special: the script code "SetJumpAnimation" is the only one that doesn't check if the animation is loaded in the RAM. In case that the animation was not loaded, it bugs instead of loading it. You can use things like:
Code: [Select]
SetStandAnimation( JUMP_ANIM )
SetStandAnimation( STAND_ANIM )
SetJumpAnimation( JUMP_ANIM )
This will force the jump animation to load up in the RAM so it can be used.

The "Preloading" data should be the one that preloads the animations if things were done in a clean way. But preloading data for Steam is not very good for now (you can't add a model and its animations to the preloading list).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Satoh on 2017-10-20 20:57:38
About the ID, I'll do things like that if I think about it.

About the jump animation, they are very special: the script code "SetJumpAnimation" is the only one that doesn't check if the animation is loaded in the RAM. In case that the animation was not loaded, it bugs instead of loading it. You can use things like:
Code: [Select]
SetStandAnimation( JUMP_ANIM )
SetStandAnimation( STAND_ANIM )
SetJumpAnimation( JUMP_ANIM )
This will force the jump animation to load up in the RAM so it can be used.
I see! That is helpful advice, thank you for sharing. I'll have to try that.

EDIT:
That worked perfectly, thank you so much for that tip.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: march on 2017-11-06 19:19:54
Hi there !

I'm working on a Final Fantasy IX modding tool called Hades Workshop. It is aiming to allow to edit most of Final Fantasy IX's content. Quite a big project and I don't know if I will ever decide when it's finished  ;D

//============== THE TOOL =================//

The features so far :
- Can open Final Fantasy IX PSX files, in .bin format and in any language version,
- Now works with the Steam version,
- Read and edit datas about :
--- Spells the party can cast,
--- Supporting abilities the party can use,
--- Commands the party has,
--- Default stats of the party members,
--- Items' features,
--- Items sold in shops,
--- Statistics, attacks and AI of enemies,
--- Tetra Master cards,
--- Text, dialogs and charmap,
--- Game's script,
--- MIPS script and CIL script,
--- Model exporting (Battle Scenes only for PSX, more for Steam),
--- Backgrounds (view only in PSX, view/replace in Steam),
--- Steam resources exporter/importer,
--- Spell animation sequencing.
- Works under Windows only (you may recompile the source code I redistribute or use wine under linux).

It may be a good idea to have a look at the help (F2).

Also, I recommend to the new Steam users to go easy with this tool. Several features are easy to get familiar with, but due to the power of this program and the complexity of FF9, there are subtilities and traps to avoid.
You should read this post (http://forums.qhimm.com/index.php?topic=14315.msg242844#msg242844) to get to know some of them.
Important : Hades Workshop doesn't work if Albeoris's Memoria tool was used. The other tool called Memoria (seriously Albeoris...) by gjoerulv works just fine.

Credits :
I made the program, obviously, but I got helped a lot by your wiki (http://wiki.qhimm.com/view/FF9 (http://wiki.qhimm.com/view/FF9)) for cluster datas format and by http://finalfantasy.wikia.com/ (http://finalfantasy.wikia.com/) occasionally.

Other than that, LandonRay and Zande made quiet an useful work in data finding, Zidane_2 wrote most of the other tools about FFIX before me.

The background image has been drawn by Maxa'. You can check his Deviant-Art page here (http://maxa-art.deviantart.com/).

Please tell me if you get any suggestion/bug report/feedback to share ^^

Here are the download links :

HADES WORKSHOP (https://www.hiveworkshop.com/attachments/hadesworkshop-zip.274037/)

Github project (https://github.com/Tirlititi/Hades-Workshop)

The older versions can be found here (https://www.dropbox.com/sh/f8edyp5ua4a7kc7/AACuhcb46gQq4x4IMGmgRgl1a?dl=0)

Thank you for your attention  :)

//=============== THE MODS =================//

Here are Final Fantasy IX mods made using Hades Workshop. I won't speak of LandonRay's mod because it is not related to it, but it's also worth a look ^^
Difficulty Tweak (http://forums.qhimm.com/index.php?topic=17546.0) : Made by Iamthehorker, this mod increases the MP cost of the abilities and make the battles tougher. The gameplay itself is preserved, so it really is an increase of difficulty for an augmented playthrough. If you think that the boss battles end too quickly or if you never saw the use of the ethers/elixirs, this mod is a way to go. It also allows Steiner to equip the Save of the Queen in the end-game.
Final Fantasy Formula IX (http://www.insanedifficulty.com/board/index.php?/topic/4194-final-fantasy-formula-ixfffix) : A mod made by Aidolu with completly different spells and commands. I particulary like how commands have been re-invested to make spells like Songs or Cooking moves. The new spells are mostly taken from other Final Fantasy with few changes sometimes because of the limitation of my program or of FFIX battle mechanics.
Save The Queen (http://www.romhacking.net/hacks/1984/) : A mod made by ThisGuyAreSick2. It allows Steiner to use the allmighty Save The Queen. It also changes the way you synthesize it (it's made in the Black Mage Village in disc 4).
FF9.2.2 (http://forums.qhimm.com/index.php?topic=15217.0) : A mod made by Vir to improve the Perfect Stats challenge balancing. It removes the forced exp battle so a true lvl 1 game can be made. It also fixes the Thunder Slash glitch. Vir also made a Fixed Stats Mod (http://forums.qhimm.com/index.php?topic=16703.0) which removes the primary stat variations from games to games and have a normalized stat progression.
Alternate Fantasy (http://forums.qhimm.com/index.php?topic=16324) : My own mod. It modifies a bit of everything in the game but mostly change the abilities and the gameplay in battles.

Also, you can find here (https://www.dropbox.com/sh/ac7sr4q3z2cx9vp/AACQDfqXPvn8c3ylXeGUrBKEa?dl=0) the different tiny mods I made over the years.

//============== HELP AND TIPS =================//

This topic is now more than 30 pages long. Different people asked for help at different points and I always tried to give a complete answer. You can thus find details in this topic about subtilities of the game, or how a feature of HW works, or how to do some precise thing. Since I don't want everyone to read the whole topic thoroughly, here are links to answers to these kind of questions.

Side effects of Initial/Auto-statuses (http://forums.qhimm.com/index.php?topic=14315.msg205428#msg205428)
A list of spells specially handled by the engine (http://forums.qhimm.com/index.php?topic=14315.msg248444#msg248444)
Bypass the enemies' Max HP limit (http://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426)
Checking if a character is in the team in-battle (http://forums.qhimm.com/index.php?topic=14315.msg236103#msg236103)
Enabling an enemy attack depending on the party stats (http://forums.qhimm.com/index.php?topic=14315.msg236276#msg236276)
Make Zorn & Thorn battle more difficult (http://forums.qhimm.com/index.php?topic=14315.msg250236#msg250236)
About the random encounter rate (https://www.gamefaqs.com/boards/197338-final-fantasy-ix/75389893)
Removing Dagger's depression effect in-battle (http://forums.qhimm.com/index.php?topic=14315.msg251907#msg251907)
About Ragtime Mouse quizz and reward script (http://forums.qhimm.com/index.php?topic=14315.msg251926#msg251926)
Unlocking manually a few of the "Hidden Scenes" (http://forums.qhimm.com/index.php?topic=14315.msg222961#msg222961)
Skipping the script that makes Dagger unlearn her summons (http://forums.qhimm.com/index.php?topic=14315.msg237588#msg237588)
Make Mini-Theater Ship obtainable as a key item (http://forums.qhimm.com/index.php?topic=14315.msg238833#msg238833)
Removing Excalibur II time condition manually (http://forums.qhimm.com/index.php?topic=14315.msg248637#msg248637)
Making temporary characters available in the party menu (1) (http://forums.qhimm.com/index.php?topic=14315.msg245063#msg245063)
Making temporary characters available in the party menu (2) (http://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=8#c1457328927844133175)
Changing properly the content of a chest (http://forums.qhimm.com/index.php?topic=14315.msg233384#msg233384)
Ensure that characters enter the party at level 1 (http://forums.qhimm.com/index.php?topic=14315.msg237581#msg237581)
How to use "GetRandom" to generate a random number in a range (http://forums.qhimm.com/index.php?topic=14315.msg250290#msg250290)
List of animation IDs and who use them (http://forums.qhimm.com/index.php?topic=14315.msg253853#msg253853)
Declaring local and global variables in scripts (http://forums.qhimm.com/index.php?topic=14315.msg234516#msg234516)
Typical NPC dialog script (http://forums.qhimm.com/index.php?topic=14315.msg247568#msg247568)
Add NPC and PC on the field (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890)
Manually extracting a Beatrix mod out of Alternate Fantasy (http://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=2#c276237094325785813)
How to mix some of the standard mods (http://forums.qhimm.com/index.php?topic=14315.msg237980#msg237980)
A word about background and walkmeshes (http://forums.qhimm.com/index.php?topic=14315.msg239117#msg239117)
HW format for text file batching (http://forums.qhimm.com/index.php?topic=14315.msg237956#msg237956)
Helping with the development of HW (http://forums.qhimm.com/index.php?topic=14315.msg248197#msg248197)
Bug when making a multi-hit spell animation (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg230211#msg230211)
Adding custom text font (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg213039#msg213039)
Using Memory card saves after modding (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg212984#msg212984)
Fixing "The Collector" Tetra Master bug (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg214553#msg214553)
Change the initial items + hex-hack to give supporting abilities to Beatrix (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg241840#msg241840)
MIPS editing + controlling someone else than Zidane in fields for PSX (http://forums.qhimm.com/index.php?topic=14315.msg239490#msg239490)
Grudge's MIPS spell formula (PSX) (http://forums.qhimm.com/index.php?topic=14315.msg239660#msg239660)
Using the Background Editor (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg247956#msg247956)
Properly adding a new enemy to a battle (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485)
Removing (some of) the bubbles appearing when you get close to NPC on Steam (http://forums.qhimm.com/index.php?topic=14315.msg248727#msg248727)
Removing the stat growth of characters (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg248318#msg248318)
Modding Magic Stone growth of characters (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg249629#msg249629)
Modding spell effect: explanation (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg250810#msg250810)
Modding Supporting Abilities: HP/MP +X% (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg249962#msg249962)
Modding Supporting Abilities: Auto-status and Immunes (Steam) (http://steamcommunity.com/groups/ff-modding/discussions/13/350533172684330089/#c2119355556487352609)
Skipping the last two cinematics of the game (Steam) (http://steamcommunity.com/groups/ff-modding/discussions/13/350533172684330089/?ctp=2#c1488861734096802623)

//================ BONUS =================//

Simplified Game Scripts

Here are some scripts of systems or mini-games that are of some interest if you wish to know how the game works in-depth.
FFIX Code Folder (https://www.dropbox.com/sh/8ce6b73316gkx0x/AAA2-z3GCFZf3-Ed-6htDRmCa?dl=0)

Hidden dialogs

Here are some few interesting secret dialogs, never used in the game.
I've also made a patch to enable some of them in-game :
Hidden Dialogs (PSX) (http://www.romhacking.net/hacks/2112/)
Hidden Dialogs (PC) (https://www.dropbox.com/s/ejifo5amf4kkcyc/PC_HiddenScenes.zip?dl=1)
And a video (https://www.youtube.com/watch?v=paxguJo6AqA) showing the patch's content.

Don't hesitate to tell me if you find more unused dialogs : I'll add them to the list ^^

Alexandria [Over the roofs...] :
Puck “So, Vivi... Is this your first time in Alexandria?”
Vivi “Uh...  Um...  Yeah. I bought my ticket from a moogle wearing a hat...”
Puck “Bad luck!  If I ever find that moogle, I'll hurt him plenty!”
Vivi “Uh... Thanks...”
Puck “Alright!  Just a little farther 'til we can see the stage!”

Ruined Prima Vista [Steiner's bitterness] :
[1/3]
Steiner “Those bastards... If they plan to demand a ransom, they're wasting their time.  I'll see to it that they receive nothing!”
[2/3]
Steiner “Wretched thieves... I'll see them all hanged!”
[3/3]
Steiner “Those bastards... They will never get away with this!”

Observatory Mountain [Good and Evil with Grampa Morrid] :
Steiner “Alexandria, off course! Burmecia started the war, and we lost our king as a result.”
Morrid “Many wars were fought before the Lindblum Airship Revolution.”
Morrid “Alexandria intiated some of the wars against Burmecia. Now, can you tell me who was right or wrong?”
Steiner “I-I am not talking about the past! I am talking about the future!”
Morrid “What will you do if Alexandria starts a war?”
Steiner “When will the cargo ship arrive!?”

Gizamaluke's Grotto [Entering Burmecia] :
Burmecian Soldier “This is the Gizamaluke's Grotto. It is Burmecia's border.”
Burmecian Soldier “No one is allowed inside without the king's permission.”

Cleyra [Meeting with the King and the High Priest] translated from japanese by luksy :
Freya “It has been some time, Your Majesty.”
King of Burmecia “Ah, Freya, well met.”
King of Burmecia “The High Priest and I welcome you.”
High Priest of Cleyra “My Lady.”
High Priest of Cleyra “It would appear that this predicament no longer concerns Burmecia alone.”
Freya “I understand, Your Holiness.”
Freya “And yet...”
Freya “I fear my strength alone may not suffice.”
King “Freya...I know what troubles you.”
King “I must apologize for earlier.”
King “Can you ever forgive me?”
King “No! off course you cannot.”
King “But the fate of the people of Burmecia now hangs by but a thread.”

Occupied Lindblum Castle [Reaching Cid] :
Don't get caught by the enemy!
Jump out when she looks away!
Man “The regent is waiting for you at the Base Level.”
Man “The enemy is busy loading supplies. Go down on the lift, now!”
Man “Once you get on the lift, my comrades will take care of the rest.”
Zidane “So, I just take the lift to the Base Level without getting caught?”
Yeah...
Zidane “Piece o' cake! Leave everything to me.”
Huh?
Is anybody there...?
A tail?
Meeow!
Oh, it's only a cat...
Zidane (Wow, that was a close one.)
Man “(You idiot!)”
Man “Whatever you do, don't get caught!”
Man “What's wrong? The regent is waiting at the Base Level.”
Man “Go now, or you'll get caught!”
Zidane “I gotta run while she's looking away.”

Occupied Lindblum Castle [The Ancient World Map] :
Regent Cid “That is a national treasure of Lindblum!”
Regent Cid “It was passed down through my ancestors, since the days of the first regent.”
Regent Cid “It was probably made before our continent was covered in the Mist...”
Regent Cid “That is an ancient map of the entire world!”

Alexandria [Balloon Mini-game] translated from french by me :
Girl “You want to play with us?”
Girl “You've got some time to gather balloons and give them to the boys behind us!”
Girl “You get more time depending on the color of the balloon that you bring.”
Green → 5 more seconds
Yellow → 10 more seconds
Blue → 15 more seconds
Red → 30 more seconds
Girl “All the three of us have a balloon and we are somewhere on the square.”
Girl “Well... Start!”
Boy “X more seconds! You have Y points!”

Final [The 2 worlds' fusion] :
The Iifa Tree could not be stopped...
Gaia and Terra's fusion
caused global chaos,
destroying many cities and
taking many lives...


dude , i thank you for how efficient is this program , but in the lutest version of hadesworkshop the bosses aren't editable , they don't show up in the list of enemies , please , fix that , but maybe this bug only occur wen hadesworkshop open the psx version of the game , the italian version in my case
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-11-06 21:07:37
Yes it does. However, for the PSX version, not all the battles are present in all the discs. So if you opened disc 1 you only have the bosses of disc 1. Same for the other discs with a few exceptions (Gizamaluke is present on all the discs because the Grotto fields are still there as well).

Also, no need to quote a whole message of 215 lines (yeah, I checked that) for a 3 lines long reply. That's like subcontracting your speech, somehow :p
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: march on 2017-11-07 00:29:26
Yes it does. However, for the PSX version, not all the battles are present in all the discs. So if you opened disc 1 you only have the bosses of disc 1. Same for the other discs with a few exceptions (Gizamaluke is present on all the discs because the Grotto fields are still there as well).

Also, no need to quote a whole message of 215 lines (yeah, I checked that) for a 3 lines long reply. That's like subcontracting your speech, somehow :p

lol , and is true , i checked the disk 4 just now and both ozma and kuja are there in the list , thanks for the clarification , also , i hope that the successive versions of hades workshop will include also : the auto-status of the equipment ( like reflex ring ) so we could even get all the good status at once and permanently :D  , and the modofication of the support abilities , so we can finally chose to have a proper ribbon that make us immune from every negative status
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: march on 2017-11-07 21:14:24
Yes it does. However, for the PSX version, not all the battles are present in all the discs. So if you opened disc 1 you only have the bosses of disc 1. Same for the other discs with a few exceptions (Gizamaluke is present on all the discs because the Grotto fields are still there as well).

Also, no need to quote a whole message of 215 lines (yeah, I checked that) for a 3 lines long reply. That's like subcontracting your speech, somehow :p

come to think about it , there is also another thing that hadesworkshop need to make possible : set at 255 the stats of the cards , since for now you set the maximum at 127 while it can reach 255 :D
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-11-08 16:39:24
No, that's not really possible. These numbers are divided by 2 for the minimal randomized stat. I didn't add a limit for fun.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: march on 2017-11-08 17:57:52
No, that's not really possible. These numbers are divided by 2 for the minimal randomized stat. I didn't add a limit for fun.

i see , but i noticed that the save editor always allow to set 255 for every parameter for every card , maybe this information can show you how the problem can be solved  :o , but besides that , i hope that the next version of hadesworkshop will allow to modify\select the effect of the auto stat , so for example , instead of have haeste in an equipment , we can have the effect of vanish or banish i don't remember witch is the useful one , but you got what i mean lol , and as i said in the previous message , even the modification of the auto abilities would be great , so one singe auto ability will finally grant the immunity to all the negative status  :D , you know , your program is more precious than it may appear , since the so called " pro gamers " are mostly listened to from developers , most of the games are essentially a bunch of limitations and restrictions rather than something to have fun with , so the only possibility of solve all the problems caused by the pro-gaming epidemy are software who allow stable modifications that allow even us to enjoy a game , because is not like everyone are supposed to give a fuck about be pro gamers , for me for example , is just stupid , i sometimes watch some pro gaming sessions , well , they completely forgot that video games are made to have fun , and not something that cause rage , hysteria , and that put a person against the other one , and certainly isn't something to take seriousely , and of course isn't some kind of matter of honor , still , their tragic way to play wouldn't be a problem if they were not so bossy and intrusive , nowdays , some games have a lot more protections to prevent gameplay modifications rather than any form of interest in make the game stable and well functioning , i mean , sometimes developers put more effort to prevent us to play like we want ( and that should be considered our inviolable right ) rather than prevent bugs , for example , i purchased a game recently , and guess what ? the game is bugged , despite the fact that i updated it with official stuff , but wen i try to modify it in order to play like i want , i immediately get errors and crashed , is just unfair and also stupid , be bossy and intrusive isn't a good way to keep the purchasers
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: gledson999 on 2017-11-14 02:17:45
The latest tool crash on Environment

Prima vista, when you click on Received 0 gil, sure is the dark..., etc
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: DanTsukasa on 2017-11-14 04:25:11
Tirlititi, I'm really looking forward to the model importer, again you're doing great work here.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: savokgear on 2017-11-14 08:11:49
(I apologize for Google translation). There is somewhere a MOD for changing the combat system without a delayed ABT? To characters executed orders without delay as in 8 FF, or at all without ABT as in 10 FF. Or in the extreme case, that the characters and enemies attacked simultaneously and most importantly without DELAY as in 10-2 FF?
The main thing is that your orders are due to a pile of animations not a minute later.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Loseless on 2017-11-14 17:30:42
Hello! I've been reading a few things here and there. I'd very much like to change the magic stones growth curve, but I'm having some trouble figuring out how. I've located the CIL script that handles the function, but I can't figure what to change in order to increase how fast stones are gained...

Perhaps if I changed one of the values in bold below?

Does anyone here have a clue?

The Magic Stone progression is defined in the CIL Code, so it's a bit tedious to change. It's the method "ff9level::FF9Level_GetCap" :
Code: [Select]
public static int FF9Level_GetCap(int slot_id, int lv, bool lvup) {
PLAYER pLAYER = FF9StateSystem.Common.FF9.player[slot_id];
FF9LEVEL_BONUS bonus = pLAYER.bonus;
FF9LEVEL_BASE fF9LEVEL_BASE = ff9level._FF9Level_Base[ff9play.FF9Play_GetCharID((int)pLAYER.info.menu_type)];
if (lvup) {
int num = (pLAYER.cur.capa != 0) ? 0 : 5;
int num2 = 0;
FF9LEVEL_BONUS expr_53 = bonus;
expr_53.cap += (ushort)(num + num2);
}
int num3 = (int)fF9LEVEL_BASE.cap + lv * 4 / 10 + (bonus.cap >> 5);
if (num3 > 99) {
num3 = 99;
}
return num3;
}
In term of CIL Code, the main operation ("int num3 = ...") is those lines:
Code: [Select]
ldloc.3 // fF9LEVEL_BASE
ldfld 0x4000890 // FF9LEVEL_BASE::cap
ldarg.1 // lv
[b]ldc.i4.4 // Multiply by 4[/b]
mul
[b]ldc.i4.s 10 // Divide by 10[/b]
div
add
[b]ldloc.2 // bonus[/b]
ldfld 0x400088B // FF9LEVEL_BONUS::cap
[b]ldc.i4.5 // Right-shift by 5 ( = Divide by 32)[/b]
shr
add
stloc.0

I have no idea of where the font used is defined.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-11-14 18:34:12
@savokgear: You ask for changing the battle engine in-depth. Hades Workshop cannot do that. Albeoris's Memoria tool is more suited for that but it is unfortunatly not compatible with HW yet.
http://steamcommunity.com/groups/ff-modding/discussions/13/357284131804133221/

@Loseless: The important line, defining the Magic Stone progression, is this C# line:
Code: [Select]
int num3 = (int)fF9LEVEL_BASE.cap + lv * 4 / 10 + (bonus.cap >> 5);"fF9LEVEL_BASE.cap" is the base number at lvl 1 that you can set in the "Party->Stats" panel.
"lv * 4 / 10" means that you'll get +0.4 Magic Stone every level (so +1 after 3 levels and +1 after the next 2 levels).
"bonus.cap >> 5" is useless. It may add 5/32 = 0 Magic Stone (since it is an integer division) in certain situation (I think that's when your character has 0 available Magic Stone but I'm not sure). For info, "X >> n" is the same as "X/(2^n)" mathematically.

So in term of CIL Code that you can see and edit in HW, the easy way is to change those "4" and "10" numbers:
Code: [Select]
ldc.i4.4 -> Change it to ldc.i4.s 9 for instance
ldc.i4.s 10 -> Change it to ldc.i4.s 2 for instance
With these figures, you would get +4.5 Magic Stone every level (so +4 Magic Stone on odd levels and +5 on even levels).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Loseless on 2017-11-14 20:29:00
Thank you so much, Tirlititi! It was exactly what I needed.

Another thing I am considering: Is there a way to change the steal rates and to edit the AP required to learn skills and abilities?

And while at it, how can I make spells like Protect and Shell affect the entire party? There's no multi animation for them.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Kefka on 2017-11-15 16:11:30
Another thing I am considering: Is there a way to change the steal rates and to edit the AP required to learn skills and abilities?

The required AP for each ability can be edited in the stats panel, there should be a field called 'AP requirement' right next to each party member's ability list.

As for the steals, you can change the slots of each stealable item for each enemy, thus indirectly increasing/decreasing your success rate. I don't know if it's possible to modify the basic steal probability for each of the four slots, but maybe something can be done with MIPS code (if the code for the steal subroutine has been discovered yet, not sure).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Loseless on 2017-11-15 16:49:40
Thanks, Kefka. I though I had seen the AP thing somewhere but couldn't remember. Searched everywhere else but the stats tab.

The steal rate was asked by some players. Moving some items from the 4th to the 3rd slot helps in a few cases, but in some instances, even the third slot can get tricky in difficult fights.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: savokgear on 2017-11-18 02:07:55
@Tirlititi thank you
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Loseless on 2017-11-19 17:35:45
Now this one might be difficult. If I turn Protect and Shell, among others, into multi target they still won't affect all targets because they lack animations. I've been looking at the animations and it seems that there are two animations for such spells: of for an single target and another for multi target. This being said, how can I add an animation of Protect and Shell that supports multi targeting?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-11-19 19:18:38
I don't think that it is possible to do that properly for now. Single-target spell animations can't be used for multi-target spells for 2 reasons:
(1) In term of spell effect (damage, status, etc...), the spell animation sequencing has an "effect point" only for the 1st target and no "effect point" for the other potential targets,
(2) In term of the graphics, the SFX is only big enough to show on one target.

You can fix the problem (1) easily in the panel "Environment -> Spell Animations", edit the Shell and Protect animation sequencing and change the lines "Effect Point: [Damage/Figure] Point on 1st target" to "Effect Point: [Damage/Figure] Point on all targets".
However, it won't affect the graphics and you will still see the spell casted only on 1 character, even though everyone will get Protect/Shell in the end. It'll look weird.

I don't think that it is possible to fix the problem (2) for now. It would require being able to edit the spell animation in a deeper way.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: eugene9 on 2017-11-22 15:17:22
Hello! first of all, thanks for your amazing work! You did an amazing modding tool. I want to ask you if you know a way to change Zidane's battle model into his trance's one using your mod.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-11-22 16:43:39
Someone (maybe you) asked the exact same thing here: http://steamcommunity.com/groups/ff-modding/discussions/13/2425614539580332388/
I don't know how to make it work for Zidane only. It's everyone or no one.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: eugene9 on 2017-11-22 19:41:39
Yes, I am! sorry for any inconvenience I have just realized you're the same person who replied me in that post. I'm sorry to make a nuisance of myself but I have seen that with that trance mod, when you cast white magic a shadow appears among the casting lights. It resembles to a transparent figure of the original battle model. Is there any way to remove that? Thank you in advance, and thank you also for all your work and concerns.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: IsMakiThere on 2017-12-30 18:41:56
Hi, I am proper noob and I just dont get how this works? I used the memoria one just fine but it wont allow me to edit high score and total games played on chocobo hot & cold, does this editor allow that? so I am going to where my final fantasy save is stored but it wont find a bin file and when i change it to all files the same way i would use memoria it just comes up with an error. could you post a vid or a little guide on how to use this? cheers! 
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2017-12-30 21:15:59
This tool is about modifying the game, not your scores or stats or whatever related to your game save.
You *could* make it so a hot & cold game gives you more score but that's quite tricky and the Memoria save editor would be better for that. I thought it was possible with it :/
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: IsMakiThere on 2017-12-31 08:55:15
Ah got ya, I think at one point it was possible with the memoria editor however the boxes seem to be greyed out now and you cant edit the values.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: gorildo on 2018-01-06 17:46:30
Does anybody knows how to edit the Jump Rope minigame, so it automatically jumps 1000 times with one press or jump automatically?

More practical than using GameShark and this useless key item hurts my OCD. :-P
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tedrainbow on 2018-01-10 12:14:45
Hello it me again !

It possible to PC steam version change.

Speed = Basic Speed + [Level / 10] + [Bonus Fragments / 32]

Force = Basic Force + [Level * 3/10] + [Bonus Fragments / 32]

Magic = Basic Magic + [Level * 3/10] + [Bonus Fragments / 32]

Psy = Basic Psy + [Level * 3/20] + [Bonus Fragments / 32]

Max Speed: 50      Max Force: 99    Max Magic: 99    Max Psy: 50     Max HP: 9999       Max MP: 999    Max Magic stone  99

Change to

Speed = Basic Speed + [Level * 5/13] + [Bonus Fragments / 44]

Force = Basic Force + [Level * 5/13] + [Bonus Fragments / 44]

Magic = Basic Magic + [Level * 5/13] + [Bonus Fragments / 44]

Psy = Basic Psy + [Level * 5/13] + [Bonus Fragments / 44]

Max Speed: 99      Max Force: 125    Max Magic: 125    Max Psy: 99     Max HP: 15000       Max MP: 2500      Max Magic stone  111

thanx ^^
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-10 13:43:48
Yes for most of it. I am not sure about changing the Max values of stats though.

For changing the stat progressions:
Go to CIL Code, then search for "ff9level" in the list on the left, then "FF9Level_GetDex", then Edit Code.
Spot the following lines near the bottom of the code.
Code: [Select]
ldarg.1
ldc.i4.s 10
div
add
ldloc.2
ldfld 0x4000885 // FF9LEVEL_BONUS::dex
ldc.i4.5
shr
add

Replace that portion by this:
Code: [Select]
ldarg.1
ldc.i4.s 5
mult
ldc.i4.s 13
div
add
ldloc.2
ldfld 0x4000885 // FF9LEVEL_BONUS::dex
ldc.i4.s 44
div
add

Then do the same for the "FF9Level_GetStr", "GetMgc" and "GetWpr". The codes are pretty similar (always replace the few lines between "ldarg.1" and "shr/add").

For changing the max values, it's at the same place but right below: you have two lines "ldc.i4.s 50" at the end of these codes (or "ldc.i4.s 99" for Str and Mgc). Replace that with 99 or 125.
In "FF9Level_GetCap", you have the limit for the magic stones ; the code is similar to the others and you'll find two lines "ldc.i4.s 99" at the end.
In "FF9Level_GetHP" (resp. "GetMP", the code is much smaller but still with two lines "ldc.i4 9999" (resp. "ldc.i4 999").

If you increase the limit of strength, magic, spirit or speed, you also need to remove the limitation from equipment boosts. It's in the method "ff9play::FF9_GetSkill". Near the 4/5 of the method, you'll find lines like these:
Code: [Select]
ldfld 0x40008AD // FF9PLAY_SKILL::Base
ldloc.0
ldelem.u1
ldloc.s 6
ldloc.0
ldelem.u1
ble IL_0328
ldarg.1
ldind.ref
ldfld 0x40008AD // FF9PLAY_SKILL::Base
Just replace the line "ble IL_0328" by "br IL_0328" and it should remove the limit totally.
It is not easy to choose the limit yourself by CIL code editing because the limit is stored in an unreachable array ("<PrivateImplementationDetails>::$$field-545").
In practice, it will then be that the base stats are limited (by whatever limit you want) and the equipment stat boosts can still increase that limit a bit.

I am not sure that increasing the max values is safe. If the HP of a character is beyond 9999, it will display a bit strangely but work just fine. However, there might be more troublesome bugs.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tedrainbow on 2018-01-10 19:45:13
thanx you ^^
Is work.

Is possible change stats regular items arms and all armor stats,  attack, defence,  evade,  magic defence, magic evade to steam and change formula effet ?
Thanx you verry much ...
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Kefka on 2018-01-13 19:21:45
thanx you ^^
Is work.

Is possible change stats regular items arms and all armor stats,  attack, defence,  evade,  magic defence, magic evade to steam and change formula effet ?
Thanx you verry much ...

The stats of all equipment can be edited in the Inventory panel, including the healing amount of Potions, the damage formulas used by weapons, and other stuff like elemental properties, status attacks, abilities learned from the equipment piece etc.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: ste459 on 2018-01-15 19:58:35
Hi!

Still no way to stop ATB filling during animations? Actually the system the ATB work causes all status to be quite ineffective (too short duration) with high Spirit, and Regen to be horribly overpowered. No Way to fix this?

If fixing this is not possibile, it is possibile at least to manually increase the Regen healing interval?

Thanks in advance
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Incinerator on 2018-01-19 21:52:30
.
I am not sure that increasing the max values is safe. If the HP of a character is beyond 9999, it will display a bit strangely but work just fine. However, there might be more troublesome bugs.

What kind of bugs would this cause? Tried it and haven’t seen any yet.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-19 23:39:45
@ste459: Controlling the ATB that accurately is not possible with Hades Workshop. It is possible with Albeoris's Memoria but you'd need to recode part of the engine for that.
However it is indeed possible to increase the Regen frequency, with both HW and Memoria. In HW, you go to CIL Code, search for the method "btl_stat -> SetOprStatusCount" and remove that part of the code:
Code: [Select]
ldarg.0
ldfld 0x400022A // BTL_DATA::elem
ldfld 0x400080F // ELEMENT::wpr
sub
It's the four lines under a "ldc.i4.s 60". The Regen frequency formula is indeed "Frames to wait = (60 - wpr) << 2", which is, in a more standard writing, "(60 - Spirit) * 4". Removing these four lines will remove the spirit part so you will always regen with the same frequency (the overall duration is something else and will still increase though). You may change the number in "ldc.i4.s 60" to adjust it if you think it's too slow (or too fast).

@Incinerator: I was bugged by the task of giving a precise answer but replying to ste459 gave me one : if you use regen on a character with 60 spirit or more, the formula above goes to negative which can either mean regen will never trigger or it will trigger every single frame (having a quick look at the code, I would incline to the latter).
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Incinerator on 2018-01-20 00:29:52
I see thanks.
Is it possible to not make the sfxs no pitch with speed booster on?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-20 15:41:34
That one is in the method "SfxSoundPlayer::PlaySfxSound". You have, in the second half of the method, the following lines:
Code: [Select]
ldloc.1
conv.r4
ldloc.0
ldfld 0x40038A0 // SoundProfile::Pitch
mul
stloc.2
ldloc.0
ldloc.2
stfld 0x40038A0 // SoundProfile::Pitch
Remove the last 3 lines (ldloc.0, ldloc.2, stfld).
Surely that, because you don't have high pitch, you will still end up with weird sounds, with each one on top of the others. It's something to try but I'm not sure that the result will be satisfying.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Incinerator on 2018-01-20 20:06:43
It works! Thanks Tirlititi!
Does this tool also fix some of the broken sounds and missing enemy death sounds too?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-21 08:43:45
For the missing enemy deaths, the sound files are present in the assets and all is correctly setup except that they forgot to register these sounds in the meta-data. You need to replace one meta-data file in the resources.assets by this one:
https://www.dropbox.com/s/n3vt8hqv2f503c9/PC_DeathSoundFix.zip?dl=1

XenoBrain did a great job fixing the audio quality here:
http://steamcommunity.com/app/377840/discussions/0/353916838206972073/
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Incinerator on 2018-01-21 10:32:17
I see, thanks.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: ste459 on 2018-01-22 17:26:22
Thanks Tirlititi. I use PSX version of FF9, no way to edit this script for psx? I know that CIL code editing is available only for Steam Version.

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

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

can anyone help me?
image bellow
v
v
Spoiler: show
(https://preview.ibb.co/ky3E9G/error.png)


sorry bad english.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Kefka on 2018-01-25 16:08:28
So, I finally got around to buying the Steam version as well. First I thought I could just keep using the PSX version as it'll be essentially the same, but it seems that the steam version just offers so many more modding possibilities. My next step now is to import all my changes I already made to the PSX version to the steam version, and here I've got a couple questions:

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

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

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

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

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

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

In any case, a 3rd backup is not a bad idea, unless you don't mind downloading the game again in case of problems.

So do I get this right, whenever I save my changes on an unmodded file, it'll change every file in this entire FFIX folder, and then I have to copy each one of them over the original ones in the different FFIX folder that I will be using to play?

Thanks for your answers, and thanks again for your awesome work so far, tirlititi!
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-25 18:16:03
Hey Kefka :)

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

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

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

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

I see, too bad. I guess I'll just have to redo the changes I made to some enemy, spell and item names by manually going through all of them.

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

I've just googled around and it seems no one knows the reason for the indeed much lower encounter rate of the steam version. Damn, that's an even bigger bummer to my plans. So the only option is to manually go through each field and increase the encounter rate to somehow restore the battle frequency of the original PSX game (more or less)? That'll be quite tedious, but I guess there's no way around it if I don't want to remain constantly underleveled.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-25 21:33:02
Oh yes, I forgot about the enemies' spells. It's true that they are a pain to rename :/
You can also wait for an update that allows importing PSX text in Steam. That won't be the next one because it'd already be too much, but surely the one after. I plan on working on the texts a lot after the next update:
- conversion between PSX and Steam texts,
- easy way to edit the different languages,
- make the option "Edit similar enemies" apply to the spells as well.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Rosevalt on 2018-01-25 23:18:06
Hello Tirlititi,
I used HW on CSharp that already modified because HD Background mod I found on Steam. Maybe is that causing the problem?
Somehow I managed to edit the characters spells from spell tabs to create a completely new one. So i dont have to change every characters command just to use one specific spell I want. Hope you understand what I said. Again thank you so much For this tool.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-26 11:05:25
That may be because of that, yes. It is very easy to make your mods compatible with the HD backgrounds though. First of all, the CSharp is the only file causing problems: the p0data1X.bin are not problematic to HW. Then, for creating a mod that is compatible with HD backgrounds, open a non-modded game (or with only the p0data1X.bin swapped), go to the CIL Code -> Macros panel, then "Custom Backgrounds".
Once you're there, change the "Resolution" parameters from 32 (normal backgrounds) to 64 (upscaled backgrounds) and click on "Apply Macro". Now when you'll create the Steam Mod files, the CSharp.dll will also contain what is needed for the HD backgrounds.

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


Hi Tirliti, I have the same question of Kefka. Actually the only way to increase random battle encounter is to manually edit all fields with a random battle?

I've seen the code you posted on GameFaqs:

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

Could the problem be fixed by editing this code? And if so, how I can do this?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Kefka on 2018-01-27 13:55:49
That sounds good, I'll wait for an update then before I import texts.

Two more questions for you, Tirlititi:

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

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

Since you seem to know where this formula is, is it possible to edit it with the CIL code to increase the encounter rate in general (maybe lower the 960 like you suggested in that thread)? This would be far simpler than going through each field file individually.

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

Warning: I just saw that, in the CIL code, there's some "INVALID" lines, meaning that the method uses some assembly code that I didn't register for some reason.
When editing the method, also replace the last 5 lines by these (normally, IL_00A8 should point to the last "ldc.i4.0" and IL_00A9 to "ret"):
Code: [Select]
ldc.i4.0
beq.s IL_00A8
ldc.i4.1
br.s IL_00A9
ldc.i4.0
ret

For PSX saves, I think that gjoerulv's Memoria (http://forums.qhimm.com/index.php?topic=11494.0) tool can do the conversion.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Kefka on 2018-01-28 19:11:42
Thanks a ton, I'll definitely try that out! On another topic that ste459 has mentioned a couple posts ago, the Regen status:

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

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

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

@Incinerator: I was bugged by the task of giving a precise answer but replying to ste459 gave me one : if you use regen on a character with 60 spirit or more, the formula above goes to negative which can either mean regen will never trigger or it will trigger every single frame (having a quick look at the code, I would incline to the latter).

This find is certainly interesting, but does it apply to Regen only, or to Poison and Toxic statuses as well? Seeing as they work kinda similar...

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

ALso, sorry to bother you with so many questions, it's just that I've just begun exploring the steam version, as it seems to offer way more possibilities overall than the PSX version.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-28 21:54:07
No problem. I also had the reaction of "Damn! Steam version will just offer so much more possibilities" :p

So, for Venom and Poison's frequency, it's in the exact same method as Regen's freqency, sooner in the method. The formula is "Frames to wait = wpr << 2" instead (for both). You can add lines like "ldc.i4.s 10 ; mul" or "ldc.i4.s 10 ; add" if you want to play with it.
The formula's lines are these:
Code: [Select]
ldarg.0 // This is the 1st argument passed to the method, of type BTL_DATA ; it contains a character's (or enemy's) battle infos
ldfld 0x400022B // BTL_DATA::elem ; contains the statistics
ldfld 0x4000811 // ELEMENT::wpr ; spirit
ldc.i4.2 // Put the number "2" on the stack for later left shift
shl // LeftShift( spirit, 2 )
conv.u2 // Just a conversion to unsigned short integer
stloc.1 // Store the result in a variable (used later)

However, for the durations of the statuses, they are in 2 spots and it is not possible to edit either of them :/
- In "btl_stat::AlterStatus", a page before the end, there are 3 similar formulas "Duration = (60 - spirit) << 3" (for bad statuses and jump), "Duration = spirit << 3" for good ones and "Duration = spirit << 2" by default (it doesn't seem to be used). You can't edit this method because it's too big and CIL editing tends to bug with big methods.
- In FF9BattleDB (.ctor), there is the setup of "STAT_DATA", a class for status informations, including a multiplier used after the formulas I gave above. You can't modify the method because it's too big and anyway it is one of the few methods that are specially handled by HW and modified by other means.

Maybe in a next version I'll add these multipliers to things you can edit in "Party - Special".
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Kefka on 2018-01-29 15:01:38
I guess you're right, it's not necessary to be able to edit the whole method when one multiplier is really all we need. I'll eagerly await the next version, then.

About enemy names and enemy spell names: they all have some numbers in front of them in brackets, like [33,1] or [58,1] and such. Do they have a specific meaning? If I want to change enemy names manually, do I have to change these numbers too, or should I leave them be? Because I just found it strange that item names and regular ability names don't have these numbers in front of them.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-29 15:26:37
Those are the bubbles' size for dialogs (another features of the texts that is handled in PSX but not conveniently in Steam). By default, they are adjusted to the default text, but it's usually not important to edit them.
For enemy/spell names, it's useless and you can let them (or even remove them I think) ; for dialogs, I think the bubble sizes are automatically computed in some languages (at least that was the case in PSX), or maybe the vertical size (= number of lines) is automatically computed but not the horizontal size...
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Incinerator on 2018-01-30 00:24:14
Hi Tirlltiti, 3 questions:

1. where in CIL code “SfxSoundPlayer::PlaySfxSound” do I remove to make ever single sfx in game not pitch? The current lines I removed only affect the spells. This is beneficial to sounds fix.
2. will next update fix the copy/pasting bug of enemy spells in this version?

3. Made a new enemy recently, for setup I wanted to mimic the use of dummy AI exactly how Necron uses it. I got mostly everything on track; got Vaila Pira + 3 dummy targets, setup the corresponding spell attacks and correct spell animation for both Vaila Pira and the dummy targets. Copied the Dummmy_loop from Necron’s AI script to this one and allocated the same variable used.Tested it in battle and everything work perfect, the dummy targets weren’t targetable, they casted spells just like Necron battle. Problem is, when I defeat ValiabPira (new enemy) it dies, but the dummy targets still remain, casting spells. How do I get the battle to end after Valia Pira is defeated?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-01-30 12:10:49
Indeed, "Sfx" in FF9's code refers to sounds of battle special effects. They use "Vfx" for the visual of battle special effects as well.

So, for removing the pitch of every sound, go to "FF9Snd::IsShiftPitchInFastForwardMode" and replace the second-to-last line "ldc.i4.1" by "ldc.i4.0". With this, all the sounds will be unaffected by the fast forward booster. I couldn't find anything specific to the cinematics' musics so I think this will remove the fast forward for these as well.

For the next update, I'm currently in the phase of fixing bugs. I had to change a big part of the background system so it was all scrambled. Hopefully, I've fixed bugs about copy/pasting spells, and I'm fixing every bug that I see, but there's still the possibility that I miss some of them.

For the dummy battle, you have two choices. Either use "RunBattleCode( 33, 1 )" that will force the battle to end with a victory (you get exp/rewards from Valia Pira but none from the dummies), or use "set (SV_EnemyTeam & (~SV_FunctionEnemy))[HP] =$ 0" that will kill all the dummies and thus trigger victory (you also get rewards from the dummies).

In both cases, put the code after the Valia Pira's death animation, in his loop function:
Code: [Select]
    AttackSpecial( 9 ) // Death Animation
    while ( IsAttacking != 0 ) {
        Wait( 1 )
    }
    set SV_FunctionEnemy[DEFEATED_ON] =$ 1 // This line is here by default and is also needed
    // Put the line here
    return

EDIT @Rosevalt: Ok ! I found what was likely to be your problem. I know that you had a workaround but I still say it so that people know.
Some characters have one of their command linked to their trance command counterpart. All of that can be seen/modified in the "Stats" panel. It is useful for letting the trance spells learned at the same rate as the normal ones, like Zidane's Dyne which are learned along his Skills. However, it has a specific requirement (else, it soft locks in battle like what you had):
all the spells under the normal command must be present in the Ability Set (in the stats panel).

That means, since you modified the spells under the "Skills" command, you should have also replaced the spells in Zidane's Ability Set in the stats panel to match the difference.

I think that this behavior holds only for the Steam version: the PSX version shouldn't have this subtility.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Incinerator on 2018-01-30 22:29:36
It WORKED! Both of them! I followed each step and copy-pasted Valia Pira’s AttackSpecial - death animation, copied the last portion of Valia_Pira_loop (the if Hp less than 10,000) function and adjusted accordingly. Thanks Tirlititi!

edit:
how's the progress with a model importer? a thought came to me recently of 'animation possible problems' when importing a different model. Fearing, any model imported would be jumbled up in game, as the model imported hasn't been reskinned (rigged) to the current actor (ex. zidane's) bone structure. Unless HW model importer would have an auto rigging process during the import, that would rig any bipedal model being imported correctly to the bone structure of the character replacing target (ex. kuja to zidane, vice versa, etc.) thoughts?
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: Tirlititi on 2018-02-03 20:46:18
Quote
“And hast thou done the model importer?
Come to my arms, my beamish boy!
O frabjous day! Callooh! Callay!”
He chortled in his joy.

Update to v0.39 !
- Added the ability to import FBX models and/or animations in the Unity Assets Viewer,
- You can now also add new files in the game's archive instead of replacing existing ones,
- Added a first version of multi-language support (more below),
- Added the database for animations (thanks Satoh), making cutscene scripting much easier,
- Added a sound database for the enemy attack sequencing,
- Allow to add minimal comments when batch exporting scripts, for readability,
- Fixed a few bugs, including the copy/paste of enemies or their attacks ; be very careful if you used that feature in v0.38, your enemy's data is potentially corrupted (all the datas are wrong, such as a lvl of 157 or things like that).

So, the big thing of this update is the model importer. However, I will write about it in more details in my next post because - even if replacing an existing model by another can be easy - fully explaining how it works is a big wall of text. With the model importer, you can add/replace FBX models in the game, including adding/replacing animations.

Another big improvement is the first version of multi-language. Previously, you had to choose a language when opening a Steam game. As a side effect, you couldn't save mods compatible with multiple languages (nor .hws nor Steam modded files).
Now you can freely switch from one language to another by opening "File -> Preferences". You can also decide which languages you want to save (this applies to .hws files, Steam modded files and text batching). However, the loading time of several panels is increased because the data of all the languages is loaded. You have thus the possibility to decide, before opening a Steam game, to get in the old single-language mode, where only one language is loaded and you can't switch after opening the game anymore.

Now, this is only the first step of multi-language because, while you can make your mod and translate it one language by one,
1) It may be tedious to swap between languages each time you want to translate a name, description or dialog,
2) Remember that there are 2 things in HW that are language-dependant: the texts but also the script! If you modify enemy AIs or Field scripts, you need to do it for all the languages (at least those you want to be compatible).

So for the next release, I plan on reworking the text editing window (I'll use the occasion to handle these Steam text opcodes) to make the translations more convenient. I will also try, even if I'm not sure if it will be successful (fingers crossed), to add an "auto-translate" feature that can give a rough translation of your text. Of course, it will be nowhere as satisfying as a real translation but it will already be something for those who want their mod compatible in any language and don't have access to translators in all the 7 languages supported by the game.

For multi-language script editing, I think I will be able to identify scripts that are identical or very close to be identical in different languages (except for the dialog text IDs, most of the Field scripts are the same in all languages and nearly all the AI are the same). Then you can do the job only once.

Also, before moving to model importer, there's a little thing you should know about adding new assets through the Unity Assets Viewer:
- For now, you can't remove assets, only add more,
- In most cases, when you add an asset, you must check the "Bundle Info" option and add a path to your asset (something like "assets/custom_resources/my_image.png"). For making the game use your asset directly, you must refer to that path in the game's engine code,
- Because of the previous remark, you can't add a whole new asset using HW only (you can't edit the strings in the game's engine code with HW). You must use Albeoris's Memoria tool for that... but Memoria is incompatible with HW right now... However, Memoria is not incompatible with the Unity Assets Viewer so you may still decide to use HW for extracting/replacing/adding assets, give up the other features of HW and use Memoria for engine modding. Hopefully one day there will be full compatibility but I don't see that day coming anytime soon.

There's an exception for that last remark: a few dummied assets are referenced in the game's engine code but they are missing from the archives. For instance, there is a field, surely meant to be another version of the "Alexandria Castle/Public Seats" that is referenced in the game's code, has a valid ID and path to access to it and even a very small Field script file (in p0data7.bin) but no background or walkmesh. You might be able to use it for adding 1 field without replacing any other. Here are his specs:
Code: [Select]
Field ID (to use in the Field script): 1805
Event files name (file containing its Field script): EVT_ALEX3_AC_SEAT_N
Background files name (background files to add in the archive p0data11): FBG_N02_ALXC_MAP038_AC_AST_0
Since you won't be able to edit that field's script in HW, you'd need to use another field as a temporary container, do all the changes you want on that field, export its files - event files (ie. script) from p0data7, and background files (ie. .bgs, .bgi and atlas texture from p0data1X) - and add them back with adjusted names (since there's already a script file, you only need to replace it, not add).

Likewise, there seems to be unused animations that you can add without the need to change the engine's code. It's a matter I will develop in my next message.

EDIT: I will write that message tomorrow.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-03 23:42:40
TIRLITITI! I FREAKING LOVE YOU!!

- In most cases, when you add an asset, you must check the "Bundle Info" option and add a path to your asset (something like "assets/custom_resources/my_image.png"). For making the game use your asset directly, you must refer to that path in the game's engine code,

If you know, where [in Memoria] do I locate an assets's (3d model) direct path in the game engine code? And does editing such path edit the Csharp file or the corresponding .bin file?
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-04 14:03:48
So, here is how to use the model importer. I guess it will answer your questions, Incinerator ;)

Intro A - Supported Model Formats
You can only import FBX Binary and FBX ASCII files properly, much like exporting. Encrypted FBX are not supported. In general, the other formats have problems with animations or even bones so you should always convert your models to FBX beforehand. 3DS Max is the normal program you would need to create/edit models that can be imported, but it's not free. There is a free version, called Gmax, but I'm not sure if it supports FBX versions that are recent enough. Also, FBX ASCII format is a text file that can be edited with Notepad but it's tedious and won't bring you very far.
The FBX versions supported are:
- FBX ASCII versions 5, 6 and 7 up to 7.4
- FBX Binary versions 5 and 6 up to 6.1

Also, only (polygonal) Meshes are supported. No Nurbs, no Patches.
The Tangents, Normals and - more importantly - the UV coordinates must be stored by Control Points (not by Polygon vertex). I guess it's a simple setting to check in 3DS Max.

For animations, I wasn't able to import properly the Bezier interpolation data: animations will have a close-to-linear interpolation (it usually doesn't look very different).

Note that texture animations are not supported yet. They are stored in different files for which I didn't investigate the format.
And also, some animations have sounds in-game, like footsteps or a sword unsheathing. These are not inside the animation's data but in the Field script codes (usually either in the object's "Init" function, or in its "Reinit" function).

Intro B - The options
In the Unity Assets Viewer, you have the following options for importing models:

-) Only Update Existing Nodes: You will surely have no interest in this function except in very specific situations. It expects the imported model to have exactly the same nodes (mostly bones) as the one in-place. It popups a warning if not. Using this option, you're 100% sure that no new asset will be imported when you replace a model.
-) Update Existing and Import New: The default one. It will compare the hierarchy of the new model with the old one and keep as much as it can from the old one, adding a minimal number of assets to the archive.
-) Import All Nodes in New Files: With this, except for the top-level GameObject (the file selected), all the nodes of the new models will be imported in new assets. When you add a whole new model, that's also what happens except that the top-level GameObject is also new in that case.

-) Keep Unused Nodes: Doesn't remove any asset, even if they become dummied and unusable after replacing a model.
-) Delete Unused Nodes: Clean up the assets that are not used anymore after replacing a model. This option is not implemented yet and the only way to remove assets is to replace the whole Unity archive by a backup (or download it back).

-) Import Mesh/Material: Import the geometry, skeleton, material, UV mapping, etc... You may uncheck this option if you only want to update a model's animations and speed up the process.
-) Import Animations: Import the animations in the p0data5.bin archive file (the one dedicated to the game's animations). You may unckeck this if you only update the geometry, etc...

Also, you'll need to import/update the textures separatly. If you add new textures, you must check the "Bundle Info" flag and give it a path (anything not already used will be fine). Besides that, you must choose the options for Image Quality Conversion. The main ones are:
-) RGB: Full quality images without alpha channel,
-) RGBA: Full quality images with alpha channel, resulting in bigger files,
-) DXT5 - Medium Quality: Compressed images with DXT5 format, resulting in low-sized files. Medium quality is fast and still very good,
-) DXT5 - High Quality: A slightly better quality than the previous one, with the same file size but slower to process.

If the "Default Compression Method" is checked when importing new files, the RGBA format will be used (when replacing existing textures, this option use the same compression as the old texture).

I - Replacing an existing model with existing animations
The easiest thing to do is to replace a model and don't add more animations than those already there. I've tested the model importer on the models of the p0data4 archive only (the most important one). There are also the weapon models (I think it should work) and Battle Scenes (maybe it won't work) in p0data2, and World Map model in p0data3. That last one can't be replaced and can't even be exported properly for now (it mainly consists of plenty of .prefab files, that are parts of the ground and I didn't investigate how all these parts are placed to draw the big thing).

The importing option for this should be either "Only Update Existing Nodes" or "Update Existing and Import New".
The animations of your model must match with the old model's animation internal names ("ANH_" something ; that's the names of the animations when you export the old model).

First, if you use a new texture, you must start by importing that texture. In the same archive as your model (surely p0data4), right-click on the asset list and select "Add". Once you selected your texture, choose "Texture2D" as the file type, give it a name and give it a Full Name. The Full Name is not very important but remember what you chose and be sure to use a full name that is not already used.
Typically, Full Names of the models' textures are "assets/resources/models/[MODEL_TYPE]/[MODEL_ID]/[MODEL_ID]_[TEXTURE_NUMBER].png".
Also, it may be a good idea to remember what was the Internal File ID.

Once you have all the textures set, verify that your updated model is placed in the "HadesWorkshopAssets" folder at the right place and with the right name. It must be at the same place as where the model is exported with the Unity Assets Viewer.
Right-click on the model you want to replace (Reminder: the relevant asset is the one of type "1 (GameObject)" and with the .fbx extension in his file name) then "Import Selection".
Warning: due to a bug that will take a little time to fix, you should never import more than 1 model at a time.
It is possible that the program will ask you to select the texture assets. Select the texture in the asset list or you may also copy/paste the file internal ID that was used when adding that texture.

Then wait for it and it's done!

If the program popups the window for importing assets, displaying the animation names of your model, that means you have more animations than expected and/or they don't have the right names. If your goal was not to add new animations but only replace existing ones, you can choose Full Names that you'll remember and confirm the importations. Then go in the archive "p0data5", export the .anim assets that you just added, identify the animations of the old model and replace them by the .anim you just exported (rename them with the right name and move them in the right folder, like for replacing the model).
You may also hit "Cancel" when the popups for importing new animations appears: it will cancel the update of all the animations and only update the model instead.

If your new model is lacking animations, the related old ones won't be modified at all and will still be valid.

I bis - Adding a new animation by taking advantage of dummied data
If the model you want to update as dummied animations, you can do exactly the same as in I and still add one or a few animations.
The dummied animations appear in the Field script animation list with the description "Unexisting". They are registered by the game's engine and only await to have a related asset to be usable. Here is a list of dummied animations:
Code: [Select]
// Enemy Basilisk
5458, 379, "ANH_MON_B3_011_B", "Unexisting B"
// Enemy LizardMan
5459, 390, "ANH_MON_B3_019_B", "Unexisting B"
// Enemy Carve Spider
5460, 376, "ANH_MON_B3_021_015", "UnexistingA"
5460, 360, "ANH_MON_B3_021_040", "UnexistingB 1"
5460, 366, "ANH_MON_B3_021_041", "UnexistingB 2"
5460, 354, "ANH_MON_B3_021_042", "UnexistingB 3"
// Enemy Clipper
150, 8693, "ANH_MON_B3_039_P", "Unexisting P"
// Enemy Blazer Beetle
84, 9257, "ANH_MON_B3_042_B", "Unexisting B"
// Enemy Cactuar
244, 9239, "ANH_MON_B3_061_B", "Unexisting B"
244, 9900, "ANH_MON_B3_061_TEST", "Unexisting Test"
// Enemy Valia Pira
354, 9340, "ANH_MON_B3_130_B", "Unexisting B"
354, 13578, "ANH_MON_B3_130_ILLUST","Unexisting Illust"
354, 8833, "ANH_MON_B3_130_P", "Unexisting P"
354, 13581, "ANH_MON_B3_130_TEST", "Unexisting Test"
// Enemy Vivi
558, 12302, "ANH_MON_B3_151_001", "UnexistingA"
558, 12306, "ANH_MON_B3_151_005", "UnexistingB"
558, 9675, "ANH_MON_B3_151_B", "Unexisting B"
558, 9677, "ANH_MON_B3_151_P", "Unexisting P"
// Enemy Dagger
671, 9957, "ANH_MON_B3_169_002", "Unexisting"
// Enemy Freya
297, 10317, "ANH_MON_B3_174_B", "Unexisting B"
297, 10319, "ANH_MON_B3_174_P", "Unexisting P"
// Enemy Gigan Toad B
663, 8374, "ANH_MON_B3_197_034", "Unexisting"
// Battle Steiner B
655, 6744, "ANH_MAIN_B0_018_000", "Unexisting 000"
655, 6746, "ANH_MAIN_B0_018_001", "Unexisting 001"
655, 6747, "ANH_MAIN_B0_018_002", "Unexisting 002"
655, 6750, "ANH_MAIN_B0_018_010", "Unexisting 010"
655, 6752, "ANH_MAIN_B0_018_011", "Unexisting 011"
655, 6753, "ANH_MAIN_B0_018_020", "Unexisting 020"
655, 6755, "ANH_MAIN_B0_018_021", "Unexisting 021"
655, 6758, "ANH_MAIN_B0_018_022", "Unexisting 022"
655, 6759, "ANH_MAIN_B0_018_023", "Unexisting 023"
655, 6761, "ANH_MAIN_B0_018_032", "Unexisting 032"
655, 6763, "ANH_MAIN_B0_018_033", "Unexisting 033"
655, 6766, "ANH_MAIN_B0_018_040", "Unexisting 040"
655, 6768, "ANH_MAIN_B0_018_050", "Unexisting 050"
655, 6769, "ANH_MAIN_B0_018_100", "Unexisting 100"
655, 6771, "ANH_MAIN_B0_018_101", "Unexisting 101"
655, 6774, "ANH_MAIN_B0_018_102", "Unexisting 102"
655, 6776, "ANH_MAIN_B0_018_103", "Unexisting 103"
655, 6777, "ANH_MAIN_B0_018_104", "Unexisting 104"
655, 6779, "ANH_MAIN_B0_018_105", "Unexisting 105"
655, 6782, "ANH_MAIN_B0_018_200", "Unexisting 200"
655, 6784, "ANH_MAIN_B0_018_201", "Unexisting 201"
655, 6785, "ANH_MAIN_B0_018_202", "Unexisting 202"
655, 6787, "ANH_MAIN_B0_018_210", "Unexisting 210"
655, 6789, "ANH_MAIN_B0_018_220", "Unexisting 220"
655, 6791, "ANH_MAIN_B0_018_300", "Unexisting 300"
655, 6794, "ANH_MAIN_B0_018_310", "Unexisting 310"
655, 6795, "ANH_MAIN_B0_018_400", "Unexisting 400"
655, 6797, "ANH_MAIN_B0_018_401", "Unexisting 401"
655, 6799, "ANH_MAIN_B0_018_402", "Unexisting 402"
655, 6802, "ANH_MAIN_B0_018_410", "Unexisting 410"
655, 6803, "ANH_MAIN_B0_018_420", "Unexisting 420"
655, 6805, "ANH_MAIN_B0_018_430", "Unexisting 430"
655, 6807, "ANH_MAIN_B0_018_500", "Unexisting 500"
655, 6809, "ANH_MAIN_B0_018_501", "Unexisting 501"
655, 6812, "ANH_MAIN_B0_018_600", "Unexisting 600"
// Unexisting Battle model 002
568, 12511, "ANH_MAIN_B2_003_ALL", "Unexisting All"
// Unexisting Battle model Cam
649, 14461, "ANH_MAIN_B2_CAM_011_1ST", "Unexisting 1st"
649, 14460, "ANH_MAIN_B2_CAM_011_2ND", "Unexisting 2nd"
649, 14463, "ANH_MAIN_B2_CAM_011_DOWN", "Unexisting Down"
649, 14458, "ANH_MAIN_B2_CAM_011_END", "Unexisting End"
649, 14451, "ANH_MAIN_B2_CAM_011_JUMP", "Unexisting Jump"
649, 14454, "ANH_MAIN_B2_CAM_011_OPENING", "Unexisting Opening"
649, 14455, "ANH_MAIN_B2_CAM_011_RUN", "Unexisting Run"
649, 14462, "ANM_MAIN_B2_CAM_011_1ST", "Unexisting 1st"
649, 14459, "ANM_MAIN_B2_CAM_011_2ND", "Unexisting 2nd"
649, 14464, "ANM_MAIN_B2_CAM_011_DOWN", "Unexisting Down"
649, 14457, "ANM_MAIN_B2_CAM_011_END", "Unexisting End"
649, 14452, "ANM_MAIN_B2_CAM_011_JUMP", "Unexisting Jump"
649, 14453, "ANM_MAIN_B2_CAM_011_OPENING", "Unexisting Opening"
649, 14456, "ANM_MAIN_B2_CAM_011_RUN", "Unexisting Run"
// Unexisting Battle model 001
29, 838, "ANM_MAIN_B2_001", "Unexisting 001"
// Gargant
306, 4650, "ANH_ACC_F1_GRG_B", "Unexisting B"
306, 6132, "ANH_ACC_F1_GRG_RUN_1F", "Unexisting Run_1f"
// Zidane
98, 179, "ANH_MAIN_F0_ZDN_JUMP1", "Unexisting Jump1"
// King Leo
5501, 1135, "ANH_SUB_F1_BAK_ANXIETY_3", "Unexisting Anxiety_3"
5501, 9435, "ANH_SUB_F1_BAK_B", "Unexisting B"
5501, 9154, "ANH_SUB_F1_BAK_P", "Unexisting P"
// Puck
121, 2195, "ANH_NPC_F0_RTC_SK_ANGRY", "Unexisting Sk_Angry"
121, 2192, "ANH_NPC_F0_RTC_SK_CRUSH", "Unexisting Sk_Crush"
121, 2183, "ANH_NPC_F0_RTC_SK_GET_LD", "Unexisting Sk_Get_Ld"
121, 2193, "ANH_NPC_F0_RTC_SK_GO_UP1_LD", "Unexisting Sk_Go_Up1_Ld"
121, 2194, "ANH_NPC_F0_RTC_SK_GO_UP2_LD", "Unexisting Sk_Go_Up2_Ld"
121, 2187, "ANH_NPC_F0_RTC_SK_HURRY_UP_LD","Unexisting Sk_Hurry_Up_Ld"
121, 2177, "ANH_NPC_F0_RTC_SK_IDLE", "Unexisting Sk_Idle"
121, 2184, "ANH_NPC_F0_RTC_SK_IDL_LD", "Unexisting Sk_Idl_Ld"
121, 2188, "ANH_NPC_F0_RTC_SK_LIFT_LD", "Unexisting Sk_Lift_Ld"
121, 2191, "ANH_NPC_F0_RTC_SK_PUT_LD", "Unexisting Sk_Put_Ld"
121, 2181, "ANH_NPC_F0_RTC_SK_ROGER", "Unexisting Sk_Roger"
121, 2186, "ANH_NPC_F0_RTC_SK_RUN", "Unexisting Sk_Run"
121, 2190, "ANH_NPC_F0_RTC_SK_RUN_LD", "Unexisting Sk_Run_Ld"
121, 2182, "ANH_NPC_F0_RTC_SK_TURN_", "Unexisting Sk_Turn_"
121, 2179, "ANH_NPC_F0_RTC_SK_TURN_L_LD", "Unexisting Sk_Turn_L_Ld"
121, 2185, "ANH_NPC_F0_RTC_SK_TURN_R", "Unexisting Sk_Turn_R"
121, 2180, "ANH_NPC_F0_RTC_SK_TURN_R_LD", "Unexisting Sk_Turn_R_Ld"
121, 2196, "ANH_NPC_F0_RTC_SK_WALK", "Unexisting Sk_Walk"
121, 2189, "ANH_NPC_F0_RTC_SK_WALK_LD", "Unexisting Sk_Walk_Ld"
121, 2178, "ANH_NPC_F0_RTC_SK_WHICH_LD", "Unexisting Sk_Which_Ld"
The first number is the MODEL_ID, the second number is the ANIM_ID, the "ANH_" string is the internal animation name and the last string is the description as you find it in the field script.
So, in order to import one of these animations, do like in section I, but expect for a window to popup to import the new animation. As a full name, use the following:
assets/resources/animations/[MODEL_ID]/[ANIM_ID].anim

For instance, if you have a whole new animation to Zidane, import it with the full name "assets/resources/animations/98/179.anim". Then, in the field script, you can use the animation ID 179 to refer to it (in a "RunAnimation" line for instance).

Note that:
- There are also dummied models. I guess that you can use these as well in order to import a whole new model without the need to change the engine's code. I didn't try it though.
- there are other "dummied" animations: somes are described as "Unused", meaning that they exist and are all good, but never used in the game (unless I missed something). For now, only the animations of the enemy models were spotted as "Unused" ; some animations of the field models may be unused but not flagged (I know that Steiner at least has an unused animation that I used in AF). There are also "Dummy" animations, which means one thing: it's a very quick animation consisting of only 2 frames. Most of the time ("Dummy P", "Dummy B"...), they are also unused in the sense that they are default animations that are never actually played in-game. You can replace them as well without any regrets.

II - Importing whole new animations
Do the same as in section I, but be sure to use the following when asked to import your new animations:
assets/resources/animations/[MODEL_ID]/[NEW_ANIM_ID].anim

The NEW_ANIM_ID should be some unused animation ID. I think that it's safe to use any number between 20000 and 30000.

Once you've done that, you also need to register the animation in the engine's database. In the engine's source code (available through Albeoris's Memoria tool), go in the class "FF9DBAll". There is a Dictionary definition that takes most of the class's script:
public static Dictionary<int, string> AnimationDB

In this dictionary, add the following entry:
Code: [Select]
{ [NEW_ANIM_ID], [NEW_ANIM_STRING_ID] },
The NEW_ANIM_ID is the one you've already chosen. The NEW_ANIM_STRING_ID must follow some pattern:
ANH_[MODEL_SHORT_STRING_ID]_[Anything you want that's not already used]

The MODEL_SHORT_STRING_ID is like "MAIN_ZDN" or something. You can easily retrieve it because all the animations of that same model share the same part. You can thus search for another animation ID that belongs to the same model.

III - Importing a whole new model
Do the same as in section I (in particular, don't forget to add your model's texture first). You must import the model with the GameObject type and the following full name:
assets/resources/models/[TYPE]/[NEW_MODEL_ID]/[NEW_MODEL_ID].fbx

The full names of the animations must also follow the same pattern as in section II (with your NEW_MODEL_ID instead).

The TYPE is 1, 2, 3, 4 or 5 depending on whether the model type is an Accessory, a "Main" model, an Enemy, a NPC or a "Sub" model. Main models are typically the main characters' field models. Sub models are pretty much the remains. I don't think the model type has such an importance but you should remember what is your choice.
Also, in p0data2, there's a TYPE of 6 for Weapon models.

NEW_MODEL_ID must be an unused one. You can choose it between 6000 and 10000 without problem normally.

Then, you must register the model in the engine's code. This time, it's in the class "FF9BattleDB". There's the following dictionary:
public static Dictionary<int, string> GEO

Add an entry to it:
Code: [Select]
{ [NEW_MODEL_ID], "GEO_[MODEL_SHORT_STRING_ID]" },
The MODEL_SHORT_STRING_ID must itself follow a pattern:
[TYPE_STR]_[F/B/W][VERSION]_[Anything you want that's not already used]

TYPE_STR must be either one of these depending on the chosen model's type:
ACC, MAIN, MON, NPC, SUB, WEP

F/B/W is one letter depending on whether it's supposed to be a Field model, a Battle model or a World model. It doesn't seem too strict as some Battle models are also used inside Fields.

VERSION is a 1-digit number ; I'm not sure what it corresponds to...

The tail of the string ID can be anything you want without special character.
Example:
Code: [Select]
{ 6000, "GEO_MAIN_F0_RED_DOG" },
This model's animations must use the same pattern as in section II but with the MODEL_SHORT_STRING_ID that you've chosen.
Example:
Code: [Select]
{ 20000, "ANH_MAIN_F0_RED_DOG_TALK" },
{ 20001, "ANH_MAIN_F0_RED_DOG_RUN" },
etc...

IV - Using a whole new model and/or animation in-game
Now, hopefully, everything is correctly set but if the animation or the model never appear in-game, that wasn't worth it.

If your model/animation is supposed to be used in a Field or in a World Map, you can simply edit the script of this Field/World Map in Hades Workshop and use these assets in "SetModel" or "RunAnimation" lines. You only need to have a list of the IDs next to you because new models and new animations won't appear in the drop-list menu (unless it was "Unexisting") and you need to write the ID yourself.

However, since Hades Workshop and Memoria are not compatible, you'll need to do that on a fresh backup of your game, without Memoria installed. Then, export the mod as Steam files ; it will create a p0data7.bin archive that contains the script. You may either extract the script asset out of it using the Unity Assets Viewer (in the archive p0data7, there are descriptions that should be more than enough to spot the right asset corresponding to the Field script) or, even simpler, just replace the whole p0data7.bin file of the Memoria-modded game (but it will replace all the scripts at once so it can cancel other changes if that's not the first time you replace it).

You can't use new models/animations for enemies yet. I'm also planning on enabling it for the next version.
Finally, using other animations for the party's characters is all done in the game's engine. Maybe I'll describe how to do it another day.

I didn't lie when I said it would be a wall of text  :evil:
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: LeonhartGR on 2018-02-04 14:37:08
I'm so glad you have progressed so much with this! It's really hopeful that there is a way to import new models and animations now! I'm looking forward to any mod work on this!
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-04 18:21:48
JESUS!! What a read!Thanks for the immerse work in making it possible, Tirlititi!

I tried to pace through each step slowly to understand it all; no doubt, though, HW crashes during my first attempt to import the new .fbx

So, I followed all steps from -I - Replacing an existing model with existing animations- very carefully; got all the textures of my new model that uses for GameObject for the main model Zidane into the archive: p0data4.bin

(https://s9.postimg.org/70ztozhz3/zidane_custom_all_my_Textures.jpg)


I want to think it's coming down to my .fbx model, but can't tell for sure. I exported my .fbx using Metasequoia 4 as ASCII FBX version 7.4 (contents opened from text editor):

Code: [Select]
; FBX 7.4.0 project file
; ----------------------------------------------------

FBXHeaderExtension:  {
FBXHeaderVersion: 1003
FBXVersion: 7400
CreationTimeStamp:  {
Version: 1000
Year: 2018
Month: 2
Day: 4
Hour: 10
Minute: 43
Second: 44
Millisecond: 584
}
Creator: "FBX SDK/FBX Plugins version 2018.1.1"
SceneInfo: "SceneInfo::GlobalInfo", "UserData" {
Type: "UserData"
Version: 100
MetaData:  {
Version: 100
Title: ""
Subject: ""
Author: ""
Keywords: ""
Revision: ""
Comment: ""
}
Properties70:  {
P: "DocumentUrl", "KString", "Url", "", "C:\Users\Dwight\Desktop\ZACH\98.fbx"
P: "SrcDocumentUrl", "KString", "Url", "", "C:\Users\Dwight\Desktop\ZACH\98.fbx"
P: "Original", "Compound", "", ""
P: "Original|ApplicationVendor", "KString", "", "", ""
P: "Original|ApplicationName", "KString", "", "", ""
P: "Original|ApplicationVersion", "KString", "", "", ""
P: "Original|DateTime_GMT", "DateTime", "", "", ""
P: "Original|FileName", "KString", "", "", ""
P: "LastSaved", "Compound", "", ""
P: "LastSaved|ApplicationVendor", "KString", "", "", ""
P: "LastSaved|ApplicationName", "KString", "", "", ""
P: "LastSaved|ApplicationVersion", "KString", "", "", ""
P: "LastSaved|DateTime_GMT", "DateTime", "", "", ""
}
}
}
GlobalSettings:  {
Version: 1000
Properties70:  {
P: "UpAxis", "int", "Integer", "",1
P: "UpAxisSign", "int", "Integer", "",1
P: "FrontAxis", "int", "Integer", "",2
P: "FrontAxisSign", "int", "Integer", "",1
P: "CoordAxis", "int", "Integer", "",0
P: "CoordAxisSign", "int", "Integer", "",1
P: "OriginalUpAxis", "int", "Integer", "",-1
P: "OriginalUpAxisSign", "int", "Integer", "",1
P: "UnitScaleFactor", "double", "Number", "",1
P: "OriginalUnitScaleFactor", "double", "Number", "",1
P: "AmbientColor", "ColorRGB", "Color", "",0,0,0
P: "DefaultCamera", "KString", "", "", "Producer Perspective"
P: "TimeMode", "enum", "", "",0
P: "TimeProtocol", "enum", "", "",2
P: "SnapOnFrameMode", "enum", "", "",0
P: "TimeSpanStart", "KTime", "Time", "",0
P: "TimeSpanStop", "KTime", "Time", "",46186158000
P: "CustomFrameRate", "double", "Number", "",-1
P: "TimeMarker", "Compound", "", ""
P: "CurrentTimeMarker", "int", "Integer", "",-1
}
}

; Documents Description
;------------------------------------------------------------------

Documents:  {
Count: 1
Document: 127362160, "My Scene", "Scene" {
Properties70:  {
P: "SourceObject", "object", "", ""
P: "ActiveAnimStackName", "KString", "", "", ""
}
RootNode: 0
}
}

; Document References
;------------------------------------------------------------------

References:  {
}

; Object definitions
;------------------------------------------------------------------


Placed all .png textures and the .fbx in the correct position where the old (Zidane) .fbx was exported from:

(https://s9.postimg.org/9v2z2fcfj/import_PATH.jpg)

I select GameObject for the main model Zidane, right click and select import selection.

I got the pop up window prompting me to select the texture assets; I did so for all of them as such.

Code: [Select]
assets/resources/models/2/98/98_2.png

ID: 7FFD1E8B51DB44F3

assets/resources/models/2/98/98_3.png

ID 7FFD1E8B51DB44F4

assets/resources/models/2/98/98_4.png

ID 7FFD1E8B51DB44F5

assets/resources/models/2/98/98_5.png

ID 7FFD1E8B51DB44F6

assets/resources/models/2/98/98_6.png

ID 7FFD1E8B51DB44F7

assets/resources/models/2/98/98_7.png

ID 7FFD1E8B51DB44F8

assets/resources/models/2/98/98_8.png

ID 7FFD1E8B51DB44F9

assets/resources/models/2/98/98_9.png

ID 7FFD1E8B51DB44FA

assets/resources/models/2/98/98_10.png

ID 7FFD1E8B51DB44FB

assets/resources/models/2/98/98_11.png

ID 7FFD1E8B51DB44FC

assets/resources/models/2/98/98_12.png

ID 7FFD1E8B51DB44FD

assets/resources/models/2/98/98_13.png

ID 7FFD1E8B51DB44FE

assets/resources/models/2/98/98_14.png

ID 7FFD1E8B51DB44FF

assets/resources/models/2/98/98_15.png

ID 7FFD1E8B51DB4500

assets/resources/models/2/98/98_16.png

ID 7FFD1E8B51DB4501

assets/resources/models/2/98/98_17.png

ID 7FFD1E8B51DB4502

assets/resources/models/2/98/98_18.png

ID 7FFD1E8B51DB4503

assets/resources/models/2/98/98_19.png

ID 7FFD1E8B51DB4504

assets/resources/models/2/98/98_20.png

ID 7FFD1E8B51DB4505

assets/resources/models/2/98/98_21.png

ID 7FFD1E8B51DB4506

assets/resources/models/2/98/98_22.png

ID 7FFD1E8B51DB4507

assets/resources/models/2/98/98_23.png

ID 7FFD1E8B51DB4508

assets/resources/models/2/98/98_24.png

ID 7FFD1E8B51DB4509

assets/resources/models/2/98/98_25.png

ID 7FFD1E8B51DB450A

assets/resources/models/2/98/98_26.png

ID 7FFD1E8B51DB450B

Then I hit OK, and Hades Workshop crashes.

So with all of this, I believe I can narrow it down to my new .fbx being the problem area. It's got me baffled; I'm still testing on it.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-04 18:51:43
Urgh.
Maybe it's because the UV are refered by Polygon Vertex?
Search in your .FBX the lines "MappingInformationType". What do they say? (ByVertice, ByPolygonVertex, ByPolygon...)
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-04 19:10:23
I also am not importing any animations at all.
Alright, checking UVs...

EDIT:
Alright MappingInformationType says: ByPolygonVertex.

Code: [Select]
}
GeometryVersion: 124
LayerElementNormal: 0 {
Version: 102
Name: ""
MappingInformationType: "ByPolygonVertex"
ReferenceInformationType: "Direct"
Normals: *39258 {

those are my export setting from Metasequoia 4.
(https://s9.postimg.org/rmj6upwof/metaout.png)
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-04 20:31:24
Yeah, that's the problem (at least that's A problem). I don't know how to change that setting in Metasequoia. That's not on the window you're displaying.
Do you have the free version or the licensed version of Metasequoia? I may look at it.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-05 03:04:19
I have GOUGE my eyes out trying to fix the UV from 'ByPolygonVertex' to 'eBY_CONTROL_POINT'; feel asleep on it I did, jesus.

Yes, the is a free version of Metasequoia 4. on their site: Metasequoia 4 (http://metaseq.net) you can get a trial (it's under the tab: "Purchase"; fill out the simple form and it'll email you the trial info to enter when you start the program; which lasts for a month and can be renewed after every month if needed~it unlocks ALL features in Metasequoia 4 too.

And by "polygonal meshes only" I presume you mean the model should appear more like this:

(https://s9.postimg.org/sge66i6kv/DC_523_polygon.png)

Rather than this:

(https://s9.postimg.org/fp00004in/DC_523_potential_Smoothing_On.png)

Based off how the extracted old_Zidane appears.

edit:
some datas in the original .fbx are too precise
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: LeonhartGR on 2018-02-05 07:53:30
That is really impressive! I'm quite positive you will end up with a convenient solution. Why don't you come over the Discord qhimm servers and discuss this in real time! Thank you guys for trying to achieve the impossible until this moment. I'm excited!
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-05 09:26:46
And about normals too; a glaring surprise to me as well;
does normals that display like this:

(https://s9.postimg.org/n222d6e8f/Untitled.png)

cause issue in HW import?

edit:
well, changing "ByPolygonVertex" to "ByVertice" in the text editor didn't work. Scratch that off the list.
I also tried exported the old zidane, then reimporting it back for tests; and HW imported it, yet the game crashes when initiating main Zidane model.
Would it be possible to remove some of these specific points in .fbx? like with the removal of akb header in audio.
Title: Re: [FF9] General editor - Hades Workshop (0.38)
Post by: ste459 on 2018-02-05 21:37:11
However it is indeed possible to increase the Regen frequency, with both HW and Memoria. In HW, you go to CIL Code, search for the method "btl_stat -> SetOprStatusCount" and remove that part of the code:
Code: [Select]
ldarg.0
ldfld 0x400022A // BTL_DATA::elem
ldfld 0x400080F // ELEMENT::wpr
sub
It's the four lines under a "ldc.i4.s 60". The Regen frequency formula is indeed "Frames to wait = (60 - wpr) << 2", which is, in a more standard writing, "(60 - Spirit) * 4". Removing these four lines will remove the spirit part so you will always regen with the same frequency (the overall duration is something else and will still increase though). You may change the number in "ldc.i4.s 60" to adjust it if you think it's too slow (or too fast).

Got Steam version and tested, it worked perfectly! Thanks, as usual.
Do you know if changing this CIL code entry could mess up something else? Or this lines affects only the Regen effect?
I have made a bit of testing but didn't seen any other alteration for now.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-06 03:57:17
Alright, I'm stumped, I have no way of getting the UV coordinates of .fbx to be by "Control Point" ("ByVertice" I assume it's called in the text editor metadata). Now, if I change all " ByPolygonVertex" in text editor, save it, open it in either 3ds Max, or Metasequoia, the UV textures are messed up. (try importing in Unity Assets Viewer still crashes HW workshop). I also don't know of any .fbx explorers that will show me clearer of all the data about my .fbx that need to match the relative format of FF9 .fbx. (No mesh smoothing etc.)
I know of no setting in 3ds max that will convert my model's UV coordinates to "ByVertice"~"Control Points".
Also, I don't know if importer will auto-scale my model to right size in game either. So it doesn't appear too large or too small. I not need to import any animations or add anything new, just replace.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-06 07:35:07
So, @Incinerator:
You can't just replace the Mapping Information Type by another ; each type means that the datas are sorted differently (and usually not at the same place in the file). I'm also worried about that Zidane export/reimport as it shouldn't bug in-game. I'll test that today.
What I'm sure of, is that exporting/reimporting the moogle's book works perfectly, as well as the Grimmlock enemy model. Can you try one of these? If that doesn't work, then your archive must be corrupted somehow. If I can't export/reimport Zidane, I'll have something to work with and I can catch where the problem comes from.

Normals are good as they are in your screenshot. That's many polygons but there shouldn't be any data size restriction on the new model.
For the scale, the game expects models of size ~100. It's the same unit as the position in Fields, for instance. So a 100 radius scaled model is quite small, but still visible. For human-sized models, you'd take a height of ~700.

@ste459: Glad to hear that this works at least ^^
There shouldn't be any bug with changing this formula, as long as the frequency is positive. And these lines are only for the Regen frequency.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-06 07:55:36
Alright, Tirlititi
I have exported and reimported the Grimlock enemy and the game still crash.

with these settings active in HW:

(https://s9.postimg.org/rv4d1huen/image.png)

Am I to use 3ds Max to change UVs to "Control Point" aka: "ByVertice" or can that restriction be remove by HW importer?
(btw, if someone could find [along side me] a converter or the like for that UV coordinate too would be hugely appreciated).
oh, did you manage to get Metasequoia 4 working? (not sure of how much it can do now, if it can even solve .fbx UV problem...)

EDIT:
However, now, when I export and reimport the mooglebook, it works perfectly. (Just to be clear, the "mooglebook" is the one seen when saving your game from a save moogle, right?)
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Kaldarasha on 2018-02-06 09:48:24
Is it now possible to increase the poly size of the NPCs?
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-06 16:17:45
Yeah, it should, Kaldarasha, minus the problems that importing a model seems to bug most of the time :/

So, I've tried to extract/reimport Zidane and it indeed crashes in-game. It's the meshes/materials that are causing the bug for some reason (the animations seem to be better done since Zidane's 401 animations were exported/reimported correctly).
Also tried with the Grimlock with the same result: it doesn't work anymore for me either... Since it worked previously, I can hope to find what I changed since I tested it.

Yes, the moogle book is the book you see when saving. That's the model 133, the first of the list when sorted, which is why I usually tested things on it.

I'll make a fix, but I'm busy this week, sorry.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-06 22:13:46
Alright, at least I know it's a confirmed bug, and not a corrupted archive; take your time Tirlititi.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: ste459 on 2018-02-09 15:00:37
Tirlititi, I have some more questions, this time about AI script:

Some enemies, for example Yans, can counterattack to many different kind of attacks (simple physical attacks, black/white/blue magics, steal...) but, in their counter function, only the following party command/attack are checked:

    if ( ( GetAttackCommandId == 25 ) && ( GetAttackId == 103 ) ) {
        return
    }

Which should be Zidane "skill" command  and "what's that?!" ability, according to description. However Yans can counter also to normal attacks (for example) which should be the not mentioned "commandid = 1" .
For example, Nova Dragon counters to "attack" command and this is the relative script:
    if ( GetAttackCommandId != 1 ) {
        return
    }
    set #( SV_Target = GetAttacker )
    Attack( 0 )
    return

I am missing something? To make an enemy counterattack to many different party action is it not necessary to list them all, one by one?



Another question: can I declare a completely new local variable without replacing an existing one?
I want to make an enemy cast the "A" attack only if the "B" attack has already been executed, so I need to declare a variable which turns to 1 after "B" is selected, and if this variable is not 1  and "A" is selected, "B" is casted in place of "A".
But if I  simple write "set isBexecuted == 0" at the beginning of the function the system doesn't recognize the variable.

How can I fix that? What is the right way to declare a new variable? And if replacing an already existing variable is mandatory, is there a list of completely unused variables?

Thanks in advance!
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-09 15:59:12
These lines in the Yan's script are present in most of the enemies' Counter function. They precisely say to not counter to Zidane's What's That?!. Indeed, "return" means something like "skip everything's left". So actually, Yans counters to anything as long as it's not that single skill.

To give you ideas, you can also look the AI of Gizamaluke, who counters differently depending on a magical or a physical attack, and the AI of Soulcage, whose counter depends on the element of the attack (more complicated).

You can declare new local variables, yes. For AI, you should first import the "LocalVariables" .hws file that comes along with the tool: it declares all the used variables of the enemy scripts. If you import it, you'll see a few lines in the "Local Variable Panel" when editing an AI. These lines declare the used variables. You can add yours like this:
1) Select the function to which you want to add a local variable (or at least a function of the right enemy),
2) In the local variable panel, add a line like "local uint8 isBexecuted",
3) Use that variable in the function: when you parse, it will recognize the declared variable,
4) Most likely, you will still have a warning, like "Need to allocate more": change the "allocate N" line accordingly and parse again if that happens.

In the help (F2), you have some informations about variables (which types can be used, what is the difference between local, global and general, etc...).

Note that when you declare local variables in Field or World Map scripts, the local variables already used are not listed at all and you can overlap an existing variable if you're not careful. In order to be sure not to overlap an existing variable, you can write this kind of line instead for 2):
"local uint8 myVariable Loc_UInt8_[N]" where [N] is replaced by the number in front of "allocate".
You'll then need to increase the "allocate" number for sure.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: ste459 on 2018-02-10 13:01:47
Thanks! I didn't realized that != is "not equal to.." sorry    :-D I've seen Gizamaluke AI, now is a bit more clear for me how counter system works.

Another question, what exactly is the function of the "Short" flag in the AI attack forms?
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-10 21:54:23
It's the name of the flag from the engine's source code, but it doesn't seem to be used at all (I couldn't find anything that checks if this flag is on in the engine's code). It is most likely a flag dummied out during the game's development.

@Incinerator: Ok, I found a bug and it was, as usual, a pretty stupid one. I will make a fix update but I'll use the occasion to also add a couple of things. You can bypass the bug with the current version though: rename the texture dependancies in the FBX model to something else. The bug occurs when the model importer automatically catches the texture (more precisely, when another file as the same internal name as the texture, such as a material).
So you have to make sure that the program asks you what are the textures linked to the model.

With this, at least exported/reimported models work. I'll try to add compatibility with the UV indices by Polygon Vertex for the fix as well.

Not related, but I found where the "3 enemy types / 18 attacks" limit is: go to the CIL Code "FF9StateBattleSystem::.ctor", the limit is there.
Find the following lines and increase the numbers to whatever you need:
Code: [Select]
ldc.i4.3
newarr 0x2000062 // ENEMY_TYPE
...
ldc.i4.s 18
newarr 0x2000050 // AA_DATA
You may then ignore the warning that popups when adding too many enemy types or attacks in a battle.
There are other limits in that CIL method, but none of them can be modified as easily as just changing a number there.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-11 01:44:23
rename the texture dependancies in the FBX model to something else. The bug occurs when the model importer automatically catches the texture (more precisely, when another file as the same internal name as the texture, such as a material).
So you have to make sure that the program asks you what are the textures linked to the model.

So, instead of naming the textures to 98_0.png, 98_1.png, 98_2.png and so on, I should rename to something other like, shirt.png, body.png?

So you have to make sure that the program asks you what are the textures linked to the model.

It does, yet trying to find the texture from the list is horrific; like trying to find a needle in a haystack.

Compatibility for the UV indices is heavily needed! >.<
Is it better to import a binary .fbx versus a ASCII .fbx? Curious.

I have searched the face of the Internet trying to find how to get the UV coordinates of my model to store by Control Points, and have not gotten/found an answer at all.  :o How rare is this method? Apparently VERY. Not even an answer on Unity forums. It's not a simple thing to check in 3ds Max either, oddly, I use to use 3ds Max 2015, but not much anymore, I use Maya more.
Proprietary model formats were removed, to allow custom models to be replaced/added, making the desired result successful? It's almost impossible to make a custom model follow exactly the proprietary format's rules 100% like the given above. Unless HW or some other can scan, detect and possible auto-fix the custom model to fit the proprietary format needed to work in game. You see?

"3 enemy types / 18 attacks" limit~
Nice! Now I now it's possible to increase so!
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-23 20:25:50
Tiriititi,

When I try to make a custom save point (not using a moogle) in game; the game does not save the player's position in that spot; instead, the player returns to the entrance of the field; (rather than) in between battles for the Trial Mode I have in the mod. Are there specific field functions I must include in the script to have the game properly saved? Currently I only called to function: [Save Menu]
Script:

Code: [Select]
        Wait( 1 )
        Menu( 0, 0 )
        Menu( 4, 0 )


Also, Do you know where, in game's code, what defines each sfx to play on which weapon? Currently the PC version (for some characters) point to the same weapon sfx aside from having their own sfx identifier.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-02-23 23:06:16
About the SFX identifier, it is indeed dependant on the character only (the "serial_no" number). The method "btl_vfx::SelectCommandVfx" defines which Spell Animation is used depending on the command: most of the time, the Spell Animation used is the one given by the Spell, but for some special cases, like the Attack or Throw or a few others, it is handled by the engine.
The Spell Animation used by the Attack command should be around the position IL_0091 and it's "100 + btl_util.getSerialNumber(regist)".
For Zidane, the serial number is 0 or 1 depending on his weapon, for Vivi, the serial number is 2, etc...
There are only the 19 slots of Spell Animations used by the characters between 100 and 118 included. There are also 64 slots of Spell Animations used by the enemies for their physical attacks, ranging from 313 to 376, but the game won't allow a character to use one of these like an attack (it only displays the strike, without the animations of the characters running to the enemy).

For the save spot, the Fields are loaded and initialized after a loaded game just like after entering the Field normally.
What they do is that they set the variable "VAR_GenBool_184 = 1" right before saving. Since that variable is saved in the memory card/Steam save, the script knows when a field is entered by a loaded game, and generally, it then sets the variable "General_FieldEntrance" to the special value 10000. You can see the position where Zidane is created after loading a save in "Zidane_Init" functions.
In the World Map, the character's exact position is also saved in the variables "VAR_GenInt24_64" (X), "VAR_GenInt16_67" (Z), "VAR_GenInt24_69" (Y) and "VAR_GenUInt8_72" (angle) ; you can use them for the field's position as well with something like that:
Code: [Select]
set VAR_GenInt24_64 = GetEntryPosX(255)
set VAR_GenInt16_67 = GetEntryPosZ(255)
set VAR_GenInt24_69 = GetEntryPosY(255)
set VAR_GenUInt8_72 = GetEntryAngle(255)
set VAR_GenBool_184 = 1
Menu( 4, 0 )
set VAR_GenBool_184 = 0
And then something like this in the character's "Init" function:
Code: [Select]
if ( General_FieldEntrance==10000 ) {
    MoveInstantXZY( VAR_GenInt24_64, VAR_GenInt16_67, VAR_GenInt24_69 )
    TurnInstant( VAR_GenUInt8_72 )
}
I think that the lines "if ( VAR_GenBool_184 == 1 ) { set General_FieldEntrance = 10000 }" are present in all the Fields of the game so you don't have to care about adding them.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Incinerator on 2018-02-24 02:51:49
Thanks for the extensive info Tirlititi; I got it!
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: trostboot on 2018-02-25 16:17:40
I've been slowly trying to familiarize myself with this fantastic tool, but unfortunately, it keeps crashing when trying to edit text from within HW itself.
Once it has finished displaying the preview as it would appear in-game, it crashes every time.

This is with HW 0.39, a FFIX PSX image, Win10 16299. Happy to provide additional info, just don't really know where to look.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: Tirlititi on 2018-03-01 10:18:20
Huh, I didn't see your post until now Trostboot. That's a shame :/

I updated the tool to v0.39b:
- Fixed a bug in Model Importer when the texture files were auto-detected,
- Allow to use UV, normals and tangents in "ByPolygonVertex" mode for importing models,
- Improved the "Edit Similar Enemies" option: it now applies to the enemies' attacks as well,
- Added a few editable datas to the enemies, related to how they look and sound in-game, as well as which model animations they use,
- Allow to input the model ID of an enemy so you can choose an imported model ID or a model that is normally not used for battles.

This last feature needs a bit of engine modification to work though. When you use an imported model, you need to add it to the engine's database like any other model, but even if you use a standard field model, you'll need to modify 3 CIL methods.
Indeed, there are 2 model databases:
1) "FF9BattleDB::Animation", containing the battle models (enemies, characters and weapons),
2) "FF9DBAll::AnimationDB", containing all the models (including the battle models).
You must make it so the "FF9DBAll::AnimationDB" is used anyway instead of looking in the "FF9BattleDB::Animation" table.
Additionally, you must tell the engine to load all the animations in the RAM for the models used in battles. The policy is indeed that:
1) For Fields, only the animations listed in "Preloading" are initally loaded in the RAM. Other animations are automatically loaded everytime if you use them in the Field script (with a "RunAnimation" call for example). The only exception to this rule is the "Jump" Animation that isn't automatically loaded by the related call so must be loaded another way (either have it in "Preloading", or use a "RunAnimation" or "SetStandAnimation" call on the "Jump" animation beforehand).
2) For World Maps and Battles, all the animations that can be found are loaded in the RAM along with the model.
Whichever option is chosen doesn't depend on the game's state unfortunatly, but on the model's string ID (if it contains something like "_B0_" or "_W0_", it is considered as a Battle/World Map model). So the wrong policy is used if you select a Field model for an enemy.

In practice, do these changes in the CIL Code if you want to use a Field model for an enemy:
- In the method "btl_init::SetMonsterParameter", you should have a line "ldsfld 0x40004B6   // FF9BattleDB::Animation" near the middle of the method. Change it to "ldsfld 0x40012A4   // FF9DBAll::AnimationDB" (the hexadecimal IDs are the ones from the latest Steam release).
- Same in the method "btlseq::SeqExecAnim". Change the "FF9BattleDB::Animation" line to the "FF9DBAll::AnimationDB" line.
- In the method "AnimationFactory::AddAnimToGameObject", search for these lines:
Code: [Select]
ldarg.1
ldstr 0x7003CA77 // "_B0_"
callvirt 0xA0001A7 // bool System.String::Contains( string )
brtrue IL_0098
Replace them by these:
Code: [Select]
call 0xA0000BB // !0 PersistenSingleton`1<class EventEngine>::get_Instance()
ldfld 0x40019E6 // EventEngine::gMode
ldc.i4.2
beq IL_0098
It may have an inconvenient bug though: sometimes models will be messed up in the first screen you see after launching the game. Going to the menu -> Title Screen -> Continue, it will be fixed back, but it is annoying.

And, of course, you must setup the datas in the enemy's resources (at least setup the animations it uses ; the other datas won't make the game crash if they are at 0).

Another problem though is that the animation speed are slowed by a factor of 0.5 in battles, so the field models will have slower movements...
Hopefully, these troubles will find a convenient fix in the future.

@Trostboot: I will fix that bug for the PSX version for the next release, but you can use an older version of HW in which there is not this bug. The version 0.37c (https://www.dropbox.com/sh/f8edyp5ua4a7kc7/AACuhcb46gQq4x4IMGmgRgl1a?dl=0) doesn't seem to have that bug. Also, most recent features are for the Steam version mainly so you don't miss a lot. Sorry about that.
Title: Re: [FF9] General editor - Hades Workshop (0.39)
Post by: trostboot on 2018-03-01 12:59:49
@Trostboot: I will fix that bug for the PSX version for the next release, but you can use an older version of HW in which there is not this bug. The version 0.37c (https://www.dropbox.com/sh/f8edyp5ua4a7kc7/AACuhcb46gQq4x4IMGmgRgl1a?dl=0) doesn't seem to have that bug. Also, most recent features are for the Steam version mainly so you don't miss a lot. Sorry about that.

Excellent, that will do just fine for the moment, thank you.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-03-01 23:05:39
Alright, just to clarify,
on this window:

(https://s9.postimg.org/nsuzb26mn/Gamobject.png)

am I to select the corresponding Texture2D file or .fbx gameobject file to continue?

(This is for Main model: Zidane)
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-03-02 07:51:09
You're supposed to select the corresponding Texture2D file.
That is, however, very weird that your texture is named "98.fbx"...
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-03-02 10:20:01
You're supposed to select the corresponding Texture2D file.
That is, however, very weird that your texture is named "98.fbx"...

Yep, a deeper level of testing is needed...
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: usb on 2018-03-05 09:00:14
First of all thank you for this amazing tool.
I am here to ask some help for a very little problem that has FF9 italian steam version: during a battle, when you choose to use magic sword ability (the Steiner+Vivi combo  :)), the text that appears in the top of the screen with the ability name has the words swapped. Here an example:
You choose Firaga Sword (in italian is "Colpo Firaga" and in hades workshop is named perfectly), in the top screen appears as "Firaga Colpo" (maybe use english order with italian text?)

My question is: is it possible to fix with hades workshop or with some manual edit?
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-03-05 11:13:59
Thanks usb :)
Yeah, I thought that they fixed that bug, but apparently not. It doesn't concern only Italian but also French and Spanish. The bug lies in the CIL method "BattleHUD::SetBattleCommandTitle" but it's a bit tricky to fix it there with HW.

What you can do though is bypass the bug: go to the "Interface" panel, select the "Battle Spell Naming" field and add 13 entries to it (right-click -> Add), then write the proper full names ("Colpo Fire" etc...). Finally, go to the "Party -> Spells" panel and change the casting names of the magic swords spells to the entries that you just added.
It's a bit dirty as a fix, but it works. You should also translate the names in the "Interface" panel if you want it to work for all the languages (I think the game would crash in non-italian language otherwise).

For info, you can have up to 62 custom spell names in that interface field.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: usb on 2018-03-05 11:57:11
Thanks usb :)
Yeah, I thought that they fixed that bug, but apparently not. It doesn't concern only Italian but also French and Spanish. The bug lies in the CIL method "BattleHUD::SetBattleCommandTitle" but it's a bit tricky to fix it there with HW.

What you can do though is bypass the bug: go to the "Interface" panel, select the "Battle Spell Naming" field and add 13 entries to it (right-click -> Add), then write the proper full names ("Colpo Fire" etc...). Finally, go to the "Party -> Spells" panel and change the casting names of the magic swords spells to the entries that you just added.
It's a bit dirty as a fix, but it works. You should also translate the names in the "Interface" panel if you want it to work for all the languages (I think the game would crash in non-italian language otherwise).

For info, you can have up to 62 custom spell names in that interface field.

thank you for your reply... I'll try as soon as possible.

update:
change the casting names of the magic swords spells to the entries that you just added
under spells panel there are only the basic magic and not the magic swords (they are under special). if i change the vivi magic when Vivi cast Fire magic it will be shown as Colpo Fire but the magic sword is still wrong

For the "Interface" panel, in localization entry, there is this strange behavior (if it is supposed to be ok it can be ignored):
Select italian language > german text
Select spanish language > italian text
Select german language > spanish text
Select french language > french text
In hades 0.39b
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-03-05 12:40:15
About the "Spells" panel: yes, the Magic Swords are in there as well, but they are spread around. Most of them are next to Dagger's summons and Flare/Doomsday are at the end of the list.

About the "Localization" field, yes I noticed that. As strange as it appears, it's not a bug from HW but that's how the latest Steam version texts are (they were correctly set in the previous Steam versions). Don't bother.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: usb on 2018-03-05 12:53:49
About the "Spells" panel: yes, the Magic Swords are in there as well, but they are spread around. Most of them are next to Dagger's summons and Flare/Doomsday are at the end of the list.

About the "Localization" field, yes I noticed that. As strange as it appears, it's not a bug from HW but that's how the latest Steam version texts are (they were correctly set in the previous Steam versions). Don't bother.

wow.. you're right. I didn't notice at all. Changed in english and I easly found. Thank you very much for you'ra patience.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Lyrithus on 2018-03-12 19:08:26
I was hoping I could find a few resources. I'm looking for a list of CIL methods with definitions. For example, I found in this thread that "CalcSub_203" is the CIL method for "Physical Strike". I'd like to know what the other definitions are for the rest of the "CalcSub".

Couple things that would be handy:
The ability to import/export lists of new CIL methods for a specific CIL class. For example:

If I had a file that contained a list of Customized CIL methods ("SubCalc_100" through "SubCalc_525") for "btl_calc", I could upload that as a sub mod that could be imported by HW.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: aidolu12 on 2018-03-17 19:42:47
Hi Tirlititi, hope you are doing great, once again thank you for working on this tool! have been wonderful.

May I ask, since you told me to check the CIL codes to modify some parts of the game engine results (not sure how to put that), have been quite difficult for me to understand the language, even though I got a little bit more use to it.

I wanted to ask, and I am quite sure will be possible, but not sure how to put it inside the coding. Can the party HP and MP be recovered after a battle? or 25% of current hp and mp? If anybody know how to put it, will be awesome for letting me know.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Gordo98 on 2018-03-19 21:04:57
This tool looks really cool just from browsing it for awhile but I want to ask; Will editing AI for someone who has no experience in coding whatsoever be a challenge for me and I guess a random question but am I able to make Protect, Shell, Haste and Regen last longer? Imo they don't last long enough in this game to make them useful.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-03-20 21:56:46
@aidolu12: Yes, it's extremely difficult to do CIL changes by only looking at the CIL code. It's way better to look at the C# code to at least understand how the engine works before guessing how you can tweak it (it requires reading C# but that's always better than CIL).
You can see the C# code in Memoria's Github (https://github.com/Albeoris/Memoria/tree/492a4786d4f3061bff98b36b390a62c26b191cf1/Assembly-CSharp) page, or using a tool like dnSpy or dotPeek.

For your particular question, it's not particulary easy in CIL, but you might change the method "BattleHUD::GoToBattleResult" and add this kind of lines:
Code: [Select]
call 0x6000F5D // FF9StateSystem::get_Battle
ldfld 0x4002267 // BattleState::FF9Battle
ldfld 0x4002230 // FF9StateBattleSystem::btl_list
ldfld 0x4000226 // BTL_DATA::next
ldfld 0x400022A // BTL_DATA::cur
ldfld 0x4000809 // POINTS::hp
call 0x6000F5D // FF9StateSystem::get_Battle
ldfld 0x4002267 // BattleState::FF9Battle
ldfld 0x4002230 // FF9StateBattleSystem::btl_list
ldfld 0x4000226 // BTL_DATA::next
ldfld 0x4000229 // BTL_DATA::max
ldfld 0x4000809 // POINTS::hp
ldc.i4.4
div
add
call 0x6000F5D // FF9StateSystem::get_Battle
ldfld 0x4002267 // BattleState::FF9Battle
ldfld 0x4002230 // FF9StateBattleSystem::btl_list
ldfld 0x4000226 // BTL_DATA::next
ldfld 0x400022A // BTL_DATA::cur
stfld 0x4000809 // POINTS::hp
This only restores 25% of max HP of the 1st character only (and doesn't even check if it goes over the max HP limit)...
Best is to use Memoria for that and add these lines instead, since you can surely use local variables when replacing C# code:
Code: [Select]
for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next)
if (next.bi.player != 0 && next.cur.hp>0)
next.cur.hp = min(next.cur.hp + next.max.hp / 4, next.max.hp);
Much simpler indeed ^^'

@Gordo98: What you want to do is not related to AI but to the battle system, so CIL code or C# again :/
And increasing the duration of status effects is not possible with HW, as explained here (http://forums.qhimm.com/index.php?topic=14315.msg255569#msg255569). The best you can do is to change the tick for poison/venom/regen.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Gordo98 on 2018-03-20 23:51:07
@Tirlititi guess I’ll leave that how it is, but by AI I meant enemy patterns and attacks. For example having the following script.

Turn 1: 50% Poison 50% Silence
Turn 2: Attack
Turn 3: 50% Flare, 40% Stop, 10% Doomsday
Turn 4: Attack
Repeat
50% Counter Physical Attack w/ Stop

Something like that or editing existing enemies and replacing attacks or patterns.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-03-21 10:01:03
Ok yes, this is AI script.

So actually, the default AI scripts are usually quite complex. One thing you should do before editing AI scripts is import the local variable informations ("LocalVariableSettings_v1.hws" that is included with the tool). It makes the scripts a bit more readable.
But writing a simple AI script like what you say can be done quite easily. Here is how the "ATB" function would look like:
Code: [Select]
Function Enemy_ATB
    if (turn_counter == 0) {
        // Turn 1
        if (GetRandom % 2) {
            set SV_Target = RandomInTeam( SV_PlayerTeam )
            Attack( Poison ) // It is not "Poison" that should be in the real thing but the attack ID instead
        } else {
            // You may avoid Silencing someone who's already silenced using this kind of lines
            set SV_Target = RandomInTeam( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 265) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) )
            if (SV_Target == 0) { // Everyone is either dead or silenced already...
                set SV_Target = RandomInTeam( SV_PlayerTeam )
            }
            Attack( Silence )
        }
    }
    if ((turn_counter == 1) || (turn_counter == 3)) {
        // Turn 2 and 4
        set SV_Target = RandomInTeam( SV_PlayerTeam )
        Attack( Physical Attack )
    }
    if (turn_counter == 2) {
        // Turn 3
        set rnd_num = GetRandom % 100
        if (rnd_num < 50) {
            set SV_Target = RandomInTeam( SV_PlayerTeam )
            Attack( Flare )
        } else {
            if (rnd_num < 90) {
                set SV_Target = RandomInTeam( SV_PlayerTeam )
                Attack( Stop )
            } else {
                set SV_Target = SV_PlayerTeam | SV_EnemyTeam
                Attack( Doomsday )
            }
        }
    }
    set turn_counter = ((turn_counter + 1) % 4)
    return
And declare the local variables "turn_counter" and "rnd_num" in the local variable panel:
Code: [Select]
local uint8 turn_counter
local uint8 rnd_num

For the counter-attack, I suggest that you take a look at Gizamaluke's AI and mimic it.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: aidolu12 on 2018-03-24 22:54:55
@aidolu12: Yes, it's extremely difficult to do CIL changes by only looking at the CIL code. It's way better to look at the C# code to at least understand how the engine works before guessing how you can tweak it (it requires reading C# but that's always better than CIL).
You can see the C# code in Memoria's Github (https://github.com/Albeoris/Memoria/tree/492a4786d4f3061bff98b36b390a62c26b191cf1/Assembly-CSharp) page, or using a tool like dnSpy or dotPeek.

For your particular question, it's not particulary easy in CIL, but you might change the method "BattleHUD::GoToBattleResult" and add this kind of lines:
Code: [Select]
call 0x6000F5D // FF9StateSystem::get_Battle
ldfld 0x4002267 // BattleState::FF9Battle
ldfld 0x4002230 // FF9StateBattleSystem::btl_list
ldfld 0x4000226 // BTL_DATA::next
ldfld 0x400022A // BTL_DATA::cur
ldfld 0x4000809 // POINTS::hp
call 0x6000F5D // FF9StateSystem::get_Battle
ldfld 0x4002267 // BattleState::FF9Battle
ldfld 0x4002230 // FF9StateBattleSystem::btl_list
ldfld 0x4000226 // BTL_DATA::next
ldfld 0x4000229 // BTL_DATA::max
ldfld 0x4000809 // POINTS::hp
ldc.i4.4
div
add
call 0x6000F5D // FF9StateSystem::get_Battle
ldfld 0x4002267 // BattleState::FF9Battle
ldfld 0x4002230 // FF9StateBattleSystem::btl_list
ldfld 0x4000226 // BTL_DATA::next
ldfld 0x400022A // BTL_DATA::cur
stfld 0x4000809 // POINTS::hp
This only restores 25% of max HP of the 1st character only (and doesn't even check if it goes over the max HP limit)...
Best is to use Memoria for that and add these lines instead, since you can surely use local variables when replacing C# code:
Code: [Select]
for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next)
if (next.bi.player != 0 && next.cur.hp>0)
next.cur.hp = min(next.cur.hp + next.max.hp / 4, next.max.hp);
Much simpler indeed ^^'

@Gordo98: What you want to do is not related to AI but to the battle system, so CIL code or C# again :/
And increasing the duration of status effects is not possible with HW, as explained here (http://forums.qhimm.com/index.php?topic=14315.msg255569#msg255569). The best you can do is to change the tick for poison/venom/regen.

Tirlititi, thanks, I have not try it yet, I have been busy, but as soon, will let you know.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-03-25 11:45:53
AI script,
what function makes the enemy perform an attack (ex. Attack(3) ) first every time the battle starts? Attack (3) the enemy will do every start of the fight.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-03-25 14:32:09
Look at Black Waltz 3's AI script (the battle on the Cargo Ship). He starts the battle by casting trance on Vivi.
Basically, you need to "set SV_FunctionEnemy[ATB] =$ SV_FunctionEnemy[MAX_ATB]" and use a flag for the first attack of the enemy.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-03-26 05:11:58
Thanks, it didn't work, but that's okay; I found an alternative.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-03-27 02:42:56
Just found a bug with HW version 39b.
Cannot change the value of >Power<, value reverts back to default.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-04 11:29:45
is there a function in the script that resets the LV back to 1? boolean variable?
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-04 12:00:50
It is possible, yes. You just need to empty the party reserve and then setup the characters' data: with the "Update level" option, it usually sets the character's level to the average level of the party reserve, but it sets the level back to 1 for an empty party reserve.
Code: [Select]
    SetPartyReserve( 0 )
    SetCharacterData( character_id, 1, 255, 255, 255 )  // By using 255 in the other arguments, you don't change the value
    SetPartyReserve( 255 ) // May be different if you don't want the 8 regular characters to be available
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-04 16:31:14
Thanks Tirlititi!
guess what,
there's always something missing.
This doesn't apply to all characters, it only applies to one: Eiko
It definitely did not apply to Zidane either.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: DanTsukasa on 2018-04-05 02:28:30
Awesome progress as always.
Would it be possible to add an exporter thats just OBJ for now, for the walkmeshes, I understand the cameras are a bit of a pain, so if those aren't a priority then I can just guesstimate the rest easily enough.
Having the walkmesh will save a lot of time with recreating some of the environments in HD.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-07 13:45:40
I don't exactly know what you're preparing us, but that sounds very neat :D
Here are the walkmeshes:
https://www.dropbox.com/s/p0yvu6ofcj658u1/FF9Walkmeshes.zip?dl=1

I don't think that I'll add an option to export them in HW as I am pretty sure that there will never be an importer of walkmeshes in OBJ format. Adding an exporter may make people think that walkmeshes are just a bunch of triangles. I'll just let the walkmeshes here.

PS: I double-faced the triangles because apparently the orientation of triangles is not relevant for walkmeshes.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: DanTsukasa on 2018-04-07 14:11:37
Lining these up with Cameras is going to take quite a while, but I'll do what I can.

Ah yeah, this project is... going to take a long time, but I want to have some things to show before I see if anyone else is interested, see if I can get myself a good workflow and the like first.

Thankyou for those, I really appreciate it, if you by chance also happen to know how to export the cameras too, as FBX files, that'll speed things up even more.
I have a tool that exports the FF8 walkmeshes and camera all in the correct positions, which was super handy for running tests, though ironicly enough, I find that FF8 doesn't really have any good camera angles, or makes nearly as much use of its pre-render medium as ffix does.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-08 00:42:56
Tirlititi, I noticed a glaring bug with Vivi using either Cure or Life spells outside of battle. I give him Cure/Cura etc. or Life/Full-Life, and attempt to revive or heal an ally outside of battle, it doesn't heal or revive a character, only depletes his MP, and the Target Window for "Life" shows as if you're curing Bad Statuses.
Differently If I give Steiner/Zidane/Freya Cure/Cura/Life etc., it works perfectly fine. Is this the game's way of showing a black mage just wasn't meant to have white magic?
Also, if a character like Eiko/Dagger (any character who can use Cure) is only in the party, and tries to use Cure outside of battle on themselves, the Target Window refuses to show up. I don't think that was ever present in PSX version.

And about the walkmeshes: specific foot sfxs datas (metal, sand, grain etc.) are stored in the walkmeshes? Replace it and those are lost?
These walkmeshes look like a similar to the meshes I did in The Mist: Resurrection, Memoria levels, tbh.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: jmp434 on 2018-04-09 06:43:58
Hello everyone, being a fan of Final Fantasy 9 especially, I hoped to see its output on PC and the possibility of being able to create it in HD, to redo it in 3D the ideal would be to get the walkmesh, as well as the coordinates camera and each environment to be able to work on it, I am completely null on the mod of FF IX so I wondered if someone had a complete pack to provide me so that I can take care of it? I had already done previously on FF 7 for those who know me :) But FF7 never interest me as much as the 9 and I would like to spend my time on the environment of the 9 which attracts me more and give the opportunity someone to do something :)

Sorry for the bad english, google translation does not speak very well your language.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-09 09:38:36
Hello everyone, being a fan of Final Fantasy 9 especially, I hoped to see its output on PC and the possibility of being able to create it in HD, to redo it in 3D the ideal would be to get the walkmesh, as well as the coordinates camera and each environment to be able to work on it, I am completely null on the mod of FF IX so I wondered if someone had a complete pack to provide me so that I can take care of it? I had already done previously on FF 7 for those who know me :) But FF7 never interest me as much as the 9 and I would like to spend my time on the environment of the 9 which attracts me more and give the opportunity someone to do something :)

I could see new walkmeshes would provide possibility to import new backgrounds in assets; but whole 3D . In that case, the backgrounds would be kicked, and instead add 3D environments (maps) in the assets. No need for a walkmesh then, in such case. You see?

(Still dunno about the Vivi Cure bug).
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: DanTsukasa on 2018-04-09 09:59:10
I could see new walkmeshes would provide possibility to import new backgrounds in assets; but whole 3D . In that case, the backgrounds would be kicked, and instead add 3D environments (maps) in the assets. No need for a walkmesh then, in such case. You see?

(Still dunno about the Vivi Cure bug).

I don't think its really possible to just switch everything out with 3d meshes, what I'll do, and I'm guessing what jmp434 intends to do is simply remodel and replace the backgrounds like what people did with the FF7 backgrounds (admittedly, to a much higher quality).
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-09 22:44:11
I don't think its really possible to just switch everything out with 3d meshes,

Oh it's possible; being a Unity game after all.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: DanTsukasa on 2018-04-10 00:08:36
Oh it's possible; being a Unity game after all.

Ah, I mean more as in, 'I don't think its a realistic goal', its possible, but the amount of extra things that'd need writing and editing is a bit much, plus actual 3D environments, if its still a static camera, would end up looking worse due to aliasing I'd imagine.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-10 04:05:57
Ah, I mean more as in, 'I don't think its a realistic goal', its possible, but the amount of extra things that'd need writing and editing is a bit much, plus actual 3D environments, if its still a static camera, would end up looking worse due to aliasing I'd imagine.

oh, but a real goal it is; determine is key. Minus the static camera; I always saw me eventually making ffix:tza with 3d & environments gambits (not a fan of backgrounds + fixed cameras; seems like an old method) with this engine still. T pointed where UI handled, it was extra work, but was determined to get gambits working here; at least I got somewhere! The button. I don't see it as completely impossible, more doable with determination. If Tirlititi confirms it's 100% impossible to do 3d environments; well, there's always back to walkmeshes for new backgrounds.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: DanTsukasa on 2018-04-10 04:42:18
oh, but a real goal it is; determine is key. Minus the static camera; I always saw me eventually making ffix:tza with 3d & environments gambits (not a fan of backgrounds + fixed cameras; seems like an old method) with this engine still. T pointed where UI handled, it was extra work, but was determined to get gambits working here; at least I got somewhere! The button. I don't see it as completely impossible, more doable with determination. If Tirlititi confirms it's 100% impossible to do 3d environments; well, there's always back to walkmeshes for new backgrounds.

Hmm, I'm quite happy to just remake backgrounds and pre-render them honestly. Then I can paint over to get smaller details, this is a bit easier than doing standard 3D, and its a nice change of pace from the usual day job.

I'm curious to see what Tirlititi thinks about the possibility of fully 3D Environments, as that'd require a huge amount of work, replacing the environments is one thing, but then if you have a 3D Camera the game would have to become quite different in order to work, so instead of having single scenes like now, it'd have a whole accessible map, which means NPC's walking between scenes, things looking good from every angle. Even modelling wise it'd add so much extra time.

Theres a point where you'd be doing so much work, and so many edits, and wrestling against the engine so much, that it'd be easier to simply rebuild most of the engine to support all the changes instead of trying to endlessly bend it to your will.

I honestly think a lot of the charm of the game is due to the framing of the scenes, having a fully 3D scene would require things that're off camera usually to have new animations, effectively you'd have to redo all the 3D Art again from scratch, but if its possible, it'd be a very interesting thing to witness.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-10 11:26:48
So, I'm working on something else right now and I can't test about these bugs you mentioned, Incinerator, but I'll eventually take a look at them.
About 3D environment, it would be possible to change the engine to make it possible ; I don't even think that would be such a huge amount of work (the environment is already mostly 3D, engine-wise). It would be way more difficult to recreate the scenes themselves in 3D, and I don't think they would look as great as prerendered backgrounds (not to mention that a lot of things are working visually because of static backgrounds: look at Alexandria's bell tower, its size from outside and its camera for inside).

The foot sfx datas are indeed stored in the walkmesh (well, more precisely, the walkmesh says which kind of ground each triangle is ; then the script says which footstep sound is played on each kind of ground). It is not possible to replace the walkmesh data now because there's no tool to edit the walkmesh itself.

@jmp434: You have the 3D OBJ files describing the walkmesh geometry two posts above yours. The cameras of the fields are a bit weirdly stored and, last time I tried, I couldn't have them properly readed.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-10 21:37:00
a huge amount of work,

That's the thing; I love it when it's possible, so it doesn't feel huge; especially when I think of the beautiful final outcome it would have! The determination never dies.

So, I'm working on something else right now and I can't test about these bugs you mentioned, Incinerator, but I'll eventually take a look at them.

Understood.

About 3D environment, it would be possible to change the engine to make it possible ; I don't even think that would be such a huge amount of work (the environment is already mostly 3D, engine-wise).

Yaass! Positive possibility!

It would be way more difficult to recreate the scenes themselves in 3D, and I don't think they would look as great as prerendered backgrounds (not to mention that a lot of things are working visually because of static backgrounds: look at Alexandria's bell tower, its size from outside and its camera for inside).

Yeah, and recreate texture sets to match the environments from the prerendered backgrounds. Proper UV's.
I was forced to recreate in the environments in 3D anyways for ffix: tza the fmvs, considering it has different characters; look at the CGI, those as close to visual 3D of the environments in FF9 as one would get, without always seeing static positions. So, best start is to observe those, get a ball rolling and build off that.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: DanTsukasa on 2018-04-11 05:40:16
Yeah, and recreate texture sets to match the environments from the prerendered backgrounds. Proper UV's.
I was forced to recreate in the environments in 3D anyways for ffix: tza the fmvs, considering it has different characters; look at the CGI, those as close to visual 3D of the environments in FF9 as one would get, without always seeing static positions. So, best start is to observe those, get a ball rolling and build off that.

It seems like it might be worth setting up a new topic then, instead of filling this one with our discussion.

I've had a look around, but I can't find any 3D or art related things for ffix: tza, do you happen to have anything online I can view at all? I'm curious how close you got to the FF9 environments, as I'm doing things myself recently, and thinking about eventually trying to get a few other people onboard if possible.

I'm not sure what you mean by proper UV's, do you that the originals are just renders so there is no UV data?
Creating textures to match the visuals shouldn't be difficult, most of the time, but its a given that anything we make is probably going to differ a little bit.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-11 11:20:46
It seems like it might be worth setting up a new topic then, instead of filling this one with our discussion.

That other point was answering Tirlititi.

I've had a look around, but I can't find any 3D or art related things for ffix: tza, do you happen to have anything online I can view at all?

I use to, last year, around November. But then, no, I kept it all on the DL (just on my pc), to not waste anyone's time looking it over.

I'm curious how close you got to the FF9 environments,

Since November of last year, I've only gotten to FMV scene: Brahne summons Atomos~Lindblum.
But had to go back and redo some of them (not all, just the ones with Zidane in it, y'know like the one at the Lindblum/Telescope~Disc 1) with the recent update of two characters in scene.
Oh it doesn't matter anyways.

as I'm doing things myself recently, and thinking about eventually trying to get a few other people onboard if possible.

Thing is, I only do it for ffix:tza, as that is the only motivation there that keeps me going. If I try to switch and do it all for the vanilla game, I will lose interest, I just know I will. It's happened 3 times already. Not that I hate the vanilla, NO, I now just wanted to tell a story through ff9~my story. Whilst keeping ff9's main story intact. If you get it.

Creating textures to match the visuals shouldn't be difficult, most of the time, but its a given that anything we make is probably going to differ a little bit,

Yeah not much hard; but also never delivers 1:1.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-12 00:26:32
Tirlititi, what is the field:
"Opening- For FMV"?

Whenever I select 'Edit Script' on it, HW crashes.

And is there a way to make the game save a variable value without needing to physically change fields?
Alternatively; does the game need to be hard saved or auto saved to remember a "set VAR = 1" function?

I want to set an unused variable to value "1" just before calling to Field(16000) Thing is, the game will never autosave Field(16000)
And the game needs to remember it set the variable to "1"

my setup (brief):
Code: [Select]
Battle (1, 938)
set VAR_[unused] variable = 1
Field( 16000 )
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-12 11:12:23
It's the field that is loaded when hitting the "New Game" button. It basically launches the opening cinematic and move to Prima Vista/Cargo Room.
It used to work fine. I guess that it crashes because it has no background or walkmesh ; I'll fix it.

Variables of type "General" (Var_Gen...) are the ones saved in saved games. It doesn't matter whether it's an auto-save or a moogle save.
I'm not really sure what you're doing that for. If you want to have a "New Game +" feature, setting a flag before an auto-save is not the way to go because auto-saves make sure that both executions are ran with the same setup (you can't distinguish between the 1st execution and the execution after the player hits the "Continue" button).
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-13 01:41:16
Variables of type "General" (Var_Gen...) are the ones saved in saved games. It doesn't matter whether it's an auto-save or a moogle save.

Thanks for the notice, Tirlititi.
I got it working, still!
https://www.youtube.com/watch?v=ROhbEC5p_60
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-13 08:56:40
Hello Tirlititi! Thank you for this awesome tool! Thank to you I  have finally got the occasion to put Blank in and I'm so excited bout that! Now I have a few questions.. hope you will help me!

1) In the Invicible the function "Set Party Member etc" doesn't work... everywhere i put the code, the game won't start after the "squaresoft" logo.. there's the black screen, no music or something else.. why?
2) I tried to take a look of the follow tutorial "How to place characters on the field" but I seriously don't know why, it won't appear..? I made a new object (the number 2, as you said), i tried to put two new voices in the script, the first with the following code for blank "Init", the second is the command "Speak" I tried to copy and paste this one

Code: [Select]
Function Blank_SpeakBTN
    ifnot ( IsMovementEnabled ) {
        return
    }
    set VAR_A6_158 = 0
    if ( VAR_A6_159 == 1 ) {
        DisableMove(  )
        if ( VAR_A6_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    0x27( 127 )
    TurnTowardObject( 250, 32 )
    WaitTurn(  )
    WindowSync( 0, 128, 199 )
    set VAR_A6_158 = 1
    if ( VAR_A6_159 == 1 ) {
        if ( VAR_A6_156 == 0 ) {
            EnableMove(  )
            0x27( 255 )
            if ( VAR_A6_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    return

 to try..but doesn't work??? Why???
3) "NPC models corresponding to a Party's member"... I was wondering, how works exactly for Blank?

And for the Scenes, for example "Pandemonium" if I want to put him (You know, like you did for Beatrix) how do I do? And in the battle?

4) Last, for now.. there's a way to edit the portraits of the characters from menu etc? ( http://abload.de/img/retroarch-0424-150004neswt.png )



Thank you if you will help, I'm kinda new at modding especially FFIX but I'd like to try and test!
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-13 19:19:47

4) Last, for now.. there's a way to edit the portraits of the characters from menu etc? ( http://abload.de/img/retroarch-0424-150004neswt.png )


Easy. In sharedassets.assets (open with the Unity Viewer) Extract file FaceAtlas; rename to .png. When finished, must remove the '.png' extension to be imported back in. Portraits must be on the same scale, or will not fit.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-13 19:31:23
Easy. In sharedassets.assets (open with the Unity Viewer) Extract file FaceAtlas; rename to .png. When finished, must remove the '.png' extension to be imported back in. Portraits must be on the same scale, or will not fit.

Thank you for the kind and quick reply! Please, i'm stupid... tell me.. which one of these??

(https://i.imgur.com/FMIV9mT.png)

And, another question.. when I try to export a file nothing happens.. I mean, I click export and..no reactions.. why?

UPDATE

Ok, I tried to click the Import button, and I see the folder "HadesWorkshopAssets" so the files are here.. but when I finished to modify the pictures how does work to put in the game back? :)
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-14 05:53:09
Since HW Unity Viewer still only modifies assets in the x86 folder, that file must be moved to x64 directory after import to see the results.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-14 07:52:29
Ok, thank you! I give a try and I'll let you know. Meanwhile I hope someone will help me for the other questions even if I know probably it may takes time :P

Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-14 12:34:26
Ok, so lot's of things there :/

1) The problem lies somewhere else. Modifying the script should have no impact on what happens after the SquareEnix logo. Script modifications are in the file "p0data7.bin" and, if you get an "Assembly-CSharp.dll", that means you're modifying something else.
I don't know what could cause this bug with the latest version of HW. You may try to update your FF9 game by going to your Steam's game library -> right-click on FF9 -> Properties -> Check the integrity of local files. It will update the game to the latest Steam release and replace the modded files (it won't remove the .hws files and it's always better to have your mod in that format as well ("File -> Save Mod" in HW)).

2) So, if I understand correctly, nothing happens in-game if you do that? No bug, but nothing changed?
If so, it may be because of:
- Either your "Blank_Init" function is wrong ; since your "Blank_SpeakBTN" is correct, I feel that you did the other one just fine,
- Or you forgot to add a line "InitObject" in the "Main_Init" function: you should have a look at it and see a bunch of those "InitObject" lines, each corresponding to some 3D model on the field,
- Or you made the mod in one language and play the game in another one (the default language is "English (US)" in HW, you can change that in the "Files -> Preferences"). Scripts are language-dependant.
- Or, as Incinerator said, you copy the files in the "x86" folder of the game while playing in "x64" mode. If you copy the modded files in both folders, you're sure to be good in that regard.

3) It's a bit complicated: Blank uses the same slot as Amarant, so you can't have them both in the team at the same moment. Since Amarant is already there (as a party member) in the Pandemonium scripts, the best is to consider Blank as a NPC if you want to add him in cutscenes.
There is only one feature that is different between playable characters and NPCs in the scripts: it's the possibility to refer to an entry (in that case, a 3D object) that corresponds to the characters in your party. In the "InitObject" line, for instance, one can use "InitObject( 251, 0 )" to refer to the 1st character in the party, instead of doing things like:
Code: [Select]
if (IsInParty(0)) { // If Zidane is in the party
    InitObject( 10, 0 ) // Init the 3D object and functions corresponding to Zidane
}
if (IsInParty(1)) { // If Vivi is in the party
    InitObject( 11, 0 ) // Init the 3D object and functions corresponding to Vivi
}
// etc...
Except for that feature, NPCs and PCs are handled the same way.

4) That picture is in the "sharedassets2" archive (like most of this kind of pictures).
When you "right-click -> Export selection", it exports the file in the folder "HadesWorkshopAssets" (in the game's directory) as you saw. You may edit the file from there (if you have the option "Automatically convert images to PNG", as I recommand, you should be able to edit the file with any image editing tool). In order to re-import the modded file in the archive, you must be sure that this modded file is in the "HadesWorkshopAssets" folder at the same place and with the same name as when exported (in this case, there should be no ".png" extension because the file doesn't have an extension in his name in the archive). Then just "right-click -> Import Selection" should popup a message, either saying it was successfully imported or saying that it failed.
The general politic is that the Unity Assets Viewer expect the re-imported file to be in the same format as the exported file, ie. it expects a PNG image if you have the "Automatically convert images to PNG" enabled.
And to complete, the archives are indeed duplicated (except for the "Streaming Assets" archives) in two folders, "x64" and "x86" and only one of them is used by the game. You may switch folders in the Unity Assets Viewer in its options, or you may indeed copy-paste the modded archive to the other folder as well.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-14 13:07:04
Thank you for all the kind replies (and the patience too) I'll give a check and, as always, let you know!

UPDATE

What about change font on Steam? Is it possible?

Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tedrainbow on 2018-04-19 08:11:24
Tirlititi-- Please help me.
I change the values as shown but the stats problem does not change at all in the menu that follows

Is Vivi base level 23
(https://i.imgur.com/RsnExl9.png)

Spirit not change
(https://i.imgur.com/1TKNHaa.png)

Magic and Spirit not change
(https://i.imgur.com/h2UBYqC.png)

They need something other than the value you tell me to make it work well in the menus?
Thanx you so much

Just other one question is possible add search for you tool section Cil code or a file that explains the place to change the function  of the game
Because it's not easy to find what you're looking for ....
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-19 09:03:23
@ToraCarol: Albeoris's Memoria tool is able to change the text font of the game easily, but it's incompatible with HW right now.
But apparently, the tool dnSpy allows to edit the Assembly-CSharp.dll by changing the C# code, which is just as great. You can change the font by replacing the declaration of the variable "defaultFont", in the "EncryptFontManager" class, by this:
Code: [Select]
public static Font defaultFont = Font.CreateDynamicFontFromOSFont( "Arial" , 16 );"Arial" is the font name and "16" is the font size (you can change them to your convenience).
Here's a list of fonts (https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-enumerate-installed-fonts) you can use.

@Tedrainbow: I don't really understand.
First of all, this red light is not part of your problem, right?
Then, changing the primary stats bonuses in the "Items" panel should be enough ; there's nothing else to do to mod the items primary stat boosts (the only thing is that they use "Stat Sets" and modding the stats boosts of 1 equipment can have an impact on other equipments if you're not careful).
It was working fine a couple of HW versions ago, and I didn't touch that part of the tool, so I guess you're doing it wrong. But if you can't fix it, I'll have a look.

About CIL code, I'm not planning to add nor to fix anything from these panels. I know that they are useful for plenty of things that people generally want to mod, but these panels were added more like a precarious feature waiting for something more convenient.
As said, it looks like dnSpy should be a better solution right now (I didn't test it yet but I'm definitelly interested in that).
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tedrainbow on 2018-04-19 10:07:30
it's about max stats in the menu.
I have change Dex,Spirit 50 to 99 and strengh, magic 99 to 125
But this is not the display of others stats.

I can not, generate the solution use you Hades-Workshop-master
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-19 10:33:17
Quote
@ToraCarol: Albeoris's Memoria tool is able to change the text font of the game easily, but it's incompatible with HW right now.
But apparently, the tool dnSpy allows to edit the Assembly-CSharp.dll by changing the C# code, which is just as great. You can change the font by replacing the declaration of the variable "defaultFont", in the "EncryptFontManager" class, by this:

Code: [Select]
public static Font defaultFont = Font.CreateDynamicFontFromOSFont( "Arial" , 16 );"Arial" is the font name and "16" is the font size (you can change them to your convenience).
Here's a list of fonts you can use.

Thank you very much for the help! I'll take a look!

I've changed sucessfuly the Face Atlas, so I wanted to try with IconAtlas too..buttt.... but theres a little problem.. even if I did the whole set in trasparency, when I import it in the game it didn't read it, and the background of all the new iconset is white.. you know why? ???

Little ps: No MIPS editing and/or move other characters than Zidane aviable for Steam.. right? Bad luck, I wanted to do something like Final Fantasy V, you know..  moving characters corresponding to the first party member (it's not necessary, but I just wanted to know your opinion about this thing)
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-19 20:41:00
@Tedrainbow: Hum ok, it's been a while since you asked and I thought you did that already.
So, apparently, what I described before only allows your stat growth to break the limit, but the limit still applies for equipment stat boost.
So, you need to also change the method "ff9play::FF9_GetSkill". Near the 4/5 of the method, you'll find lines like these:
Code: [Select]
ldfld 0x40008AD // FF9PLAY_SKILL::Base
ldloc.0
ldelem.u1
ldloc.s 6
ldloc.0
ldelem.u1
ble IL_0328
ldarg.1
ldind.ref
ldfld 0x40008AD // FF9PLAY_SKILL::Base
Just replace the line "ble IL_0328" by "br IL_0328" and it should remove the limit totally.
It is not easy to choose the limit yourself by CIL code editing because the limit is stored in an unreachable array ("<PrivateImplementationDetails>::$$field-545").
In practice, it will then be that the base stats are limited (by whatever limit you want) and the equipment stat boosts can still increase that limit a bit.

@Tedrainbow: Maybe you import the atlas file in a RGB format (Alpha channel, ie. transparency is not imported). In the Unity Assets Viewer's image options, you can choose the "RGBA" compression method to be sure to import the image without compression and with its transparency. If I remember correctly, the DXT5 compression method can use about 4 shades of transparency.

MIPS is the assembly language of the PSX. It doesn't exist anymore in the Steam version and is replaced by CIL code.
It is possible to move other characters than Zidane (actually, you just need to use the script code "DefinePlayerCharacter()" in another entry than Zidane's entry) but you'd need to script all the animations that come with that. Zidane can have an interaction with a lot of stuff through the game and sometimes has specific animations for these interactions that other characters just don't have.
This has nothing to do with MIPS but with Field scripts, by the way.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tedrainbow on 2018-04-19 22:24:26
Ok but my code is.

Code: [Select]
ldfld 0x40009E2 // FF9PLAY_SKILL::Base
ldloc.0
ldelem.u1
ldloc.s 6
ldloc.0
ldelem.u1
ble IL_0328
ldarg.1
ldind.ref
ldfld 0x40009E2 // FF9PLAY_SKILL::Base

Just replace the line "ble IL_0328" by "br IL_0328 and correct ?

if i do that, the image at the start of the game is freezes and then nothing to do .

(https://i.imgur.com/4Ckk4ij.png)
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-20 07:50:34
Quote
@Tedrainbow: Maybe you import the atlas file in a RGB format (Alpha channel, ie. transparency is not imported). In the Unity Assets Viewer's image options, you can choose the "RGBA" compression method to be sure to import the image without compression and with its transparency. If I remember correctly, the DXT5 compression method can use about 4 shades of transparency.

MIPS is the assembly language of the PSX. It doesn't exist anymore in the Steam version and is replaced by CIL code.
It is possible to move other characters than Zidane (actually, you just need to use the script code "DefinePlayerCharacter()" in another entry than Zidane's entry) but you'd need to script all the animations that come with that. Zidane can have an interaction with a lot of stuff through the game and sometimes has specific animations for these interactions that other characters just don't have.
This has nothing to do with MIPS but with Field scripts, by the way.

Ah-ha! So that's it! Thanks a bunch Tirlititi I give a try! And thank you for all the informations, I really didn't know; maybe I can give a shot just for Memoria and Crystal World, there are not alot of interactions requiered, except for "Jump", I guess..  :)

Let me know a thing.. what about if I want to add Lanì as a bonus character in the team (you know, you talk to her in Madain Sari and she decide to join your party) I don't mind to add her in cutscenes, just a playable characters in battles and stuff! ;D
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-20 08:08:16
And, sorry..another question how can I allow Blank to active the Support Abilities?

UPDATE:

No worries, I guess is solved is "CIL Code" -> "Macros", "Unlock Ability Learning" right?
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-20 16:51:00
Ah-ha! So that's it! Thanks a bunch Tirlititi I give a try! And thank you for all the informations, I really didn't know; maybe I can give a shot just for Memoria and Crystal World, there are not alot of interactions requiered, except for "Jump", I guess..  :)

Let me know a thing.. what about if I want to add Lanì as a bonus character in the team (you know, you talk to her in Madain Sari and she decide to join your party) I don't mind to add her in cutscenes, just a playable characters in battles and stuff! ;D

Currently not possible as of right now, no character party data for Lani; but here’s a broader thought to get the ball rolling!:

1. Find a current character to replace (you’ll use as Lani) (Be it maybe: Blank/Marcus/Cinna
(Battle model only)
2. Design a portrait for Lani.

3. Model swap her model with said character (when it becomes workable).

4. Init the character from the script accordingly.

Best way to go about seeeing Lani as a bonus character; I have a similar set up with Nyx Ulric.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-20 18:40:26
Currently not possible as of right now, no character party data for Lani; but here’s a broader thought to get the ball rolling!:

1. Find a current character to replace (you’ll use as Lani) (Be it maybe: Blank/Marcus/Cinna
(Battle model only)
2. Design a portrait for Lani.

3. Model swap her model with said character (when it becomes workable).

4. Init the character from the script accordingly.

Best way to go about seeeing Lani as a bonus character; I have a similar set up with Nyx Ulric.

Hey thank you! This sound a good Idea! I can try swapping with Beatrix, maybe... but, how do I do exactly? Could you give me a little example with screenshots (you know I really don't want to mess something x''3) Can be the risk that can swaps of default for the entire game? (I mean, for Example, when Beatrix fight with Steiner, In that case I still have Beatrix or I'll total swap her with Lanì?)
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-20 21:33:35
Hey thank you! This sound a good Idea! I can try swapping with Beatrix, maybe... but, how do I do exactly? Could you give me a little example with screenshots (you know I really don't want to mess something x''3) Can be the risk that can swaps of default for the entire game? (I mean, for Example, when Beatrix fight with Steiner, In that case I still have Beatrix or I'll total swap her with Lanì?)

That’s why I suggested: Blank, Cinna or Marcus. Yes if you model swap Beatrix it will affect scenes with Beatrix as a whole; except the battles against her, as that uses a different model. But to remain on the sure side, select between the tantalus troupe.
The model importer is in Hades workshop’s unity assets viewer. Explore archive p0data4.bin and locate Lani, export first, find said character to be replaced main model internal file name. Rename Lani’s file accordingly. But model swapping characters/importing new doesn’t work yet. It does not crash hades workshop, but it does crash in game.

Pardon, I must also note: replace any characters, be it even Blank/Cinna/Marcus, requires script editing elsewhere, otherwise, you may encounter unwanted entries during the game. Lani fighting on the theater stage and many more like scenarios to be thought out prior to. Unless such really is desired and in that case: go for it! By all means!
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-21 10:09:28
That’s why I suggested: Blank, Cinna or Marcus. Yes if you model swap Beatrix it will affect scenes with Beatrix as a whole; except the battles against her, as that uses a different model. But to remain on the sure side, select between the tantalus troupe.
The model importer is in Hades workshop’s unity assets viewer. Explore archive p0data4.bin and locate Lani, export first, find said character to be replaced main model internal file name. Rename Lani’s file accordingly. But model swapping characters/importing new doesn’t work yet. It does not crash hades workshop, but it does crash in game.

Pardon, I must also note: replace any characters, be it even Blank/Cinna/Marcus, requires script editing elsewhere, otherwise, you may encounter unwanted entries during the game. Lani fighting on the theater stage and many more like scenarios to be thought out prior to. Unless such really is desired and in that case: go for it! By all means!

I guess I can try with Cinna, I think is the best choice, he does not fight alot. ;)

Quote
But model swapping characters/importing new doesn’t work yet. It does not crash hades workshop, but it does crash in game.

What do you mean exactly?

Quote
The model importer is in Hades workshop’s unity assets viewer. Explore archive p0data4.bin and locate Lani, export first, find said character to be replaced main model internal file name.

Sorry but, this is really my very first time, I need a Step by Step.. So, I exported the model of Lani (368) and Cinna (661) to understand which is who, but...what now? I mean,when I replace the model, how do I distinguish them to the "battle" one and the "field" one ( I mean, the one used for cutscenes etc)

And if I want to add the "Victory pose" (using an animation of her already in) how do I do? 

I know the animations are at p0data5 but..how do I distinguish the animations of the battles? For example "Animation xxx of the model Battle Cinna"

Please, if you can give all the names and fuctions I need for both Cinna and Lani I'll be so grateful, for now I'm searching all the animations by myself but it's quite hard x''



Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-21 17:32:11


UPDATE:

Sorry to bother again, you guys but I have a little big problem...so, I'm trying to add Blank in the Scene of Ipsen Castle, and the first part works well, for the second I have a little problem.. I haven't added him yet in the field ( I need to know how it works, because it's not related to the party in this case) so the last variable I did is "Blank_16" (he speaks to Zidane, after Steiner) so I terminated the enter in the Main_25

So WHY Zidane reacts like this???  :'( :'( :'(

(https://i.imgur.com/nmPpEPX.jpg)

The animation works fine, but in the end, whe he says he goes to look for Amarant, it starts to lagging and I don't know why his animation (when he runs on the stairs) is..uhm, quite strange? I mean he's not runnig he's moving in a strange way like if his "freezing" but the model wants to move on the stairs anyway.. I don't know if I explained
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-22 11:08:59

UPDATE:

Sorry to bother again, you guys but I have a little big problem...so, I'm trying to add Blank in the Scene of Ipsen Castle, and the first part works well, for the second I have a little problem.. I haven't added him yet in the field ( I need to know how it works, because it's not related to the party in this case) so the last variable I did is "Blank_16" (he speaks to Zidane, after Steiner) so I terminated the enter in the Main_25

Perhaps showing the script functions you have for Blank_16, hard to tell what's up or down, without it.
And what exactly did you terminate in function Main_25? Which doesn't sound right either way.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-22 18:07:12
Perhaps showing the script functions you have for Blank_16, hard to tell what's up or down, without it.
And what exactly did you terminate in function Main_25? Which doesn't sound right either way.

Hah, yup... sorry

(https://i.imgur.com/RhsvVi5.png)



That's it. Those are the only things I edited on this field.. maybe I was wrong with something...  :-[

Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Tedrainbow on 2018-04-23 00:45:02
Tirititi- It is possible add one new NPC which learn add bonus Attack, Defense, Evade, Magic Defense or Magic Evade for equals 10,000 Gils?

Example: Bonus +1 for first one stat equals 10,000 Gils and for each addition of 1 stat one for the same person, add 10,000 multiple Gils to the total number of bonuses add to the character

Example of ten bonus is cost.
10,000 + 20,000 + 30,000 + 40,000 + 50,000 + 60,000 + 70,000 + 80,000 + 90,000 + 100,000 is TOTAL 550,000 Gils

Example Vivi bonus add ...
+1 Attack, + 2 Defense, +1 Evade, +4 Magic Defense, +2 Magic Evade

But the max bonus is 50 for one character.
Total max Gils --)  12 570 000 X 8 = 100 560 000 millions gils. 

It is possible ?

Thanx so much..
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-23 02:11:52
Hah, yup... sorry
That's it. Those are the only things I edited on this field.. maybe I was wrong with something...  :-[

Alright, I just looked at script: Main_25 in field: Ipsen's Castle/Entrance. I ask, do you have Beatrix in this scene as well? I see a TerminateEntry(13) on your screenshot there.
Also in function: Main_Init/case: 10560, I see there isn't an InitObject( 6, 0 ) (which ought to be Vivi's Init), that maybe an area of issue there, must test. I'm assuming: InitObject( 1, 0 ) is Entry_Blank...
My initial guess from here would be to add Blank to the scene much as Beatrix is added to this scene in Alternate Fantasy; a variable. You might be able to get around adding his entry right below hers.
Example:

In case: 10560 of function: Main_Init

Code: [Select]
        if ( VARL_GenBool_7173 ) {
            InitObject( 13, 0 ) // Beatrix Initiate
            InitObject( 1, 0 ) // Blank Initiate
        }

Main_25 function:
Code: [Select]
Function Main_25
    TerminateEntry( 6 )
    TerminateEntry( 8 )
    TerminateEntry( 7 )
    TerminateEntry( 11 )
    TerminateEntry( 9 )
    TerminateEntry( 10 )
    TerminateEntry( 12 )
    if ( VARL_GenBool_7173 ) {
        TerminateEntry( 13 ) // Terminate Entry_Beatrix
        TerminateEntry( 1 ) // Terminate Entry_Blank
    }
    return

If you don't want Beatrix in this scene, remove her functions from said above.

Tirititi- It is possible add one new NPC which learn add bonus Attack, Defense, Evade, Magic Defense or Magic Evade for equals 10,000 Gils?

It is possible ?

Thanx so much..

If I'm hearing this correctly, (Tirlititi to confirm) you're asking if it's possible for an NPC to grant a character some Magic Defense, Attack power, etc. stat increase for the price of 10,000 Gil.
If true, I'd believed the answer is no, it's not possible to do that. Simply speculating here, Attack, Defense and the like can only be raised with equipment related datas.
Also Gil, be it, receiving gil, prices & costs, much like EXP cannot exceed a value of 65535.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-23 09:59:39
Alright, I just looked at script: Main_25 in field: Ipsen's Castle/Entrance. I ask, do you have Beatrix in this scene as well? I see a TerminateEntry(13) on your screenshot there.
Also in function: Main_Init/case: 10560, I see there isn't an InitObject( 6, 0 ) (which ought to be Vivi's Init), that maybe an area of issue there, must test. I'm assuming: InitObject( 1, 0 ) is Entry_Blank...
My initial guess from here would be to add Blank to the scene much as Beatrix is added to this scene in Alternate Fantasy; a variable. You might be able to get around adding his entry right below hers.
Example:

In case: 10560 of function: Main_Init

Code: [Select]
        if ( VARL_GenBool_7173 ) {
            InitObject( 13, 0 ) // Beatrix Initiate
            InitObject( 1, 0 ) // Blank Initiate
        }

Main_25 function:
Code: [Select]
Function Main_25
    TerminateEntry( 6 )
    TerminateEntry( 8 )
    TerminateEntry( 7 )
    TerminateEntry( 11 )
    TerminateEntry( 9 )
    TerminateEntry( 10 )
    TerminateEntry( 12 )
    if ( VARL_GenBool_7173 ) {
        TerminateEntry( 13 ) // Terminate Entry_Beatrix
        TerminateEntry( 1 ) // Terminate Entry_Blank
    }
    return

If you don't want Beatrix in this scene, remove her functions from said above.


Thank you Incinerator, when I'm home I give a try!

About the model swap, to distinguish the battle model from the other I have to open it with a 3d program, or else?

And the animations? I can try to looking for all the animations, but you know is there's a particular way to show the preview? Maybe the same program for open models?

You know I don't want to go wrong with something when I'll try to swap Lani and Cinna :P

UPDATE: Mmh, maybe I figured how to distinguish the battle model, in the Field there's "Set Model" and the number, so the other one is the battle model..right?
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-23 16:03:22
Thank you Incinerator, when I'm home I give a try!

Mhmh..nope, nothing changed.. :oops:

ps: InitObject (13 0) is Amarant, Vivi is InitObject (7,0) in my case.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-23 22:34:37
Thank you Incinerator, when I'm home I give a try!

About the model swap, to distinguish the battle model from the other I have to open it with a 3d program, or else?

And the animations? I can try to looking for all the animations, but you know is there's a particular way to show the preview? Maybe the same program for open models?

You know I don't want to go wrong with something when I'll try to swap Lani and Cinna :P

UPDATE: Mmh, maybe I figured how to distinguish the battle model, in the Field there's "Set Model" and the number, so the other one is the battle model..right?

Model swapping and/or importing doesn't work yet with the model tool.

Mhmh..nope, nothing changed.. :oops:

ps: InitObject (13 0) is Amarant, Vivi is InitObject (7,0) in my case.

Try starting from a clean slate, and then test the function.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-24 06:07:48
Model swapping and/or importing doesn't work yet with the model tool.

Try starting from a clean slate, and then test the function.

Oh my, forgive me... freakin distraction, you said me two times and I didn't read it (or maybe I ignored because too excited of the idea, ahahah idk), ok then. So the only one thing to do is to wait and hope I guess ^^''

And ok, I just tried another time to start from a clean state, and I know for sure that the problem is something with blank.. but I really don't get what..  :-\ I'll try for a third time..

Thank you anyway, again.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-24 22:43:34
I know for sure that the problem is something with blank.. but I really don't get what..  :-\ I'll try for a third time..

Thank you anyway, again.

I'd see where'd you come from there; I too had problems with Blank and this particular field. So, I ended up using an emergency function to save it all.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-25 08:10:06
I'd see where'd you come from there; I too had problems with Blank and this particular field. So, I ended up using an emergency function to save it all.

Aahah, really? So how did you do? I simply did not put Blank in.. but if you had a better idea, I'm curios!
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-25 21:41:59
I simply did not put Blank in..

missing piece to the puzzle?
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-26 07:13:58
missing piece to the puzzle?

I know.. but I didn't have a better idea.. for now  :-[  I know, I'm a horrible person ;)
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-04-27 19:29:19
In the end I've decided to put Blank as a simple "Extra character" for the battles..much easier for my personal stuff...  :mrgreen:

So now, just want to know

I know Tirlititi mentioned a way to choose between Blank and Amarant without replacing

so I have wrote the dialog choice, but now..

where i put this?

Code: [Select]
WindowSync( 0, 128, DialogID )
if ( GetDialogChoice==0 ) {    // "Amarant..." is chosen
    SetPartyReserve( 255 )
    SetCharacterData( 7, 0, 255, 5, 7 )
} else if ( GetDialogChoice==1 ) {      // "Blank ofc!" is chosen
    SetPartyReserve( 1215 )
    SetCharacterData( 11, 0, 255, 21, 12 )
}

Everytime i try to put this it says "unexpected line {" or something like this..  so where i need to put it exactly??? Between WHICH lines??? Thank you if you'll help  :)
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-28 02:07:52
I know Tirlititi mentioned a way to choose between Blank and Amarant without replacing

where i put this?

Code: [Select]
WindowSync( 0, 128, DialogID )
if ( GetDialogChoice==0 ) {    // "Amarant..." is chosen
    SetPartyReserve( 255 )
    SetCharacterData( 7, 0, 255, 5, 7 )
} else if ( GetDialogChoice==1 ) {      // "Blank ofc!" is chosen
    SetPartyReserve( 1215 )
    SetCharacterData( 11, 0, 255, 21, 12 )
}

Everytime i try to put this it says "unexpected line {" or something like this..  so where i need to put it exactly??? Between WHICH lines??? Thank you if you'll help  :)

1. It's best to put a choice like this on an NPC. Put in a scenario, and you may only have that one chance to select the choice.

2. Init that NPC in a Field accessible at all times.

3. Your SetPartyReserve and SetCharacterData functions are wrong. Currently (in your else {) you have SetPartyReserve, Marcus selected and SetCharacterData, Blank and Blank's equipment; don't change. The else function should be setting Amarant's data back in. (see below) Functions in your (if {) statement are fine.

4. The error you got is likely because you have two if { statements. You put another if { statement on the else {.

example from mine:
Code: [Select]
    DisableMove(  )
    DisableMenu(  )
    WindowSync( 1, 128, 0 )           \\ dialog text with choice (set in Texts panel - example below)
    if ( GetDialogChoice == 0 ) {
        SetPartyReserve( 2143 )
        SetCharacterData( 11, 0, 14, 21, 13 )
        SetName( 11, 0 ) \\ Or Amarant's name will set over Blank's...
        WindowSync( 1, 128, 1 )        \\ A text "Blank has joined the party!" or something similar.
        set VARL_GenBool_8012 = 1
        FadeFilter( 6, 16, VAR_GlobUInt8_17, 255, 255, 255 )
        EnableMove(  )
        EnableMenu(  )
        Wait( 16 )
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    } else {
        SetPartyReserve( 255 )
        SetCharacterData( 7, 0, 7, 5, 7 )
        Menu( 1, 7 ) \\ Set name back to Amarant etc.
        WindowSync( 1, 128, 2 )        \\ A text "Amarant rejoins the party!" or similar.
        FadeFilter( 6, 16, VAR_GlobUInt8_17, 255, 255, 255 )
        EnableMove(  )
        EnableMenu(  )
        Wait( 16 )
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    }
    if ( GetDialogChoice == 0 ) {
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    } else {
        TimedTurn( VAR_GlobUInt8_16, 16 )
        WaitTurn(  )
        EnableMove(  )
        0x27( 255 )
        EnableMenu(  )
    }
    return

Text dialog choice; add in texts panel:
Code: [Select]
[STRT=140,4][PCHC=2,1][IMME]NPC
"Who'll you replace?"
[CHOO][MOVE=18,0]Blank with Amarant
[MOVE=18,0]Amarant with Blank


Study this. See the difference between yours?
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-28 07:48:33
There is no "else if" statement in the script language (it would be possible to implement it but I'm not sure if I'll do it).
You have to put it in a function "NPC_SpeakBTN" of the NPC of your choice. In this post (http://forums.qhimm.com/index.php?topic=14315.msg247568#msg247568), you have an other example of such function, based on what is usually done for NPCs in the game. The function that Incinerator showed is not complete because, for instance, it uses "TimedTurn( VAR_GlobUInt8_16, 16 )" without showing how "VAR_GlobUInt8_16" is setup.

Other than that, I guess he answered what you're missing, right?
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-28 08:35:01
it uses "TimedTurn( VAR_GlobUInt8_16, 16 )" without showing how "VAR_GlobUInt8_16" is setup.

That's from the same function you gave me as an example a long while ago. Been using it in that same spot ever since. And it works fine.
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-28 08:41:23
I don't say it's wrong, I say it's incomplete. You didn't show the first lines of the function.
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-28 09:17:48
I don't say it's wrong, I say it's incomplete. You didn't show the first lines of the function.

Oh I see! I sure didn't!

got a question myself; is there a function I can use to make a treasure chest appear at random percentage? In other words; init a treasure that has a 1% chance of spawning?
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-04-28 16:19:43
So, you can do it like this, in the "Main_Init" function :
Code: [Select]
if ( ( GetRandom % 100 ) < 1 ) {
    InitObject( X, 0 )
}
Where "X" is the entry of the chest. With this, the chest will appear with only 1/100 chances each time the player enters the field.
Using the usual code that is made for chests, it will appear opened if the player already took its content. For making it renewable, you need to change the general flag variable that says it is opened into a global variable (which reinits when you leave the field).
The general flag variable is something like "VARL_GenBool_7283" ; turn it into something like "VARL_GlobBool_560" (I just had a look at the game's engine and it seems that the global variables are limited to 80 bytes, so up to "VAR_GlobUInt8_79" or "VARL_GlobBool_639").

If you want the chest to be a one-time, though, you don't need to use global variables instead of general ones.
Title: Re: [PSX/Steam] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-04-28 18:33:51
Wow, so it is actually possible! Thanks Tirlititi!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-01 09:08:18
Thank you for the help you guys, so much appreciated  ;D

You know if there's somewhere a database or else where I can find the original PSX Iconset? You know I don't like the new ones so much, so I started to work on it. I just found these  (http://finalfantasy.wikia.com/wiki/List_of_Final_Fantasy_IX_statuses)on the Wiki, but not much Weapons and items  :(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-01 09:44:30
Here (https://imgur.com/a/pjh8TPq) you are.
In the PSX version, the icons are defined by a shape and a palette of colors (unlike for the Steam version where each used icon has its own image file, even if only the color changes). A lot of those icons are thus a combination of shape + color that is not used in-game.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-02 14:14:49
Aah, perfect. Thank you so much.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: DanTsukasa on 2018-05-10 15:49:17
The cameras of the fields are a bit weirdly stored and, last time I tried, I couldn't have them properly readed.

Would it be possible for you to share what unity asset file the camera data for fields is stored in at all? Along with the file extension.
I've searched high and low but I can't seem to find anything relating to the camera data.

If I had to guess I'd say it could be the MCF files inside of p0data7.
I'm unsure what MCF stands for, and its just a guess honestly, since p0data11 contain the walkmeshes themselves.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-10 17:04:05
Wrong ! Try again :p

Just kidding: the files with field cameras are the .bgs files (Tilesets (BG_SCENE)). These files contain both the tilesets and the camera(s). Binary-wise, it presents like this:
Code: [Select]
uint16 tileset_size // I don't remember if it's the whole file or only tiles
uint16 depth_shift // ???
uint16 tileanim_count
uint16 tileset_count
uint16 light_count
uint16 camera_count
uint32 tileanim_offset // Offsets are absolute with respect to the .bgs file
uint32 tileset_offset
uint32 light_offset
uint32 camera_offset
int16 origin_y // The Y coordinate is called Z in the game's source code ; it's the depth
int16 current_y // All these coordinates don't seem to be used anyway
int16 origin_x
int16 origin_z
int16 current_x
int16 current_z
int16 min_x
int16 max_x
int16 min_y
int16 max_y
int16 screen_x
int16 screen_y
...
// At camera_offset:
uint16 distance // "proj" in the source code
int16[9] matrix_3x3
int32 offset_x
int32 offset_z
int32 offset_y
int16 center_offset_x
int16 center_offset_y
int16 offset_width
int16 offset_height
int16 min_x // "vrpMinX" in the source code
int16 max_x
int16 min_y
int16 max_y
int32 depth
The main problem for me is the 3x3 matrix: I don't know to which OpenGL matrix it corresponds. I got bad views when I tried to do what seemed logical to me considering how the source code uses everything.

Note that the PSX cameras for the battle scenes are in the .raw17 (of archive p0data2) together with the enemy attack sequencing (and some datas related, like animation lists). But maybe they are ignored for the Steam version and they use other cameras somewhere else.

The MCF files seem to be something about ambiant light, but I'm not sure since there's already data about light in .bgs (EDIT : Ah, no ! I remember that the "light_count" is always 0 in all the .bgs of the game).

Good luck ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-10 19:51:13

Note that the PSX cameras for the battle scenes are in the .raw17 (of archive p0data2) together with the enemy attack sequencing (and some datas related, like animation lists). But maybe they are ignored for the Steam version and they use other cameras somewhere else.

Is that why some cameras in few battles either don’t run or bug out completely? I know a few cameras of enemy spell sequences sometimes bug. Like the camera on enemy_Fang in evil forest, or the Enemy_Troll physical attack, and Enemy_Gnoll casting Blizzara. Camera bugs because steam version ignores these psx cameras?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-10 19:57:11
That might be the case. It seems to me that they are a bit off. At least there are the bugs you mention, and the cameras during Beatrix fights are shifted. There definitely is a problem with battle camera but I still don't know whether the PSX cameras are badly read or if they made other cameras and failed some of them.

Actually, there is a whole bunch of methods in the "SFX" class that are external, so not in the Assembly-CSharp.dll, and I don't know how to access to them. Surely that they are in the FF9SpecialEffect.dll plugin, but the dll's header doesn't list them.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-10 20:12:49
My initial guess is that the psx cameras are badly read, seeing how some cameras trigger and some don’t. I wouldn’t imagine they made any other battle cameras.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-11 16:05:01
Hey guys! It's me again, with a new problem!! ::)

(https://i.imgur.com/1wz5ZCS.jpg)

You know WHY Blank is colored while everything blue? Because I really don't  :-\ Things like that happens also on Esto Gaza, some parts on the Temple of Hearth and all that "dark" places..
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-11 16:47:50
Hum, no idea. I thought that the light was dependant on the position of the character. Maybe that's because he's next to a light source?
It seems weird to me that models would need some special setting to have a correct light.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-11 17:04:08
Quote
It seems weird to me that models would need some special setting to have a correct light.

I was thinking of something about "texturing" or else... but unfortunately it does not seem to be :?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: fmalust on 2018-05-12 07:52:26
At the risk of sounding like a complete moron (I've tried pming you tri, but it wont let me), I have absolutely no idea what I'm doing with HW. I used it many years ago with the psx, but I purchased the steam version earlier this week with the excitement of using HW. Problem is, I can't get it to work... at all. I keep trying to open FF9_Launcher with it, and it just freezes and hangs there for ever. I let it sit there for roughly 40 minutes, and there was no progress in getting into the program's editing. Am I doing something wrong? I've googled how to use HW, searched through this topic endlessly with a few people asking how, and figuring it out themselves, yet I can't? I even tried youtube and looking at the HW's outdated Help. :[

I'm sorry to be a bother, but I'd really like to tweak my own version of FF9 to enjoy.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-12 16:07:53
Guys take a look here




Pandemonium Event Code (the one where everyone talks to Zidane while he's "Asleep")

Code: [Select]
   0xA9( 250 )
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        SetDialogProgression( 0 )
        WindowAsync( 0, 16, 493 )
        Wait( 12 )
        while ( !GetDialogProgression ) {
            Wait( 1 )
        }
        while ( !IsButton(655360L) ) {
            Wait( 1 )
        }
        if ( VAR_GlobUInt8_17 == 255 ) {
            set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
        }
        0xA9( 250 )
        FadeFilter( 6, 24, VAR_GlobUInt8_17, 255, 255, 255 )
        Wait( 25 )
        CloseWindow( 0 )
        WindowAsync( 0, 16, 494 )
        RaiseWindows(  )
        WaitWindow( 0 )
        TerminateEntry( 2 )
        RunScript( 2, 14, 13 )
        if ( VAR_GlobUInt8_17 == 255 ) {
            set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
        }


----------------------------------->HERE ENDS BLANK CODE AND STARTS THE AMARANT ONE


        0xA9( 250 )
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        SetDialogProgression( 0 )
        WindowAsync( 0, 16, 224 )
        Wait( 12 )
        while ( !GetDialogProgression ) {
            Wait( 1 )
        }
        while ( !IsButton(655360L) ) {
            Wait( 1 )
        }
        if ( VAR_GlobUInt8_17 == 255 ) {
            set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
        }
        0xA9( 250 )
        FadeFilter( 6, 24, VAR_GlobUInt8_17, 255, 255, 255 )
        Wait( 25 )
        CloseWindow( 0 )
        WindowAsync( 0, 16, 225 )
        RaiseWindows(  )
        WaitWindow( 0 )
        TerminateEntry( 14 )
        RunScript( 2, 9, 14 )
        if ( VAR_GlobUInt8_17 == 255 ) {
            set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
        }


The problem is the follow:everything is ok, but when arrives the part between the End of Blank and Start Of Amarant, the button won't react and the window dialog of Zidane stay here. You may know where did I wrong?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-12 16:19:45
Which window dialog? 493, 494 or 224?

The 493 and 224 dialogs are supposed to be handled by the script: the player has no natural control on closing the windows (or displaying the text faster) but with the lines "while ( !IsButton(655360L) ) { Wait( 1 ) }", the script waits for the player to press a button ("Confirm" or "Moogle") and closes the windows after a fading.
These dialogs are assumed to have either the opcode [NFOC] (= "No Focus") or [TIME=-1] (which has the same effect but can also determine a timeout for closing the window if the argument is non-negative).

The dialog 494 is not closed by the script and is assumed to have none of the opcodes [NFOC] or [TIME=...].
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-12 16:33:54
It's exactly the 494!

 I see there was a [TIME=1] in the dialog, so I removed it.. but it seem to not work yet.. everything else I need to do? I skipped a part?

UPDATE:

Ok, there's also a [NOFC] my bad  :P I try to remove it and I'll let you know!  ;D

UPDATE 2:

I did it! Thanks a bunch Tirlititi!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-12 20:17:17
Tirlititi.. how I solve this?  :-[ (The battle camera, and the "debug" thing )

(https://i.imgur.com/E3Pbs00.jpg)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-12 20:40:10
You can't control the battle camera... but that battle should allow 3+1 characters with a good camera: I don't remember messing with the camera when I added Beatrix to this battle and it works fine.

About the name, it may have been reseted by the script for some reason... Add a "SetName" line in the Pandemonium script before the fight and choose to rename Blank with the appropriate name.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-12 21:21:16
I don't remember messing with the camera when I added Beatrix to this battle and it works fine.

No?

Well, did you add two Abadons to the battle? Compling FFIX: ZA on the grounds of Alternate Fantasy, I see there where two Abadon's to fight, both under Auto-Protect.
I mention because your second Abadon never done any ATB commands. It had no functions, other than slowing down the Fast-Forward booster, making it boost at like 2x speed instead 5x. And with it on, the battle would rush instantly and gltich a bit if the Abadon in the back row (Abadon #2) was KO'd.
No crashes, nothing, just glitches. And an unresponsive to the fight: Abadon #2.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-12 21:32:29
I messed with the battle, but not with the camera.
I have seen several people doing that fight without bug, so I guess it's your version that glitches. The second Abadon uses the same functions as the first (even if it has a different attack pattern).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-12 21:36:09
I messed with the battle, but not with the camera.
I have seen several people doing that fight without bug, so I guess it's your version that glitches. The second Abadon uses the same functions as the first (even if it has a different attack pattern).

Building off the mod.hws of Alternate and never touching this enemy, could be the reason it stopped working? I used AlternateFantasy_v.4.3.hws from the download, and since then still haven't touched that enemy.

Never mind it, T, I fixed it now.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-12 21:57:09
I'll check ; I have no idea of what is the glitch that you describe. The only slowdowns I've ever experienced were because of bad 3D models (or badly configurated).

Well, in any case, I did built the mod after saving/loading the .hws several times so it seems doubtful that the file itself is corrupted.

EDIT: Ah well, I nevermind then ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-13 16:37:03
Ok, the "debug" thing is solved...  but the problem of the Battle camera is still here.. The code is the follow ( It's token from AF)

(https://i.imgur.com/irdnsZp.png)

The camera still be kinda weird

(https://i.imgur.com/aYJM42G.jpg)
(https://i.imgur.com/OiLfxP5.png)

please help.. :'(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: fmalust on 2018-05-13 21:27:40
Nevermind... I apologize for my previous post. After re-downloading HW, downloading previous versions, restarting and shutting my PC down and waiting two hours at most for HW to work, it finally worked after I reinstalled FF9. I'm not sure why that was the case, but... Sorry for the bother! :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-14 15:54:29
@fmalust: Oh, I'm sorry. I didn't see your message... Good that you could fix the problem.
It's not the first time that I miss a message ; it happens too frequently these days...

@ToraCarol: I have double-checked and I didn't change any camera setting for this battle in AF. You are doing something making it weird.
Verify that the camera used is the camera 0 in the group data (below the list of attacks of Abadon).
If the camera is indeed 0, a camera bug could occur because of AI script: did you change a function of the AI script? If so, what are those changes?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-14 16:31:33
The Camera it's ok, the AI script what do you mean exactly? You mean the Fields Script?

The only things I did is to add Blank in the Field (with a new entry) and in the Party, those are the codes

(https://i.imgur.com/65kmJhh.png)
(https://i.imgur.com/YvBk0Ed.png)
(https://i.imgur.com/5UCeFlk.png)
(https://i.imgur.com/Vm0rEwI.png)
(https://i.imgur.com/UbVsKot.png)


Plus the Windows of dialog of Blank and the Script calling to Run Animations etc

Tell me if you need everything else, I'll be happy to collaborate as I can  :wink:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-14 17:45:56
The AI script is the script in the "Enemies" panel. Select the battle against Abadon and there's an "Edit Script" button. That's the AI (and it presents like the Field scripts indeed, but that's a different script).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-14 19:05:53
Ah, got it! No no.. I didn't touched that script at all, nothing about the "Enemies" category.. so it's really confusing  :cry:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-16 14:25:12
Plus there's another little problem, if can "help".. in the battle, after the Zidane dialog, does not appear the Steiner's one!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-16 20:13:51
I didn't touched that script at all, nothing about the "Enemies" category..

This script had to have been edited for Blank to appear in this battle.
I say this because, with Blank already in the party, during this event, the only battle he would be initiated automatically in be the first one against the Amdusias. (Amarant switch to Blank)

The second battle against the Abadon (Steiner Quina Zidane) Unless the script as been edited to add Blank to this battle, he wouldn't be there.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-17 06:22:55
Ha! So that's it.. I imagined so I've tried to check Yesterday..but I didn't know how to do exactly, can you give me a hint?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-17 19:57:45
Ha! So that's it.. I imagined so I've tried to check Yesterday..but I didn't know how to do exactly, can you give me a hint?

I never physically added Blank to the Abadon battle; must ask Tirlititi.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tetraspore on 2018-05-19 05:27:37
Hey all, is there anything new in the realm of adding the bonus party members as their own slots rather than shared slots with other party members?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-19 12:18:00
Quote
This script had to have been edited for Blank to appear in this battle.
I say this because, with Blank already in the party, during this event, the only battle he would be initiated automatically in be the first one against the Amdusias. (Amarant switch to Blank)

The second battle against the Abadon (Steiner Quina Zidane) Unless the script as been edited to add Blank to this battle, he wouldn't be there.

@Incinerator

So why, in my case, Blank is in the battle scene anyway? I mean the actual problem is the camera that cut out Steiner, and then Zidane.. but you say it may be also because of the Enemy script?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-19 16:00:53
@Incinerator

So why, in my case, Blank is in the battle scene anyway? I mean the actual problem is the camera that cut out Steiner, and then Zidane.. but you say it may be also because of the Enemy script?

Blank's in the battle I can speculate only because the enemy script has been edited.
Not sure even speculating if he was added to the party before the Abadon fight begins could also be the case, not sure, should check there.
Either way, with the cameras, you'd be touching on the enemy scripts anyways as that is a battle thing.
Title: Re: [FF-IX] Hades Workshop
Post by: ploppo on 2018-05-19 16:20:34


hi , read your explanation in your post on steam about how to extract beatrix out of your mod , but i didn't understand exactly how we will get her once we accomplish the method II , i mean: she will just appear and stay in the party selection screen ? she will substitute a character in battle ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-19 19:15:05
As I said I didn't edited at all the Enemy script.. I added Blank just in the Main Script.. on the Fields!  :| So yeah, before the start of the battle with Abadon ^^''
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-20 01:57:21
As I said I didn't edited at all the Enemy script.. I added Blank just in the Main Script.. on the Fields!  :| So yeah, before the start of the battle with Abadon ^^''
Had a feeling. Knew you did something like that.
Either way, the Enemy script is going to need to be edited to fix the camera.

change a function of the AI script? If so, what are those changes?

Alright, so he may not have changed the Enemy script so far, yet it be an AI script Blank causing a glitch with the battle camera when Zidane comes in.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-23 11:03:17
thanks for the CIL feature and your explanations :D , thanks to that i can finally enjoy this game with the immunity to all the negative statuses
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-24 10:32:25
Hey all, is there anything new in the realm of adding the bonus party members as their own slots rather than shared slots with other party members?

I don't think so, unfortunately... it may be much easier for me too! x'P
Title: Re: [FF-IX] Hades Workshop
Post by: ToraCarol on 2018-05-24 10:35:29

hi , read your explanation in your post on steam about how to extract beatrix out of your mod , but i didn't understand exactly how we will get her once we accomplish the method II , i mean: she will just appear and stay in the party selection screen ? she will substitute a character in battle ?

For the first question, yes. You extract the option to have her as a bonus character, so the scenes with her and the party stuff.  8)

And no, she has fortunately her own slot!



Quote
Alright, so he may not have changed the Enemy script so far, yet it be an AI script Blank causing a glitch with the battle camera when Zidane comes in.


Oh, by the way, anything new?  ???
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-24 11:32:44
@Tetraspore: No, adding the three Tantalus members to the party is still relying on shared slots.
It is in the realm of possible to add slots to them, because it's in the engine source code (that can be modded using Albeoris's Memoria or other C# DLL editing tools like dnSpy). It however requires a big amount of work and it would be hard to deal with the interface (in the party selection menu and for the shop portraits).
The game is designed with 9 character slots ; a lot of datas and static numbers are relying on that, not to mention that the Field scripts are, as for them, expecting to have 8 team characters at some points (same problem with Beatrix).
I am not interested myself in adding Blank, Marcus or Cinna to the team of permanent characters, because I don't see the point both gameplay-wise and story-wise. But if I ever get into it, I'll let you know.

@ploppo: You're welcome :)
As ToraCarol said, you'll have the ability to recruit her. That means you must go to Alexandria's castle after getting the airship where you can meet her and let her come in the team. Then she'll appear in the party selection menu just like any other playable character.

@ToraCarol: no, sorry... As said, HW has little to no control over the cameras. I really don't know why the camera is scrambled for you and not for me (I mean, when you add Blank in your mod versus when I add Beatrix in mine).

I will release a new version of HW pretty soon (surely this week-end). I have investigated an "auto-translation" feature for translating texts automatically and, while I saw that it was possible, it would have delayed too much the next version (that has important bug fixes among other things).
So there will be an auto-translate in the future, but not in the upcoming version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-24 12:07:39
@Tetraspore: No, adding the three Tantalus members to the party is still relying on shared slots.
It is in the realm of possible to add slots to them, because it's in the engine source code (that can be modded using Albeoris's Memoria or other C# DLL editing tools like dnSpy). It however requires a big amount of work and it would be hard to deal with the interface (in the party selection menu and for the shop portraits).
The game is designed with 9 character slots ; a lot of datas and static numbers are relying on that, not to mention that the Field scripts are, as for them, expecting to have 8 team characters at some points (same problem with Beatrix).
I am not interested myself in adding Blank, Marcus or Cinna to the team of permanent characters, because I don't see the point both gameplay-wise and story-wise. But if I ever get into it, I'll let you know.

@ploppo: You're welcome :)
As ToraCarol said, you'll have the ability to recruit her. That means you must go to Alexandria's castle after getting the airship where you can meet her and let her come in the team. Then she'll appear in the party selection menu just like any other playable character.

@ToraCarol: no, sorry... As said, HW has little to no control over the cameras. I really don't know why the camera is scrambled for you and not for me (I mean, when you add Blank in your mod versus when I add Beatrix in mine).

I will release a new version of HW pretty soon (surely this week-end). I have investigated an "auto-translation" feature for translating texts automatically and, while I saw that it was possible, it would have delayed too much the next version (that has important bug fixes among other things).
So there will be an auto-translate in the future, but not in the upcoming version.

Nice! Can't wait!!!  ;D

And do not worry, I try to solve this myself in some way.. :-\
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-24 12:47:47
Oh Tirlititi, I forgot to askin you..

You think it may be soon aviable the model swap? I seriously want to try to put Lanì as a character bonus, but I know that for now it's not possible in any way..
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Squid7777 on 2018-05-24 20:36:43
Good afternoon everyone. I am a complete newb when it comes to this stuff. I downloaded HW and was messing around with some text for items and abilities, etc. Just to learn how to use this and test it out. But I cannot figure out how to actually apply my changes to my Steam version of FF9. I cannot seem to find a basic tutorial of how to use HW. Can anyone help me out? Forgive me if this is not the right place to ask. Feel free to redirect me if necessary. Thanks!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-25 20:56:25
@Tirlititi ok got it  ,but i tried to follow the instructions that you wrote on steam , she still doesn't appear in the place that you show in the castle  , it mean that i did something wrong , since an explanation from me about what i did would be useless because i actually made a mistake but i don't know were the mistake is , you think you can assist me with team viewer ? like : you take a look at what i am doing , and tell me were i am wrong :D ;  another way to solve the problem ( at least in my case ) can be this : explain me the most cheapest way that i can try to add her , i am not so focused on story line , so if i manage to recruit her by making her appear in the middle of the most absurd place in the most absurd phase of the plot , i will be happy anyway , not only that , if i can replace stainer with her ( only in battle of course, non in the cutscene  ) , it will be even better , i hate stainer , i mean , she should be the member of our group , not that medieval version of Ragonier Ugo Fantozzi, is because of that terrible choice if now we are doing a mess in order to have her :O ; i was thinking about the procedure to extract beatrix out of your mod , maybe i had keep ticked some other files besides texts and fields , but it is only an hypotesis due to desperation :\
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-26 10:09:19
Good afternoon everyone. I am a complete newb when it comes to this stuff. I downloaded HW and was messing around with some text for items and abilities, etc. Just to learn how to use this and test it out. But I cannot figure out how to actually apply my changes to my Steam version of FF9. I cannot seem to find a basic tutorial of how to use HW. Can anyone help me out? Forgive me if this is not the right place to ask. Feel free to redirect me if necessary. Thanks!


look for me on telegram : @medesimome , i am not a modder , but if you let me connect to your pc with team viewer i can show you the modding that i can apply and explain to you the little things i know
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-26 10:51:06
Good afternoon everyone. I am a complete newb when it comes to this stuff. I downloaded HW and was messing around with some text for items and abilities, etc. Just to learn how to use this and test it out. But I cannot figure out how to actually apply my changes to my Steam version of FF9. I cannot seem to find a basic tutorial of how to use HW. Can anyone help me out? Forgive me if this is not the right place to ask. Feel free to redirect me if necessary. Thanks!

Hi there, it's easy! First of all, when your project is finished you click on File --> Steam Mod and  you choose your destination folder (never on the same of FFIX).
After this there will are some folders with files in, everything you need to do is to copy the files in the folders, and paste into the folders with the same name you will find into the FFIX folder

(https://i.imgur.com/uykATfj.png)

Hope I explained well enough ;)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-26 11:06:26
he need explanations about how to use the program , not only about how to save the changes
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-26 12:18:46
@Tirlititi there is another thing i need help for : unlike the other characters , amarant\the salamander-man and zidane , can't use their trance commends during the normale state , no matter if i put their trance command in the section of the normal commands in battle , but as i said , this problem exist only for them , basically , if i put dharma in the normal commands of amarant , the respective abilities will just disappear , the same goes for zidane , so what's the procedure to solve the problem ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-26 14:32:31
Guys, I guess I need your help again..so.. in the end I've decided to put Blank in the third part on Pandemonium.. the one with Dagger, but for some reason (I bet I forgot something on the code) everytime I try to call an action battle for Blank (using potions, abilities etc), Dagger do those actions (and glitching too) so there's something kinda strange, for sure something that I didn't add

But WHAT?  :cry:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-26 14:43:02
I don't know either... You have weird problems seriously ^^'
Please show your codes in which you add Blank in the battle. I also need to see the "SetCharacterData" line that you use for setting up Blank.

For model swapping, I'm working on it but I don't guarantee anything for the next release.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-26 15:50:15
I don't know either... You have weird problems seriously ^^'
Please show your codes in which you add Blank in the battle. I also need to see the "SetCharacterData" line that you use for setting up Blank.

Ahahaha,I know right? Okay, let me see..

Those two are for the battle

Code: [Select]
Function Main_Init
    InitObject( 1, 128 )
    while ( !( GetBattleLoadState & 16 ) ) {
        Wait( 1 )
        set VAR_GenUInt8_206 = GetRandom
    }
    set #( VAR_GlobUInt16_24 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 0 ) )
    set #( VAR_GlobUInt16_24 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 1 ) )
    set #( VAR_GlobUInt16_26 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 2 ) )
    set #( VAR_GlobUInt16_28 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 3 ) )
    set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 4 ) )
    set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 5 ) )
    set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 6 ) )
    set #( VAR_GlobUInt16_30 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 7 ) )
    set #( VAR_GlobUInt16_30 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 8 ) )
    set #( VAR_GlobUInt16_32 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 9 ) )
    set #( VAR_GlobUInt16_34 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 10 ) )
    set #( VAR_GlobUInt16_34 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 11 ) )
    set #( VAR_GlobUInt16_36 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 12 ) )
    set #( VAR_GlobUInt16_38 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 13 ) )
    set #( VAR_GlobUInt16_40 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 15 ) )
    set #( VAR_GlobUInt16_42 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 16 ) )
    set #( VAR_GlobUInt16_42 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 17 ) )
    set #( VAR_GlobUInt16_44 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 18 ) )
    if ( #VAR_GlobUInt16_28 ) {
        set VAR_GlobUInt8_46++
        set VAR_GlobUInt16_28[MODEL_OFF] =$ 65535L
        set VAR_GlobUInt16_28[SHADOW] =$ 0
        set VAR_GlobUInt16_42[MODEL_OFF] =$ 65535L
        set VAR_GlobUInt16_42[SHADOW] =$ 0
    }
    while ( GetBattleState != 1 ) {
        if ( #VAR_GlobUInt16_42 ) {
            set VAR_GlobUInt16_42[PRESENCE_OFF] =$ 1
        }
        Wait( 1 )
    }
    if ( #VAR_GlobUInt16_28 ) {
        set VAR_GlobUInt16_28[PRESENCE_OFF] =$ 1
    }
    Wait( 1 )
    RunBattleCode( 35, 0 )
    while ( GetBattleState != 4 ) {
        Wait( 1 )
    }
    return

Code: [Select]
Function Main_Loop
    if ( VAR_GlobUInt8_47 && ( !VAR_LocUInt8_0 ) ) {
        set VAR_LocUInt8_0++
        while ( IsAttacking != 0 ) {
            Wait( 1 )
        }
        if ( GetBattleState != 4 ) {
            return
        }
        RunBattleCode( 32, 0 )
        while ( GetBattleState != 1 ) {
            Wait( 1 )
        }
        set VAR_GlobUInt8_52 = 255
        set VAR_GlobUInt8_48++
        while ( !VAR_GlobUInt8_49 ) {
            Wait( 1 )
        }
        set VAR_GlobUInt16_28[PRESENCE_ON] =$ 1
        set VAR_GlobUInt16_42[PRESENCE_ON] =$ 1
        set VAR_GlobUInt8_50++
        while ( !VAR_GlobUInt8_51 ) {
            Wait( 1 )
        }
        Wait( 5 )
        set VAR_GlobUInt16_28[MODEL_ON] =$ 65535L
        set VAR_GlobUInt16_28[SHADOW] =$ 1
        set VAR_GlobUInt16_42[MODEL_ON] =$ 65535L
        set VAR_GlobUInt16_42[SHADOW] =$ 1
        Wait( 40 )
        RunBattleCode( 36, 9 )
        BattleDialog( 11 )
        Wait( 45 )
        if ( #( SV_PlayerTeam & VAR_GlobUInt16_28 ) ) {
            if ( !( ( #Matching(VAR_GlobUInt16_28[STATUS_AUTO_A], 2097152L) ) && ( !( #Matching(VAR_GlobUInt16_42[STATUS_AUTO_A], 2097152L) ) ) ) ) {
                RunBattleCode( 36, 10 )
            } else {
                RunBattleCode( 36, 11 )
            }
        }
        BattleDialog( 12 )
        Wait( 60 )
        RunBattleCode( 35, 0 )
        while ( GetBattleState != 4 ) {
            Wait( 1 )
        }
    }
    Wait( 1 )
    loop


and those are the lines where i putted Blank in


Code: [Select]
CureStatus( 0, 127 )
        CureStatus( 1, 127 )
        CureStatus( 3, 127 )
        CureStatus( 2, 127 )
        CureStatus( 4, 127 )
        CureStatus( 5, 127 )
        CureStatus( 7, 127 )
        CureStatus( 6, 127 )
        CureStatus( 8, 127 )
       

--------------- HERE I STARTED



 SetCharacterData( 11, 1, 14, 21, 7 )
        SetName( 11, 92 )
        set Setting_PartyReserve = 1215
        SetPartyReserve( Setting_PartyReserve )
       

 RemoveParty( 0 )
        RemoveParty( 1 )
        RemoveParty( 2 )
        RemoveParty( 3 )
        RemoveParty( 4 )
        RemoveParty( 5 )
        RemoveParty( 9 )
        RemoveParty( 6 )
        RemoveParty( 10 )
        RemoveParty( 7 )
        RemoveParty( 11 )
        RemoveParty( 8 )



        set VAR_GlobBool_147 = AddParty(2)
        set VAR_GlobBool_147 = AddParty(0)
        set VAR_GlobBool_147 = AddParty(11)
        set VAR_GlobBool_147 = AddParty(65535)



        set VARL_GenUInt8_303 = 0
        set VAR_GlobInt16_8 = ( VAR_GlobInt16_10 = ( VAR_GlobInt16_12 = ( VAR_GlobInt16_14 = 99 ) ) )
        if ( 1 ) {
            set VARL_GenUInt8_303++
            set VAR_GlobInt16_8 = 2
        }
        if ( 1 ) {
            set VARL_GenUInt8_303++
            set VAR_GlobInt16_10 = 0
        }
        if ( 1 ) {
            set VARL_GenUInt8_303++
            set VAR_GlobInt16_12 = 11
        }
        if ( 0 ) {
            set VARL_GenUInt8_303++
            set VAR_GlobInt16_14 = 65535





----------------- HERE I FINISHED


        }
        set VAR_GlobBool_148 = ( VAR_GlobBool_149 = ( VAR_GlobBool_150 = ( VAR_GlobBool_151 = 0 ) ) )
        if ( VAR_GlobInt16_8 != 99 ) {
            if ( GetHP(VAR_GlobInt16_8) == 0 ) {
                set VAR_GlobBool_148 = 1
            }
        }
        if ( VAR_GlobInt16_10 != 99 ) {
            if ( GetHP(VAR_GlobInt16_10) == 0 ) {
                set VAR_GlobBool_149 = 1
            }
        }
        if ( VAR_GlobInt16_12 != 99 ) {
            if ( GetHP(VAR_GlobInt16_12) == 0 ) {
                set VAR_GlobBool_150 = 1
            }
        }
        if ( VAR_GlobInt16_14 != 99 ) {
            if ( GetHP(VAR_GlobInt16_14) == 0 ) {
                set VAR_GlobBool_151 = 1
            }
        }
        if ( ( ( ( VAR_GlobBool_148 + VAR_GlobBool_149 ) + VAR_GlobBool_150 ) + VAR_GlobBool_151 ) == VARL_GenUInt8_303 ) {
            if ( ( VAR_GlobInt16_8 != 99 ) && ( VAR_GlobBool_148 == 1 ) ) {
                SetHP( VAR_GlobInt16_8, 1 )
            }
            if ( ( VAR_GlobInt16_10 != 99 ) && ( VAR_GlobBool_149 == 1 ) ) {
                SetHP( VAR_GlobInt16_10, 1 )
            }
            if ( ( VAR_GlobInt16_12 != 99 ) && ( VAR_GlobBool_150 == 1 ) ) {
                SetHP( VAR_GlobInt16_12, 1 )
            }
            if ( ( VAR_GlobInt16_14 != 99 ) && ( VAR_GlobBool_151 == 1 ) ) {
                SetHP( VAR_GlobInt16_14, 1 )
            }
        }
        CureStatus( 0, 127 )
        CureStatus( 1, 127 )
        CureStatus( 3, 127 )
        CureStatus( 2, 127 )
        CureStatus( 4, 127 )
        CureStatus( 5, 127 )
        CureStatus( 7, 127 )
        CureStatus( 6, 127 )
        CureStatus( 8, 127 )
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1
        } else {
            set Setting_OptionalQuina = 0
        }
        if ( ( ( Setting_PartyInitialized >> 0 ) & 1 ) == 0 ) {
            SetCharacterData( 0, 1, 255, 9, 0 )
            set Setting_PartyInitialized |= 1
        }
        if ( ( ( Setting_PartyInitialized >> 2 ) & 1 ) == 0 ) {
            SetCharacterData( 2, 1, 255, 6, 2 )
            set Setting_PartyInitialized |= 4
        }
Quote
For model swapping, I'm working on it but I don't guarantee anything for the next release.

Oh do not worry about it, I still wait with hope!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Squid7777 on 2018-05-26 19:10:34
Yes, that worked, thank you ToraCarol!
Title: Re: [FF-IX] Hades Workshop
Post by: ploppo on 2018-05-27 18:22:58
@ToraCarol thanks :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Squid7777 on 2018-05-27 20:35:04
I want to add damage to the Break attacks Steiner has. So, it does damage like a regular attack, and also performs the Break (Power, Armor, etc.) Is there any way to do that?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-27 22:54:02
I want to add damage to the Break attacks Steiner has. So, it does damage like a regular attack, and also performs the Break (Power, Armor, etc.) Is there any way to do that?

Change the Effect of the spell. To either Magic Attack, etc.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-28 08:08:23
@ploppo: About adding Beatrix, the simplest ways if you don't care about story are to use either CheatEngine or Albeoris's Memoria (the latter is the easiest but not compatible with changes made with HW).
I don't do team viewer or other things like this. I explained precisely how to import Beatrix out of my mod and if you made a mistake the 1st try, just try again ^^'

About Salamender/Zidane trance skills, the most probable if I got it right is that you only swapped the command in the "Stats" panel.
In the "Stats" panel, you need to:
1) Remove the "Trance link" of those characters by setting the option to "None",
2) Replace the abilities from the ability list to the ones used by the trance commands.
If you apply 1) without 2), you should be able to use all the abilities without learning them. If you apply both 1) and 2), you'll make these abilities learnable exactly the same as for the other abilities. In particular, you should also make sure that Zidane's weapons (and Salamender's) teach the trance abilities instead of the normal ones.

@Squid7777: It is not possible without changing the battle engine (the solution proposed by Incinerator doesn't work because Break abilities are not statuses). There are 2 ways of changing the battle engine: using Albeoris's Memoria tool (not compatible with HW) or using a C# DLL editing tool (compatible with HW as long as you don't mess with sensible parts of the engine).
I suggest that you use dnSpy for that.
What you need to do is to edit the class "btl_calc". More specifically, the method "CalcMain" of that class and even more specifically, the cases 33, 34, 35 and 36 in the switch. It should be something like this by default:
Code: [Select]
case 33:
case 34:
case 35:
case 36:
btl_calc.CalcSub_101(cALC_VAR);
btl_calc.CalcSub_114(cALC_VAR);
if (btl_calc.CalcSub_121(cALC_VAR))
{
if (prog_no == 33)
{
DEF_PARAMS expr_F0B = target.defence;
expr_F0B.p_def /= 2;
}
else if (prog_no == 34)
{
target.elem.str = target.elem.str * 3 / 4;
}
else if (prog_no == 35)
{
DEF_PARAMS expr_F54 = target.defence;
expr_F54.m_def /= 2;
}
else if (prog_no == 36)
{
target.elem.mgc = target.elem.mgc * 3 / 4;
}
}
break;
The "CalcSub" lines are quite abstruse.
"CalcSub_101" setups the accuracy of the spell,
"CalcSub_114" lowers the accuracy if Shell is on,
"CalcSub_121" performs the accuracy check: what is inside the "if" block is executed only if this check connects and the "missed" flag is turned on otherwise.
In that file (https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0), I've copied the "btl_calc" class and renamed the "CalcSub" methods to make it more readable. You can look at it to understand how spell effects work.

What you want to do is changing these lines to something like this:
Code: [Select]
case 33:
case 34:
case 35:
case 36:
btl_calc.CalcSub_101(cALC_VAR); // Accuracy for the break effect
btl_calc.CalcSub_114(cALC_VAR); // Shell hit rate malus for the break effect
if (((int)v.hit_rate > Comn.random16() % 100) && ((int)v.ev <= Comn.random16() % 100)) // conditionally lower stat
{
if (prog_no == 33)
{
DEF_PARAMS expr_F0B = target.defence;
expr_F0B.p_def /= 2;
}
else if (prog_no == 34)
{
target.elem.str = target.elem.str * 3 / 4;
}
else if (prog_no == 35)
{
DEF_PARAMS expr_F54 = target.defence;
expr_F54.m_def /= 2;
}
else if (prog_no == 36)
{
target.elem.mgc = target.elem.mgc * 3 / 4;
}
}
// Unconditionally damage the target:
btl_calc.CalcSub_13A(cALC_VAR); // Setup base damage like a physical strike
btl_calc.CalcSub_141(cALC_VAR); // Apply caster bonuses of Bersek/Trance and malus of Mini
btl_calc.CalcSub_143(cALC_VAR); // Apply target bonuses of Sleep/Mini and maluses of Defend/Protect
btl_calc.CalcSub_159(cALC_VAR); // Apply equipment elemental boosts of the spell element
btl_calc.CalcSub_203(cALC_VAR); // Setup the damage... Everything else is handled by "CalcResult"
break;
It's a kind of mix between "Break" spells and "Physical Strike" spells.

@ToraCarol: I'm not sure...
These lines from the "Main_Init" function are definitely wrong:
Code: [Select]
    while ( GetBattleState != 1 ) {
        if ( #VAR_GlobUInt16_42 ) {
            set VAR_GlobUInt16_42[PRESENCE_OFF] =$ 1
        }
        Wait( 1 )
    }
Use these instead:
Code: [Select]
    while ( GetBattleState != 1 ) {
        Wait( 1 )
    }
    if ( #VAR_GlobUInt16_42 ) {
        set VAR_GlobUInt16_42[PRESENCE_OFF] =$ 1
    }
Also, you should import the .hws file "LocalVariableSettings": in the AI scripts, it gives names to the local variables and make it much more readable (you'll see "dagger" and "blank" instead of "VAR_GlobUInt16_28" and "VAR_GlobUInt16_42" for example).
But I'm not sure that it will fix the bug... I'll try to investigate it if it doesn't work, but I'm busy with the next version of HW right now.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-28 10:21:32
@Tirlititi my objective is to unlock her permanently , not temporary , so i don't know how i could do with cheat engine , and if i can permanently have her with that engine tool than i could be nice if hw become compatible with it , but what exactly is the reason why is not compatible ? and i was thinking about the reason of the failure : all i did was to download the alternate fantasy files from your post on steam, so maybe that can be the mistake , then , i followed your guide , and i unticked everything except the "text" and the "fields" parts , after importing i modified that part of the script in the boss fight that would be glitcky , still no trace of beatrix , maybe the problem depend on the fact that i applied the mod after several saves and several progress in the plot , or maybe the problem come from the language i selected initially (italian), what do you think ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Tirlititi on 2018-05-28 10:30:21
Yes, you need to select the english (US) language. There is no italian translation right now (after the next release of HW, I'll work on an international version of Alternate Fantasy).

The problem with Albeoris's Memoria is that it changes sensible parts of the engine. The spell datas, for instance, are not stored in the same format anymore after applying Memoria.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-28 15:46:26
@Tirlititi ok , in any case , i deleted the previous save and started the game in english language , this time it should work , i mean i am not an hacker , but i take a look at the entries menu in hw , and i see that both zidane and beatrix have the "2" , while the non existent characters  in that zone have the "255" , but is possible that zidane need a "1" instead of a "2" ? i mean , is possible that she doesn't appear because of that corresponding number ? come to think of it , after an initial failure i take a look at the conversation in the steam forum , this time , before start the game in english , i injected the parts that contain beatrix trough a what you called " the before_scene " or something like that , but i don't know if that can be a problem or not
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-28 17:35:05
@Tirlititi.. thank you so much! I know that the follow code you sent me was the right one, but I've tried to change place for testing.. because when the battle is starting, at very first the "floating sword" of Blank appears, and when the ATB stars it desappear! (already the camera is not the best, so imagine)

(https://i.imgur.com/4Rxw4KF.png)


 I've tought that doing something like this it may have solved the problem.. and it did...but.. it creates me one even worse! So, ok, thanks to you now I know that I have to try something else..so..I'll give a chek, but if anyone will find a solution before me I will be so thankful!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-28 19:22:49
@Tirlititi   even after starting the game in english language , she doesn't appear in the castle coutryard :\ , at this point i could try to add her by myself once i reach the part of the plot were i can fight kuja for the lust time
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-28 21:27:11
@ToraCarol @Trilititi : i managed to solve the problem , in trith i followed the procedure correctly , the real problem is something that none mentioned in any post , that is : if we select a certain language in hades workshop , we are modifying the relative language in the game itself , but usually those kind of programs doesn't have this clause , at least isn't something common for a non hacker , essentially , the first three times i applied the mod to the italian language of ff9 , so the only result was to not make her appear in the castle to recruit her , and also to corrupt the italian translation , but after i selected the english language in the program , and also running the game since the beginning in english , she finally appeared , in short , those kind of details are very important to know , it was only for a coincidence that i attempted to apply the mod after selecting the english text in the program
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-29 15:45:22
@Tirlititi link thanks , i solved the problem about the trance command of zidane and amarant, usually they only appear when they are in trance because those abilities aren't present in three apposite sections used to tell the game that a certain character have a certain ability , in short , to give any ability we want to any character we want we must : place the command\support ability in the skill list of an equipment that belong to the character that we chose , and do the same in the command\support ability section , and if we want to give to someone a command , we also must place that command in the list of abilities that belong to a certain command
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-29 18:28:20
@Tirlititi  were the game store and assign the music to play during the random battles ? i like to substitute the usual battle them with the ost " you are not alone " :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-29 19:28:07
@Tirlititi  were the game store and assign the music to play during the random battles ? i like to substitute the usual battle them with the ost " you are not alone " :D

It's stored resources.assets :: BtlEncountBgmMetaData.txt
It's arranged as:

Code: [Select]
  "2924": { // field ID
    "138" // Enemy ID : "35", // Music to Play

Though for You're not Alone event in particular, the function is ran from the script, with "RunSoundCode( 0, 0 )"; played throughout the scene. The three battles are not present in BtlEncountBgmMetaData.txt, to prevet the changing of music during battle encounter.
It is in the Main_Loop function of field: Pand./Mind Control IIRC.

Change it from the script; change it from p0data61.bin
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-29 19:33:14
@Incinerator ok thanks,i will try and let you know the results :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-29 20:02:17
@Incinerator  but wait a minute : what option  i have to look in hades workshop to do that ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-29 20:07:25
@Tirlititi the  0.40 version of hades worhsop doesn't show all the battle spots , the previous version show almost 400 battle spots , but this version only show 127 battle spots , how can we fix that ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-29 20:13:33
@Incinerator  but wait a minute : what option  i have to look in hades workshop to do that ?

(https://i.imgur.com/sKPqHHW.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-05-29 20:18:29
@ploppo: The musics are in the "p0data61" archive. You can replace them using the Unity Assets Viewer (in the "Tools" menu). Only .ogg files are accepted. Incinerator's answer is more complete, if you want to change some the musics of individual battles.
Also, the battle spots are still there, just displayed better (there was only the first 4 battles in each spots before and spots at the same place were not shown together).

Update to v0.40:
- Improved the text changing window:
--- Fixed the crash of the PSX version,
--- Added a proper preview of most Steam text opcodes,
--- Allow to change all the languages on the same window,
--- Compute the dialog bubble size, approximately.
- Added a language link between scripts (AI scripts, World Map scripts and Field scripts):
--- When languages are linked, any modification on the script of one language also applies to the linked languages,
--- Except for dialog text IDs, the scripts of linked languages are the same (you can choose the translations of each text ID),
--- By default, if two language scripts only differ by the text IDs of the dialogs, they are linked,
--- The scripts batch exported are exported in all the languages checked in the "Preferences".
- Added a preview for the item icons in the Steam version (it was already there in the PSX version).
- Improved a bit the display of the World Map Battle Spots.
- Fixed some bugs (crash for some .hws files, crash when editing scripts after adding/removing a function, crash when trying to edit the "Opening-For FMV" Field...).

So, with this new version, you can, without too many troubles, create mods that are compatible with all the languages.
As I said, you can't automatically translate the texts right now, but it will be possible eventually (keeping in mind that it will be nowhere as good as true translations ; it will be about "google-translate" quality and manage the opcodes of the translations more easily). I didn't add a way to import PSX texts in Steam or vice versa. I'm not sure if it will be a thing one day (well, if really I don't have anything more to do).

Also, about the "STRT" opcode, it is updated when clicking on the "Auto-Size" button but it's not very important to have a precise width (the height is just the number of lines). If the specified width is too short, the game automatically choose the best fitting width.
It is however extremely important to have exactly one STRT opcode at the start of all the texts (at least in the "Texts" panel), even in texts that are not actually used.

Also, I tweaked the way that 3D models are imported, especially when custom model hierarchy are used, but I couldn't make everything work unfortunatly :/
I saw that replacing the 3D models of main characters is quite complicated (even swapping models) but it is possible: it needs to really make it perfect to have the good animations (so, let's say you use Quina's model instead of Zidane's, you'd need to rename the animations of Quina to fit the names of the animations of Zidane, not to mention to import everything properly with the right path names)... I'm not sure if I can make the process easier because it seems very dependant to what the engine expects... and when there is a dummy animation together with the model in the p0data4 archive, it has to be imported as well (for some reason, it's important to have this dummy animation when it's there by default).
Accessory, enemy and NPC models are much easier to change than models of the main characters (for battles, there's an additional problem since normal battle models and trance battle models share their animations).

EDIT: I forgot to add. About script languages that are linked and those that are not:
Most of the times Field scripts are the same between languages except for minor differences (but sometimes not so minor).
1) The Japanese version is not often linked to others because the buttons used are not the same. In particular, most of the time, when the script awaits a "Confirm" or "Moogle" button in the international versions (when dialog bubbles are handled by the script, for instance), it awaits a "Cancel" or "Moogle" button instead in the Japanese version.
2) In the Japanese and US versions, some "Wait" times are higher than in the other versions (surely to catch up with the PAL/NTSC frame rate). It is not always the case, far from that, but it may happen that a "Wait( 60 )" in the US/Japanese version is a "Wait( 50 )" in the European versions.
3) Dummy differences: it happens sometimes that dummy lines, with no effect, are present in some languages and not in the others. An example of this is the Chocobo Forest's UK script where an extraneous local variable is set up but never used (as part of the functions dealing with the display of the "Chocobo Forest" title tiles).
4) Real and important differences: there are a couple of real differences between the different languages. The most known is the reward of the Blank swordfight minigame (there is no static reward of 10000 gil when performing a 100/100), but there are also titles tiles that are displayed a bit differently, or some "Wait" lines added in some cutscenes... The AI script of Ragtime Mouse is also different in the US language because, contrary to all the other versions, the questions are displayed in 2 successive dialogs in US instead of 1 dialog with two lines.
Even though, it is usually safe to force the link on all the languages (except for the button mapping in Japanese that can be troublesome for people used to it). If you do force the link, you'll have to verify that dialogs used in the scripts are using the correct translation (as you may have noticed, the number of texts varies from language to language: some unused texts are removed/added in some versions, creating a shift in the text IDs).

I will now work on Alternate Fantasy for a while. I'll make an international version first, but then I'll also work on the mod ; I'm planning to only work sparsely on HW while doing that.

Also, I have once again changed a lot of things related to .hws file format (for script and text datas) ; I have done tests to check if that goes without bugs and didn't find any, but everything is possible. So I advise you to have copies of you .hws files (anyway, these files are so low-sized that I advise to have backups of them in any case).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-29 20:27:25
@Tirlititi  @ToraCarol ok thanks :D , and my interest in to change the background music of all the random battles
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ToraCarol on 2018-05-29 20:29:53

Also, I tweaked the way that 3D models are imported, especially when custom model hierarchy are used, but I couldn't make everything work unfortunatly :/
I saw that replacing the 3D models of main characters is quite complicated (even swapping models) but it is possible: it needs to really make it perfect to have the good animations (so, let's say you use Quina's model instead of Zidane's, you'd need to rename the animations of Quina to fit the names of the animations of Zidane, not to mention to import everything properly with the right path names)... I'm not sure if I can make the process easier because it seems very dependant to what the engine expects... and when there is a dummy animation together with the model in the p0data4 archive, it has to be imported as well (for some reason, it's important to have this dummy animation when it's there by default).
Accessory, enemy and NPC models are much easier to change than models of the main characters (for battles, there's an additional problem since normal battle models and trance battle models share their animations).

I will now work on Alternate Fantasy for a while. I'll make an international version first, but then I'll also work on the mod ; I'm planning to only work sparsely on HW while doing that.

Also, I have once again changed a lot of things related to .hws file format (for script and text datas) ; I have done tests to check if that goes without bugs and didn't find any, but everything is possible. So I advise you to have copies of you .hws files (anyway, these files are so low-sized that I advise to have backups of them in any case).


Aaaaw, so no way for me to add Lani...  :oops: You know, I've tried by replacing names and stuff.. I've tried to check everything but.. I don't know, the game still go crashing! I think that for some reason I forgot something for sure!

Thank you anyway for your hard work Tirlititi!

Oh yeah I wanted to ask you

1) May you know the reason of that floating sword of Blank at the beginning and how to remove it?
2) I want to create a window ability exclusive for Blank.. but i REALLy can't figure how to create one, I mean there's no space in any case and it says me about "link" and stuff, but I don't know the best way to "sacrifice"  spells etc etc, can you give me a hint?
3) Talking about music... how is the best way if I want to replace a music with an external one, so not already in the game?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-29 20:44:27
@ToraCarolmaybe i can help this time : i was having crush problems even before open hades workshop the very first time , so i take a look at some conversation on steam and i learned the cause : developers just were too careless to set the compatibility with the multiple core , so , to solve the problem , run the game and after the first logo appear , open the task manager , right click on FF9 process and click on " show more details " or something similar , then , right click on the FF9 process again and click on something similar to " set affinity " , that will open the panel of the affinity with the core , you must untick every core besides the core number 0 , that will assure limitless hours of play without any problem , i tested this solution :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-29 20:53:47
Awesome work as always T.
We got further now with importing custom model: HW will bring up a message to Insert New Asset: "Take001.anim", then proceed to crash. I'll be testing away with this one; been meaning to try this plan, see if it works.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-05-29 21:00:35
@ToraCarol:
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).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-29 21:13:52
Error:
Code: [Select]
The AnimationClip '' used by the Animation component '443(Clone)' must be marked as Legacy.
I got this error after tweaking my model; at least the game didn't crash, however:

Warning: Do not attempt model swapping; it will cause the game to use up all your ram.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-29 21:17:40
@Tirlititi come to think of it , i always wanted to ask you something : long ago you said that the engine can't handle some enemy spells wen you try to make them usable for the player , how this is possible ? it's the same game , the same..everything , why should make a difference the fact that , for example , zidane is using ultima ?  :-o
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-29 21:24:55
@Tirlititi so i am the only one with this problem in the battle spot section ? the first 4 lines appear , but the other group of four lines doesn't appear
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-29 21:26:18
zidane is using ultima ?  :-o

I believe he said with Ultima, it's something about the battle not being able to continue after using it as a regular spell.
Of all the enemy spells this one can be used. Even some of the [Enemy-Death] animation can work as spells given it added damage figure points.
One hopes for HW to edit spell animations more deeply.

@Tirlititi so i am the only one with this problem in the battle spot section ? the first 4 lines appear , but the other group of four lines doesn't appear
Doesn't happen with me...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-29 21:33:00
I believe he said with Ultima, it's something about the battle not being able to continue after using it as a regular spell.
Of all the enemy spells this one can be used. Even some of the [Enemy-Death] animation can work as spells given it added damage figure points.
One hopes for HW to edit spell animations more deeply.
Doesn't happen with me...

i see , a temporary solution could be something like : create a copy of a global magic like doomsday , then give it the animation of ultima,  but not every aspect of the animation , only the physical appearance and the sound effect , but for the rest , it will be the usual doomsday
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-29 21:35:33

Doesn't happen with me...
[/quote]

hmm , maybe the problem is my pc , maybe something related with the video card , i have an outdated acer aspire 6930 g XD
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-29 21:39:26
I will now work on Alternate Fantasy for a while. I'll make an international version first

Will it be getting extra features exclusive for the international version??

*.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-29 23:21:15
@Incinerator  @Trilititi ok i solved the problem of the new battle spot interface , in my pc i have to reduce the window , then set the full screen , and the interface become completely visible , and now i see how this modification is excellent , it show the disposition of the enemies before and after the explosion of mist
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 02:39:21
It's stored resources.assets :: BtlEncountBgmMetaData.txt
It's arranged as:

Code: [Select]
  "2924": { // field ID
    "138" // Enemy ID : "35", // Music to Play

Though for You're not Alone event in particular, the function is ran from the script, with "RunSoundCode( 0, 0 )"; played throughout the scene. The three battles are not present in BtlEncountBgmMetaData.txt, to prevet the changing of music during battle encounter.
It is in the Main_Loop function of field: Pand./Mind Control IIRC.

Change it from the script; change it from p0data61.bin

i need some more instructions :\ , i found the p0data61 in the unity assets section , and i found the song i want to replace and the one to make the substitution , but from there i can't see how i can switch those osts , also , in the main_loop section of pand\ming control i didn't found " RunSoundCode( 0, 0 ) " , but only " RunSoundCode( 16897, 48 ) " and some other numbers , but probably i wasn't clear enough , my objective is to have the ost " you are not alone " , during the random battles , not the opposite :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-05-30 06:42:32
@ToraCarol:
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).

1) Ok, thanks a bunch! Let me know in case ;)
2) I know,  but I really cannot figure what can be the best solution if I want to make this slot for Blank with his 4 own abilities.. for example, I tried to share with Zidane..but the fact is that he simply share the same abilities with Zidane, and I cannot try to modify, because are linked and if I remove abilities for Blank I'll remove also for Zidane..so I really don't know how to do!!
So what is your suggestion? How did you do with Marcus's ability?
3) My god..sorry! I really missed it! :oops: Thank you so much!

Another little question, just because I'm curios.. it's possible to give to Blank a Trance comand too? Or is something kinda hard?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-30 07:41:06
i need some more instructions :\ , i found the p0data61 in the unity assets section , and i found the song i want to replace and the one to make the substitution , but from there i can't see how i can switch those osts , also , in the main_loop section of pand\ming control i didn't found " RunSoundCode( 0, 0 ) " , but only " RunSoundCode( 16897, 48 ) " and some other numbers , but probably i wasn't clear enough , my objective is to have the ost " you are not alone " , during the random battles , not the opposite :D

Exactly it right here. The RunSoundCode. You just seen it.
Right, so I did see unclear. For wanting Your not Alone as battle bgm; (this be easier you), swap out the your not alone bgm (IIRC music028.akb,bytes) with battle bgm: (music006.akb.bytes)

BEWARE:
Some hz with bgm play different ignoring that of sdlib.dll you're okay with you're not alone bgm.

it's possible to give to Blank a Trance comand too? Or is something kinda hard?

According to Tirlititi, not possible to give them trances because of many reasons I don't completely know. One being they don't have a trance model.
Interesting test I did a long time ago:
Making one of the Tantalus members or Beatrix apply trance on themselves (e.g. some spell to apply trance to target) would actually make them go into trance with the set command and everything. And even more bazaar, they'd mimic a trance bar, as it "goes down" with every turn (even though there's no trance bar there); they also sometimes turn transparent/semi-transparent when at this "improper trance". The exception to all this being once their "trance" 'ends', the game will freeze and crash. Maybe some datas with trying to load non trance model after trance ends; i don't know, Tirlititi to clarify.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-05-30 08:48:08
@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 && btl.bi.player == 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 ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-05-30 11:24:58


@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 && btl.bi.player == 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) Aaaaaaaaah!!! Oh my!! Ok, maybe, MAYBE, I got it this time... in case I didn't I'll let you know.. please understand me.. I'm a mess  ;)
2) Ah! Yeah that's it! I forgot to mention that there was the same identical problem with Dagger Weapon. My, I seriously can't believe that the Steam version is full of bug..thanks a bunch!!! I'll try then!

Talking about bug, there was an old error that i need to try to take hand now that I know better how to do, anyway I'll try to explain, maybe you can also give me an hint on this!
Is at the Ipsen Castle, so.. I would to know two things...

- It may be possibilities to take Blank in the Party even if Amarant isn't in?
-How could I avoid this error? --> http://forums.qhimm.com/index.php?topic=14315.1050 (is the last topic in the page)

It would be nice if now I'll be able to add Blank in every scene of Ipsen Castle, the last ones too!
As Incinerator said, it may be a missing piece of the puzzle if I did not put him in... and I think it may be a pity!

3) Too bad that Memoria and Hws are not compatibles each other, togheter they could give birth to a fantastic modded game in my opinion! Thank you anyway for your kind answer, really!
 You guys are helping me alot!
 
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 11:54:25
@Incinerator @Trilititi ok thanks , now i try to swap the ost and let you know :D , i am sure it will be easy , infact now i want to ask some other information : i want to become immune to the "snort" attack of the yan , you know , the one who can literally send a character to fuck lol , so how can i do that ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-30 14:01:13
@Incinerator @Trilititi  it worked , i extracted the ost i wanted , extracted the ost that must be substituted , and renamed the ost i wanted with the name of the original one , and now i can hear " you are not alone " every time i want :D , but there is another problem related to the music that  i need instructions for : i placed tantarian and ozma in the isle were normally we can find the yan , and now , every time i fight with tantarian or ozma , there isn't any music , so what's the procedure to solve this problem ? i mean , maybe it depend on the fact that for the bosses i must place an ost in the field were it appear , but i am not sure about that  ; why in the steam version isn't possible to access the "battle scene" page ? is important for me to solve this problem because i also have to set the song "jaster of the moon" during all the fights against zon and trom , including the fight were they return to their original form XD
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-05-30 15:18:04

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
}


It works perfectly, no mid-air wapons finally!..but, now there's a little problem!! Zidane attacks instead of Dagger and Blank when i try to call their commands..but why?? :'(

UPDATE: And..another thing that I noticed now..the model of Dagger didn't showed off correctly. I mean there's her floating head and..yeah.. it's quite embarassing  ::)

(https://i.imgur.com/WVWtKyF.jpg)

UPDATE2: I can stay ok with the bug if only the camera may be changed and make a better shot...man, that camera thing pisses me off  >:(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-30 20:54:28
@trilititi , did you ever considered the possibility to create a modding program like hades workshop for final fantasy 8 ? it is really needed you know , for now the only things that are created for that game are mods to make the game harder , but nothing for people who want to have fun :\ , there are some comments of mine before this one :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-30 21:02:56
i want to become immune to the "snort"

Don't believe that possible (with basic editing?)
Snort removes a target from battle; don't think there's an innate way to be immune to that.

i placed tantarian and ozma in the isle were normally we can find the yan , and now , every time i fight with tantarian or ozma , there isn't any music , so what's the procedure to solve this problem ?

If I hear correctly, you placed Tantarian and Ozma fightable on the world map where Yans are originally found (on vile island??)

If so, and anytime you move/add an enemy to a new field to battle; for the encounter music to play, you must edit the BtlEncountBgmMetaData.txt for fields and/or WldEncountBgmMetaData.txt for world map enemies.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 21:07:34
Don't believe that possible (with basic editing?)
Snort removes a target from battle; don't think there's an innate way to be immune to that.

If I hear correctly, you placed Tantarian and Ozma fightable on the world map where Yans are originally found (on vile island??)

If so, and anytime you move/add an enemy to a new field to battle; for the encounter music to play, you must edit the BtlEncountBgmMetaData.txt for fields and/or WldEncountBgmMetaData.txt for world map enemies.

so about the snort , i fortunately found a temporary solution , i just nullified the effect of the snort but selecting the "no effect" in the ability section of the jan , so basically the yan use snort , but i can't really erase anyone , but i prefer a genuine immunity , like every other negative status :D , and about tantarian and ozma , yes , i placed them in vile island XD , and now i need to know how to associate to them some music again , i must do the same to change the ost when i fight zon and trom , can you be a little more specific ? because this time isn't only a matter of switch an ost , i must give an ost to a boss that no longer have it , while the yan in the isle still have it despite the fact that i changed their location , infact , the friendly yan is now outside of the black forest , it is in the dirt , along with the normal yan , while in the little forest i placed ozma and tantarian, the only thing i got is that both the files you mentioned can be found trough the unity asset viewer of hades workshop
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-30 21:14:24
i placed them in vile island XD

That's what I thought, so yes, you must edit: WldEncountBgmMetaData.txt

Add the enemies' ID to the list.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 21:17:28
That's what I thought, so yes, you must edit: WldEncountBgmMetaData.txt

Add the enemies' ID to the list.

ok but what exactly i must do to accomplish that ? i must open the unity engine assets with hades workshop , then how i proceed ? were can i find the enemy id ? and how can i change the music that is played when i face zon and tron ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-30 21:24:04
ok but what exactly i must do to accomplish that ? i must open the unity engine assets with hades workshop , then how i proceed ? were can i find the enemy id ? and how can i change the music that is played when i face zon and tron ?

Yes like Tirlititi said, use Unity assets viewer, open archive resources.assets, navigate and find WldEncountBgmMetaData.txt extract it.

You can see enemy id in HW by checking "Show Enemy IDs"; in WldEncountBgmMetaData.txt, you identify which BGM to play by placing it's ID with the syntax.

ex:

Code: [Select]
  "9000": { // world loc. ID
    "138" // Enemy ID : "35", // Music to Play (35 is boss battle theme)

For Zorn and Thorn, edit the BtlEncountBgmMetaData.txt and do the same.
You can check the field of where Zorn and Thorn is encountered at Alexandria/Chapel, iirc, find it's ID.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 21:26:16
Yes like Tirlititi said, use Unity assets viewer, open archive resources.assets, navigate and find WldEncountBgmMetaData.txt extract it.

You can see enemy id in HW by checking "Show Enemy IDs"; in WldEncountBgmMetaData.txt, you identify which BGM to play by placing it's ID with the syntax.

ex:

Code: [Select]
  "9000": { // world loc. ID
    "138" // Enemy ID : "35", // Music to Play (35 is boss battle theme)

For Zorn and Thorn, edit the BtlEncountBgmMetaData.txt and do the same.

ok thanks , i will let you know the results , in the mean time i want to say that i hope that someone create a program like hades worshop even for final fantasy 8 , there are already too many mods that only make the game more hard , there are also people like me who want the possibility to have fun and become extremely strong and annihilate any enemy like is nothing :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 21:51:59
@Incinerator sorry if i am taking so much time to understand but i have problems to find what you told me to find , in the archivie the options are : streaming assets , levels , shared assets , what's the option i must select ? and once i select it , what file i must chose ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-30 22:17:51
@Incinerator sorry if i am taking so much time to understand but i have problems to find what you told me to find , in the archivie the options are : streaming assets , levels , shared assets , what's the option i must select ? and once i select it , what file i must chose ?

resources
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 22:34:49
resources

so it must be : resources assets -> resources , right ? but i still don't find those two files , maybe i don't find them because they have a different name after the patch :O
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-30 23:39:58
so it must be : resources assets -> resources , right ? but i still don't find those two files , maybe i don't find them because they have a different name after the patch :O

They have the same name and are in resources.assets. Sort names alphabetically to aid in search the list.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-30 23:51:00
They have the same name and are in resources.assets. Sort names alphabetically to aid in search the list.

ok i finally found them :D  thanks
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-31 01:07:59
@Incinerator ok , i am noticing something strange in those txt files : there is always the "0" as ost to play , and the ost number 0 is the main theme of the game , the other number used is the 61 , what's the meaning of this ? according to this values there are only two osts used , but this isn't really possible :\
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: Incinerator on 2018-05-31 04:44:39
@Incinerator ok , i am noticing something strange in those txt files : there is always the "0" as ost to play , and the ost number 0 is the main theme of the game , the other number used is the 61 , what's the meaning of this ? according to this values there are only two osts used , but this isn't really possible :\

BGM ID - 0 is the battle theme not title BGM.
Not sure what you're viewing, I can't check it right now; show what you're seeing.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.39b)
Post by: ploppo on 2018-05-31 11:15:13
BGM ID - 0 is the battle theme not title BGM.
Not sure what you're viewing, I can't check it right now; show what you're seeing.

this is what i am seeing in worldencounterbgm:

{
  "9000": {
    "5": "0",
    "7": "0",
    "8": "0",
    "11": "0",
    "25": "0",
    "26": "0",
    "42": "0",
    "46": "0",
    "48": "0",
    "49": "0",
    "50": "0",
    "54": "0",
    "68": "0",
    "69": "0",
    "70": "0",
    "72": "0",
    "133": "0",
    "136": "0",
    "137": "0",
    "140": "0",
    "141": "0",
    "142": "0",
    "143": "0",
    "144": "0",
    "145": "0",
    "146": "0",
    "147": "0",
    "148": "0",
    "149": "0",
    "156": "0",
    "157": "0",
    "161": "0",
    "162": "0",
    "164": "0",
    "165": "0",
    "172": "0",
    "174": "0",
    "175": "0",
    "177": "0",
    "180": "0",
    "182": "0",
    "183": "0",
    "184": "0",
    "185": "0",
    "186": "0",
    "187": "0",
    "188": "61",
    "189": "61",
    "190": "0",
    "192": "61",
    "193": "61",
    "196": "61",
    "197": "61",
    "199": "61",
    "201": "0",
    "202": "0",
    "204": "0",
    "205": "0",
    "206": "0",
    "207": "0",
    "208": "0",
    "209": "0",
   "211": "6",
    "212": "0",
    "214": "0",
    "215": "0",
    "216": "61",
    "217": "61",
    "218": "0",


that "211": "6", is my attempt to set the ost for ozma since the main battle ost is the number six according to the list of the ost inside the game , and sorry for the late reply but i was sleeping , right now i am looking for all the sound related files and i noticed this "songmetadata" , maybe that's the right file to check ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-31 13:37:36
i found this in the btlencountbmmetadata :

},
  "2927": {},
  "2928": {},
  "2929": {},
  "2930": {},
  "2931": {},
  "2932": {},
  "2933": {},
  "2934": {},
  "2950": {},
  "2951": {},
  "2952": {
    "57": "35",
    "211": "35"

i can imagine that it is the ost associated to ozma , infact both "57" and "211" are the id of ozma , maybe i have to copy the hole paragraph ? maybe i am getting a different structure because i updated the game to the latest patch ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-31 16:33:05
1. Songmetadata is not related to this.
2. The ID of battle theme main is 0.
3. Bgm ID 61 is fairy battle theme.
4. Only place:
Code: [Select]
”57”: “35”,
 “211:”35”

syntax in wldencountbgmmetadata.txt~all loc., (9000, 9001, etc.)

And lastly, this file is not changed from any patch you may have missed before. It still reads the same.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-31 16:48:01
1. Songmetadata is not related to this.
2. The ID of battle theme main is 0.
3. Bgm ID 61 is fairy battle theme.
4. Only place:
Code: [Select]
”57”: “35”,
 “211:”35”

syntax in wldencountbgmmetadata.txt~all loc., (9000, 9001, etc.)

And lastly, this file is not changed from any patch you may have missed before. It still reads the same.

ok , but i also need to place them under every list for every "9000, 9001..."? , and equally important , in what position exactly i have to place them ? because the list under every world id is pretty long and i need to know if i can place those two captions one under the other one even if between and after those captions there are enemies id that doesn't match with the numeric order
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-31 18:05:16
ok , but i also need to place them under every list for every "9000, 9001..."? , and equally important , in what position exactly i have to place them ? because the list under every world id is pretty long and i need to know if i can place those two captions one under the other one even if between and after those captions there are enemies id that doesn't match with the numeric order

I don’t know atm, which ID spot is vile island, so I’d put in every list, just to be sure/safe.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-31 18:19:26
I don’t know atm, which ID spot is vile island, so I’d put in every list, just to be sure/safe.

yup , but i also need to know were , i mean , is ok to place in a random spot between a line and another one , or i must chose a specific position ? i don't know if this can influence the result
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-31 18:26:12
yup , but i also need to know were , i mean , is ok to place in a random spot between a line and another one , or i must chose a specific position ? i don't know if this can influence the result

Place it anywhere within the syntax.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-31 18:30:44
Place it anywhere within the syntax.

ok i will try that and let you know :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-31 21:57:59
i was thinking about the incompatibility between hades workshop and the engine editor memoria , maybe a solution can be this : if , and only if memoria put the spells data in a different place , but always in the same different place , it would be sufficient to find the new collocation , and set hades workshop to look in the zone were the spells data are placed , but i am not an hacker , i just tried to give a good suggestion XD
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-05-31 22:22:43
i was thinking about the incompatibility between hades workshop and the engine editor memoria , maybe a solution can be this : if , and only if memoria put the spells data in a different place , but always in the same different place , it would be sufficient to find the new collocation , and set hades workshop to look in the zone were the spells data are placed , but i am not an hacker , i just tried to give a good suggestion XD

Memoria uses a different Assembly Csharp than the vanilla for starters; with Memoria methods embedded into it, be one of the reasons it’s incompatible. It edits the csharp. The closets one’s gonna get for now is to manually edit Assembly CSharp with a C# decompiler/compiler. (dnspy, Visual studio etc.)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-05-31 22:39:23
Memoria uses a different Assembly Csharp than the vanilla for starters; with Memoria methods embedded into it, be one of the reasons it’s incompatible. It edits the csharp. The closets one’s gonna get for now is to manually edit Assembly CSharp with a C# decompiler/compiler. (dnspy, Visual studio etc.)

i am sure that trilititi and the creator of memoria can fix this if they collaborate ,  not now ,  but probably once they create the final version of their program :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 00:54:42
i am sure that trilititi and the creator of memoria can fix this if they collaborate ,  not now ,  but probably once they create the final version of their program :D
don't think there'll technically be a final version for the program. between bug fixes, and features added; declaring final version could mean a possible stop growth in modding compatibility.
that'll be quite the wait then otherwise, as that will be completely up to them. In the meantime thought, manually C# is the route if you use HW and what Memoria similar features.
They both have their own program, doing their own thing. All respect I have for the both of them in their work & programs.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 04:42:50
don't think they technically be a final version for the program. between bug fixes, and features added; declaring final version could mean a possible stop growth in modding compatibility.
that'll be quite the wait then otherwise, as that will be completely up to them. In the meantime thought, manually C# is the route if you use HW and what Memoria similar features.
They both have their own program, doing their own thing. All respect I have for the both of them in their work & programs.

i see :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 14:42:37
@Incinerator so now i assigned doomsday to freya , the problem is that the animation become bugged when freya perform it , is there a way to solve that with hades workshop ? i noticed that there are some options used to edit the spell animation but i prefer to have some istructions before try something
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-01 15:29:27
I tried again, to check and try that "Lani swap". So, to test i tried to replace everything I found in p04data, so theBattleCinna is replaced now with everything of Enemy Lani. I know for sure that something is wrong but..the funny thing is that..NOTHING happens in the game I mean, it's like I didn't touched it! It really may be?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 17:05:24
I tried again, to check and try that "Lani swap". So, to test i tried to replace everything I found in p04data, so theBattleCinna is replaced now with everything of Enemy Lani. I know for sure that something is wrong but..the funny thing is that..NOTHING happens in the game I mean, it's like I didn't touched it! It really may be?

i know it isn't about your problem but can you contact me in private , if we are both italians then you can easily help me with something , nothing hard since i am not an hacker :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 17:28:17
@Incinerator so now i assigned doomsday to freya , the problem is that the animation become bugged when freya perform it , is there a way to solve that with hades workshop ? i noticed that there are some options used to edit the spell animation but i prefer to have some istructions before try something

Yeah when Freya is given a normal spell animation other than her Dragon skill, she performs animation “Jump” instead, I don’t know where this is handled, but Tirlititi mentioned it somewhere in the FF9SpecialEffectPlugin.

I tried again, to check and try that "Lani swap". So, to test i tried to replace everything I found in p04data, so theBattleCinna is replaced now with everything of Enemy Lani. I know for sure that something is wrong but..the funny thing is that..NOTHING happens in the game I mean, it's like I didn't touched it! It really may be?

If we’re hearing correctly, you did a successful model swap? Show screenshot if possible, Enemy_Lani replaced as BattleCinna as you speak.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-01 17:37:22


If we’re hearing correctly, you did a successful model swap? Show screenshot if possible, Enemy_Lani replaced as BattleCinna as you speak.

No, no..unfortunately it isn't like this!  ::) The fact "NOTHING happens" it means that nothing happens for real.. I mean that there is still Cinna, even if I imported Meshes, Gameobjects etc and replaced and added the missing texture and material..

Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 17:48:08
@Incinerator  but you are mentioning a comment in this discussion , or you are referring to the discussion in the steam forum ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 18:15:57
No, no..unfortunately it isn't like this!  ::) The fact "NOTHING happens" it means that nothing happens for real.. I mean that there is still Cinna, even if I imported Meshes, Gameobjects etc and replaced and added the missing texture and material..

Hmm...
@Tirlititi, could one replace the (Mesh) objects instead of the (GameObject) of the main characters? To avoid doing any extra?

@Incinerator  but you are mentioning a comment in this discussion , or you are referring to the discussion in the steam forum ?

Ask Tirlititi, where freya spell casting glitch could be handled, I don’t know myself.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 18:20:47
@Incinerator ok , we just need trilititi to read the recent pieces of conversation XD
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 18:57:22
@Incinerator 
 you think it will be ok if i insert the text for ozma in this way ?

},
  "9012": {
    "5": "0",
    "7": "0",
    "8": "0",
    "11": "0",
    "25": "0",
    "26": "0",
    "42": "0",
    "46": "0",
    "48": "0",
    "49": "0",
    "50": "0",
    "54": "0",
    ”57”: “35”,
      “211:”35”
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 20:07:03
even after that attempt i still don't hear anything during the battle with ozma , i don't get it , i double checked the "61" ost , and it correspond with the one for the friendly monster, so what is my mistake ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 20:07:17
@Incinerator 
 you think it will be ok if i insert the text for ozma in this way ?

},
  "9012": {
    "5": "0",
    "7": "0",
    "8": "0",
    "11": "0",
    "25": "0",
    "26": "0",
    "42": "0",
    "46": "0",
    "48": "0",
    "49": "0",
    "50": "0",
    "54": "0",
    ”57”: “35”,
      “211:”35”

That’s exactly how it’s to be entered.

even after that attempt i still don't hear anything during the battle with ozma , i don't get it , i double checked the "61" ost , and it correspond with the one for the friendly monster, so what is my mistake ?

Likely because you didn’t put the ozma’s ID in all field loc. IDs, like I said before.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 20:31:27
That’s exactly how it’s to be entered.

Likely because you didn’t put the ozma’s ID in all field loc. IDs, like I said before.


that's the strange thing , i did it , i placed those lines under all the (9000, 9001...), let's suppose that i didn't missed any map id , what else could be the cause, maybe the fact that since it is a boss i need some other setting to make that ost run ? ???
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 21:01:30

that's the strange thing , i did it , i placed those lines under all the (9000, 9001...), let's suppose that i didn't missed any map id , what else could be the cause, maybe the fact that since it is a boss i need some other setting to make that ost run ? ???

No, I’d check your entires again. It most certainly works, I’ve did it; tested it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 21:13:27
No, I’d check your entires again. It most certainly works, I’ve did it; tested it.

so you tried with ozma , i don't really know what to say , i will try again and let you know , in case it doesn't work , you think you could assist me with team viewer ? you will be the one that will enter in my pc , not the contrary
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 21:19:17
this is really strange , i tried to change the music that play when you fight the yan ( 784 ) under all the map id , still not a single change , it may depend on the fact that i changed the main battle ost ? and i really think i need your assistance with team viewer :\ , if i really didn't nothing wrong , then i think that i must baypass some sort of block , you think it is possible ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 22:38:39
this is really strange , i tried to change the music that play when you fight the yan ( 784 ) under all the map id , still not a single change , it may depend on the fact that i changed the main battle ost ? and i really think i need your assistance with team viewer :\ , if i really didn't nothing wrong , then i think that i must baypass some sort of block , you think it is possible ?

Are you sure moved the edited resources.assets file from x86 folder to x64?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 22:52:46
Are you sure moved the edited resources.assets file from x86 folder to x64?

let see : i never touched the x86 folder , i have windows 10 64 bit , also , i never touch the resources file in the x64 folder unless i modify something and i have to substitute it , but in this case all i did was clikc on " import selection " over the worldencountebgm , and the mention of the x86 folder is new for me , usually all  i do is to move the resources.asset file to the x64 folder once i save the changes on the new resource.asset file , just wait a minute , don't tell me that the changes to the sound file goes directly to the resources file of the x86 folder ?? :O , all my modifications are in the x64 file
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 23:05:53
don't tell me that the changes to the sound file goes directly to the resources file of the x86 folder ?? :O

Exactly. That’s how it is with me. Even if I check Folder x64 in HW Unity Assets Viewer, it still only edits in Folder x86. Still.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 23:14:44
Exactly. That’s how it is with me. Even if I check Folder x64 in HW Unity Assets Viewer, it still only edits in Folder x86. Still.


i think that this exaplain everything then , but i don't want to just trash all the modifications that i set to the resource.asset from the x64 folder , so , what if i put the resource.asset of the x64 folder , in the FF9_data of the x86 folder ? i will apply the modifications , and then , place the modded resource.assets again in the x64 folder , you think it will be ok ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-01 23:51:10
It’s fine.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-01 23:54:55
thanks , this information was really crucial , infact , now that i applied the modification to the resources asset of the x64 data after i put it in the x86 data , and the put it in the x64 folder again , the music run flawlessly , thanks :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 00:22:28
@Incinerator  but at this point i need the id of every soundtrack , do you have that list or maybe you know were i can find it ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-02 01:43:44
No I don't. You can see music IDs in HW version 37c.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 02:45:25
ok but is pretty strange , i need an outdated version of the program to see that , i hope that list will be implemented in the next update
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 03:11:41
No I don't. You can see music IDs in HW version 37c.

ok i opened that version , but where exactly is the list of the songs id ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-02 03:36:03
Under the Info Panel, should say something like: Music of Index XXX
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 03:37:30
Under the Info Panel, should say something like: Music of IDXXX

ok thanks :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 14:56:18
now i must also change the music that run while you are walking in the world map , do you know what file of the resource.asset contain that information ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-02 15:00:09
p0data61
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 15:11:13
p0data61


right , but you know , i take a look at hades workshop 37c , it really doesn't have the music id anywere :\
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 16:26:24
ok i managed to find the song id trough a file container in the resources asset , but i noticed another strange thing : the id 61 should be the id of the song for the friendly monsters , but according to the index of the song id ( songmetedata ) the id 61 is for the ost number 18 , the one called " the meeting " ( it can be heard while kalo explain to gidan and the rest of the group the plan to save garnet )
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-02 17:54:03
As I said before, Music BGM ID 61 is Friendly Monsters encounter; songmetadata IDs are different and unrelated to default music bgms.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 18:03:58
As I said before, Music BGM ID 61 is Friendly Monsters encounter; songmetadata IDs are different and unrelated to default music bgms.

that's a problem , but if you know exactly were to watch to find the ost id in hades workshop 37c , can you send a screenshot ? because i didn't find them anywere  :o
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-02 21:28:38
BGM IDs

(https://s33.postimg.cc/geqlhtcxr/image.png)

61 is Fairy Battle.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-02 22:13:28
ok , that's definitively clear , thanks :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-03 00:21:05
@Tirlititi as you noticed , the "jump" ability of freya take several time to be active once she perform the jump, what i must modify to make sure that she attack instantly right after the jump ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-03 02:21:05
@Tirlititi as you noticed , the "jump" ability of freya take several time to be active once she perform the jump, what i must modify to make sure that she attack instantly right after the jump ?

It's a standby ATB gauge when she jumps. So it's like two turns.
First turn is her jumping in air. Then second turn be doing Spear.
Tirlititi is there a way to alter this?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-03 12:40:03
yup , a way to remove those turns , and turn it in an istantaneous attack that do everything in one turn , especially because depending on the enemy , it may even take more than one turn



another nice thing to know would be how to correct the animation for a character wen you give it the special abilities of freya , i noticed that only her can use an appropriate casting ability for her special attacks , now all this may sound pretty obvious XD , but on the other hand , if i give to gidan the special attacks of amarant , gidan will perform flawlessly his own animation to cast the spell



@Trilititi i will try to substitute amarant with blank , but i want to be sure that i can do that without have to touch the dialogues , i read from your guide that amarant and blank share almost every data that the game need in order to metabolize this swap , but if i can i would prefer to not touch the dialogues for now

Posts Merged. ~Covarr
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-04 02:46:23
@Trilititi i will try to substitute amarant with blank , but i want to be sure that i can do that without have to touch the dialogues , i read from your guide that amarant and blank share almost every data that the game need in order to metabolize this swap , but if i can i would prefer to not touch the dialogues for now

Yes:

http://forums.qhimm.com/index.php?topic=14315.msg245063#msg245063
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 03:47:28
@Trilititi @Incenerator  ok i tried it and it worked almost perfectly : blank got the name "amarant" XD , and for some reasons , beatrix completely dissapeared from the character selection , it's strange because beatrix should have her own block in the party selection , what can i do to get both of them ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-04 04:22:47
thanks , now i want to first of all try with the swapping point in the invinicible , the strange thing is that all i found for "party" in the field invinicble/bridge ( first one )

This is good place to have such occasion.

I would test adding it after Party( 4, 1 )

Code: [Select]
Party( 4, 1 )
SetPartyReserve( 4095 ) // Adjust this argument if you want fewer people
SetCharacterData( 11, 1, 255, 21, 12 ) // Blank
            UpdatePartyUI(  )
        } else {
            Party( 0, 1 )
            UpdatePartyUI(  )
        }
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 04:26:34
This is good place to have such occasion.

I would test adding it after Party( 4, 1 )

Code: [Select]
Party( 4, 1 )
SetPartyReserve( 4095 ) // Adjust this argument if you want fewer people
SetCharacterData( 11, 1, 255, 21, 12 ) // Blank
            UpdatePartyUI(  )
        } else {
            Party( 0, 1 )
            UpdatePartyUI(  )
        }
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1

yup , i did that ,but as you can see from my previous message ,this deleted beatrix and i want to keep both of them , also is strange because blank substituted amarant , and amarant is in my party , while beatrix is in her block in the reserve party selection , so i don't understand why she disappeared
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-04 04:38:43
Try:

Code: [Select]
Party( 4, 1 )
SetPartyReserve( 2431) // Adjust this argument if you want fewer people
SetCharacterData( 11, 1, 255, 21, 12 ) // Blank
SetCharacterData( 8, 1, 255, 19, 14 ) // Beatrix
            UpdatePartyUI(  )
        } else {
            Party( 0, 1 )
            UpdatePartyUI(  )
        }
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 04:45:40
@Incinerator yes , i will try and let you know , now i have to sleep , but i want to say that i noticed the complete absence of beatrix in the function of the invincible that contain the characters-swap , still , she is perfectly established in the party reserve space  :-o
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-06-04 08:19:52
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 13:08:37
@Tirlititi thanks , i am also curious about the little accident with beatrix : why she just disappear when i pur blank in the party selection , and why all the functions of alternate fantasy you modded in order to inject beatrix in the selection of the characters doesn't have a single string like the one you showed in your tutorials ? and to be completely honest i would like to know if the curse of ipsen consist in a script inside all the areas of the ipsen castle , so i can remove that :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-06-04 14:18:51
Which string and which tutorial? What I did for Alternate Fantasy is a lot like what is described there (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890).
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 14:32:31
Which string and which tutorial? What I did for Alternate Fantasy is a lot like what is described there (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890).
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.

those informations are extremely important :O , and yes , i like to know what you did in alternate fantasy about the injection of beatrix in the character selection, i also find out something really funny : i give to blank one blue magic , the 1000 needles , now , he performed it perfectly with the right animation to cast the spell , the problem is that instead of the 1000 needles , he launched the holy magic , why that happened ? i noticed the same problem wen placing a magic in the command panel of techniques that aren't considered ordinary magic ( when i placed holy on the saiken panel , instead of the holy , i obtained the animation of a poisoning magic ) ; about my curiosity for your method to add beatrix , i am not a modder , not an hacker , and not someone who want to become an hacker or a modder , i only want to know that so i can set in the game the changes that i prefer and enjoy it , i am not a triple crosser or someone who want to take the credits for someone else work , it would be really stupid because at some point , people will start to ask to the one who steal the credits some informations , just like in your case , but in case of those who steal the credits , they can't be of any help at all , and they end up begin spotted in their ignorance , so don't worry , you can tell me that without fear any act of ingratitude :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Kefka on 2018-06-04 16:09:29
Which string and which tutorial? What I did for Alternate Fantasy is a lot like what is described there (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890).
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.

One question about the Ispen Curse, tirlititi: would it be possible to somehow 'expand' this curse to also include other physical abilities like Jump, Throw, or Steiner's sword skills? Because as of yet, it's very easy to circumvent the curse altogether since it only affects the Attack command, so there's little reason to switch to the weakest weapons like the game seems to have intended (why else would you find all the weapons from the beginning in this dungeon?). I've always liked to use each character's respective skills and abilities over plain physical attacks because that's just... uhm, cooler, lol. That's why on my very first playthrough, I honestly didn't even realize that the Ipsen Curse existed! When I later read about it, I just thought to myself 'what're they talking about?', and couldn't remember anything strange about Ipsen. When I paid attention on my next playthrough, I finally discovered the curse, but I'd say it is very poorly implemented if it's that easy to miss. In my opinion, when a whole dungeon is based around such a special circumstance, then that effect should be much more apparent. I don't know how complicated this would be though.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 16:18:49
Which string and which tutorial? What I did for Alternate Fantasy is a lot like what is described there (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890).
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.


what's exactly the function of the ipsen's castle field were the curse id placed ? wait , you said that the ipsen course is only that flag in the enemy list , so i only have to remove that flag
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-06-04 16:26:54
@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 (https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0) 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:
btl_calc.CalcSub_13A(cALC_VAR);
btl_calc.CalcSub_141(cALC_VAR);
btl_calc.CalcSub_143(cALC_VAR);
btl_calc.CalcSub_159(cALC_VAR);
if (btl_calc.CalcSub_152(cALC_VAR))
{
btl_calc.CalcSub_15E(cALC_VAR);
btl_calc.CalcSub_203(cALC_VAR);
btl_calc.CalcSub_270(cALC_VAR);
}
break;
You should put the line before the "CalcSub_20X" ("DoSetDamage_..." in the readable version).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 16:48:27
@Tirlititi  sorry lol , i misunderstood about the ipsen curse , about beatrix , i take a look in the little tutorial you posted in the post of steam and the one you placed in one of the pages of this post , and i understood that you didn't used the same method to add beatrix in the party selection , infact as i said i never saw the lines that incenerator suggested me to use some messages ago , but i am only interested in know how you make her appear in the character selection , i don't need to add her in the cutscenes  , i hope that this time i managed to be more clear



please check out my previous comment , now is readable XD , i was distracted so i just put my reply inside the quote



ok my bad , now i know that the blue magics in blank are displayed correctly , sorry for the inconvenient :\

Posts merged. Please use the edit button in the future. ~Covarr
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-04 20:13:41
Model importer update: still can't swap weapons. Tried swapping Javelin GameObject with Kain's Lance GameObject, to no avail.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 21:22:53
@Incinerator  i finally assigned the ost theme of zon an thorn to the respective bosses by modifiyng the btlbgm data , but the strange thing is that even after that modification , the only ost that run during the fight with them is still the one of the bosses encounters , the other strange thing is that in the btlbgmmetadata i only found the enemy id 74 , and that is the id of zon and thron the first time , the other two id were just not present in that file , what do you think ? where i am wrong ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-04 21:51:12
Model importer update: still can't swap weapons. Tried swapping Javelin GameObject with Kain's Lance GameObject, to no avail.

i am interested in this , what was this about ? for now the only cool thing that i can do with the weapons is to give them to people that usually can't use them , like for example give the save the queen to daga and zidane :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-04 22:46:50
@Tirlititi
At the same time I tried replace said Javelin GameObject with Halberd spear from FFXII for tests, it didn't crash the model importer (I tried to keep the original hierarchy the same in this case and it worked on that part at least.) In game, the game didn't crash, but the weapon was invisible.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-05 00:07:46
@Incinerator hey , what do you think i did wrong about the latest thing that i asked you ?  ???
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-06 09:50:07


@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.


Ok, I'll give a try! And about the Ipsen caste..for now I resetted the code, I'll try once gain later, if I'll have other problem and I din't figured how to solve, I'll let you know.. so don't worry! And thank you for everything, you guys, thank to you I'm making a very nice job  :P
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ploppo on 2018-06-06 15:57:00
there's another thing that is unclear : why hades workshop disable the options for the battle fields in the steam version ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-09 15:15:52
Guys! How do I fix, in this case, the head focus of the BlackMage and Quina so that they can turn toward GenomeA instead of Blank? I don't know why but whe i putted Blank on the field this thing happened!

(https://i.imgur.com/NXm3gpF.png)

EDIT: Solved, and easier than I thought! ;)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: resinate on 2018-06-15 00:10:37
hey Tirlititi when modding field scripts where do they save on pc? in csharp or one of the data files?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-15 00:19:06
hey Tirlititi when modding field scripts where do they save on pc? in csharp or one of the data files?

StreamingAssets\ folder
p0data7.bin
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-06-15 08:38:39
@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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-18 09:16:39
I simply added EnableHeadFocus (0) and everything came back to normal ;)

Now I have another problem...with the Hall of Despair.


I'm trying to replace Amarant with Blank it works.. but not at all, I mean, when I choose my party, it starts good, but when there's the "HP force" thing nothing happen, for example: Steiner gives his HP to Vivi but Vivi wont wake up or react.. (but I don't know if is exactly Vivi because the "aura" is not exactly going to that character.. so is stranger tough..)



Screens of the problem


Spoiler: show
(https://i.imgur.com/P2SGPsC.png)
(https://i.imgur.com/KmXI5wA.png)
(https://i.imgur.com/izaCryR.png)



Code full of Main Loop


Code: [Select]
Function Main_Loop
    0xA9( 250 )
    FadeFilter( 1, 64, VAR_GlobUInt8_17, 0, 0, 0 )
    set Field_MusicVolume = 0
    RunSoundCode2( 34305, 0, 128, Field_MusicVolume )
    set VAR_GlobBool_167 = 0
    if ( 1 ) {
        set VAR_GlobBool_167 = 1
    }
    Wait( 64 )
    RunSoundCode( 1792, 71 )
    while ( SyncSounds != 0 ) {
        Wait( 1 )
    }
    set VAR_GlobBool_167 = 0
    RunSoundCode( 1792, 71 )
    while ( SyncSounds != 0 ) {
        Wait( 1 )
    }
    RunSoundCode1( 16903, 71, 1 )
    RunSoundCode1( 16897, 71, 0 )
    set Field_MusicVolume = 125
    RunSoundCode2( 34305, 0, 128, Field_MusicVolume )
    set VAR_GlobBool_167 = 0
    RunScriptSync( 2, 7, 19 )
    FadeFilter( 2, 15, VAR_GlobUInt8_17, 128, 128, 128 )
    Wait( 15 )
    WindowAsync( 1, 16, 273 )
    RaiseWindows(  )
    WaitWindow( 1 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 15, VAR_GlobUInt8_17, 0, 0, 0 )
    Wait( 15 )
    WindowSyncEx( 7, 0, 128, 274 )
    MoveCamera( 180, 180, -100, 8 )
    RunScriptAsync( 2, 7, 20 )
    FadeFilter( 2, 15, VAR_GlobUInt8_17, 128, 128, 128 )
    Wait( 15 )
    WindowAsync( 1, 16, 275 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 276 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 277 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 278 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 279 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 280 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 281 )
    RaiseWindows(  )
    WaitWindow( 1 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 15, VAR_GlobUInt8_17, 0, 0, 0 )
    Wait( 15 )
    RunScriptSync( 2, 7, 21 )
    FadeFilter( 2, 15, VAR_GlobUInt8_17, 128, 128, 128 )
    Wait( 15 )
    WindowAsync( 1, 16, 285 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 286 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 287 )
    RaiseWindows(  )
    WaitWindow( 1 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 15, VAR_GlobUInt8_17, 0, 0, 0 )
    Wait( 15 )
    WindowSyncEx( 7, 0, 128, 288 )
    FadeFilter( 2, 15, VAR_GlobUInt8_17, 128, 128, 128 )
    Wait( 15 )
    WindowAsync( 1, 16, 289 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 290 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 291 )
    RaiseWindows(  )
    WaitWindow( 1 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 15, VAR_GlobUInt8_17, 0, 0, 0 )
    Wait( 15 )
    WindowSyncEx( 7, 0, 128, 292 )
    WindowSyncEx( 7, 0, 128, 293 )
    FadeFilter( 2, 15, VAR_GlobUInt8_17, 128, 128, 128 )
    Wait( 15 )
    WindowAsync( 1, 16, 294 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 295 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 296 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 297 )
    RaiseWindows(  )
    WaitWindow( 1 )
    WindowAsync( 1, 16, 298 )
    RaiseWindows(  )
    WaitWindow( 1 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 15, VAR_GlobUInt8_17, 0, 0, 0 )
    Wait( 15 )
    WindowSyncEx( 7, 0, 128, 299 )
    WindowSyncEx( 7, 0, 128, 300 )
    WindowSyncEx( 7, 0, 128, 301 )
    RunScriptSync( 2, 7, 22 )
    WindowSyncEx( 7, 0, 128, 302 )
    WindowSyncEx( 7, 0, 128, 306 )
    WindowSyncEx( 7, 0, 128, 303 )
    WindowSyncEx( 7, 0, 128, 304 )
    RunScriptSync( 2, 7, 23 )
    WindowSyncEx( 7, 0, 128, 305 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 6, 24, VAR_GlobUInt8_17, 255, 255, 255 )
    Wait( 25 )
    SetHP( 0, 1 )
    SetHP( 6, 1 )
    SetHP( 3, 1 )
    SetHP( 1, 1 )
    SetHP( 4, 1 )
    SetHP( 5, 1 )
    SetHP( 7, 1 )
    SetHP( 2, 1 )
    SetHP( 11, 1 )
    SetPartyReserve( 1279 )
    SetCharacterData( 11, 0, 255, 21, 12 )
    SetName( 11, 74 )
    if ( 1 ) {
        Party( 4, 0 )
        UpdatePartyUI(  )
    } else {
        Party( 0, 0 )
        UpdatePartyUI(  )
    }
    if ( IsInParty(5) ) {
        set Setting_OptionalQuina = 1
    }
    RunScriptAsync( 6, 7, 24 )
    RunScriptAsync( 6, 8, 24 )
    RunScriptAsync( 6, 10, 24 )
    RunScriptAsync( 6, 14, 24 )
    RunScriptAsync( 6, 12, 24 )
    RunScriptAsync( 6, 9, 24 )
    RunScriptAsync( 6, 13, 24 )
    RunScriptAsync( 6, 11, 24 )
    if ( GetEntryUniqueID(251) == GetEntryUniqueID(6) ) {
        set VAR_GlobUInt8_46 = 0
        if ( GetEntryUniqueID(252) == GetEntryUniqueID(12) ) {
            set VAR_GlobUInt8_47 = 2
            if ( GetEntryUniqueID(254) == GetEntryUniqueID(7) ) {
                set VAR_GlobUInt8_48 = 3
                set VAR_GlobUInt8_49 = 1
                set VAR_GlobUInt8_42 = 4
                set VAR_GlobUInt8_43 = 5
                set VAR_GlobUInt8_44 = 6
                set VAR_GlobUInt8_45 = 11
            } else {
                if ( GetEntryUniqueID(254) == GetEntryUniqueID(10) ) {
                    set VAR_GlobUInt8_49 = 4
                    set VAR_GlobUInt8_43 = 5
                    set VAR_GlobUInt8_44 = 6
                    set VAR_GlobUInt8_45 = 11
                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(9) ) {
                        set VAR_GlobUInt8_48 = 3
                        set VAR_GlobUInt8_42 = 1
                    } else {
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(7) ) {
                            set VAR_GlobUInt8_42 = 3
                            set VAR_GlobUInt8_48 = 1
                        }
                    }
                } else {
                    if ( GetEntryUniqueID(254) == GetEntryUniqueID(11) ) {
                        set VAR_GlobUInt8_49 = 5
                        set VAR_GlobUInt8_44 = 6
                        set VAR_GlobUInt8_45 = 11
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(9) ) {
                            set VAR_GlobUInt8_48 = 3
                            set VAR_GlobUInt8_42 = 1
                            set VAR_GlobUInt8_43 = 4
                        } else {
                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(7) ) {
                                set VAR_GlobUInt8_48 = 1
                                set VAR_GlobUInt8_42 = 3
                                set VAR_GlobUInt8_43 = 4
                            } else {
                                if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                                    set VAR_GlobUInt8_48 = 4
                                    set VAR_GlobUInt8_42 = 3
                                    set VAR_GlobUInt8_43 = 1
                                }
                            }
                        }
                    } else {
                        if ( GetEntryUniqueID(254) == GetEntryUniqueID(13) ) {
                            set VAR_GlobUInt8_49 = 6
                            set VAR_GlobUInt8_45 = 11
                            if ( GetEntryUniqueID(253) != GetEntryUniqueID(11) ) {
                                set VAR_GlobUInt8_44 = 5
                                if ( GetEntryUniqueID(253) != GetEntryUniqueID(10) ) {
                                    set VAR_GlobUInt8_43 = 4
                                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(9) ) {
                                        set VAR_GlobUInt8_42 = 1
                                        set VAR_GlobUInt8_48 = 3
                                    } else {
                                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(7) ) {
                                            set VAR_GlobUInt8_48 = 1
                                            set VAR_GlobUInt8_42 = 3
                                        }
                                    }
                                } else {
                                    set VAR_GlobUInt8_48 = 4
                                    set VAR_GlobUInt8_42 = 3
                                    set VAR_GlobUInt8_43 = 1
                                }
                            } else {
                                set VAR_GlobUInt8_48 = 5
                                set VAR_GlobUInt8_42 = 3
                                set VAR_GlobUInt8_43 = 1
                                set VAR_GlobUInt8_44 = 4
                            }
                        } else {
                            if ( GetEntryUniqueID(254) == GetEntryUniqueID(8) ) {
                                set VAR_GlobUInt8_49 = 11
                                if ( GetEntryUniqueID(253) != GetEntryUniqueID(13) ) {
                                    set VAR_GlobUInt8_45 = 6
                                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(9) ) {
                                        set VAR_GlobUInt8_48 = 3
                                        set VAR_GlobUInt8_42 = 1
                                        set VAR_GlobUInt8_43 = 4
                                        set VAR_GlobUInt8_44 = 5
                                    } else {
                                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(7) ) {
                                            set VAR_GlobUInt8_42 = 3
                                            set VAR_GlobUInt8_48 = 1
                                            set VAR_GlobUInt8_43 = 4
                                            set VAR_GlobUInt8_44 = 5
                                        } else {
                                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                                                set VAR_GlobUInt8_42 = 3
                                                set VAR_GlobUInt8_43 = 1
                                                set VAR_GlobUInt8_48 = 4
                                                set VAR_GlobUInt8_44 = 5
                                            } else {
                                                if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                                                    set VAR_GlobUInt8_42 = 3
                                                    set VAR_GlobUInt8_43 = 1
                                                    set VAR_GlobUInt8_44 = 4
                                                    set VAR_GlobUInt8_48 = 5
                                                }
                                            }
                                        }
                                    }
                                } else {
                                    set VAR_GlobUInt8_48 = 6
                                    set VAR_GlobUInt8_42 = 3
                                    set VAR_GlobUInt8_43 = 1
                                    set VAR_GlobUInt8_44 = 4
                                    set VAR_GlobUInt8_45 = 5
                                }
                            }
                        }
                    }
                }
            }
        } else {
            if ( GetEntryUniqueID(252) == GetEntryUniqueID(9) ) {
                set VAR_GlobUInt8_47 = 3
                set VAR_GlobUInt8_42 = 2
                if ( GetEntryUniqueID(253) == GetEntryUniqueID(7) ) {
                    set VAR_GlobUInt8_48 = 1
                    if ( GetEntryUniqueID(254) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_49 = 4
                        set VAR_GlobUInt8_43 = 5
                        set VAR_GlobUInt8_44 = 6
                        set VAR_GlobUInt8_45 = 11
                    } else {
                        if ( GetEntryUniqueID(254) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_49 = 5
                            set VAR_GlobUInt8_43 = 4
                            set VAR_GlobUInt8_44 = 6
                            set VAR_GlobUInt8_45 = 11
                        } else {
                            if ( GetEntryUniqueID(254) == GetEntryUniqueID(13) ) {
                                set VAR_GlobUInt8_49 = 6
                                set VAR_GlobUInt8_43 = 4
                                set VAR_GlobUInt8_44 = 5
                                set VAR_GlobUInt8_45 = 11
                            } else {
                                if ( GetEntryUniqueID(254) == GetEntryUniqueID(8) ) {
                                    set VAR_GlobUInt8_49 = 11
                                    set VAR_GlobUInt8_43 = 4
                                    set VAR_GlobUInt8_44 = 5
                                    set VAR_GlobUInt8_45 = 6
                                }
                            }
                        }
                    }
                } else {
                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_48 = 4
                        set VAR_GlobUInt8_43 = 1
                        RunScriptSync( 2, 6, 25 )
                    } else {
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_48 = 5
                            set VAR_GlobUInt8_43 = 1
                            set VAR_GlobUInt8_44 = 4
                            RunScriptSync( 2, 6, 26 )
                        } else {
                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(13) ) {
                                set VAR_GlobUInt8_48 = 6
                                set VAR_GlobUInt8_49 = 11
                                set VAR_GlobUInt8_43 = 1
                                set VAR_GlobUInt8_44 = 4
                                set VAR_GlobUInt8_45 = 5
                            }
                        }
                    }
                }
            } else {
                if ( GetEntryUniqueID(252) == GetEntryUniqueID(7) ) {
                    set VAR_GlobUInt8_47 = 1
                    set VAR_GlobUInt8_42 = 2
                    set VAR_GlobUInt8_43 = 3
                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_48 = 4
                        RunScriptSync( 2, 6, 25 )
                    } else {
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_48 = 5
                            set VAR_GlobUInt8_44 = 4
                            RunScriptSync( 2, 6, 26 )
                        } else {
                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(13) ) {
                                set VAR_GlobUInt8_48 = 6
                                set VAR_GlobUInt8_49 = 11
                                set VAR_GlobUInt8_44 = 4
                                set VAR_GlobUInt8_45 = 5
                            }
                        }
                    }
                } else {
                    if ( GetEntryUniqueID(252) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_47 = 4
                        set VAR_GlobUInt8_42 = 2
                        set VAR_GlobUInt8_43 = 3
                        set VAR_GlobUInt8_44 = 1
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_48 = 5
                            RunScriptSync( 2, 6, 26 )
                        } else {
                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(13) ) {
                                set VAR_GlobUInt8_48 = 6
                                set VAR_GlobUInt8_49 = 11
                                set VAR_GlobUInt8_45 = 5
                            }
                        }
                    } else {
                        if ( GetEntryUniqueID(252) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_42 = 2
                            set VAR_GlobUInt8_43 = 3
                            set VAR_GlobUInt8_44 = 1
                            set VAR_GlobUInt8_45 = 4
                            set VAR_GlobUInt8_47 = 5
                            set VAR_GlobUInt8_48 = 6
                            set VAR_GlobUInt8_49 = 11
                        }
                    }
                }
            }
        }
    } else {
        if ( GetEntryUniqueID(251) == GetEntryUniqueID(12) ) {
            set VAR_GlobUInt8_46 = 2
            set VAR_GlobUInt8_42 = 0
            if ( GetEntryUniqueID(252) == GetEntryUniqueID(9) ) {
                set VAR_GlobUInt8_47 = 3
                if ( GetEntryUniqueID(253) == GetEntryUniqueID(7) ) {
                    set VAR_GlobUInt8_48 = 1
                    if ( GetEntryUniqueID(254) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_49 = 4
                        set VAR_GlobUInt8_43 = 5
                        set VAR_GlobUInt8_44 = 6
                        set VAR_GlobUInt8_45 = 11
                    } else {
                        if ( GetEntryUniqueID(254) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_49 = 5
                            set VAR_GlobUInt8_43 = 4
                            set VAR_GlobUInt8_44 = 6
                            set VAR_GlobUInt8_45 = 11
                        } else {
                            if ( GetEntryUniqueID(254) == GetEntryUniqueID(13) ) {
                                set VAR_GlobUInt8_49 = 6
                                set VAR_GlobUInt8_43 = 4
                                set VAR_GlobUInt8_44 = 5
                                set VAR_GlobUInt8_45 = 11
                            } else {
                                set VAR_GlobUInt8_49 = 11
                                set VAR_GlobUInt8_43 = 4
                                set VAR_GlobUInt8_44 = 5
                                set VAR_GlobUInt8_45 = 6
                            }
                        }
                    }
             
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-18 09:26:54
Part 2

Code: [Select]
   } else {
                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_48 = 4
                        set VAR_GlobUInt8_43 = 1
                        RunScriptSync( 2, 6, 25 )
                    } else {
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_48 = 5
                            set VAR_GlobUInt8_43 = 1
                            set VAR_GlobUInt8_44 = 4
                            RunScriptSync( 2, 6, 26 )
                        } else {
                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(13) ) {
                                set VAR_GlobUInt8_48 = 6
                                set VAR_GlobUInt8_49 = 11
                                set VAR_GlobUInt8_43 = 1
                                set VAR_GlobUInt8_44 = 4
                                set VAR_GlobUInt8_45 = 5
                            }
                        }
                    }
                }
            } else {
                if ( GetEntryUniqueID(252) == GetEntryUniqueID(7) ) {
                    set VAR_GlobUInt8_47 = 1
                    set VAR_GlobUInt8_43 = 3
                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_48 = 4
                        RunScriptSync( 2, 6, 25 )
                    } else {
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_48 = 5
                            set VAR_GlobUInt8_44 = 4
                            RunScriptSync( 2, 6, 26 )
                        } else {
                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(13) ) {
                                set VAR_GlobUInt8_48 = 6
                                set VAR_GlobUInt8_49 = 11
                                set VAR_GlobUInt8_44 = 4
                                set VAR_GlobUInt8_45 = 5
                            }
                        }
                    }
                } else {
                    set VAR_GlobUInt8_43 = 3
                    set VAR_GlobUInt8_44 = 1
                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                        set VAR_GlobUInt8_47 = 4
                        set VAR_GlobUInt8_48 = 5
                        RunScriptSync( 2, 6, 26 )
                    } else {
                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(13) ) {
                            set VAR_GlobUInt8_48 = 6
                            set VAR_GlobUInt8_49 = 11
                            if ( GetEntryUniqueID(252) == GetEntryUniqueID(10) ) {
                                set VAR_GlobUInt8_47 = 4
                                set VAR_GlobUInt8_45 = 5
                            } else {
                                if ( GetEntryUniqueID(252) == GetEntryUniqueID(11) ) {
                                    set VAR_GlobUInt8_47 = 5
                                    set VAR_GlobUInt8_45 = 4
                                }
                            }
                        }
                    }
                }
            }
        } else {
            if ( GetEntryUniqueID(251) == GetEntryUniqueID(9) ) {
                set VAR_GlobUInt8_46 = 3
                set VAR_GlobUInt8_42 = 0
                set VAR_GlobUInt8_43 = 2
                if ( GetEntryUniqueID(252) == GetEntryUniqueID(7) ) {
                    set VAR_GlobUInt8_47 = 1
                    if ( GetEntryUniqueID(254) == GetEntryUniqueID(11) ) {
                        set VAR_GlobUInt8_48 = 4
                        set VAR_GlobUInt8_49 = 5
                        set VAR_GlobUInt8_44 = 6
                        set VAR_GlobUInt8_45 = 11
                    } else {
                        if ( GetEntryUniqueID(254) == GetEntryUniqueID(13) ) {
                            set VAR_GlobUInt8_49 = 6
                            set VAR_GlobUInt8_45 = 11
                            if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                                set VAR_GlobUInt8_48 = 4
                                set VAR_GlobUInt8_44 = 5
                            } else {
                                if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                                    set VAR_GlobUInt8_48 = 5
                                    set VAR_GlobUInt8_44 = 4
                                }
                            }
                        } else {
                            if ( GetEntryUniqueID(254) == GetEntryUniqueID(8) ) {
                                set VAR_GlobUInt8_49 = 11
                                if ( GetEntryUniqueID(253) == GetEntryUniqueID(10) ) {
                                    set VAR_GlobUInt8_48 = 4
                                    set VAR_GlobUInt8_44 = 5
                                    set VAR_GlobUInt8_45 = 6
                                } else {
                                    if ( GetEntryUniqueID(253) == GetEntryUniqueID(11) ) {
                                        set VAR_GlobUInt8_48 = 5
                                        set VAR_GlobUInt8_44 = 4
                                        set VAR_GlobUInt8_45 = 6
                                    } else {
                                        if ( GetEntryUniqueID(253) == GetEntryUniqueID(13) ) {
                                            set VAR_GlobUInt8_44 = 4
                                            set VAR_GlobUInt8_45 = 5
                                            set VAR_GlobUInt8_48 = 6
                                        }
                                    }
                                }
                            }
                        }
                    }
                } else {
                    if ( GetEntryUniqueID(252) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_47 = 4
                        set VAR_GlobUInt8_44 = 1
                        if ( IsInParty(5) == 0 ) {
                            set VAR_GlobUInt8_45 = 5
                            set VAR_GlobUInt8_48 = 6
                            set VAR_GlobUInt8_49 = 11
                        } else {
                            if ( IsInParty(11) == 0 ) {
                                set VAR_GlobUInt8_45 = 6
                                set VAR_GlobUInt8_48 = 5
                                set VAR_GlobUInt8_49 = 11
                            } else {
                                if ( IsInParty(2) == 0 ) {
                                    set VAR_GlobUInt8_48 = 5
                                    set VAR_GlobUInt8_49 = 6
                                    set VAR_GlobUInt8_45 = 11
                                }
                            }
                        }
                    } else {
                        if ( GetEntryUniqueID(252) == GetEntryUniqueID(11) ) {
                            set VAR_GlobUInt8_47 = 5
                            set VAR_GlobUInt8_48 = 6
                            set VAR_GlobUInt8_49 = 11
                            set VAR_GlobUInt8_44 = 1
                            set VAR_GlobUInt8_45 = 4
                        }
                    }
                }
            } else {
                if ( GetEntryUniqueID(251) == GetEntryUniqueID(7) ) {
                    set VAR_GlobUInt8_46 = 1
                    set VAR_GlobUInt8_42 = 0
                    set VAR_GlobUInt8_43 = 2
                    set VAR_GlobUInt8_44 = 3
                    if ( IsInParty(4) != 1 ) {
                        set VAR_GlobUInt8_45 = 4
                        set VAR_GlobUInt8_47 = 5
                        set VAR_GlobUInt8_48 = 6
                        set VAR_GlobUInt8_49 = 11
                    } else {
                        if ( IsInParty(5) != 1 ) {
                            set VAR_GlobUInt8_47 = 4
                            set VAR_GlobUInt8_45 = 5
                            set VAR_GlobUInt8_48 = 6
                            set VAR_GlobUInt8_49 = 11
                        } else {
                            if ( IsInParty(11) != 1 ) {
                                set VAR_GlobUInt8_47 = 4
                                set VAR_GlobUInt8_48 = 5
                                set VAR_GlobUInt8_45 = 6
                                set VAR_GlobUInt8_49 = 11
                            } else {
                                if ( IsInParty(2) != 1 ) {
                                    set VAR_GlobUInt8_47 = 4
                                    set VAR_GlobUInt8_48 = 5
                                    set VAR_GlobUInt8_49 = 6
                                    set VAR_GlobUInt8_45 = 11
                                }
                            }
                        }
                    }
                } else {
                    if ( GetEntryUniqueID(251) == GetEntryUniqueID(10) ) {
                        set VAR_GlobUInt8_46 = 4
                        set VAR_GlobUInt8_47 = 5
                        set VAR_GlobUInt8_48 = 6
                        set VAR_GlobUInt8_49 = 11
                        set VAR_GlobUInt8_42 = 0
                        set VAR_GlobUInt8_43 = 2
                        set VAR_GlobUInt8_44 = 3
                        set VAR_GlobUInt8_45 = 1
                    }
                }
            }
        }
    }
    switch 8 ( VAR_GlobUInt8_42 ) from 0 {
    case +0:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(7)
        break
    case +1:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(8)
        break
    case +2:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(13)
        break
    case +3:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(10)
        break
    case +4:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(11)
        break
    case +5:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(12)
        break
    case +6:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(14)
        break
    case +7:
        set VAR_GlobUInt8_51 = GetEntryUniqueID(9)
        break
    }
    switch 8 ( VAR_GlobUInt8_43 ) from 0 {
    case +0:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(7)
        break
    case +1:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(8)
        break
    case +2:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(13)
        break
    case +3:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(10)
        break
    case +4:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(11)
        break
    case +5:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(12)
        break
    case +6:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(14)
        break
    case +7:
        set VAR_GlobUInt8_52 = GetEntryUniqueID(9)
        break
    }
    switch 8 ( VAR_GlobUInt8_44 ) from 0 {
    case +0:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(7)
        break
    case +1:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(8)
        break
    case +2:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(13)
        break
    case +3:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(10)
        break
    case +4:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(11)
        break
    case +5:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(12)
        break
    case +6:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(14)
        break
    case +7:
        set VAR_GlobUInt8_53 = GetEntryUniqueID(9)
        break
    }
    switch 8 ( VAR_GlobUInt8_45 ) from 0 {
    case +0:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(7)
        break
    case +1:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(8)
        break
    case +2:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(13)
        break
    case +3:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(10)
        break
    case +4:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(11)
        break
    case +5:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(12)
        break
    case +6:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(14)
        break
    case +7:
        set VAR_GlobUInt8_54 = GetEntryUniqueID(9)
        break
    }
    ReleaseCamera( 1, 8 )
    Wait( 1 )
    set VAR_GlobUInt8_41 = 0
    RunScriptSync( 2, 7, 27 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    DisableMenu(  )
    Wait( 24 )
    if ( IsInParty(0) & IsInParty(2) ) {
        if ( ( IsInParty(1) & ( IsInParty(3) != 1 ) ) && ( IsInParty(6) == 1 ) ) {
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_43
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_49
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_52, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 254, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 8 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_43 != 0 ) && ( ( VAR_GlobUInt8_49 != 0 ) == 1 ) ) {
                RunScript( 2, 7, 31 )
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 1 ) && ( ( VAR_GlobUInt8_49 != 1 ) == 1 ) ) {
                RunScript( 2, 8, 31 )
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 2 ) && ( ( VAR_GlobUInt8_49 != 2 ) == 1 ) ) {
                RunScript( 2, 13, 31 )
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 3 ) && ( ( VAR_GlobUInt8_49 != 3 ) == 1 ) ) {
                RunScript( 2, 10, 31 )
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 4 ) && ( ( VAR_GlobUInt8_49 != 4 ) == 1 ) ) {
                RunScript( 2, 11, 31 )
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 5 ) && ( ( VAR_GlobUInt8_49 != 5 ) == 1 ) ) {
                RunScript( 2, 12, 31 )
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 6 ) && ( ( VAR_GlobUInt8_49 != 6 ) == 1 ) ) {
                RunScript( 2, 1, 31 )
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 7 ) && ( ( VAR_GlobUInt8_49 != 7 ) == 1 ) ) {
                RunScript( 2, 9, 31 )
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_45
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_47
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_54, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 252, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_45 != 0 ) && ( ( VAR_GlobUInt8_47 != 0 ) == 1 ) ) {
                if ( VARL_GlobBool_407 != 1 ) {
                    RunScript( 2, 7, 31 )
                }
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 1 ) && ( ( VAR_GlobUInt8_47 != 1 ) == 1 ) ) {
                if ( VARL_GlobBool_404 != 1 ) {
                    RunScript( 2, 8, 31 )
                }
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 2 ) && ( ( VAR_GlobUInt8_47 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 3 ) && ( ( VAR_GlobUInt8_47 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 4 ) && ( ( VAR_GlobUInt8_47 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 5 ) && ( ( VAR_GlobUInt8_47 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-18 09:28:42
Part 3

Code: [Select]
            if ( ( VAR_GlobUInt8_45 != 6 ) && ( ( VAR_GlobUInt8_47 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 1, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 7 ) && ( ( VAR_GlobUInt8_47 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 4 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_42
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_48
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_51, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 253, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 4 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_42 != 0 ) && ( ( VAR_GlobUInt8_48 != 0 ) == 1 ) ) {
                if ( VARL_GlobBool_407 != 1 ) {
                    RunScript( 2, 7, 31 )
                }
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 1 ) && ( ( VAR_GlobUInt8_48 != 1 ) == 1 ) ) {
                if ( VARL_GlobBool_404 != 1 ) {
                    RunScript( 2, 8, 31 )
                }
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 2 ) && ( ( VAR_GlobUInt8_48 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 3 ) && ( ( VAR_GlobUInt8_48 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 4 ) && ( ( VAR_GlobUInt8_48 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 5 ) && ( ( VAR_GlobUInt8_48 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 6 ) && ( ( VAR_GlobUInt8_48 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 14, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 7 ) && ( ( VAR_GlobUInt8_48 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            set VAR_GlobUInt8_41 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_44
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_46
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_53, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 251, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
        } else {
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_44
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_48
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_53, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 253, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 8 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_44 != 0 ) && ( ( VAR_GlobUInt8_48 != 0 ) == 1 ) ) {
                RunScript( 2, 7, 31 )
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 1 ) && ( ( VAR_GlobUInt8_48 != 1 ) == 1 ) ) {
                RunScript( 2, 8, 31 )
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 2 ) && ( ( VAR_GlobUInt8_48 != 2 ) == 1 ) ) {
                RunScript( 2, 13, 31 )
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 3 ) && ( ( VAR_GlobUInt8_48 != 3 ) == 1 ) ) {
                RunScript( 2, 10, 31 )
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 4 ) && ( ( VAR_GlobUInt8_48 != 4 ) == 1 ) ) {
                RunScript( 2, 11, 31 )
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 5 ) && ( ( VAR_GlobUInt8_48 != 5 ) == 1 ) ) {
                RunScript( 2, 12, 31 )
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 6 ) && ( ( VAR_GlobUInt8_48 != 6 ) == 1 ) ) {
                RunScript( 2, 14, 31 )
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 7 ) && ( ( VAR_GlobUInt8_48 != 7 ) == 1 ) ) {
                RunScript( 2, 9, 31 )
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_45
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_49
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_54, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 254, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_45 != 0 ) && ( ( VAR_GlobUInt8_49 != 0 ) == 1 ) ) {
                if ( VARL_GlobBool_407 != 1 ) {
                    RunScript( 2, 7, 31 )
                }
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 1 ) && ( ( VAR_GlobUInt8_49 != 1 ) == 1 ) ) {
                if ( VARL_GlobBool_404 != 1 ) {
                    RunScript( 2, 8, 31 )
                }
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 2 ) && ( ( VAR_GlobUInt8_49 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 3 ) && ( ( VAR_GlobUInt8_49 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 4 ) && ( ( VAR_GlobUInt8_49 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 5 ) && ( ( VAR_GlobUInt8_49 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 6 ) && ( ( VAR_GlobUInt8_49 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 14, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 7 ) && ( ( VAR_GlobUInt8_49 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 4 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_43
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_47
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_52, 28 )
        &
            }
            if ( ( VAR_GlobUInt8_43 != 2 ) && ( ( VAR_GlobUInt8_47 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 3 ) && ( ( VAR_GlobUInt8_47 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 4 ) && ( ( VAR_GlobUInt8_47 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 5 ) && ( ( VAR_GlobUInt8_47 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 6 ) && ( ( VAR_GlobUInt8_47 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 1, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 7 ) && ( ( VAR_GlobUInt8_47 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            set VAR_GlobUInt8_41 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_42
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_46
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_51, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 251, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
        }
    } else {
        if ( IsInParty(0) ) {
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_44
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_49
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_53, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 254, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 8 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_44 != 0 ) && ( ( VAR_GlobUInt8_49 != 0 ) == 1 ) ) {
                RunScript( 2, 7, 31 )
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 1 ) && ( ( VAR_GlobUInt8_49 != 1 ) == 1 ) ) {
                RunScript( 2, 8, 31 )
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 2 ) && ( ( VAR_GlobUInt8_49 != 2 ) == 1 ) ) {
                RunScript( 2, 13, 31 )
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 3 ) && ( ( VAR_GlobUInt8_49 != 3 ) == 1 ) ) {
                RunScript( 2, 10, 31 )
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 4 ) && ( ( VAR_GlobUInt8_49 != 4 ) == 1 ) ) {
                RunScript( 2, 11, 31 )
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 5 ) && ( ( VAR_GlobUInt8_49 != 5 ) == 1 ) ) {
                RunScript( 2, 12, 31 )
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 6 ) && ( ( VAR_GlobUInt8_49 != 6 ) == 1 ) ) {
                RunScript( 2, 14, 31 )
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 7 ) && ( ( VAR_GlobUInt8_49 != 7 ) == 1 ) ) {
                RunScript( 2, 9, 31 )
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_42
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_48
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_51, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 253, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_42 != 0 ) && ( ( VAR_GlobUInt8_48 != 0 ) == 1 ) ) {
                if ( VARL_GlobBool_407 != 1 ) {
                    RunScript( 2, 7, 31 )
                }
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 1 ) && ( ( VAR_GlobUInt8_48 != 1 ) == 1 ) ) {
                if ( VARL_GlobBool_404 != 1 ) {
                    RunScript( 2, 8, 31 )
                }
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 2 ) && ( ( VAR_GlobUInt8_48 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 3 ) && ( ( VAR_GlobUInt8_48 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 4 ) && ( ( VAR_GlobUInt8_48 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 5 ) && ( ( VAR_GlobUInt8_48 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 6 ) && ( ( VAR_GlobUInt8_48 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 14, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_42 != 7 ) && ( ( VAR_GlobUInt8_48 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 4 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_43
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_47
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
   
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-18 09:29:28
Part 4

Code: [Select]
         RunScriptSync( 2, VAR_GlobUInt8_52, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 252, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 4 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_43 != 0 ) && ( ( VAR_GlobUInt8_47 != 0 ) == 1 ) ) {
                if ( VARL_GlobBool_407 != 1 ) {
                    RunScript( 2, 7, 31 )
                }
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 1 ) && ( ( VAR_GlobUInt8_47 != 1 ) == 1 ) ) {
                if ( VARL_GlobBool_404 != 1 ) {
                    RunScript( 2, 8, 31 )
                }
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 2 ) && ( ( VAR_GlobUInt8_47 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 3 ) && ( ( VAR_GlobUInt8_47 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 4 ) && ( ( VAR_GlobUInt8_47 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 5 ) && ( ( VAR_GlobUInt8_47 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 6 ) && ( ( VAR_GlobUInt8_47 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 1, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 7 ) && ( ( VAR_GlobUInt8_47 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            set VAR_GlobUInt8_41 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_45
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_46
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_54, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 251, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
        } else {
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_45
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_48
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_54, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 253, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 8 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_45 != 0 ) && ( ( VAR_GlobUInt8_48 != 0 ) == 1 ) ) {
                RunScript( 2, 7, 31 )
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 1 ) && ( ( VAR_GlobUInt8_48 != 1 ) == 1 ) ) {
                RunScript( 2, 8, 31 )
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 2 ) && ( ( VAR_GlobUInt8_48 != 2 ) == 1 ) ) {
                RunScript( 2, 13, 31 )
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 3 ) && ( ( VAR_GlobUInt8_48 != 3 ) == 1 ) ) {
                RunScript( 2, 10, 31 )
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 4 ) && ( ( VAR_GlobUInt8_48 != 4 ) == 1 ) ) {
                RunScript( 2, 11, 31 )
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 5 ) && ( ( VAR_GlobUInt8_48 != 5 ) == 1 ) ) {
                RunScript( 2, 12, 31 )
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 6 ) && ( ( VAR_GlobUInt8_48 != 6 ) == 1 ) ) {
                RunScript( 2, 1, 31 )
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_45 != 7 ) && ( ( VAR_GlobUInt8_48 != 7 ) == 1 ) ) {
                RunScript( 2, 9, 31 )
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_43
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_47
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_52, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 252, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 6 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_43 != 0 ) && ( ( VAR_GlobUInt8_47 != 0 ) == 1 ) ) {
                if ( VARL_GlobBool_407 != 1 ) {
                    RunScript( 2, 7, 31 )
                }
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 1 ) && ( ( VAR_GlobUInt8_47 != 1 ) == 1 ) ) {
                if ( VARL_GlobBool_404 != 1 ) {
                    RunScript( 2, 8, 31 )
                }
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 2 ) && ( ( VAR_GlobUInt8_47 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 3 ) && ( ( VAR_GlobUInt8_47 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 4 ) && ( ( VAR_GlobUInt8_47 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 5 ) && ( ( VAR_GlobUInt8_47 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 6 ) && ( ( VAR_GlobUInt8_47 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 1, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_43 != 7 ) && ( ( VAR_GlobUInt8_47 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 4 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            set VAR_GlobUInt8_41 = 0
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_44
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_46
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_53, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 251, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 4 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
            RunScriptAsync( 6, 5, 17 )
            while ( VAR_GlobUInt8_41 < 3 ) {
                Wait( 1 )
            }
            if ( ( VAR_GlobUInt8_44 != 0 ) && ( ( VAR_GlobUInt8_46 != 0 ) == 1 ) ) {
                if ( VARL_GlobBool_407 != 1 ) {
                    RunScript( 2, 7, 31 )
                }
            } else {
                set VARL_GlobBool_407 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 1 ) && ( ( VAR_GlobUInt8_46 != 1 ) == 1 ) ) {
                if ( VARL_GlobBool_404 != 1 ) {
                    RunScript( 2, 8, 31 )
                }
            } else {
                set VARL_GlobBool_404 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 2 ) && ( ( VAR_GlobUInt8_46 != 2 ) == 1 ) ) {
                if ( VARL_GlobBool_406 != 1 ) {
                    RunScript( 2, 13, 31 )
                }
            } else {
                set VARL_GlobBool_406 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 3 ) && ( ( VAR_GlobUInt8_46 != 3 ) == 1 ) ) {
                if ( VARL_GlobBool_405 != 1 ) {
                    RunScript( 2, 10, 31 )
                }
            } else {
                set VARL_GlobBool_405 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 4 ) && ( ( VAR_GlobUInt8_46 != 4 ) == 1 ) ) {
                if ( VARL_GlobBool_403 != 1 ) {
                    RunScript( 2, 11, 31 )
                }
            } else {
                set VARL_GlobBool_403 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 5 ) && ( ( VAR_GlobUInt8_46 != 5 ) == 1 ) ) {
                if ( VARL_GlobBool_402 != 1 ) {
                    RunScript( 2, 12, 31 )
                }
            } else {
                set VARL_GlobBool_402 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 6 ) && ( ( VAR_GlobUInt8_46 != 6 ) == 1 ) ) {
                if ( VARL_GlobBool_401 != 1 ) {
                    RunScript( 2, 1, 31 )
                }
            } else {
                set VARL_GlobBool_401 = 1
            }
            if ( ( VAR_GlobUInt8_44 != 7 ) && ( ( VAR_GlobUInt8_46 != 7 ) == 1 ) ) {
                if ( VARL_GlobBool_400 != 1 ) {
                    RunScript( 2, 9, 31 )
                }
            } else {
                set VARL_GlobBool_400 = 1
            }
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            set VAR_GlobUInt8_41 = 0
            Wait( 1 )
            set VAR_GlobUInt8_24 = VAR_GlobUInt8_42
            set VAR_GlobUInt8_25 = VAR_GlobUInt8_49
            RunScriptAsync( 6, 7, 24 )
            RunScriptAsync( 6, 8, 24 )
            RunScriptAsync( 6, 10, 24 )
            RunScriptAsync( 6, 1, 24 )
            RunScriptAsync( 6, 12, 24 )
            RunScriptAsync( 6, 9, 24 )
            RunScriptAsync( 6, 13, 24 )
            RunScriptAsync( 6, 11, 24 )
            RunScriptAsync( 6, 5, 14 )
            while ( VAR_GlobUInt8_41 < 1 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, VAR_GlobUInt8_51, 28 )
            RunScriptAsync( 6, 5, 15 )
            while ( VAR_GlobUInt8_41 < 2 ) {
                Wait( 1 )
            }
            RunScriptSync( 2, 254, 29 )
            RunScriptSync( 2, 6, 30 )
            while ( VAR_GlobUInt8_40 < 2 ) {
                Wait( 1 )
            }
            Wait( 1 )
            set VAR_GlobUInt8_40 = 0
            Wait( 1 )
        }
    }
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 6, 24, VAR_GlobUInt8_17, 255, 255, 255 )
    Wait( 25 )
    RunScriptSync( 6, 5, 18 )
    ReturnEntryFunctions( 7 )
    ReturnEntryFunctions( 13 )
    ReturnEntryFunctions( 10 )
    ReturnEntryFunctions( 8 )
    ReturnEntryFunctions( 11 )
    ReturnEntryFunctions( 12 )
    ReturnEntryFunctions( 1 )
    ReturnEntryFunctions( 9 )
    MoveCamera( 180, 240, 1, 8 )
    Wait( 1 )
    SetHP( 0, 9999 )
    SetHP( 1, 9999 )
    SetHP( 3, 9999 )
    SetHP( 2, 9999 )
    SetHP( 4, 9999 )
    SetHP( 5, 9999 )
    SetHP( 11, 9999 )
    SetHP( 6, 9999 )
    SetHP( 8, 9999 )
    SetMP( 0, 999 )
    SetMP( 1, 999 )
    SetMP( 3, 999 )
    SetMP( 2, 999 )
    SetMP( 4, 999 )
    SetMP( 5, 999 )
    SetMP( 7, 999 )
    SetMP( 6, 999 )
    SetMP( 8, 999 )
    CureStatus( 0, 127 )
    CureStatus( 1, 127 )
    CureStatus( 3, 127 )
    CureStatus( 2, 127 )
    CureStatus( 4, 127 )
    CureStatus( 5, 127 )
    CureStatus( 7, 127 )
    CureStatus( 6, 127 )
    CureStatus( 8, 127 )
    Menu( 0, 0 )
    Wait( 3 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    Wait( 2 )
    RunScript( 2, 251, 32 )
    RunScript( 2, 252, 32 )
    RunScript( 2, 253, 32 )
    RunScript( 2, 254, 32 )
    while ( VAR_GlobUInt8_40 < 4 ) {
        Wait( 1 )
    }
    RunSoundCode( 2566, 2 )
    MoveCamera( 180, 120, 120, 8 )
    Wait( 120 )
    RunSoundCode2( 38401, 65535, 48, 0 )
    RunSoundCode3( 54145, 2100, 0, 24, 0 )
    if ( VAR_GlobBool_167 == 1 ) {
        RunSoundCode( 265, 65535 )
        set VAR_GlobBool_167 = 0
    }
    if ( VAR_GlobBool_162 == 0 ) {
        if ( VAR_GenUInt8_13 < 9 ) {
            set VAR_GenUInt8_13 = 3
        }
        RunSoundCode1( 20864, 2100, 0 )
    }
    if ( VAR_GlobBool_163 == 0 ) {
    }
    set General_FieldEntrance = 0
    Battle( 1, 938 )
    if ( VAR_GlobBool_167 == 1 ) {
        RunSoundCode( 265, 65535 )
        set VAR_GlobBool_167 = 0
    }
    if ( VAR_GlobBool_162 == 0 ) {
        if ( VAR_GenUInt8_13 < 9 ) {
            set VAR_GenUInt8_13 = 3
        }
        RunSoundCode1( 20864, 2100, 0 )
    }
    if ( VAR_GlobBool_163 == 0 ) {
    }
    set General_FieldEntrance = 0
    Field( 2929 )
    return
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-22 10:23:51
Guys, again, I solved! Sorry for all the posts... but the script was too long. Please feel free to remove the other parts of the script, if you wish!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-25 08:49:54
Little problem, not so big..maybe you can help me, so in The Temple of Water I found a little problem. So.... I have a code like this for the Party Reserve

Code: [Select]

                CureStatus( 0, 127 )
                CureStatus( 1, 127 )
                CureStatus( 3, 127 )
                CureStatus( 2, 127 )
                CureStatus( 4, 127 )
                CureStatus( 5, 127 )
                CureStatus( 7, 127 )
                CureStatus( 6, 127 )
                CureStatus( 8, 127 )
                break
            }
        }
        if ( 0 ) {
            set Setting_OptionalQuina = 0
        }
        set Setting_PartyReserve = 1083
        SetPartyReserve( Setting_PartyReserve )
        if ( ( ( Setting_PartyInitialized >> 0 ) & 1 ) == 0 ) {
            SetCharacterData( 0, 1, 255, 9, 0 )
            set Setting_PartyInitialized |= 1
        }
        if ( ( ( Setting_PartyInitialized >> 1 ) & 1 ) == 0 ) {
            SetCharacterData( 1, 1, 255, 5, 1 )
            set Setting_PartyInitialized |= 2
        }
        if ( ( ( Setting_PartyInitialized >> 2 ) & 1 ) == 0 ) {
            SetCharacterData( 2, 1, 255, 6, 2 )
            set Setting_PartyInitialized |= 4
        }
        if ( ( ( Setting_PartyInitialized >> 3 ) & 1 ) == 0 ) {
            SetCharacterData( 3, 1, 255, 5, 3 )
            set Setting_PartyInitialized |= 8
        }
        if ( ( ( Setting_PartyInitialized >> 4 ) & 1 ) == 0 ) {
            SetCharacterData( 4, 1, 255, 6, 4 )
            set Setting_PartyInitialized |= 16
        }
        if ( ( ( Setting_PartyInitialized >> 5 ) & 1 ) == 0 ) {
            SetCharacterData( 5, 1, 255, 5, 5 )
            set Setting_PartyInitialized |= 32
               }
        if ( ( ( Setting_PartyInitialized >> 6 ) & 1 ) == 0 ) {
            SetCharacterData( 6, 1, 255, 6, 6 )
            set Setting_PartyInitialized |= 64

        }
        if ( ( ( Setting_PartyInitialized >> 7 ) & 1 ) == 0 ) {
            SetCharacterData( 7, 0, 255, 5, 7 )
            set Setting_PartyInitialized |= 128
        }
        SetName( 11, 30 )
        SetCharacterData( 11, 1, 10, 21, 12 )
        SetPartyReserve( 1083 )
        set Setting_OptionalQuina = 1
        set Setting_DaggerDepresses = 0
        set Setting_MPx4 = 0
        if ( 1 ) {
            Party( 4, 1 )
            UpdatePartyUI(  )
        } else {
            Party( 0, 1 )
            UpdatePartyUI(  )
        }
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1
        }

You know why Eiko persist to be in the team?
I'm trying to find a solution by myself, but if somebody of you can help me before I'll be so glad ;D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-06-25 10:19:27
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)) {
    RemoveParty(6)
}
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-25 11:53:54
Thank you for the reply, but unfortunately nothing happens.. I've also tried to uncheck the other numbers in "SetPartyReserve" to see where is the problem and, the problem still be that everyone should be removed.. except Eiko? It's kinda strange  ???

UPDATE: Ok, I guess I found the problem..!! :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: brucy on 2018-06-26 22:29:35
@Trilititi i set a supporting spell in order to immediately switch to trance mode , and i need to know how to make sure that trance mode have an infinite duration, so , what part of the CIL i have to modify in order to have unlimited trance mode ? for now the only thing that i can imagine is that the limitation of trance mode may be based on the turns ( like : one turn , and the time for trance mode decrease ) , or maybe the time restriction is based on the commands you use ( like: you use "attack" , and something in the game tell that the attack command , or whatever command, must subtract a little of the trance bar ) , and once we find the solution for this , i need help to modify a supporting spell in order to use it to switch between trance mode and normal mode , even in this case , the only thing i can imagine is that is necessary to modify something in the CIL code section
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-06-27 22:01:26
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: brucy on 2018-06-27 22:39:36
@Trilititi don't worry i will explain better , the objectives are : have one spell that allow to switch to trance and normal mode , and make sure that trance mode have an infinite duration , now , i already  a support spell that allow me to switch to trance mode , but i still have to modify that spell so it can reverse immediately to normal mode  , and still i have to give and infinite duration to  trance mode , in this way , we will be able to enjoy the trance mode without anything that can piss us of , about the method you suggested to mod this function , i am not an hacker so is better if i use hades workshop , it may be limited , but still is surely more user friendly than any other program , in any case , i am sure that the problem is my bad english that didn't allowed you to understand me lol , infact , you yourself created the marco mod in hades workshop that allow to disable the cheats , and one of those cheats are used to have an infinite trance bar :D , but i really don't understand anything of the piece of cil code that you showed me , can you explain me what i must write in order to obtain unlimited trance meter ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: brucy on 2018-06-29 05:44:28
i really need those explanations, that suggestion isn't enough for a non-hacker ahah
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-29 08:10:24
@Tirlititi

Still no options to resize the UI menu for battles without using Memoria?

UPDATE:

I also tried to change font with DnSpy... but it gives me the following error, may I did something wrong?

(https://i.imgur.com/0tLMM2n.jpg)

Last UPDATE:

Is there a way to cut the tutorial before the very first battle and the "Warning security" stuff before the Squaresoft logo? And where can I find the Texture2D of the Launcher?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-29 16:53:02


Still no options to resize the UI menu for battles without using Memoria?

Wasn’t till now:
Here (https://tri3fecta.com/ff9-battle-ui-fix/)

for your case, use this as your Csharp base.


I also tried to change font with DnSpy... but it gives me the following error, may I did something wrong?

[img width=640 height=305]https://i.imgur.com/0tLMM2n.jpg[/

Last UPDATE:

Is there a way to cut the tutorial before the very first battle and the "Warning security" stuff before the Squaresoft logo? And where can I find the Texture2D of the Launcher?

I used to get that error a lot. Delete that mscorlib.dll (right panel) and recompile.

There isn’t a texture for the Launcher in any of the archives. That requires a different approach to change. Fact is, you can actually use the launcher from Memoria change the image launcher and use that compatible throughout. I use the launcher from Memoria to change the image. Changing the launcher image in Memoria wont affect your CSharp either.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-29 17:51:42

I used to get that error a lot. Delete that mscorlib.dll (right panel) and recompile.

There isn’t a texture for the Launcher in any of the archives. That requires a different approach to change. Fact is, you can actually use the launcher from Memoria change the image launcher and use that compatible throughout. I use the launcher from Memoria to change the image. Changing the launcher image in Memoria wont affect your CSharp either.

Omg, thank you dude! Everything is perfect! ;D

Quote
Wasn’t till now:
Here (https://tri3fecta.com/ff9-battle-ui-fix/)

for your case, use this as your Csharp base.

Thank you, but I was thinking about something more like the PS1 version, something like this https://steamcommunity.com/groups/ff-modding/discussions/13/1290690926876650747/
The problem is that I don't know it I can apply it without mess everything (plus there's the problem about the link you sent me that if I copy and paste the AssemblyCSharp I will replace mine with all the work I made , right? )
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Incinerator on 2018-06-29 18:30:38
Omg, thank you dude! Everything is perfect! ;D

Thank you, but I was thinking about something more like the PS1 version, something like this https://steamcommunity.com/groups/ff-modding/discussions/13/1290690926876650747/
The problem is that I don't know it I can apply it without mess everything (plus there's the problem about the link you sent me that if I copy and paste the AssemblyCSharp I will replace mine with all the work I made , right? )

Nope, not that one linked it be screwed. (https://s15.postimg.cc/3jvas6ct7/05556800-4_FD8-4_A29-_A0_FE-4_A5_E5_F282962.gif)

2 things.
1. Use this CSharp as a base, and reapply your .hws mod.

2. Inspect CSharp from archive in dnapy, grab the code and apply to your already outputted hws mod. CSharp.
If all fails, rough it. (https://s15.postimg.cc/q9ufl46aj/F98_E4891-553_C-4_BE7-9_F21-6_BB28_F05_DB98.gif)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: brucy on 2018-06-29 20:52:10
@Tirlititi please tell me how to block that function :O
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-06-29 23:17:45
@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);
break;
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);
}
break;
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: brucy on 2018-06-30 00:51:00
@Trilititi ok thanks :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-06-30 04:55:10
Thank you both guys!!!!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-07-02 15:15:16
Guys, you know why everytime now I try to replace the AssemblyCSharp the game won't start after the Intro-Logo? Which can be the problem?  :'(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Tirlititi on 2018-07-02 17:02:45
How do you mod it? Is it HW that gives you a bugged CSharp? If so, did you mod the CSharp beforehand with dnSpy?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: CrazynNova on 2018-07-03 06:28:45
I'm sorry to sound like a noob but I'm getting this error message

Configuration file not found for this binary file.
The program will perform a scan in order to open it

I want to extract and view. perhaps modify the field scenes.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-03 17:16:39
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).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-03 22:48:20
thanks :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-04 07:57:08
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 ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-04 22:46:22
come to think about it , there is something that you can add in the next version of hades workshop , that is something already existent in the version 0.37 , that is : the music index of the osts that you put in the "info" column ( in the section of the unity assets ) , currently that section have the title of the osts , so maybe you can add again the music index right after the music title i think
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-06 11:17:59
i also need to know if there is some program that can convert a music file in the format required by final fantasy 9 , so i can substitute some osts
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-06 17:47:25
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-06 18:17:26
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.

Exactly right! (https://s22.postimg.cc/ild4lm529/biggrin.gif)

Here’s what I do.

I export said music file, open it in Audacity (yes, audacity can open the .bytes file, as it knows it’s ogg! (https://s22.postimg.cc/ild4lm529/biggrin.gif))

Replacing music, is simple, I load a song in audacity, export it as .ogg at a Hz of 44100 or 48000 whichever needed. Then rename the .ogg to .bytes. Import with unity assets viewer. HW handling the akb header is a life saver, making audio importing a breeze.(https://s22.postimg.cc/5tyyf4apt/cool.gif)

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.

I’ve noticed that! (https://s22.postimg.cc/g41deby0h/admles.gif)
Explains why I couldn’t open those mesh files!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-06 22:12:23
@Tirlititi @Incinerator i tried the procedure you explained with audacity but the import still fail , what could be the cause ? maybe the problem is the audio file itself , i downloaded that file trough this site : https://www.onlinevideoconverter.com/it/video-converter
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-07 09:23:40
@Tirlititi @Incinerator i tried the procedure you explained with audacity but the import still fail , what could be the cause ? maybe the problem is the audio file itself , i downloaded that file trough this site : https://www.onlinevideoconverter.com/it/video-converter

1. Making sure have the same ff9 assets name. (https://s22.postimg.cc/rt5d2g9ld/redface.gif) like music006.akb.bytes in the HadesWorkshopAssets directory HW created.

2. Where you trying to import a video??? (https://s22.postimg.cc/3pele0lxt/confused.gif)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-07 23:18:34
@Incinerator ok , now it works , i imported a song found on youtube, initially it didn't work because the extension of the music file was hidden by a default setting of windows 10 , in any case , now i need some help to solve another problem : the game doesn't run the song endlessly like it should , it play that only once , so where the game handle the "loop" function ? and what i must write in order to create the loop ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-08 06:05:08
@Incinerator ok , now it works , i imported a song found on youtube, initially it didn't work because the extension of the music file was hidden by a default setting of windows 10 , in any case , now i need some help to solve another problem : the game doesn't run the song endlessly like it should , it play that only once , so where the game handle the "loop" function ? and what i must write in order to create the loop ?

Edit the .ogg's metadata in audacity. Add tag: "LoopStart" & "LoopEnd". Enter the values in samples:
(https://s22.postimg.cc/si3h7br5t/audacity.png)

@Tirlititi, add this as tutorial for importing custom audio?? (https://s22.postimg.cc/ild4lmcs1/brofist.gif)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-08 07:41:17
ok it works , thanks :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: ToraCarol on 2018-07-08 11:06:12
How do you mod it? Is it HW that gives you a bugged CSharp? If so, did you mod the CSharp beforehand with dnSpy?

It may be the reason..

First I edited the CSharp with HWS, then i used dnSpy, then I've tried to mod again with HWS because I forgot some things.. and that happen, fortunately I got the backup, anyway ;)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-08 11:10:03
@Incinerator but something strange happened : the loop worked for the first music i injected , but strangely , it didn't worked for the second song that i injected , but appearently i did the same procedure whit both files , the music that the loop doesn't work for is the one i used to substitute "dark messenger" , while the one that the loop worked for is the one i substituted for "battle", and in both cases all i did was to add the two tags that you told me to add in the tagg section , so what may i did wrong ? :\, the only difference i notice is the length of the two loops , the working look belong to a song of 3:40 minutes , the not working loop belong to a 6:46 minutes , so maybe the problem can the the size of the loop , i don't know , what do you think ? :\
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-08 21:43:19
so maybe the problem can the the size of the loop , i don't know , what do you think ? :\

No, definitely not that. I have a song like 10 minutes, and it works.
What I can think of it, from here (having replaced dark messenger before) be the sample rate. How does it sound in game, is it pitched? Does it sound normal as it should? (https://s22.postimg.cc/66qclgt1d/ponder.gif)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-08 23:32:29
well , the only anomaly that i can think about is the volume of the music , maybe is too much loud , infact , before edit the metadata file with audacity , i downloaded the song from youtube using an online converter that allow me to even chose the quality in kbs , and so i selected the 320kbs , then downloaded the song and edited with audacity , maybe that's the problem ? if only i know how to add an image i could show you what i did and so explain myself for good , maybe the problem is somewere in the way i am saving the changes in audacity , still i am pretty sure that i am doing the same thing i did with the only music that i managed to port succesfully , hmm , you think it can depend on the event ? i mean , maybe the game tread a bit differently a loop according to the phase were it is played
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-09 05:04:47
Oh that's right! (https://s22.postimg.cc/g41deby0h/admles.gif). I just remembered.
(https://s22.postimg.cc/si3h7br5t/audacity.png)

For the "LoopEnd" value, you need to subtract 1 in the metadata also for loop.
So if the song's "LoopEnd" value is 7248384, you enter, in the metadata: 7248383.
Without doing it does make the audio not loop lots time.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-09 10:09:26
very good i will give it a try :D , but still i say that's strange how the first looping operation worked even without know the step that you explained now , and i wonder why
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-07-09 19:32:34
Please any news? There's somebody that can help? I'm in a huge problem.. I need to edit an important thing in the Assembly CSharp, I did a big mistake in the "Party" zone, and I want to have that Assembly CSharp not corrupted in any case :'( It's so impossible to fix?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-10 08:38:49
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-07-10 09:04:48
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.

No not exactly, it was something like this: I edited first the CSharp with DnSpy to change font, then I tried again to edit the game with HwS, I edited little things in party and stuff (just little changes, like abilities, or equipment), and it was exported a new CSharp, and now this CSharp exported by HwS it's bugged... probably a conflict with DnSpy?

-----

UPDATE: Guys I guess is solved, I noticed the problem when I tried to import it again with Dnspy, and I saw that every archive (like FF9, UI and stuff) are gone! So i decided to come back with a "Virgin" CSharp an put everything again, now I edit again the font ;)
UPDATE2: Aaaaand, i did it! I made anyway a backup, in case I will find other problems!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-10 23:17:31
UPDATE: Guys I guess is solved, I noticed the problem when I tried to import it again with Dnspy, and I saw that every archive (like FF9, UI and stuff) are gone! So i decided to come back with a "Virgin" CSharp an put everything again, now I edit again the font ;)
UPDATE2: Aaaaand, i did it! I made anyway a backup, in case I will find other problems!

Good to hear you got it fixed! (https://s22.postimg.cc/z94mo9zvl/thumb.gif)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-07-11 16:00:32
I fixed... but now other stuff is here  x''P

You know guys WHY this thing happen?

(https://i.imgur.com/bA55sx8.png)

It's because I set the Abillities of Blank? It's kinda strange.. I also applied macro.. so why his support abilities won't activate/appear? :-(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-11 20:03:46
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-07-12 10:40:07
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.

It's ok, silly mistake of mine.. it's solved also this one  :mrgreen:


UPDATE: Guys I want to disable the menu button when I'm using Cid Frog... it's possible?

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 ^^'

To not mistake.. could you tell me how to do exactly with dnSpy? I want to try to make a Trance model for Blank, so if someone of you can explain me better..maybe I can give a shot!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-12 16:16:43
Guys I want to disable the menu button when I'm using Cid Frog... it's possible?

You know I noticed this myself. The menu is enabled whilst controlling as Cid_Frog before the red light green light mini game.
Wasn’t like that in psx as far as I know.
Never the matter a simple fix.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: CrazynNova on 2018-07-12 23:47:37
I really hate to make an example of myself but I'm having some serious difficulties trying to work out how to load files into this tool

I have both the steam and physical copy of the game. I have tried loading the .bin files from the steam version (p0data12 for example) all of which produce the unhandled exception error message. With the PSX version, I am even more lost. There is a "raw cd image" file on the disk. How the hell is that loaded in?

I'm sorry to be a pain
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-13 09:17:03
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-07-13 13:05:25
Hi Tirlititi  :) Have you checked my latest question? You think you can help somehow?

Quote
You know I noticed this myself. The menu is enabled whilst controlling as Cid_Frog before the red light green light mini game.
Wasn’t like that in psx as far as I know.
Never the matter a simple fix.

I know right..
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-13 13:44:15
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).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-13 19:39:19
- 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'm going to assume it's this.
Like other engine mistakes, such as being able to land the invincible airship on world map bushes.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-14 07:12:21
well fortunately be able to land in more places is a good thing , infact i am really interested in make the invinicible able to land anywere :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: KekeMcGee on 2018-07-16 04:07:54
Is model importing still broken? or am I doing things wrong?

I've tried importing proper versions of ASCII FBX & Binary FBX, but they either crash the game, or fail to load the scene.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-16 09:02:42
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-16 09:10:10
Is model importing still broken? or am I doing things wrong?

I've tried importing proper versions of ASCII FBX & Binary FBX, but they either crash the game, or fail to load the scene.

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.

Yeah. Still a bit buggy. I've only got as far as model swapping weapons with the importer, but those where invisible in game. I treid test importing the Zodiac SPear weapon, could not import that. I could not model swap Zidane with Quina still. (Vice versa)

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.

Regrading the characters, I tried numerous things to try and progress. At the very least, after properly re-rigging custom models to the output's bone hierarchy, and those animations intact, I was able to import it without crashing the model importer, but in game, it still crashed. something is still missing. I use 3ds Max and Maya. (Usually with the .anim files).
Animations still there, everything, but to no avail, the game will still crash.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: KekeMcGee on 2018-07-16 21:41:09
Ah, I mainly use Blender. Thanks for the replies, looking forward to it being fixed no matter how long it takes.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-17 23:09:30
Ah, I mainly use Blender. Thanks for the replies, looking forward to it being fixed no matter how long it takes.

What were you trying to import? Accessory, Character?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Maedroth on 2018-07-18 16:10:38
Is there any way to modify the 'Level up' and 'Ability Up' support abilities? As in, modify the values they give (1.5x EXP, 2x, 3x etc.).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-19 00:06:32
Yes, but preferably with the tool dnSpy.
The code for that is in the method "BattleResultUI::InitialInfo". There's the following lines there for experience:
Code: [Select]
if (ff9abil.FF9Abil_GetEnableSA((int)pLAYER.info.slot_no, 235))
{
battleEndValue.value += this.defaultExp >> 1;
}
And for AP:
Code: [Select]
if (ff9abil.FF9Abil_GetEnableSA((int)pLAYER.info.slot_no, 236))
{
battleEndValue2.value = this.defaultAp << 1;
}
If you're not familiar with the shift operators, you can simply consider that "+= this.defaultExp >> 1" adds half of the default experience to the total, and "this.defaultAp << 1" is twice the number of AP (it's like a division or a multiplication by 2).
You can replace those formulae by something else, like "battleEndValue.value = this.defaultExp * 3;" for getting three times the exp with Level Up.

If you want to do it with Hades Workshop, it's in the panel "CIL Code -> Raw -> BattleResultUI -> InitialInfo".
It is CIL Code there, not C#, so it's harder to read/modify, but if you don't want to use dnSpy, I will check how to do (if it is possible: not all the methods can be edited correctly with HW). I can't do it right now.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-19 02:47:22
And for AP:
Code: [Select]
if (ff9abil.FF9Abil_GetEnableSA((int)pLAYER.info.slot_no, 236))
{
battleEndValue2.value = this.defaultAp << 1;
}
If you're not familiar with the shift operators, you can simply consider that "+= this.defaultExp >> 1" adds half of the default experience to the total, and "this.defaultAp << 1" is twice the number of AP (it's like a division or a multiplication by 2).
You can replace those formulae by something else, like "battleEndValue.value = this.defaultExp * 3;" for getting three times the exp with Level Up.

could this be used to store (save) gained AP for each character separately and spend it on abilities rather?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-19 12:23:51
Yes, well, it's more in the "BattleResultUI::AddAp" method that you'd want to do that.
In that method, there's a loop over the equipments, then a loop over the ability slot of each piece of equipment, and the increase of these abilities' AP.
You can replace the whole loop by:
Code: [Select]
ushort curap = FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no] | ((ushort)FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no+1] << 8);
curap += ap;
FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no] = curap & 0xFF;
FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no+1] = curap >> 8;
With this, the general variables "VARL_GenUInt16_1500" will hold the AP storage number (65535 max) of Zidane, "VARL_GenUInt16_1502" will contain the one's of Vivi, etc... I've chosen 1500 randomly ; I think that this general variable is not used but it might be.
But then you need some system to allow players to spend these "ap_store" into abilities. And that's a completly different story, quite harder.

What you can do with that is to make this system with the field scripts: for instance, you can add the option to spend AP in the moogles' menu. If you don't want it, you have to wait until we know how to add a full menu with GameObjects and such. That surely won't be soon.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-19 17:04:09
Yes, well, it's more in the "BattleResultUI::AddAp" method that you'd want to do that.
In that method, there's a loop over the equipments, then a loop over the ability slot of each piece of equipment, and the increase of these abilities' AP.
You can replace the whole loop by:
Code: [Select]
ushort curap = FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no] | ((ushort)FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no+1] << 8);
curap += ap;
FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no] = curap & 0xFF;
FF9StateSystem.EventState.gEventGlobal[1500+2*pLAYER.info.slot_no+1] = curap >> 8;
With this, the general variables "VARL_GenUInt16_1500" will hold the AP storage number (65535 max) of Zidane, "VARL_GenUInt16_1502" will contain the one's of Vivi, etc... I've chosen 1500 randomly ; I think that this general variable is not used but it might be.
But then you need some system to allow players to spend these "ap_store" into abilities. And that's a completly different story, quite harder.

What you can do with that is to make this system with the field scripts: for instance, you can add the option to spend AP in the moogles' menu. If you don't want it, you have to wait until we know how to add a full menu with GameObjects and such. That surely won't be soon.

Thanks for in depth info! Knowing this part is doable is just as good.
While my goal is to have a full new menu with GameObjects, I’m curious to know how I would go about using the Moogle Menu from field scripts.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: RuneWinchester on 2018-07-20 18:42:46
Hi,

I'm a Windows PC Steam User for FF IX. I'd like to start using this program for my game, but I'm stuck on initial operation. When I went to open a file the program wants a .bin file, and my FF IX save is a .dat file. Which file should I be opening, and would someone mind to post the directory location of it, or is there another step you must take to get HWS to accept steam saves?

Thank you.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-07-23 09:47:35
i am not an hacker so all i know is the path of the steam save for final fantasy 9 :
 C:\Users\your user name\AppData\LocalLow\SquareEnix\FINAL FANTASY IX\Steam\EncryptedSavedData

in order to make sure that the "AppData" folder appear , you may have to change the settings for the folders in the apposite menu (it should be in control panel) and activate something like " show hidden folders"
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-23 10:02:38
Hades Workshop can not deal with save files. It deals with the game's data files.
You must select the file "FF9_Launcher.exe" in the game's directory. Usually, it is something like this:
C:\Program Files\Steam\steamapps\common\Final Fantasy IX

It is only for the PSX version that you need to select a .bin file. For Steam, you never select .bin files directly (the program finds the files it needs itself).

If you want to edit your save files, you must use the tool Memoria by gjoerulv.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: KekeMcGee on 2018-07-25 12:30:39
What were you trying to import? Accessory, Character?

I was trying to import a weapon over Zidane's in-battle dagger, and attempted two battle backgrounds, one crashed the game, the other only caused a forever loading blackscreen with the music still playing.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-07-25 19:17:13
The weapon and battle backgrounds are somewhat special in the sense that they have a different hierarchy than the others. The problem is, apparently, that the game's source code espects some 3D models to have very special hierarchy or bone names or whatever. It is not clear to me what are these special requirements, in addition to the bugs that probably exist in the model conversion.

Again, at best, only importing animations only or possibly accessory models have a chance to work in my knowledge.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-07-25 20:25:33
the game's source code espects some 3D models to have very special hierarchy or bone names or whatever. It is not clear to me what are these special requirements, in addition to the bugs that probably exist in the model conversion.

that's good, at least the main issues has been narrowed down to these to fields.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-08-09 17:55:34
HI GUYS! I'm back!!! And finally... I FINISHED THE MOD!!

I was wondering.. it's ok if I post in the forum, even if it's in Italian only? :|
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-08-09 18:28:02
Congrats.
I guess you can but you need to ask to a moderator, not me.
Also, posting here is not the best thing for visibility from the italian community: you should better post your mod in an italian forum as well (plus, even if you are allowed to post it here, I bet you'd need to write the description in english in this forum).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-08-09 19:15:33
In fact was a question to someone who knows, not you specifically.. so don't worry..ahah!

I'm also posting it on an Italian forum, but I was interested to share it also with you guys, for this reason I was askin.
About the english description there's no need to worry, I do it in any case ;P
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Covarr on 2018-08-09 19:27:25
We don't have a strict rule regarding what language you use, but we generally prefer English, because the site staff all speaks English and it's quite difficult to adequately moderate things we don't understand. I've seen some people post dual-language posts with the content in both English and another language; I think that's a good compromise.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2018-08-09 19:40:02
Ok thanks for the informations, I guess I'll try to post here when I'll have also a full english version  8-)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kanitel on 2018-08-16 07:25:10
Pease help me. I am use Alternate Fantasy mod with FFIX Scaled Battle UI. After i use Hades Workshop and do some changes,game stuck on loading screen and don`t work. With vanilla files all just fine and changes work perfect.
etc. Sorry for my English.  :oops:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-08-16 17:20:32
Unfortunatly, it is not possible to use Hades Workshop after installing a mod that changes the engine, not without workarounds.
You can still use HW to mod anything that is not the engine, though: just don't copy/paste the Assembly-CSharp.dll that is generated by HW after your changes.

Things you can change this way:
- Any text/name/description...
- Enemy data,
- Tetra Master data,
- Everything under the Environment panel.

In particular, the player's abilities, the items and shops are inside the engine and can only be modified with dnSpy or a similar tool, after the engine is modded as in your situation.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kanitel on 2018-08-16 18:24:55
Thank you for fast reply! Omg so simple and other time so complicated... 
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-08-16 22:57:37
To all regrading the model importer in Unity Assets Viewer, to import characters without crashing HW, the character you are either swapping or replacing must be re-rigged and skinned with the target’s appropriate skeletal bone structure. This also insures the charatcer animates properly (mesh deforms) with that target’s animation.
e.g.
swapping Lani model with Beatrix; rig and skin Beatrix’s bones to Lani’s model accordingly, these bones of Beatrix that animate her now applied to Lani correctly, so Lani doesn’t deform improperly. (Ex. Limbs flapping, folding erratically)
i show visual example once i return to the studio.
That’s just getting it to successfully import in HW without crashing, it will still crash in game as per all my tests.
Possibly add/modify function in AssemblyCSharp regrardding the limits/requirements of models like done with HD backgrounds handle.
This is for importing characters only.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: omnilynx on 2018-08-17 05:23:00
I think I found a bug in Hades Workshop, but I'm not sure, it could be some weird glitch in my game files. I noticed that whenever I edit the status effect on the spell Silence, it also modifies the status effect on Doom. Likewise Earth Shake seems to be paired with Slow and Dragon's Crest is paired with Annoy. Any time I change the status effect for one of them, the other also changes. There may be others as well, those are just the ones I verified.

Any ideas/fixes?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-08-17 16:29:41
I think I found a bug in Hades Workshop, but I'm not sure, it could be some weird glitch in my game files. I noticed that whenever I edit the status effect on the spell Silence, it also modifies the status effect on Doom. Likewise Earth Shake seems to be paired with Slow and Dragon's Crest is paired with Annoy. Any time I change the status effect for one of them, the other also changes. There may be others as well, those are just the ones I verified.

Any ideas/fixes?

My only speculation be you changed status effcts from the “Edit Status” sub menu instead drop down, Seems odd from this angle, but I’m not near my pc to see.


@Tirlititi
Will there be a CIL macro for this?
Perhaps it will solve the game crashing problem.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: omnilynx on 2018-08-18 01:55:24
My only speculation be you changed status effcts from the “Edit Status” sub menu instead drop down, Seems odd from this angle, but I’m not near my pc to see.

Welp, you're absolutely correct. Thanks!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-08-18 19:28:27
No, I don't plan on making any other CIL macro.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-08-18 23:25:25
No, I don't plan on making any other CIL macro.

Understandable.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-04 17:30:02
Hello tirlititi,

just wondering if it is possible to change the battle music for certain story battles? For example, the boss battles against Scarlet Hair and Tantarian have the normal battle theme playing, and I'd like to change that to the boss battle theme. Is this determined somewhere in the scripts of their respective field files?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-04 19:23:38
No, it's determined in a couple of .txt files of the "resources.assets" archive. The files are called "BtlEncountBGMMetaData.txt" (for battles on the field) and "WldBtlEncountBGMMetaData.txt" (for battles on the map).

The files present like this :
Code: [Select]
{
  "ID of Field": {
    "ID of Battle in the Field": "ID of Battle Music",
    ...
  },
  ...
}
Battles have the music ID "0" (for normal encounters), "35" (for bosses) and "111" (for Hunter's Chance). Some battles are not registered in these files, when they don't stop the music played in the field (the "Don't Stop Music" battle flag is also checked for them in the "Enemy" panel).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-13 14:27:45
Quote
Battles have the music ID "0" (for normal encounters), "35" (for bosses) and "111" (for Hunter's Chance). Some battles are not registered in these files, when they don't stop the music played in the field (the "Don't Stop Music" battle flag is also checked for them in the "Enemy" panel).

Thanks, I really appreciate it.

On a related note, I tried adding random encounters to a field that previously didn't have them by copying the following lines to the Main_Init script:

Quote
    SetRandomBattleFrequency( 60 )
    SetRandomBattles( 2, 859, 849, 854, 854 )
Now I get proper random encounters in that field, but the music doesn't change to the battle theme. Instead, the normal field music keeps playing. Is there any sort of SoundCode that I have to add somewhere in the field script for that?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-13 17:30:08
No: as you can see from the format of the "BtlEncountBGMMetaData.txt", the battle musics are not linked by "1 Battle -> 1 Music" but rather by "1 Field + 1 Battle -> 1 Music". So you need to add a line for your new battle (or, more precisely, to your new use of a battle inside a field) inside this .txt file.

No sound code needs to be added in the field script.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Little Cloud on 2018-10-14 06:32:18
Hi, just wanted to say awesome tool, man, many thanks, have been using it for months, but now I'm posting for the first time here. I can do a lot with HW, but how do I open that resource.assets file, never had such a file format before, do I need a special tool to open it? Sorry to bother you, but I'm at a complete loss here, but thanks for this great tool, man!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: vomitrocious00 on 2018-10-16 23:38:07
Is there a way to change the Encounter Rate on Steam to something similar to the PS version?
I've noticed I'll run through an entire dungeon with maybe 1 or 2 encounters.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-17 07:26:39
@Little Cloud: The resources.assets file is an Unity archive and it can be opened with a few tools available on the internet.
Hades Workshop can also open it a bit more conveniently: go to "Tools -> Unity Assets Viewer" and open the FF9_Launcher.exe in this tool. From there, you can access to all the Unity archives of the game. The resources.assets is in the list "Archive -> Shared Assets -> Resources".

It contains pretty much all the texts of the game (that's why HW generates a new one when exporting as Steam mod), card datas, spell animation datas, copies of the PSX world map chunk, a few images (though most interesting images are in the "sharedassets2" archive), some meta-data files like the one discussed above, etc...

Contrary to what happens when you open the datas within the main frame of HW, the changes you will make on the archives ("right-click -> import selection") will apply directly on the archives and replace them on your hard drive, instead of letting you doing it yourself.

@vomitrocious00: That's a big unknown for me. You can find there (https://gamefaqs.gamespot.com/boards/197338-final-fantasy-ix/75389893) a discussion on this encounter rate. I must be missing something because there doesn't seem to be a big difference between the way random encounters are coded in the Steam version compared to the description that SoftReset did on the PSX mechanics. There is no doubt that the encounter rate is lower on Steam though... So either a little change in the mechanics is enough to produce that effect, or I didn't catch a condition to launch a random encounter that would have been added for Steam.

If you want to adjust numbers inside the code to increase the encounter rate, it's in the method "ProcessEncount" of the class "EventEngine". You can edit it in HW in the "CIL Code" panel, but it is much more convenient and safer to use the tool dnSpy as it allows to edit the source code in C# and not the assembly code in CIL. I don't know what to change in order to get the exact same encounter rate as the PSX version.
There are also random encounter rates inside the Field scripts but they are the same between PSX and Steam version and it would be uselessly tedious to change them for each field.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-17 13:43:30
Hello everyone

I have a 3D model export problem FF9 I have this message has it

(http://image.noelshack.com/minis/2018/42/3/1539783436-capture.png) (http://www.noelshack.com/2018-42-3-1539783436-capture.png)
is there a way to export its model without worry?

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-17 16:54:16
No: as you can see from the format of the "BtlEncountBGMMetaData.txt", the battle musics are not linked by "1 Battle -> 1 Music" but rather by "1 Field + 1 Battle -> 1 Music". So you need to add a line for your new battle (or, more precisely, to your new use of a battle inside a field) inside this .txt file.

No sound code needs to be added in the field script.

Hi tirlititi, I've done a bit of playtesting in the last few days, but it seems the desired changes to the battle theme won't take effect. Here's what I did:

I've exported the BtlEncountBGMMetaData.txt, opened it with a text editor and made the required changes, and then I imported it again using the "import selection" function in Hades Workshop. I've done this with both resource.assets files (the x64 and the x86) to be sure. However, I still don't get any music changes in my new random battles. Both resource.assets files are updated according to the fiel change date. Is there anything else I'm missing?

Also, I've encountered another problem: When adding random battles to a new field, after such a battle the field music doesn't resume and I can't move my character anymore. I've noticed that all fields that naturally have random battles also have a main_reinit function in their scripts, while fields without random battles don't. So I'm guessing I need to write a main_reinit function for the fields that I've added random encounters to, right? I'm just unsure what exactly I need to put there, as these scripts seem to differ from field to field. From what I see it's something similar to each respective field's main_init function, but before I resort to (potentially fruitless) trial and error I was hoping that you could give me some general tips as to what I can copy/paste from the main_init script.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: vomitrocious00 on 2018-10-17 18:08:20
Thanks for the reply. I'll give that a look! Appreciate it ^^
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-17 19:38:59
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2018-10-17 21:44:28
Hi tirlititi, I've done a bit of playtesting in the last few days, but it seems the desired changes to the battle theme won't take effect. Here's what I did:

I've exported the BtlEncountBGMMetaData.txt, opened it with a text editor and made the required changes, and then I imported it again using the "import selection" function in Hades Workshop. I've done this with both resource.assets files (the x64 and the x86) to be sure. However, I still don't get any music changes in my new random battles. Both resource.assets files are updated according to the fiel change date. Is there anything else I'm missing?

Also, I've encountered another problem: When adding random battles to a new field, after such a battle the field music doesn't resume and I can't move my character anymore. I've noticed that all fields that naturally have random battles also have a main_reinit function in their scripts, while fields without random battles don't. So I'm guessing I need to write a main_reinit function for the fields that I've added random encounters to, right? I'm just unsure what exactly I need to put there, as these scripts seem to differ from field to field. From what I see it's something similar to each respective field's main_init function, but before I resort to (potentially fruitless) trial and error I was hoping that you could give me some general tips as to what I can copy/paste from the main_init script.

If you add random battles to a field that doesn't have it, you need to add the function "Main_Reinit" to the script for the player to regain control after the battle.
(Not sure if this is the precise code to enter in the function (ask Tirlititi) but I used this for some of mine without issue:
Code: [Select]
Function Main_Reinit
    set VAR_GlobBool_159 = 0
    RunScriptAsync( 0, 250, 13 )
    if ( VAR_GlobBool_155 == 1 ) {
        ATE( 1 )
    }
    ShowTile( 11, 0 )
    ShowTile( 12, 0 )
    if ( VAR_GlobBool_158 == 0 ) {
        0x27( 127 )
    } else {
        0x27( 255 )
    }
    Wait( 2 )
    ShowTile( 9, 0 )
    RunTileAnimation( 0, 0 )
    SetTileAnimationFlags( 0, 16 )
    SetTileAnimationSpeed( 0, 64 )
    RunSPSCode( 10, 130, 195, 0, 0 )
    RunSPSCode( 10, 145, 6000, 0, 0 )
    RunSPSCode( 10, 155, 255, 0, 0 )
    RunSPSCode( 10, 160, 16, 0, 0 )
    RunSPSCode( 10, 170, 0, 0, 0 )
    RunSPSCode( 10, 156, 1, 0, 0 )
    RunSPSCode( 10, 131, 1, 0, 0 )
    SetCameraFollowHeight( 500 )
    if ( VARL_GenBool_2926 ) {
        ShowTile( 9, 1 )
    }
    if ( VAR_GlobUInt8_24 ) {
        RunScriptAsync( 2, 15, 14 )
    }
    if ( VAR_GlobUInt8_25 ) {
        RunScriptAsync( 2, 18, 14 )
    }
    Wait( 2 )
    if ( VAR_GenUInt8_13 == 9 ) {
        SetTextVariable( 2, 0 )
        WindowAsync( 6, 0, 65 )
        RaiseWindows(  )
        WaitWindow( 6 )
        set VAR_GenUInt8_13 = 0
    }
    if ( VAR_GenUInt8_14 == 9 ) {
        SetTextVariable( 2, 1 )
        WindowAsync( 6, 0, 65 )
        RaiseWindows(  )
        WaitWindow( 6 )
        set VAR_GenUInt8_14 = 0
    }
    set VAR_GlobBool_159 = 1
    if ( VAR_GlobBool_158 == 1 ) {
        set VAR_GlobBool_158 = 1
        if ( VAR_GlobBool_159 == 1 ) {
            if ( VAR_GlobBool_156 == 0 ) {
                EnableMove(  )
                0x27( 255 )
                if ( VAR_GlobBool_144 == 0 ) {
                    EnableMenu(  )
                }
            }
        }
    }
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    return

The battle music will stop playing after battle if "No Victory animations" isn't checked and that random battle's music code isn't in the field (through BtlEncountBGMMetaData.txt). In this case, you can just put the field's Sound code in Main_Reinit, and/or check the box "No Victory Animations".

editing the BtlEncountBGMMetaData.txt e.g.

1. I've added a Battle with "625" to field: "Daguerreo/Entrance".
Daguerreo/Entrance is Field ID: "2800"
Extract and open BtlEncountBGMMetaData.txt (Always keep the BtlEncountBGMMetaData.txt in the HadesWorkshopAssets\Resources folder!)
From the list scroll down to #2800:
(https://i.postimg.cc/0jsq71KF/first.png)

Since Daguerreo doesn't ever have a random battle it in Vanilla, I've added it in as Tirlititi told you to do before.
The number "111" is music id: "music082" which is "Hunter's Chance" (in my case, a battle theme).
Save the .txt file, import it back with HW Unity Viewer and test.
My battle leaves "No Victory Animations" unchecked
(https://i.postimg.cc/tJMtLpdm/enemy.png)
With this setup, the battle will be in the field, once the battle ends, the field music resumes as it should.

Also for a setup for multiple battles can go a little something like this in the field script:

Code: [Select]
if ( VARL_GenBool_7962 == 0 ) {
        DisableMove(  )
        DisableMenu(  )
        RunSoundCode( 265, 0 )
        Wait( 10 )
        0xA9( 250 )
        FadeFilter( 4, 24, VAR_GlobUInt8_17, 255, 255, 255 )
        Wait( 25 )
        RunSoundCode3( 53248, 3096, 0, -128, 125 )
        Wait( 30 )
        0xA9( 250 )
        FadeFilter( 5, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        Wait( 70 )
        RunSoundCode( 0, 73 )
        WindowSync( 1, 128, 400 )
        WindowSyncEx( 22, 1, 128, 401 )
        Wait( 10 )
        0xA9( 250 )
        FadeFilter( 4, 24, VAR_GlobUInt8_17, 255, 255, 255 )
        Wait( 25 )
        RunSoundCode3( 53248, 3096, 0, -128, 125 )
        Wait( 30 )
        0xA9( 250 )
        FadeFilter( 5, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        Wait( 10 )
        WindowSyncEx( 22, 1, 128, 402 )
        WindowSync( 1, 128, 403 )
        WindowSyncEx( 22, 1, 128, 404 )
        WindowSync( 1, 128, 405 )
        FadeFilter( 2, 24, 0, 64, 64, 64 )
        RaiseWindows(  )
        WindowSync( 1, 16, 406 )
        WindowSync( 1, 16, 407 )
        WindowSync( 1, 16, 408 )
        WindowSync( 1, 16, 409 )
        set VARL_GenBool_7962 = 1
    }
    DisableMove(  )
    DisableMenu(  )
    RunSoundCode( 0, 73 )
    WindowSync( 1, 16, 410 )
    switch 5 ( GetDialogChoice ) from 0 {
    case +0:
        RunSoundCode( 0, 0 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 896 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 899 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 897 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 210 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 211 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 57 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 82 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 231 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 280 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        Battle( 1, 763 )
        RunSoundCode( 0, 111 )
        DisableMenu(  )
        DisableMove(  )
        Wait( 20 )
        0xA9( 250 )
        FadeFilter( 4, 24, VAR_GlobUInt8_17, 255, 255, 255 )
        Wait( 25 )
        RunSoundCode3( 53248, 3096, 0, -128, 125 )
        Wait( 30 )
        0xA9( 250 )
        FadeFilter( 5, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        Wait( 30 )
        RunSoundCode( 0, 5 )
        FadeFilter( 2, 24, 0, 64, 64, 64 )
        RaiseWindows(  )
        WindowSync( 1, 16, 411 )
        0xA9( 250 )
        FadeFilter( 4, 24, VAR_GlobUInt8_17, 255, 255, 255 )
        Wait( 25 )
        RunSoundCode3( 53248, 3096, 0, -128, 125 )
        Wait( 30 )
        0xA9( 250 )
        FadeFilter( 5, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        Wait( 30 )
        FadeFilter( 2, 24, 0, 64, 64, 64 )
        RaiseWindows(  )
        WindowSync( 1, 16, 412 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 15 )
        AddItem( 15, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 25 )
        AddItem( 25, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 39 )
        AddItem( 39, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 49 )
        AddItem( 49, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 44 )
        AddItem( 44, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 56 )
        AddItem( 56, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 61 )
        AddItem( 61, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 63 )
        AddItem( 63, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 67 )
        AddItem( 67, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 78 )
        AddItem( 78, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 83 )
        AddItem( 83, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 84 )
        AddItem( 84, 1 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 87 )
        AddItem( 87, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 96 )
        AddItem( 96, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 97 )
        AddItem( 97, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 131 )
        AddItem( 131, 6 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 147 )
        AddItem( 147, 7 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 163 )
        AddItem( 163, 4 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 164 )
        AddItem( 164, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 167 )
        AddItem( 167, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 175 )
        AddItem( 175, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 176 )
        AddItem( 176, 8 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 191 )
        AddItem( 191, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 195 )
        AddItem( 195, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 197 )
        AddItem( 197, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 209 )
        AddItem( 209, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 222 )
        AddItem( 222, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 198 )
        AddItem( 198, 8 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 225 )
        AddItem( 225, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 226 )
        AddItem( 226, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 227 )
        AddItem( 227, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 228 )
        AddItem( 228, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 229 )
        AddItem( 229, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 230 )
        AddItem( 230, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 231 )
        AddItem( 231, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 232 )
        AddItem( 232, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 233 )
        AddItem( 233, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 234 )
        AddItem( 234, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 238 )
        AddItem( 238, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 235 )
        AddItem( 235, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 241 )
        AddItem( 241, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 242 )
        AddItem( 242, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 243 )
        AddItem( 243, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 247 )
        AddItem( 247, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 248 )
        AddItem( 248, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 249 )
        AddItem( 249, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 250 )
        AddItem( 250, 13 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 253 )
        AddItem( 253, 50 )
        WindowSync( 7, 0, 68 )
        RunSoundCode3( 53248, 108, 0, -128, 125 )
        SetTextVariable( 0, 254 )
        AddItem( 254, 50 )
        WindowSync( 7, 0, 68 )
        WindowSync( 1, 16, 413 )
        WindowSync( 1, 16, 414 )
        set VARL_GenBool_7963 = 1
        FadeFilter( 6, 16, VAR_GlobUInt8_17, 255, 255, 255 )
        EnableMove(  )
        RunSoundCode( 0, 73 )
        EnableMenu(  )
        Wait( 16 )
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        TerminateEntry( 255 )
        break
    case +1:
        DisableMenu(  )
        DisableMove(  )
        Menu( 0, 0 )
        EnableMove(  )
        EnableMenu(  )
        break
    case +2:
        DisableMenu(  )
        DisableMove(  )
        Party( 4, 0 )
        UpdatePartyUI(  )
        EnableMove(  )
        EnableMenu(  )
        break
    case +3:
        DisableMenu(  )
        DisableMove(  )
        SetHP( 0, 9999 )
        SetMP( 0, 999 )
        CureStatus( 0, 255 )
        SetHP( 1, 9999 )
        SetMP( 1, 999 )
        CureStatus( 1, 255 )
        SetHP( 2, 9999 )
        SetMP( 2, 999 )
        CureStatus( 2, 255 )
        SetHP( 3, 9999 )
        SetMP( 3, 999 )
        CureStatus( 3, 255 )
        SetHP( 4, 9999 )
        SetMP( 4, 999 )
        CureStatus( 4, 255 )
        SetHP( 5, 9999 )
        SetMP( 5, 999 )
        CureStatus( 5, 255 )
        SetHP( 6, 9999 )
        SetMP( 6, 999 )
        CureStatus( 6, 255 )
        SetHP( 7, 9999 )
        SetMP( 7, 999 )
        CureStatus( 7, 255 )
        SetHP( 8, 9999 )
        SetMP( 8, 999 )
        CureStatus( 8, 255 )
        SetHP( 9, 9999 )
        SetMP( 9, 999 )
        CureStatus( 9, 255 )
        SetHP( 10, 9999 )
        SetMP( 10, 999 )
        CureStatus( 10, 255 )
        SetHP( 11, 9999 )
        SetMP( 11, 999 )
        CureStatus( 11, 255 )
        RunSoundCode3( 53248, 534, 0, -128, 125 )
        FadeFilter( 2, 24, 0, 64, 64, 64 )
        RaiseWindows(  )
        WindowSync( 1, 16, 80 )
        EnableMove(  )
        EnableMenu(  )
        break
    case +4:
        EnableMove(  )
        EnableMenu(  )
        Wait( 16 )
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        if ( GetDialogChoice == 0 ) {
            FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        } else {
            EnableMove(  )
            0x27( 255 )
            EnableMenu(  )
        }
    }
    return

that script was a battle rush mode I removed as "trial mode".
Since I no longer used it in the mod, feel free to use it for your occasion. :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-18 09:23:41
WOw, thanks a ton for your answers, guys. It was indeed the lack of a Main_Reinit function that caused the problems! Now everything is running smoothly, I get my battle theme, and afterwards the field theme starts playing again and I regain movement control of my character. Thanks again, I'm finally getting the grip of this!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-18 13:20:35
thank you for your support

but i can not do it like you said i pence operating system refuses to HW to create files

and here is my window and I have it indicate my directory (x86)

(https://nsa39.casimages.com/img/2018/10/18/mini_181018033303676648.png) (https://www.casimages.com/i/181018033303676648.png.html)

can I fix this bug ???

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-20 11:19:14
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-20 12:11:06
I thank you very much for your help it works without worry thanks to "Run as administrator"

and to have me warn of these file "NoName"

Thank you very much for this trick

I have a three question

1- you can facilitate my search by telling me that kind of model3D category for each folder ? dexprotation of "unity asset viewer" expmle "p0data2" = "weapon" (= exmple)

and what are the missing models ?

2- for the .bin of the psx version

are there any models under Hades Workshop to export ?

3- Is there a possibility that Hades Workshop becomes an SDK to compile its game FF9 since unity3D ?

because there are some keywords "unity asset viewer" "GameObject" "transform" I want to know who is the link unity3d with Hades Workshop ?

because there is more game engine and software3D



and thank you very much and thanks in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: DracoMoye on 2018-10-20 14:05:06
When I try the background editor conversion HW crash.
File name :
Pic1_1_0.bmp
Pic1_1_1.bmp
...

Error Log :
Log Name:      Application
Source:        Application Error
Date:          2018-10-21 22:52:51
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      DCM
Description:
Faulting application name: HadesWorkshop.exe, version: 0.0.0.0, time stamp: 0x5b38c355
Faulting module name: HadesWorkshop.exe, version: 0.0.0.0, time stamp: 0x5b38c355
Exception code: 0xc0000005
Fault offset: 0x010358ce
Faulting process id: 0x15ac
Faulting application start time: 0x01d469b1a17fc153
Faulting application path: D:\Games\FINAL FANTASY IX\HadesWorkshop\HadesWorkshop.exe
Faulting module path: D:\Games\FINAL FANTASY IX\HadesWorkshop\HadesWorkshop.exe
Report Id: f5d37569-790a-4009-a303-dd288be8e8eb
Faulting package full name:
Faulting package-relative application ID:
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2018-10-22T02:52:51.135109000Z" />
    <EventRecordID>991</EventRecordID>
    <Channel>Application</Channel>
    <Computer>DCM</Computer>
    <Security />
  </System>
  <EventData>
    <Data>HadesWorkshop.exe</Data>
    <Data>0.0.0.0</Data>
    <Data>5b38c355</Data>
    <Data>HadesWorkshop.exe</Data>
    <Data>0.0.0.0</Data>
    <Data>5b38c355</Data>
    <Data>c0000005</Data>
    <Data>010358ce</Data>
    <Data>15ac</Data>
    <Data>01d469b1a17fc153</Data>
    <Data>D:\Games\FINAL FANTASY IX\HadesWorkshop\HadesWorkshop.exe</Data>
    <Data>D:\Games\FINAL FANTASY IX\HadesWorkshop\HadesWorkshop.exe</Data>
    <Data>f5d37569-790a-4009-a303-dd288be8e8eb</Data>
    <Data>
    </Data>
    <Data>
    </Data>
  </EventData>
</Event>
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40)
Post by: Kefka on 2018-10-23 13:13:23
@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 (https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0) 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:
btl_calc.CalcSub_13A(cALC_VAR);
btl_calc.CalcSub_141(cALC_VAR);
btl_calc.CalcSub_143(cALC_VAR);
btl_calc.CalcSub_159(cALC_VAR);
if (btl_calc.CalcSub_152(cALC_VAR))
{
btl_calc.CalcSub_15E(cALC_VAR);
btl_calc.CalcSub_203(cALC_VAR);
btl_calc.CalcSub_270(cALC_VAR);
}
break;
You should put the line before the "CalcSub_20X" ("DoSetDamage_..." in the readable version).

Hi Tirlititi, sorry for the late reply to the Ipsen Curse topic, but it took me a while to play up to that point in the game (my first playthrough with the Steam version). Plus, I've never used dnSpy before so I also had to learn debugging and stuff (still more of a beginner, lol..).

Anyway, I've found the btl_calc::CalcMain and tried to edit it like you told me (thanks for the easier to read version of the Btl_calc function, by the way), however afterwards when I click on 'compile' I get several entries of the following message:

"CS0266: Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)"

and in one case also the following:

"CS1503: Argument2: Cannot convert type 'int' to 'byte'."

The strange thing is, these error messages refer to places in the code that I didn't even edit. It also happens when I try to compile again without editing anything, so these errors must be in the vanilla code already. And because of this I can't seem to save my changes. Do you know what's going on?

On a related note, you said to always insert the line "btl_calc.CalcSub_15E(cALC_VAR);" right above the "DoSetDamage..." line. This works for Physical Strike, Magic Weapon, Throw, Spear & Trance Spear, and Sword Magic. However, there are other physical skills like Dark Side and Lancer which don't have a "DoSetDamage..." line, so I'm unsure of where I should add the "btl_calc.CalcSub_15E(cALC_VAR);" in these cases.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-24 15:43:36
@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)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-24 18:12:10
Thank you very much for your answer to all my questions

ca my enlighten

a curious question

Are you Tirlititi the creator of Hades Workshop?

thank you very much
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-24 22:08:43
No problem.
And yes, that's me.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-25 12:31:46
Thanks for your honesty
 
glad to meet you

at the moment I forgot a very important question

can Hades Workshop also extract sound files?
for example, sound when a character moves or a blow and weapon?

and thank you for your help and thanks in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-25 13:23:03
Quote
@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)


Did it like you suggested, and after some playtesting I can confirm... it works like a charm now! I'm very pleased with the results, I've always liked the idea of such 'special conditions' within dungeons that force the player to stray from the standard fighting methods and think a bit outside the box. Oeil Vert was pretty good at that with its magic sealing, but Ipsen in vanilla was never all that spectacular. Now that it affects all damage formulas which somehow reference a weapon's attack power, this should make this portion of the game more interesting. Thanks again for your help!

dnSpy looks really promising I must say, from what can tell it should allow us to edit even those last bits of gameplay that Hades Workshop can't edit (yet). Just another quick question, if I want to make Flarestar hit always (it being unable to miss, that is), then I would simply have to delete the first 3 (or 4?) lines in its routine that deal with accuracy, right? This is Flare Star's formula from your document:

Code: [Select]
case 99: // Flare Star
            btl_calc.SetupAccuracyMagic(cALC_VAR);
            btl_calc.ApplyShellAccuracy(cALC_VAR);
            btl_calc.ApplyMultiTargetAccuracyPenalty(cALC_VAR);
            if (btl_calc.CheckRawAccuracyEvasionMiss(cALC_VAR))
            {
                CALC_VAR expr_29D6 = cALC_VAR;
                expr_29D6.tg_flags |= this.CALC_FLAG_MISS;
                cALC_VAR.tg_hp = (short)(target.level * cmd.aa.Ref.power);
            }
            break;

I'm unsure about deleting the fourth line since it's the start of an 'if' condition. Basically I want Flarestar to behave much like regular attack magic, in that it shouldn't miss (and it misses A LOT in vanilla, as I'm sure you've noticed already).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-25 17:00:17
@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);
            break;
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-25 21:10:10
Thanks, you're the best! You really know the game's workings inside and out.

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.

Now this part is certainly interesting, good to know! This opens up possibilities for up to 18 cool new attack types! I'll have to take my time to get some ideas. Hmm, maybe another MP damaging attack, but not as random as Hammer? Or perhaps a Gravity-type spell that uses current HP instead of max HP (like it does in most other FF games)... or maybe a spell that empties the trance gauge (is that possible? Just playing around with ideas)... Hmmm, I think this will be fun to play around with, hehe...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-26 16:40:56
Thank you very much for your help
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-29 18:20:45
I still have a 2 question

1- can I also extract sprites from the "avatar" character? "the dialog box menu" all that is sprite 2d? PSX or steam?

2- and envirenment "alexendrie lindblum treno etc ..."

what is original format is what image2d or models 3d? PSX or steam?

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-29 20:04:15
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... (https://imgur.com/a/kPrh6)
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-29 22:01:26
Hi tirlititi, I need your help again it seems. For some reason that I can't seem to figure out, when I add a new enemy to a battle, it doesn't perform any actions, even though its AI script is the same as in its original battle.

When I tried adding an enemy from one battle to another, I followed all the steps you posted on page 25:

I copy-pasted the enemy and its attacks from its original battle, and I kept the order of first having all attacks from the first enemy, then all attacks from the (newly added) second enemy.

Then I changed the default attack and made sure that the Animations field of each attack uses the proper enemy.

I added the new enemy to a group and wrote a very basic AI script (and to make sure that the AI script works, I've also used it in the enemies' original battle, and there it works flawlessly). The init_function is just a simple "return", but that should be fine, right? Here's the ATB function for your information:

Code: [Select]
    if ( !VAR_LocUInt8_31 ) {
        set VAR_LocUInt8_31 = 1
        if ( GetRandom & 1 ) {
            set #( SV_Target = SV_FunctionEnemy )
            Attack( 8 )
            return
        }
    }
    switch 4 ( GetRandom % 4 ) from 0 {
    case +0:
        set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
        Attack( 3 )
        break
    case +1:
        set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
        Attack( 4 )
        break
    case +2:
        set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
        Attack( 5 )
        break
    case +3:
        set #( SV_Target = RandomInTeam(SV_PlayerTeam) )
        Attack( 6 )
        break
    }
    return

Now to sum it up: the battle loads correctly and the new enemy is there, but it doesn't do anything (the other enemies that were in this battle by default attack like normal).

One thing I've noticed though: I've added another Entry for the enemy via "Edit Entries" to have a second "Object" (entry type 2) entry, but when I open that same hsw file later the entry is changed to "Unknown" (entry type 255). Have you ever witnessed something similar?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-29 22:30:54
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?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-30 17:48:09
I've just checked again to make sure: the new enemy has his InitObject in the Main function, and the enemy is not linked. Maybe I'll tweak the AI a bit more and see if I can solve it.

Or could you perhaps take a quick look at my hws file if you have time? I'm sure you can see any potential mistakes better than me.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-10-30 23:04:23
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 )
loop
...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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-10-31 17:24:22
Great, thanks a lot for your help! I've uploaded my hws file to Drop Box here:

https://www.dropbox.com/s/dbewj4ygzf4k67o/FF9%20Steam%20Enemies.hws?dl=0

The enemy in question is Ring Leader which I've packed into the same battle along Hecteyes in Terra.

Also, I've tried your loop function and the display of a battle message works fine. So I wonder why the enemy doesn't act even though its ATB bar apparently works correctly. Hmm...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-10-31 21:57:48
Thank you very much for your famous help

1 - the steam sprite is set I have it all back thank you very much

but the version of psx I find that the weapon

(http://image.noelshack.com/minis/2018/44/3/1541022645-wepaon.png) (http://www.noelshack.com/2018-44-3-1541022645-wepaon.png)

and the sprite "avatar" "dialog box" etc ... I have not found (for the PSX version) yet?

2- for funds that's exactly what I'm looking for but I want to know something

for export I do not have this box "Opening-for-FMV"

I have these 3case to uncheck

(http://image.noelshack.com/minis/2018/44/3/1541022710-tres-cas-cocher.png) (http://www.noelshack.com/2018-44-3-1541022710-tres-cas-cocher.png)

and when I'm doing my checkbox combination, I sometimes find myself in a 50MB file and in addition it lacks background details

and here I have two boxes

(http://image.noelshack.com/minis/2018/44/3/1541022633-2-case.png) (http://www.noelshack.com/2018-44-3-1541022633-2-case.png)

and I want to know the difference between "export" and "Batching"?


and not who can not say that name "Opening-for-FMV"

and thanks for everything and thanks in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-11-04 20:11:45
@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 (http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485). 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.

@lyokoffx:
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 (http://forums.qhimm.com/index.php?topic=12476.msg257872#msg257872) 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").
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-11-05 16:15:46
I thank you very much for your help and I am very sorry for my spelling because I am weak in English

and I see that I find my repency easily with you

1- apparently this is the case when I disable "Opening-For FMV" the export takes place without Crash and I have consider that it is a parameter like "Merge Tilestes" or "Sort Tileset by Depth" or " Exprort Selected Only " and that was not the case Thank you so much for this information I would say as a problem resolut

it remains this little concern from the question I want to know is "Merge Tilestes" and "Sort Tileset by Depth" when it is deactivate the tiff file is very inflate in this weight has 50.8 MB I want to know why?


2- and a very impressive qestion is it that exsists a tool such as Zidane_2 to extract the sound of the weapon? because they are difernate from the Steam version


3- I do not have "Charmap" here
(http://image.noelshack.com/minis/2018/45/1/1541437822-preferance.png) (http://www.noelshack.com/2018-45-1-1541437822-preferance.png)

and they have corrected in some section but not in English but in "field" I try with "japanese" but it remains on -> ("000000000 ..." in the section "field")


4- another very important question I now have the "model3D" and the other resource that you helped me to extract


and I decide to create my games FF9 But on "PSX"

is the models3D of steam compible for a game with a real compilation engine that reads in a real PSX that link that I discovered a long time ago? http://www.psxdev.net/

or is it worth it in "Hades Workshop"?


5- Can you explain to me how it works the notion of depth for a 3D effect for the interaction between the model3d and the backgrounds?

for now I'm trying to learn unity3D thanks to these models

or tell me a video that uses the same notion in unity3D ?



for now I'm learning the basics of video games After at least it would be easier to do it under PSX


and thanks for everything and thanks in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-11-06 21:35:24
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 (http://www.psxdev.net/forum/viewtopic.php?f=62&t=1471) 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 (http://forums.qhimm.com/index.php?topic=14315.msg239117#msg239117) (and in the following post) and Lein even showed a picture (http://forums.qhimm.com/index.php?topic=14315.msg239163#msg239163) 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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-11-07 17:27:35
I thank you very much for your help you enlighten me with this information

1- ah good there is animation of these tif 50mo I open with photochop there is only one layer and unity and I can not find any animation or it can run these animation?

yes I know that these images are composed of several layers to play their animtion

a small question in this point to facilitate my task what are the box to check and uncheck to detach the ground as a ".tif " independently to move the character 3D background image to reutiliser for a simulation 3d ?

5- and thank you so much for the link

I just used the tools Zidane_2_Tools but I can not extract anything from my file FF9.IMG extracted under a virtual drive here is my example under cmd

Code: [Select]
ffix_img_extr.exe <C:\Users\PC\Desktop\Nouveau dossier> <C:\Users\SonyNintendo\Desktop\Nouveau dossier\Nouveau dossier>

ffix_img_extr.exe <C:\Users\PC\Desktop\Nouveau dossier> <C:\Users\SonyNintendo\Desktop\Nouveau dossier\Nouveau dossier/>


FF9_img_extractor.exe C:\Users\PC\Desktop\Nouveau dossier C:\Users\SonyNintendo\Desktop\Nouveau dossier\Nouveau dossier/


FF9_img_extractor.exe C:\Users\PC\Desktop\Nouveau dossier C:\Users\SonyNintendo\Desktop\Nouveau dossier\Nouveau dossier


ffix_img_extr.exe (<C:\Users\PC\Desktop\Nouveau dossier/to/ff9.im> <C:\Users\SonyNintendo\Desktop\Nouveau dossier\Nouveau dossier/to/extract>)

ffix_img_extr.exe C:\Users\PC\Desktop\Nouveau dossier/to/ff9.im> C:\Users\SonyNintendo\Desktop\Nouveau dossier\Nouveau dossier/to/extract>

ffix_img_extr.exe <C:\Users\PC\Desktop\Nouveau dossier/to/ff9.im> <C:\Users\SonyNintendo\Desktop\Nouveau dossier\Nouveau dossier/to/extract>

3- It's worthless for your effort I hope you correct this

4- thank you very much for this information I did not know that there is a 3d engine with this SDK and the idea also for the conversion of models

and thanks for everything and thanks in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-11-07 18:15:12
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).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2018-11-07 20:37:30
I thank you very much for your help

1- Is this the maximum for extraction?

here that I also wish to detach it is underlined in red

(http://image.noelshack.com/minis/2018/47/6/1543059851-1541625602-tislet.png) (http://www.noelshack.com/2018-47-6-1543059851-1541625602-tislet.png)

I hide this box only "Sort Tileset by Depth"

2-I have the file FF9.img I have already extracted

I thank you for the correction of the command here now

Code: [Select]
ffix_img_extr.exe <C:\Users\PC\Desktop\Nouveau dossier/to/ff9.im> <C:\Users\PC\Desktop\Nouveau dossier\Nouveau dossier/to/extract>
The command works but

(http://image.noelshack.com/minis/2018/45/4/1541685470-directory.png) (http://www.noelshack.com/2018-45-4-1541685470-directory.png)

and the "exact" folder is completely empty and no file is created why?

edit: but I saw a folder created under my desk with these files

(http://image.noelshack.com/minis/2018/45/4/1541685640-fichier.png) (http://www.noelshack.com/2018-45-4-1541685640-fichier.png)

but I do not know how to use them?

I have the impression that it is files like the cases that I modify the extention for the "unity asset viewer" of Hades Workshop (for sound files and sprites)

is that the case? I do not know exactly their true extension?

and here is a log created at the end in this folder

Code: [Select]
Normal Dir
0     Flag:0     Start Sector:   fda9     End Sector:  fe15
1     Flag:1     Start Sector:   fe15     End Sector:  fe82
2     Flag:2     Start Sector:   fe82     End Sector:  feee
3     Flag:3     Start Sector:   feee     End Sector:  ff5a
4     Flag:4     Start Sector:   ff5a     End Sector:  ffc6
5     Flag:5     Start Sector:   ffc6     End Sector:  10030
6     Flag:6     Start Sector:   10030     End Sector:  1009b
7     Flag:7     Start Sector:   1009b     End Sector:  10108
8     Flag:8     Start Sector:   10108     End Sector:  10176
9     Flag:9     Start Sector:   10176     End Sector:  101e2
10     Flag:a     Start Sector:   101e2     End Sector:  1024e
11     Flag:b     Start Sector:   1024e     End Sector:  102bb
12     Flag:c     Start Sector:   102bb     End Sector:  10327
13     Flag:d     Start Sector:   10327     End Sector:  10393
14     Flag:e     Start Sector:   10393     End Sector:  103ff
15     Flag:f     Start Sector:   103ff     End Sector:  1046b
16     Flag:10     Start Sector:   1046b     End Sector:  104d8
17     Flag:11     Start Sector:   104d8     End Sector:  10545
18     Flag:12     Start Sector:   10545     End Sector:  105b1
19     Flag:13     Start Sector:   105b1     End Sector:  1061e
20     Flag:14     Start Sector:   1061e     End Sector:  1068a
21     Flag:15     Start Sector:   1068a     End Sector:  106f7
22     Flag:16     Start Sector:   106f7     End Sector:  10765
23     Flag:17     Start Sector:   10765     End Sector:  107d2
24     Flag:18     Start Sector:   107d2     End Sector:  1083f
25     Flag:19     Start Sector:   1083f     End Sector:  108ad
26     Flag:1a     Start Sector:   108ad     End Sector:  1091a
27     Flag:1b     Start Sector:   1091a     End Sector:  10989
28     Flag:1c     Start Sector:   10989     End Sector:  109f7
29     Flag:1d     Start Sector:   109f7     End Sector:  10a64
30     Flag:1e     Start Sector:   10a64     End Sector:  10ad1
31     Flag:1f     Start Sector:   10ad1     End Sector:  10b3e
32     Flag:20     Start Sector:   10b3e     End Sector:  10bab
33     Flag:21     Start Sector:   10bab     End Sector:  10c18
34     Flag:22     Start Sector:   10c18     End Sector:  10c85
35     Flag:23     Start Sector:   10c85     End Sector:  10cf1
36     Flag:24     Start Sector:   10cf1     End Sector:  10d5f
37     Flag:25     Start Sector:   10d5f     End Sector:  10dce
38     Flag:26     Start Sector:   10dce     End Sector:  10e3a
39     Flag:27     Start Sector:   10e3a     End Sector:  10ea6
40     Flag:28     Start Sector:   10ea6     End Sector:  10f13
41     Flag:29     Start Sector:   10f13     End Sector:  10f80
42     Flag:2a     Start Sector:   10f80     End Sector:  10fee
43     Flag:2b     Start Sector:   10fee     End Sector:  1105b
44     Flag:2c     Start Sector:   1105b     End Sector:  110c9
45     Flag:2d     Start Sector:   110c9     End Sector:  11135
46     Flag:2e     Start Sector:   11135     End Sector:  111a2
47     Flag:2f     Start Sector:   111a2     End Sector:  1120e
48     Flag:30     Start Sector:   1120e     End Sector:  1127b
49     Flag:31     Start Sector:   1127b     End Sector:  112e8
50     Flag:32     Start Sector:   112e8     End Sector:  11356
51     Flag:33     Start Sector:   11356     End Sector:  113c3
52     Flag:34     Start Sector:   113c3     End Sector:  11430
53     Flag:35     Start Sector:   11430     End Sector:  1149d
54     Flag:36     Start Sector:   1149d     End Sector:  1150a
55     Flag:37     Start Sector:   1150a     End Sector:  11578
56     Flag:38     Start Sector:   11578     End Sector:  115e5
57     Flag:39     Start Sector:   115e5     End Sector:  11653
58     Flag:3a     Start Sector:   11653     End Sector:  116bf
59     Flag:3b     Start Sector:   116bf     End Sector:  1172a
60     Flag:3c     Start Sector:   1172a     End Sector:  11796
61     Flag:3d     Start Sector:   11796     End Sector:  11803
62     Flag:3e     Start Sector:   11803     End Sector:  11870

and thank you for everything in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2018-11-17 13:28:31
@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 (http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485). 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.

Sorry for the late reply, but it turned out that my hws file had somehow become corrupted, forcing me to redo most of my work from scratch. I certainly did follow all of the steps in your aformentioned post, and those battles with the 4 Ring Leaers have always worked flawlessly for me. Don't know at which point my hws file got screwed up, but after bringing my new one up to date again I took your advice for updating the animations by switching the enemy model to something else and back again. Along with a few tweaks to the AI, this seemed to do the trick, and now it works as it should. Anyway thanks again for your help.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Marcelo20XX on 2018-11-22 06:45:07
Tirlititi I have a bug with the latest HW 0.4b. I cant change any line of code of the Evil Forest Exit (Where the moggle gives you the flute item) Function Main_Loop Field Script. Even a tiny change like adding more wait time to a command results in Zidane getting stuck in the middle of the ocean of the Mist Continent after the cutscene ends...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-12-07 16:10:27
@Tirlititi hi there , i have a suggestion to make the modding less time consuming : it could take hours to mod every single field of every single page ( i speak for experience :D , it was totally worthy , but really long and boring to do ) , so my suggesion is that you can add another page to all the sections of the program , the only difference is that the new page will apply the value to all the respective fields of all the other pages of the same section ; an example : you add the "global page" to the section of the magics , if you set "255" as a value for the damage , that value for the damage will be applied to all the magics , the same will happen to all the other values to write or to select if the only choiche are the selectable values , and for all the other sections of the editor , particulary for the enemies , so in short , add something that i could call a "global page" to apply or select the same value\string to all the values in that section at once , it can be very helpful even when you edit the shops or distrubute the items , or when modifying the characters
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2018-12-07 16:43:20
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: brucy on 2018-12-08 00:40:36
@Tirlititi  the reason for set 255 for all the power statistic is because i am exactly the opposite of a pro gamer , i play for fun , i don't treat a video game like some sort of purge , or an auto-punitive path in religious style , i want to be lethal , enemies aren't allowed to be crackerbox of better than the playable characters under my watch , also  if i like to have hard life i would do something different than play video games , i would find a job , or find a wife and so on , so at least i a video game i want to enjoy easy life , and clearly i don't accept the constant intrusive attitude of the nosy pro gamers that would like to feel entitled to establish for everyone how to play a video game , so yeah that's my point , of course i don't mind about how others play , so i expect the others to be equally respectful , after all the good thing of this program is that is suited both for pro gamers and for those that like me play a video game for the fun of it , but aside of this , the whole point of the "global buttons\fields\strings" is to just non waste hours :D , and of course i understand that you could have other things to care about
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Moogie on 2019-01-01 01:24:06
Hi all. Every time I click the 'Edit Script' button, Hades crashes. It does this in both the Enemies and Environment tabs, no matter what I select. Is there any workaround? (40b, Win7 x64)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-01-01 11:02:00
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Moogie on 2019-01-04 00:05:44
Ah, my apologies for not specifying, but I was attempting this on the PSX version. Does this mean the script edit function is only available for the Steam/PC release?

Thanks for the reply, anyhow. :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-01-04 17:54:00
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).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-01-05 12:51:08
Code: [Select]
ffix_img_extr.exe "C:\Users\PC\Desktop\Nouveau dossier/to/ff9.im" "C:\Users\PC\Desktop\Nouveau dossier\Nouveau dossier/to/extract"
sorry I forgot this "" in my first post

can you answer me at my first post

I you a happy feedback on Hades Workshop

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Deathcrush on 2019-01-06 21:22:47
I saw in the first post where you can take out the timer for Excalibur II. I can't seem to find the part in the script that it mentions though. All I see is something about General Scenario Timer. Is this the same line of code, just written differently? I don't want to remove it and it cause issues with the game. Are there other ways, such as just adding it into the characters inventory? I tried adding it to a shop, but it didn't work.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-01-07 16:59:38
@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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-01-07 19:49:44
I thank you very much for your help

1-indeed I noticed that the Background that I want to detach are link in a single layer and I verrify it in "Hades Workshop" Thank you very much

2 - you clarify me well

 whats is the tools that I must use because I can not find "DB_Extractor" in The Zidane_2 archive is there a replacement tool ???

3 - can you guide me for the search of thes Files where is the sound of the weapon and the mog ansi the displacement sound ansi of continuation

4 - I noticed that there is something interesont in this tools Zidane_2 if does not pose a problem cite months functionaliter of these tools As the visualizer of the 3D models the animation etc .. is what there is a compiler psx to get them together in one Image Psx ???

and thanks for everything

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-01-08 20:56:05
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
  ???,SaveMenu,Battle,???,TetraMaster,
  ???,???,ChocoMenu,MenuComp+MenuEquip,MenuConfig,
  CardMenu,ItemMenu,StatusMenu,MainMenu,NamingMenu,
  TeamMenu,ShopMenu,???,???,???,BattleRewardMenu
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 :
  Unknown
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b) TUTORIAL LINK
Post by: Incinerator on 2019-01-09 06:55:46
In this tutorial I will show you how to initiate an extra scene for your player to do off the main story path.

First things first, you need find a location in the game you want to have your scene initiated. While you can virtually initiate a scene at nearly any point, it's wise to be caution as adding scenes during the middle of the main story can cause bugs and glitches if not carefully applied and tested.

In this scene, we will initiate our scene during Disc 4. Since most of the main storyline is completed, we'll have less road blocks and limitations at this time in the game.

Next is selecting a theme for the scene; some dialogue, a scenario to take place, any battles to initiate and rewards (if any) to be received par completing the quest.
You will be using a series of General Variables unused by the game. These variables are the base foundation of all your scenes as these are and can be used to determine your scene as active, inactive, or conditional. (Conditional: having the player needed do one task to the next in order to unlock a part or whole of your extra scene/quest).

In this example we'll use the extra scene from Final Fantasy IX-2 ~ Lavos Hunt. It's a intermediate scene not too complex but not too simple either.

I. Getting Started

In field: Alexandria/Dock (Field ID: 2458), we need to firstly initiate some character that will pose as our scene starter (in this case, it will be Steiner):


*Note: When building scripts ALWAYS select "Parse" then "Ok". You will get a warning for any non-parsed scripts after select Ok.

Now we have a "Steiner_Init" function.
Add the following in the script space:

Code: [Select]
Function Steiner_Init
    SetModel( 5489, 104 )
    CreateObject( -222, -2015 )
    TurnInstant( 152 )
    SetStandAnimation( 2001 )
    SetWalkAnimation( 1996 )
    SetRunAnimation( 2005 )
    SetLeftAnimation( 1986 )
    SetRightAnimation( 2010 )
    SetObjectLogicalSize( 30, 35, 50 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 97, 32 )
    EnableHeadFocus( 0 )
    return

The following arguments are described in the yellow help box to in right corner of the Edit Script Window provided by Tirlititi.

Now with this Function, Steiner is ready to be initiated in game.

Let's do the same for Freya: (Repeat steps 1d. through 1h.)

Code: [Select]
Function Freya_Init
    SetModel( 192, 94 )
    CreateObject( 186, -2179 )
    TurnInstant( 160 )
    SetStandAnimation( 2556 )
    SetWalkAnimation( 2553 )
    SetRunAnimation( 2558 )
    SetLeftAnimation( 2555 )
    SetRightAnimation( 2551 )
    SetObjectLogicalSize( 26, 34, 48 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 105, 53 )
    SetPathing( 1 )
    EnableHeadFocus( 0 )
    return

Now we are ready to initiate Steiner in scene.

II. Function Main_Init

At the bottom of the script of Function Main_Init add the following:

Code: [Select]
    if ( VARL_GenBool_8038 == 1 ) {
        InitObject( 20, 0 )
    }
    if ( VARL_GenBool_8040 == 1 ) {
        TerminateEntry( 20 )
    }
    if ( VARL_GenBool_8041 == 1 ) {
        InitObject( 21, 0 )
    }
    if ( VARL_GenBool_8043 == 1 ) {
        TerminateEntry( 21 )
    }
    return

The following functions are conditional for how this scene will play out for the player.

The first function:

Code: [Select]
    if ( VARL_GenBool_8038 == 1 ) {
        InitObject( 20, 0 )
    }

Will initiate Steiner when the player reaches Alexandria/Dock.

Second function:

Code: [Select]
    if ( VARL_GenBool_8040 == 1 ) {
        TerminateEntry( 20 )
    }

Once the player speaks with Steiner, the script will set the Variable above with value "1", indicating the extra scene has begun, Steiner has left the Dock, and upon returning to the Dock, Steiner will be gone.

Third function:

Code: [Select]
    if ( VARL_GenBool_8041 == 1 ) {
        InitObject( 21, 0 )
    }

Once the extra scene's hunt battle is completed, the variable above is set to value "1", to indicate scene completed and upon the player's return to Alexandria/Dock, Freya will be initiated in scene to give the player their reward and end the scene.

Last function:

Code: [Select]
    if ( VARL_GenBool_8043 == 1 ) {
        TerminateEntry( 21 )
    }
    return

Terminates the entry of Freya's model once the player as obtained their reward, the variable value is set to "1" indicating the scene is now completed, no other actions needed.
Script should end with a return.

III. Building the heart of the Scene

Now they we've initiated Steiner and Freya in the field, we can proceed building the heart of scene with dialogues, actions and battles.


Code: [Select]
[STRT=15,4][STNR]
"Someone named [68C0D8][HSHD]Viera[C8C8C8][HSHD] was attacked in
 [68C0D8][HSHD]Burmecia[C8C8C8][HSHD], yet their belongings forfeit.
 I would have them returned."

*For each new text, add a new line.

Code: [Select]
[STRT=140,4][PCHC=2,1][IMME][STNR]
"The creature was [68C0D8][HSHD]Lavos[C8C8C8][HSHD]. Will you slay it?"
[CHOO][MOVE=18,0]Accept
[MOVE=18,0]Decline

*Functions [CHOO][MOVE=0,0] allows the player to select an optional decision for the dialogue. (This setting within the field script functions).

[STRT=0,0] Sets the length of the dialogue window. The first value sets the width of the dialogue window, (since the game calculates this on the float, you can set it as low as 15 or 10).
The second value sets the height of the dialogue window. This value is critical as the game does not set this on the float, and needs to be set accordingly or the dialogue window will not be long enough to fit all text in.
To determine the height of a dialogue window, count the number of lines of the entered text.


e.g.

Code: [Select]
[STRT=140,4][PCHC=2,1][IMME][STNR]
"The creature was [68C0D8][HSHD]Lavos[C8C8C8][HSHD]. Will you slay it?"
[CHOO][MOVE=18,0]Accept
[MOVE=18,0]Decline

This text is 4 lines long, so you enter [STRT=140,4] second value is "4".
*Function "[STNR]" is a character naming opcode which is used to enter the character's name in the dialogue set from the Naming Screen. If you enter in the character's vanilla names without the opcode, the character's name entered from the Naming Screen will not show.

Here's all the 8 main character's opcodes:

Code: [Select]
[ZDNE] "Set for Zidane"
[DGGR] "Set for Dagger"
[VIVI] "Set for Vivi"
{STNR] "Set for Steiner"
[FRYA] 'Set for Freya"
[QUIN] "Set for Quina"
[EIKO] "Set for Eiko"
[AMRT] "Set for Amarant"

*Code: [68C0D8][HSHD][C8C8C8][HSHD] sets a text color. There are a few other codes for this within the game.

Add the text for Alexandria (Ruin):

Code: [Select]
[STRT=15,4][STNR]
"Someone named [68C0D8][HSHD]Viera[C8C8C8][HSHD] was attacked in
 [68C0D8][HSHD]Burmecia[C8C8C8][HSHD], yet their belongings forfeit.
 I would have them returned."

[STRT=140,4][PCHC=2,1][IMME][STNR]
"The creature was [68C0D8][HSHD]Lavos[C8C8C8][HSHD]. Will you slay it?"
[CHOO][MOVE=18,0]Accept
[MOVE=18,0]Decline

[STRT=15,5][STNR]
"I am glad to know there is
 strength and honor even among
 you. I will lend my arm in the hunt
 of [68C0D8][HSHD]Lavos[C8C8C8][HSHD]."

[STRT=15,4][STNR]
"I shall await you in [68C0D8][HSHD]Burmecia[C8C8C8][HSHD] with
 [68C0D8][HSHD][FRYA][C8C8C8][HSHD]. I do not think the creature
 will have left."

[STRT=15,3]
                   [68C0D8][HSHD]Lavos[C8C8C8][HSHD][SPED=2]...[SPED=-1]
            [C8B040][HSHD]The hunt begins![C8C8C8][HSHD]

[STRT=15,3][STNR]
"We are victorious. No more
shall that beast roam freely."

[STRT=15,6][FRYA]
"Thank you. I could not have
 recovered past Viera's belongings
 without your help. I was fortunate
 to find such worthy aid. You have
 my gratitude."

[STRT=15,5][FRYA]
"The world is a wonderful place,
 filled with ideas as diverse as its
 people. Such individuality was not
 to be found on that steppe."

[STRT=15,2][STNR]
"I understand[SPED=2]...[SPED=-1]"

3. In function: "Function Steiner_SpeakBTN" enter the following:
*Mind not my description messages after the "\\" while pasting in your scripts, Hades Workshop will ignore the trailing.

Code: [Select]
Function Steiner_SpeakBTN
    DisableMove(  ) \\ Disables player movement.
    DisableMenu(  ) \\ Disable player accessing menus.
    if ( VARL_GenBool_8039 == 0 ) {
        TurnTowardObject( 19, 32 ) \\Turns the model to an object.
        WindowSync( 1, 128, 277 )  \\ Function for adding dialogue.
        set VARL_GenBool_8039 = 1
    }
    DisableMove(  )
    DisableMenu(  )
    WindowSync( 1, 128, 278 )
    if ( GetDialogChoice == 0 ) {
        set VARL_GenBool_8040 = 1 \\ set the variable with value "1" (to keep Steiner removed after accepting the hunt & initiating the follow up scene in Burmecia).
        WindowSync( 1, 128, 279 )
        WindowSync( 1, 128, 280 )
        FadeFilter( 6, 16, 0, 74, 74, 74 ) \\ Set a fade effect.
        RaiseWindows(  ) \\ Used for showing text on screen without a diagloue bubble.
        WindowAsync( 1, 16, 281 )
        RunSoundCode3( 53248, 1350, 0, -128, 125 ) \\ Run a sound effect.
        Wait( 70 ) \\ Wait some time (calculated in frames)
        RunSoundCode3( 53248, 789, 0, -128, 125 )
        Wait( 40 )
        CloseWindow( 1 )
        FadeFilter( 6, 16, VAR_GlobUInt8_17, 255, 255, 255 )
        EnableMove(  )
        EnableMenu(  )
        Wait( 16 )
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
        TerminateEntry( 255 ) \\ Terimante the current function entry.
    } else {
        WindowSync( 1, 128, 295 ) \\ Steiner's text: "I understand..."
        TurnTowardObject( 10, 32 )
        EnableMove(  )
        EnableMenu(  )
        Wait( 16 )
    }
    if ( GetDialogChoice == 0 ) {
        FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    } else {
        TimedTurn( VAR_GlobUInt8_16, 16 )
        WaitTurn(  )
        EnableMove(  )
        0x27( 255 )
        EnableMenu(  )
    }
    return

The } else { function is used in dialogue cases like these; when the player select yes - do one action, else do another action.

IV. Adding Dialogue

4. In function: "Freya_SpeakBTN" enter the following:

Code: [Select]
Function Freya_SpeakBTN
    DisableMove(  )
    DisableMenu(  )
    TurnTowardObject( 19, 32 )
    WindowSync( 1, 128, 283 )
    AddGil( 7000 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 284 )
    AddItem( 38, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 285 )
    AddItem( 167, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 286 )
    AddItem( 225, 15 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 287 )
    AddItem( 226, 7 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 288 )
    AddItem( 227, 4 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 289 )
    AddItem( 228, 2 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 290 )
    AddItem( 229, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 291 )
    AddItem( 204, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 292 )
    AddItem( 222, 2 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 293 )
    AddItem( 300, 1 )
    RunSoundCode3( 53248, 3096, 0, -128, 125 )
    WindowSync( 1, 128, 296 )
    set VARL_GenBool_8043 = 1
    WindowSync( 1, 128, 294 )
    FadeFilter( 2, 12, 0, 255, 255, 255 )
    EnableMove(  )
    EnableMenu(  )
    Wait( 16 )
    FadeFilter( 2, 36, 0, 0, 0, 0 )
    TerminateEntry( 255 )
    return

Now we have our dialogue set and done for these field.

V. Executing the hunt

5. Navigate to field: "Burmecia/Suburb" (Field ID: 751)
*repeat steps  (Repeat steps 1b. through 1h.)

5a. In the Edit Script Window, Function Main_Init add the following at the end of the script:

Code: [Select]
    if ( ( VARL_GenBool_8040 == 1 ) && ( IsInParty(3) && IsInParty(4) ) ) {
        InitObject( 17, 0 )
        InitObject( 18, 0 )
        RunSoundCode( 0, 105 )
    }
    if ( VARL_GenBool_8042 == 1 ) {
        TerminateEntry( 17 )
        TerminateEntry( 18 )
    }
    if ( VARL_GenBool_8040 == 1 ) {
        FadeFilter( 2, 24, 0, 2, 181, 225 )
    }
    if ( VARL_GenBool_8041 == 1 ) {
        FadeFilter( 2, 24, 0, 0, 0, 0 )
        RunSoundCode( 0, 68 )
    }

Since our hunt requires Steiner and Freya to be in our party to proceed we need a conditional that reads:
If the hunt has been activated + Steiner and Freya is currently in the player's party; continue the quest hunt.
Once these conditions lye true, Steiner and Freya will be initiated into the field scene.

Code: [Select]
    if ( VARL_GenBool_8042 == 1 ) {
        TerminateEntry( 17 )
        TerminateEntry( 18 )
    }

This condition is activated once the hunt battle is complete, to prevent Steiner and Freya from appear after the completed scene.

Code: [Select]
    if ( VARL_GenBool_8040 == 1 ) {
        FadeFilter( 2, 24, 0, 2, 181, 225 )
    }

This function enabled a fade effect for the presence of Lavos in the area. (It can be removed for preference).

Code: [Select]
    if ( VARL_GenBool_8041 == 1 ) {
        FadeFilter( 2, 24, 0, 0, 0, 0 )
        RunSoundCode( 0, 68 )
    }

This function is conditional to remove the above fade effect once Lavos is defeated.

5b. Navigate back to Environments --> Text, scroll to Burmecia and add the following text:

Code: [Select]
[STRT=15,2][STNR]
"Good. You are come."

[STRT=15,3][FRYA]
"[68C0D8][HSHD]Lavos[C8C8C8][HSHD] is a great creature
 with massive scales. It will not be far. Come!"

[STRT=15,4][FRYA]
"We are victorious. I would reward
 you for your courage. Visit me back
 at Alexandria. I shall wait for you there."

5c. Add a "SpeakBTN" function to Freya_Init and add the following:

Code: [Select]
Function Freya_SpeakBTN
    DisableMove(  )
    DisableMenu(  )
    TurnTowardObject( 16, 32 )
    WindowSyncEx( 18, 1, 128, 338 )
    WindowSync( 1, 128, 339 )
    EnableMove(  )
    EnableMenu(  )
    RunScriptSync( 2, 17, 30 )
    RunScriptSync( 2, 18, 31 )
    return

5d. Navigate to field: "Burmecia/Palace" (Field ID: 766)
Under Function Main_Init, add the follow at the end of the script:

Code: [Select]
    if ( ( VARL_GenBool_8040 == 1 ) && ( IsInParty(3) && IsInParty(4) ) ) {
        InitObject( 16, 0 )
        InitObject( 18, 0 )
    }
    if ( VARL_GenBool_8042 == 1 ) {
        TerminateEntry( 16 )
        TerminateEntry( 18 )
    }
    if ( VARL_GenBool_8040 == 1 ) {
        FadeFilter( 2, 24, 0, 2, 181, 225 )
    }
    if ( VARL_GenBool_8041 == 1 ) {
        FadeFilter( 2, 24, 0, 0, 0, 0 )
    }

The same functions as before.

After adding Steiner & Freya Init functions, add a SpeakBTN function to Freya_Init and add the following:

Code: [Select]
Function Freya_SpeakBTN
    DisableMove(  )
    DisableMenu(  )
    WindowSync( 1, 128, 339 )
    Wait( 20 )
    RunSoundCode3( 53248, 789, 0, -128, 125 )
    Wait( 40 )
    RunSoundCode( 0, 77 ) \\ Run a BGM code.
    Battle( 1, 210 ) \\ Start a battle. (Battle ID: 210)
    DisableMove(  )
    DisableMenu(  )
    set VARL_GenBool_8041 = 1
    set VARL_GenBool_8042 = 1
    RunSoundCode( 256, 77 )
    WindowSync( 1, 128, 340 )
    FadeFilter( 2, 12, 0, 255, 255, 255 )
    Wait( 16 )
    EnableMove(  )
    EnableMenu(  )
    RunSoundCode( 0, 68 )
    FadeFilter( 2, 36, 0, 0, 0, 0 )
    TerminateEntry( 18 )
    TerminateEntry( 255 )
    return

Upon initiating a battle in this field, we need to add Function Main_Reinit. This function is required for all battles in fields, without it, the player will be frozen in place and unable to move afterwards.

Code: [Select]
Function Main_Reinit
    set VAR_GlobBool_159 = 0
    RunScriptAsync( 0, 250, 11 )
    if ( VAR_GlobBool_155 == 1 ) {
        ATE( 1 )
    }
    if ( VAR_GlobBool_158 == 0 ) {
        0x27( 127 )
    } else {
        0x27( 255 )
    }
    Wait( 2 )
    ShowTile( 5, 0 )
    ShowTile( 6, 0 )
    ShowTile( 7, 0 )
    ShowTile( 8, 0 )
    ShowTile( 9, 0 )
    ShowTile( 10, 0 )
    Wait( 2 )
    if ( VAR_GenUInt8_13 == 9 ) {
        SetTextVariable( 2, 0 )
        WindowAsync( 6, 0, 62 )
        RaiseWindows(  )
        WaitWindow( 6 )
        set VAR_GenUInt8_13 = 0
    }
    if ( VAR_GenUInt8_14 == 9 ) {
        SetTextVariable( 2, 1 )
        WindowAsync( 6, 0, 62 )
        RaiseWindows(  )
        WaitWindow( 6 )
        set VAR_GenUInt8_14 = 0
    }
    set VAR_GlobBool_159 = 1
    if ( VAR_GlobBool_158 == 1 ) {
        set VAR_GlobBool_158 = 1
        if ( VAR_GlobBool_159 == 1 ) {
            if ( VAR_GlobBool_156 == 0 ) {
                EnableMove(  )
                0x27( 255 )
                if ( VAR_GlobBool_144 == 0 ) {
                    EnableMenu(  )
                }
            }
        }
    }
    set VAR_GlobUInt8_30 = 127
    SetWeather( 24, 56 )
    if ( VAR_GlobUInt8_17 == 255 ) {
        set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
    }
    0xA9( 250 )
    FadeFilter( 7, 16, VAR_GlobUInt8_17, 0, 0, 0 )
    return

5f. Navigate back to field Alexandria/Dock (Field ID: 2458)

VI. Finalizing your Scene

6. Add a SpeakBTN function to Freya_Init and add the following:

Code: [Select]
Function Freya_SpeakBTN
    DisableMove(  )
    DisableMenu(  )
    TurnTowardObject( 19, 32 )
    WindowSync( 1, 128, 283 )
    AddGil( 7000 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 284 )
    AddItem( 38, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 285 )
    AddItem( 167, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 286 )
    AddItem( 225, 15 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 287 )
    AddItem( 226, 7 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 288 )
    AddItem( 227, 4 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 289 )
    AddItem( 228, 2 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 290 )
    AddItem( 229, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 291 )
    AddItem( 204, 1 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 292 )
    AddItem( 222, 2 )
    RunSoundCode3( 53248, 108, 0, -128, 125 )
    WindowSync( 1, 128, 293 )
    AddItem( 300, 1 )
    RunSoundCode3( 53248, 3096, 0, -128, 125 )
    WindowSync( 1, 128, 296 )
    set VARL_GenBool_8043 = 1
    WindowSync( 1, 128, 294 )
    FadeFilter( 2, 12, 0, 255, 255, 255 )
    EnableMove(  )
    EnableMenu(  )
    Wait( 16 )
    FadeFilter( 2, 36, 0, 0, 0, 0 )
    TerminateEntry( 255 )
    return

And that marks the end of your extra scene!
*If you want your scene to be repeatable, you can set your variable conditions back to value "0" somewhere and the process will begin again.

You can see another example of extra scenes in action here (https://www.youtube.com/watch?v=3taaxIyxD7E).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: eugene9 on 2019-01-09 09:00:31
Hello! Just a short quick question. Is it possible to change Zidane's battle animation? I mean, Zidane using Cinna's animations, for instance.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2019-01-09 15:34:43
Hello guys, I've got some more questions about stuff I'd like to edit in the source code with DnSpy and hope you can help me with that:

1) The item Soft instantly kills stone-type enemies, but the spell Stona does not. I always found that wierd. According to the BtlCalc file the soft item checks for the monster's category(case 62). Is there a way to make the Stona spell also kill stone enemies? I've tried changing the spell's formula from "Cure status" to "item:soft" in Hades Workshop, but that didn't help.

2) A loooong time ago, we were talking about altering the duration time of status effects, as they expire way to soon, as well as changing the poison/regen intervals (to make the combination of Auto-Haste and Auto-Regen less overpowered). Back then we didn't have a way to do anything about it, but what about now with DnSpy? Does anybody happen to know where this data is stored? I've looked through the Assembly_CSharp.dll and found some files that look promising according to their names, but I'm not sure as I can't read them properly. Inside the "btl_stat" folder, there are several entries related to status effects, named "CheckStatusLoop", or "RemoveStatuses" and such. I suppose there isn't a "readable" version of these somewhere around like there is for the BtlCalc file?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-01-10 15:55:36
Thank you very much for your help

1- but I do not have these commands under cmd

"Standart directory." ->
"Files, many files." ->
I'm even trying to change the execution as an administrator of my file "ffix_img_extr" .exe

and I even launched cmd as administrator but I have fewer bugs this time

here is my order

Code: [Select]
ffix_img_extr.exe "C:\Users\PC\Desktop\folder\FF9.IMG" "C:\Users\PC\Desktop\folder/folder1"
and here is the argument that offers me

(https://nsa39.casimages.com/img/2019/01/10/mini_19011005514491819.png) (https://www.casimages.com/i/19011005514491819.png.html)

but I do not have an extension in my files

(https://nsa39.casimages.com/img/2019/01/10/mini_190110055444231047.png) (https://www.casimages.com/i/190110055444231047.png.html)

but the files are generated but this time with their directory folder

(https://nsa39.casimages.com/img/2019/01/10/mini_190110055237843371.png) (https://www.casimages.com/i/190110055237843371.png.html)

2- Another important question is how to convert the sound once created ???

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: WhiteMirage on 2019-01-15 22:32:28
Hello ! :)

I'm trying to mod FFIX, using AlternateFantasy as a basis. At the beginning I just wanted to make Garnet as powerful as Eiko (by giving her useful new spells/eidolons like Holy, Esuna, Phoenix, Carbuncle etc...), but it was so fun to play with the game files that I decided to do a complete rework of Garnet, Zidane, Eiko, and Vivi (essentially by giving them new spells).

It looks like the game has no problem dealing with numerous spell changes, but as soon as I try to change the abilities linked to an item/weapon, the game stay stucked on a black screen when I start it. I don't really know what to do.

Here's my process:
- I have a freshly installed vanilla FFIX.
- I import the AlternateFantasy files.
- I open the game files with HW, I make some changes to the Spells and the Commands.
- I change the abilities given by some weapons to suit the changes I've just made to the spells (for exemple, I change the spells and abilities linked to the Rod or the Dagger).
- I save the mod, copy/paste it in the FFIX folder.
- I start the game... and it doesn't load, there's just a black screen.

I tried several things.
[Vanilla FFIX] Changing the abilities linked to weapons = the game works just fine.
[Vanilla FFIX] Changing both the spells and the abilities linked to weapons = the game works just fine.
[AlternateFantasy] Changing just the spells = the game works just fine.
[AlternateFantasy] Changing both the spells and the abilities linked to weapons = the game is broken.

I tried to import back the original Assembly-CSharp.dll (the one that comes with AlternateFantasy) and it made the game work again. The new abilities were there, but no change was applied to the weapons and gear I modified.
So... could someone help me please ? I don't really know what to do anymore. :(

(Oh and if you wonder: I use Alternate Fantasy as a basis because i'd like to experiment an harder version of FFIX, but more forgiving than FFIX Unleashed.)

Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2019-02-10 20:33:31
Hey tirlititi,

I just realised I haven't bothered you with detailed questions for a while, so here I go again, lol!

Anyway, I've been playing around with DnSpy again and I tried altering the damage calculation formulas for Frog Drop, Thievery, and Dragon Crest to also factor in the target's defense. Here's my code:

Code: [Select]
case 66:
{
CALC_VAR calc_VAR37 = calc_VAR;
calc_VAR37.tg_flags |= 1;
calc_VAR.df_pow = (short)target.defence.p_def;
if (ff.frog_no - calc_VAR.df_pow / 2 > 0)
{
if (calc_VAR.at_num < 1)
{
calc_VAR.at_num = 1;
}
int num22;
if (ff.frog_no != 0)
{

if ((num22 = (short)(caster.level * (ff.frog_no - calc_VAR.df_pow / 2))) > 9999)
{
num22 = 9999;
}
else
{
num22 = (short)(caster.level * (ff.frog_no - calc_VAR.df_pow / 2));
}
}
else
{
num22 = 1;
}
calc_VAR.tg_hp = (short)num22;
}
break;
}
case 67:
{
CALC_VAR calc_VAR38 = calc_VAR;
calc_VAR38.tg_flags |= 1;
calc_VAR.df_pow = (short)target.defence.p_def;
if (ff.steal_no - calc_VAR.df_pow > 0)
{
if (calc_VAR.at_num < 1)
{
calc_VAR.at_num = 1;
}
int num23;
if ((num23 = (ff.steal_no - calc_VAR.df_pow) * (short)caster.elem.dex / 2) > 9999)
{
num23 = 9999;
}
else
{
num23 = (short)((ff.steal_no - calc_VAR.df_pow) * (short)caster.elem.dex / 2);
}
calc_VAR.tg_hp = (short)num23;
}
break;
}
case 68:
{
CALC_VAR calc_VAR39 = calc_VAR;
calc_VAR39.tg_flags |= 1;
calc_VAR.df_pow = (short)target.defence.p_def;
if (ff.dragon_no - calc_VAR.df_pow > 0)
{
if (calc_VAR.at_num < 1)
{
calc_VAR.at_num = 1;
}
int num24;
if ((num24 = (ff.dragon_no - calc_VAR.df_pow) * ff.dragon_no) > 9999)
{
num24 = 9999;
}
else
{
num24 = (short)((ff.dragon_no - calc_VAR.df_pow) * ff.dragon_no);
}
calc_VAR.tg_hp = (short)num24;
}
break;

It's working fine so far except for one thing: When the enemy's defense is higher than the Number of steals/dragons/frogs, I experience some sort of 'damage underflow bug' and start dealing really wierd 10-digit damage numbers (or was it 12 digits? Don't remember.). Do you by chance know how to avoid this? If the enemy's defense is higher, I'd like the damage to be 0. I've copied the basic outline of the script from other attacks that deal 0 damage when the enemy's defense is too high, like Lancer, Drain or Osmose, and then merely adjusted the parameters accordingly to match my formulas. But I must be missing something important.

Edit: Nevermind, I figured it out! The code I posted turned out to be fine after all, but in my file I had an older version of the code, probably due to not saving properly last time.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-17 10:18:55
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
        {
            btl_calc.SetEnforceHP0(target);
            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);
}
else
{
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 (https://www.hiveworkshop.com/attachments/alternatefantasysource_v4-5-zip.301710/) (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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-02-17 14:32:24
Thank you for your support

1- I have the files without extension as in the screane in these folders
and I have the "converter.exe" that works anymore it says an appcrach message and in the error it is marked a msvcrt.dll

is there a solution to this problem
hat is this tool for ?

2- is there any spell templates in the image ff9.img

2- and what a tool to see his models and especially thé wall m'est ?

et merci d'avance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-17 15:08:15
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 (http://forums.qhimm.com/index.php?topic=15957.msg258062#msg258062) made by tasior2 to see most of the 3D models of the PSX version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-02-17 16:55:43
Thank you for your support

1- I downloaded several msvcrt.dll on the net and copied them in the same directory but with the same error

is there a solution ?

2- thank you very much for "FF9 Reverse" and for your franchise for spell models

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-02-18 03:05:15
im trying to add this to a boss on disc 3 and getting this error code - " - Not enough space : data is 32 bytes too heavy"

    while ( VAR_LocUInt8_80 > 0 ) {
        if ( #( SV_FunctionEnemy[HP] <=$ 10000 ) ) {
            set VAR_LocUInt8_80--
            set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
        }
        Wait( 1 )
    }
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-18 16:26:28
@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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2019-02-18 19:59:15
@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
        {
            btl_calc.SetEnforceHP0(target);
            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);
}
else
{
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 :)

Thanks for the reply, tirlititi! Your suggestion for the Stona spell works like a charm! I didn't know that it was possible to add checks for which statuses are cured exactly, so I hesitated about altering the Cure Status formula for fear of screwing up other status curing spells like Esuna or Antidote.

But concerning the status duration formulas, I still got a few questions:

1) Why does Berserk have a separate duration formula? For all I know, Berserk is a permanent status, isn't it?

2) About the last line from that code you posted:

Code: [Select]
btl.stat.cnt.conti[(int)((UIntPtr)(num - 16u))] = (short)(status_data[(int)((UIntPtr)num)].conti_cnt * (ushort)num6);
At first I wasn't sure how to read this exactly, but then I found an older post from you from last year when we were first talking about this topic (it was on page 40 of this thread). There you posted the following (back then we didn't have DnSpy so I tried to do it via Hades Workshop's Cil code instead):

Quote
However, for the durations of the statuses, they are in 2 spots and it is not possible to edit either of them :/
- In "btl_stat::AlterStatus", a page before the end, there are 3 similar formulas "Duration = (60 - spirit) << 3" (for bad statuses and jump), "Duration = spirit << 3" for good ones and "Duration = spirit << 2" by default (it doesn't seem to be used). You can't edit this method because it's too big and CIL editing tends to bug with big methods.
- In FF9BattleDB (.ctor), there is the setup of "STAT_DATA", a class for status informations, including a multiplier used after the formulas I gave above. You can't modify the method because it's too big and anyway it is one of the few methods that are specially handled by HW and modified by other means.

I've looked into this FF9BattleDB::status_data with DnSpy, and there's a list of 32 statuses. Unfortunately they aren't labeled, so I don't know for sure which order they are in, but I noticed that the third byte is 0 for the first 16 statuses, and then has a value for the following 16 statuses. Not sure about the other bytes, but I'm guessing that this third byte is that multiplier you were referring to, and that would mean that the first 16 statuses in that list are the permanent status effects and the following 16 statuses are the temporary ones, right?

So the complete formula for calculating status duration should be:

Status-specific multiplier * that "num6" value from above (the one that uses the Spirit stat)

And that is the number of frames (or "ticks") that have to pass before the status wears off.

Are my assumptions correct so far? I've already playtested a bit and successfully increased the duration of both positive and negative statuses, now it's only a matter of finding a fair balance for each.

3) Onto my last question: it bugged me a bit when I re-read in your older post that Jump was also a "status effect", that might be a bit annoying. I wanted to increase the usefulness of spells like Protect and Shell, but I don't want jumping to take forever so I'd like to lower the multiplier of that one. You don't happen to know which of these statuses in the list in FF9BattleDB::status_data refers to the Jump status, do you? I guess I could find out through trial and error, though. Anyway, many thanks for guiding me so far, you've been a great help!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-19 19:34:47
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-20 19:44:10
Hello Tirlititi! It's a long time I don't write something here, and I'm so happy to join again with...a new problem to solve  :evil:

Sooo, I decided to try to apply the "Blank Mod" also on the PSX file. So I started with a new clean project, but for some reason I really don't know why everytime I try to check the Fields the program gave me this error

(https://i.imgur.com/T1f3oyo.png)
The .bin file is the Italian version of the game. The rest (Enemies, Party, Inventory, Battle Scenes, World Map etc) work perfectly, but the Field not.. and it's the same for all the discs...so..why?

Thank you again so much for all the kind help
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-20 19:52:29
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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-02-20 20:29:11
Thank you for your support

here is my mistake

(https://image.noelshack.com/minis/2019/08/3/1550696707-converter.png) (https://www.noelshack.com/2019-08-3-1550696707-converter.png)


all I have to download the .dll is wearing this no

(https://image.noelshack.com/minis/2019/08/3/1550696587-msvcrt.png) (https://www.noelshack.com/2019-08-3-1550696587-msvcrt.png)

and thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-21 08:29:21
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.

Don't worry! I solved with the .38 version! Thanks a bunch!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-21 09:09:27
I know that it's not exactly related to HWS, but also it is.  ;)

Everyone knows where can I find some ready saved data for PSX (Emulator)? It's useful to me for testing without begin from the start..!  :|


Nevermind! I found everything I need  ;D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-21 21:14:48
Ah, no idea then, lyokoffx, sorry...
That's a strange error. I guess it is because of a version compatibility... maybe try to run the converter as administrator or with Windows XP compatibility? There should be these options somewhere if you right-click on it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-22 14:02:57
I don't know if everyone asked of this before but...what about if I want to transport the character on a different Field?

I explain better... I want that in the "Evil Forest" when Zidane is going to rescue Garnet, in the end of Field 254 and the start of 256, the Field "teleports" somehow, in another part... in this case at the start of the evil Forest (250), where Blank is looking for Zidane... when he'll goes through the Fountain (after a kind of cutscene i guess) everything will be back on Zidane and his friends on the Field 256.

I don't know alot about Variables..I've seen that I have to work on Region1_Range.. but I really don't know what to do exactly without mess everything..can I have a hint?

I hope this question is clear enough  :-[
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-02-22 15:00:35
Thank you for your support

1-

maybe try to run the converter as administrator or with Windows XP compatibility? There should be these options somewhere if you right-click on it.

unfortunately I already tried the administrator mode and the same problem and also the VirtualBox virtual machine with Windows 10 and Windows 8.1
I do not know why

2-I wonder if I can start using HW

or I have to find tutorial

what is the programming language used on this program

which is less tiring to produce code unity3d or HW

My project is to produce a sequel to ff9 is this HW is Qualified for my project


and thank you for everything and thank you
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-23 12:31:09
@ToraCarol: Making a cutscene is never quite easy but it is possible.
It indeed begins in a "Region" function of the field 254 (Swamp). There are two regions: one going forward to field 256 (Trail) and one going back to field 253 (Spring). You want to make it so that the first time that one gets to 256, a cutscene occurs. You may do it like that in general:
Code: [Select]
// A variable that is not used ; I think that you can take 60000 and the followings for booleans (it corresponds to 7500 for the other types of variable)
if ( !VARL_GenBool_XXX ) {
    set VARL_GenBool_XXX = 1
    // Do whatever you want as a one-time event
} else {
    // Do whatever you want to be the default (in this case, going to field 256 normally)
}
You can see that there is already a code like this in the function "Region1_Range" because there's already a one-time cinematic playing when you go there for the first time. You can simply use it and change the destination field of the first case to 250 instead of 256, so you get there after the cinematic showing the Plant Brain.
There is a variable, "General_FieldEntrance" that can be used to comunicate simply between fields. Most of the time, it is used to say "where should the player appears on the field". You may also use it to say that you are not entering the field 250 normally but as a cutscene.

So change that variable to something unused ("set General_FieldEntrance = 10" for instance) and code what it should trigger inside the code of the field 250.

First, in the function "Main_Init", you want to prevent Zidane from appearing. So for these lines:
Code: [Select]
    if ( ( General_ScenarioCounter == 2010 ) && ( !VARL_GenBool_2432 ) ) {
        set VAR_GlobUInt8_30 = 1
        InitObject( 10, 0 )
        InitObject( 7, 0 )
        InitCode( 6, 0 )
        InitRegion( 8, 0 )
        InitRegion( 9, 0 )
        set VARL_GenBool_2432 = 1
    } else {
        set VAR_GlobUInt8_30 = 0
        InitObject( 10, 0 )
        InitRegion( 8, 0 )
        InitRegion( 9, 0 )
    }
Put a condition for initializing Zidane (and, while we are at it, the exiting regions):
Code: [Select]
    } else {
        set VAR_GlobUInt8_30 = 0
        if ( General_FieldEntrance != 10 ) {
            InitObject( 10, 0 )
            InitRegion( 8, 0 )
            InitRegion( 9, 0 )
        } else {
            // Init the object corresponding to Blank, like "InitObject( 17, 0 )"
        }
    }
So you need to create a new entry that is linked to Blank's 3D model. You are very lucky there because I think that Blank is one of the few models that can be accessed in any field in the PSX version (you won't be able to use a lot of animations though). The Steam version is incredibly better for that, but it's still possible...
So, right-click on the function list and add a new function. You can use the entry 17 that is reserved for the 8th player character normally (it is the slot used by Blank before Amarant joins; it doesn't have a lot of importance here anyway). Use a function of type "0" (for initialization) and put a code like this inside:
Code: [Select]
    SetModel( 5467, 87 )
    CreateObject( POSITION_X, POSITION_Y )
    TurnInstant( ANGLE )
    SetStandAnimation( 462 )
    SetWalkAnimation( 5225 )
    SetRunAnimation( 5222 )
    SetLeftAnimation( 5223 )
    SetRightAnimation( 5224 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 96, 61 )
    return
Then add a "Loop" function for him (add function of type "1") and code a cutscene there...
At the end of the cutscene (either in that field or in another), you should put the following lines to give the control back to Zidane in the field 256:
Code: [Select]
set General_FieldEntrance = 27
Field( 256 )
Check this tutorial (http://forums.qhimm.com/index.php?topic=14315.msg260956#msg260956) for a detailed example of how you can do cutscenes.

You can see that, up to there, you didn't need to declare or use any new variable. You can do a lot with just the variables that are already used by the game, especially when you want to do standard things like moving to another field for a cutscene. Eventually though, you need to use new variables in most cases. Here (http://forums.qhimm.com/index.php?topic=14315.msg234516#msg234516) is how to declare local and global variables. You can use general variables without declaring them but you should be sure to use one that the game doesn't use already (as said, the variables with an ID higher than 7500 should be fine).

@lyokoffx: I don't really understand what you say...
Hades Workshop is coded in C++ and the source code is available here (https://github.com/Tirlititi/Hades-Workshop).
I can't say if HW is "qualified" to create a sequel to FF9 because I don't know what you are thinking of... It depends of how different the game would be.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: lyokoffx on 2019-02-23 14:08:21
Thank you for your support

so where should I find the tutorial in these sites to get good started

During my game changes, do I have to type C ++?

And thank you in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-23 14:20:54
I don't know, I mostly learned programing at school and as an autodidact.
C++ is kind of a difficult and tedious language but also reliable and very widespread. I am not sure if it would be the best choice for starting a game nowadays. But again, I am not quite sure of what you want to do.

You can send me a PM in french if that helps to say things more clearly.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-23 18:20:25
Thanks again for you kind help Tirlititi, now I'm checkin!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-02-24 04:33:44

Tirlititi  the error comes from 0.40 version only 0.30 works fine as long as u dont apply ppf patches to the discs for field loadings.

also u know anything about code for frogs in swamps, i wanna make em spawn like 10x faster lol
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-24 11:20:02
Hi Resinate, thank you for telling me the version that bug comes from.

Unfortunatly, the frog respawn is a mystery to me. I tried to understand what was all the variables doing but I failed to interpret things correctly...
On top of that, there is no "GetTime" call in any of the marsh fields, so I guess it means that the respawn doesn't depend on the time but on something else...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-25 12:00:31
Hi Tirlititi, so I'm trying to "familiarize" with Variables.. but I need more help, as always..

So..now I create a new Variable, called "VARL_GenBool_8000"

And on the Evil forest Swamp I made something like that

>
Code: [Select]
  0xA9( 250 )
        FadeFilter( 6, 24, VAR_GlobUInt8_17, 255, 255, 255 )
        Wait( 25 )
        if ( VAR_GlobBool_167 == 1 ) {
            RunSoundCode( 265, 65535 )
            set VAR_GlobBool_167 = 0
        }
        if ( VAR_GlobBool_162 == 0 ) {
            if ( VAR_GenUInt8_13 < 9 ) {
                set VAR_GenUInt8_13 = 3
            }
            RunSoundCode1( 20864, 655, 0 )
        }
        if ( VAR_GlobBool_163 == 0 ) {
        }
        set VARL_GenBool_8000 = 0
        set General_FieldEntrance = 27
        Field( 250 )
    }
    return


Then, on the Field 250 I want that Blank was playable on this Field and at this point, so I made something like this in the Main Init

Code: [Select]
   } else {
        set VAR_GlobUInt8_30 = 0
        InitObject( 10, 0 )
        InitRegion( 8, 0 )
        InitRegion( 9, 0 )
    }
    if ( !VARL_GenBool_8000 ) {
        InitObject( 17, 0 )
        InitRegion( 8, 0 )
        InitRegion( 9, 0 )


I missing something? For sure I did...!! Sorry to bother again..but I tried to understand the problem but I seriously don't know what's my error..

It' sure that I have to intervene also in other codes..but.. I  hope you can guide me!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-02-25 12:50:16
Tirlititi did u ever make a patch for psx version to enable marcus to equip ability stones?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-25 19:06:40
@ToraCarol: Your code is not what I suggested to do.
- You have a line "set General_FieldEntrance = 27": I suggest to replace it by "set General_FieldEntrance = 10".
- I suggested to use the following in the field 250:
Code: [Select]
    } else {
        set VAR_GlobUInt8_30 = 0
        if ( General_FieldEntrance != 10 ) {
            InitObject( 10, 0 )
            InitRegion( 8, 0 )
            InitRegion( 9, 0 )
        } else {
            InitObject( 17, 0 )
        }
    }
// Instead of what you have
//    } else {
//        set VAR_GlobUInt8_30 = 0
//        InitObject( 10, 0 )
//        InitRegion( 8, 0 )
//        InitRegion( 9, 0 )
//    }
//    if ( !VARL_GenBool_8000 ) {
//        InitObject( 17, 0 )
//        InitRegion( 8, 0 )
//        InitRegion( 9, 0 )
//    }
You may do things differently than I suggested, but with the little piece of changes that I suggested, you should already get to the entrance of the Evil Forest and have Blank showing up after the Plant Brain cinematic.

There, you say that you have an error but you don't say what is not working!
Is it HW that tells you that there is an error? Is there a crash in-game? Is it that nothing changes?

@resinate: No, sorry. It deals with MIPS code and I completly deserted that.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-25 21:29:38
 Oh my! Forgive me!! I totally forgot this step  :-[ :-[ :-[ :-[

Code: [Select]
  if ( General_FieldEntrance != 10 ) {
Now I've changed. So the code is exactly like that.

And yes.. forgive me about that too! The error is nothing related to HWS but inside the game

Quote
you should already get to the entrance of the Evil Forest and have Blank showing up after the Plant Brain cinematic

The problem is right here, when there's the fadeout from the Cinematic to the Field 250 there's simply a black screen, so..no Blank or else is showing! Why? What did or didn't I do? :| 

Nothing particular is touched. Now what I have is just the code you suggested me, the Blank entry and the Field changed after the cinematic on the Swamp.

ps: And another quick question.. meanwhile I was waiting for the reply I just started to work on the other Fields, on the Blue Narciss I put the scripts from my Steam Project.. and everything is cool to HWS too, every  entry is set right, and every script is at his place..

Code: [Select]
RunScript( 2, 2, 15 )
        Wait( 3 )
        WindowSyncEx( 2, 0, 128, 86 )


        RunScript( 2, 4, 14 ) <-- This script does not react
        WindowSyncEx( 4, 0, 128, 276 )


The function is a simple animation of Zidane, so is strange, because as I said everything, entry and functions are in their own place and on Steam works fine!

Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-02-27 04:45:46
im looking around, how does one change a chars level and exp. im trying to change npc on disc 3 where u show card from instead of renaming u can reset chars for boosting stats

from testing stuff i have few chars working but i need help with rest of the op codes if ANYONE can pls help me

SetCharacterData( 0, 1, 255, 9, 0 )i found this so far
but i cannot find code for level and exp
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-27 20:32:24
@ToraCarol: I don't know what could prevent the field to load (or the fading to happening). Have you properly setup Blank's init function?
The script not reacting can be because Zidane is already moving, which cancels his animation to play? If he's walking and you use a "RunAnimation", I think that it doesn't work. You can also try to replace this line by a "RunAnimationEx( 4, ... )".

@resinate: It is not possible to have a real control over the level and experience of the characters through scripts, unfortunatly.
Fortunatly, it is possible to reset someone to lvl 1: you need to use that "SetCharacterData" line but with an empty party reserve.
It would be like this:
Code: [Select]
set Setting_PartyReserve = 0
SetPartyReserve( Setting_PartyReserve )
SetCharacterData( 0, 1, 255, 255, 255 ) // Using 255 prevents unwanted changes
SetCharacterData( 1, 1, 255, 255, 255 )
SetCharacterData( 2, 1, 255, 255, 255 )
// etc... for each character
set Setting_PartyReserve = 255 // Use 511 instead if Beatrix should be available
SetPartyReserve( Setting_PartyReserve )
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-02-28 00:05:08
Heres the script everything works BUT zidane vivi and quina
case 1 and 2 are switched cuz of how they coded the text box in game.

Function Entry16_Init
    set VAR_GenUInt16_21 = 0
    SetPartyReserve( VAR_GenUInt16_21 )
    switch 8 ( GetDialogChoice ) from 0 {
    case +0:
        SetCharacterData( 0, 1, 255, 255, 255 )
        break
    case +1:
        SetCharacterData( 2, 1, 255, 255, 255 )
        break
    case +2:
        SetCharacterData( 1, 1, 255, 255, 255 )
        break
    case +3:
        SetCharacterData( 3, 1, 255, 255, 255 )
        break
    case +4:
        SetCharacterData( 4, 1, 255, 255, 255 )
        break
    case +5:
        SetCharacterData( 5, 1, 255, 255, 255 )
        break
    case +6:
        SetCharacterData( 6, 1, 255, 255, 255 )
        break
    case +7:
        SetCharacterData( 7, 1, 255, 255, 255 )
        break
    }
    set VAR_GenUInt16_21 = 255
    SetPartyReserve( VAR_GenUInt16_21 )
    TerminateEntry( 255 )
    return


whats the psx variable of "set Setting_PartyReserve = 0"
some reason 16_19 and 16_21 do same thing
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-02-28 06:39:22
Thank you Tirlititi, and sorry again..I'll check the problem and let you know


ps: And another quick question.. meanwhile I was waiting for the reply I just started to work on the other Fields, on the Blue Narciss I put the scripts from my Steam Project.. and everything is cool to HWS too, every  entry is set right, and every script is at his place..

Code: [Select]
RunScript( 2, 2, 15 )
        Wait( 3 )
        WindowSyncEx( 2, 0, 128, 86 )


        RunScript( 2, 4, 14 ) <-- This script does not react
        WindowSyncEx( 4, 0, 128, 276 )


The function is a simple animation of Zidane, so is strange, because as I said everything, entry and functions are in their own place and on Steam works fine!

Any idea about this STRANGE problem?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-02-28 13:37:52
yea for some reason "SetPartyReserve" doesnt effect zidane vivi and quina thats on disc 4 other 6 chars work 100% fine
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-02-28 22:06:02
@resinate: No idea. Those characters don't have any special traitment :o
"VAR_GenUInt16_21" and "Setting_PartyReserve" are synonymous indeed ("Setting_PartyReserve" appeared in more recent versions of HW but you can still use "VAR_GenUInt16_21").

@ToraCarol: I answered that about it.
Quote
The script not reacting can be because Zidane is already moving, which cancels his animation to play? If he's walking and you use a "RunAnimation", I think that it doesn't work. You can also try to replace this line by a "RunAnimationEx( 4, ... )".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-03-01 01:15:15
still trying to figure it out, as it seems i was wrong that ONLY eiko can be reset to lvl 1 no one can, just updates their levels

well i guess ff9 has its limits, really sucks u cant level reset anyone in game had some huge potential with this...... seeing ppl only responding once a day everyones has a busy plate lol
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-03-01 01:25:44
also what does the symbol mean? "|=" in set Setting_PartyInitialized |= 4

It's Bitwise variable // assignment!.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-03-01 02:55:25
yea after hours of researching there is no possible way to change a chars levels after obtaining them.

if anyone knows a method lemme know, all i know is eiko is only char in ff9 that can be reseted.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-02 09:46:40
@resinate: No idea. Those characters don't have any special traitment :o
"VAR_GenUInt16_21" and "Setting_PartyReserve" are synonymous indeed ("Setting_PartyReserve" appeared in more recent versions of HW but you can still use "VAR_GenUInt16_21").

@ToraCarol: I answered that about it.

Oh sorry.. mistake of mine
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-03-02 10:18:12
tril have u had a chance to find out why eiko is only char in ff9 that can be reseted back to level 1? wish someone would talk to me in discord lol i really wanna figure this out

i need help in finding a way to reset this code block to zero, if i can do that i can reset chars back to level 1 with it.

        if ( ( ( VAR_GenUInt16_19 >> 0 ) & 1 ) == 0 ) {
            SetCharacterData( 0, 1, 0, 9, 0 )
            set VAR_GenUInt16_19 |= 1
        }

how do i set int16_19  back to 0?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-03-02 10:49:21
Ok.
I've double-checked what the "update level" option does and it can't be used to level down the characters...
Code: [Select]
if (update_lv) {
int num = ff9play.FF9Play_GetAvgLevel(slot_no);
int lv;
if (pLAYER.info.serial_no == 10 || pLAYER.info.serial_no == 11)
lv = num;
else
lv = Mathf.Max((int)pLAYER.level, num);
ff9play.FF9Play_Build(slot_no, lv, null, false);
}
Except for the character serial number 10 and 11, which is indeed Eiko (she has 2 different serial numbers because she can wear two different kinds of weapons, flutes and rackets), the script is not allowed to reduce the level in any way.

In the Steam version, you can use the tool dnSpy (or even HW's CIL code modding for this) to edit the code above and remove that "take the max" line. It's in the class "ff9play" and its method "FF9Play_Change".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-03-02 11:16:56
what about dagger? she can use 2 weapons also and she doesnt reset

closest ive gotten so far was using party 512 or 1024 and it does set everyone's level to that level, prob is i cant reset those 2 levels lol.

only method i can see is trying to unregister the chars

btw whats this lol FF9Play_ChangeLevel

if ur here can u look up what these are.

        0xA3( 0, 0, 0, 0 )
        0x76( 0, 0 )
        0x77( 0, 0 )
        0xC3( 0, 0 )
        0xC9( 0, 0, 0, 0, 0 )

i found this         0xDB( 0, 0 ) which 1st aug is char id but no clue what 2nd is
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-02 11:35:49
Again sorry Tirlititi sometimes I get confused easily when I'm modding ^^''  :oops: You have a huge patience and i sincerely thank you about that

@ToraCarol: I don't know what could prevent the field to load (or the fading to happening). Have you properly setup Blank's init function?


So that's what I did

For the Init (I've added few things..but i don't know if they are necessary)

Code: [Select]
Function Blank_Init
    if ( ( General_FieldEntrance == 4 ) && ( VAR_GlobUInt8_30 == 1 ) ) {
        set VAR_GlobInt16_0 = 64956
        set VAR_GlobInt16_4 = 273
        set VAR_GlobInt16_6 = 224
        set VAR_GlobInt16_2 = 64967
    }
    SetModel( 5467, 87 )
    CreateObject( VAR_GlobInt16_0, VAR_GlobInt16_4 )
    TurnInstant( VAR_GlobInt16_6 )
    SetStandAnimation( 462 )
    SetWalkAnimation( 5225 )
    SetRunAnimation( 5222 )
    SetLeftAnimation( 5223 )
    SetRightAnimation( 5224 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 96, 61 )
    RunSoundCode( 4616, 919 )
    RunSoundCode( 4616, 914 )
    RunModelCode( 16, 25, 4, 919 )
    RunModelCode( 17, 25, 4, 914 )
    RunModelCode( 18, 25, 4, 1 )
    RunSoundCode( 4616, 919 )
    RunSoundCode( 4616, 914 )
    RunModelCode( 16, 25, 13, 919 )
    RunModelCode( 17, 25, 13, 914 )
    RunModelCode( 18, 25, 13, 1 )
    RunSoundCode( 4616, 919 )
    RunSoundCode( 4616, 914 )
    RunModelCode( 16, 38, 0, 919 )
    RunModelCode( 17, 38, 0, 914 )
    RunModelCode( 18, 38, 0, 1 )
    RunSoundCode( 4616, 919 )
    RunSoundCode( 4616, 914 )
    RunModelCode( 16, 38, 8, 919 )
    RunModelCode( 17, 38, 8, 914 )
    RunModelCode( 18, 38, 8, 1 )
    DefinePlayerCharacter(  )
    if ( VAR_GlobUInt8_30 != 1 ) {
        set VAR_GlobBool_158 = 1
        if ( VAR_GlobBool_159 == 1 ) {
            if ( VAR_GlobBool_156 == 0 ) {
                EnableMove(  )
                0x27( 255 )
                if ( VAR_GlobBool_144 == 0 ) {
                    EnableMenu(  )
                }
            }
        }
    }
    return

Fo the Loop

Code: [Select]
Function Blank_Loop
    DisableShadow(  )
    RunModelCode( 4, 1, -100, 0 )
    Wait( 1 )
    loop

And for the Main Init

Code: [Select]
  SetControlDirection( 0, 0 )
    InitCode( 1, 0 )
    InitCode( 2, 0 )
    InitCode( 3, 0 )
    InitCode( 4, 0 )
    if ( VARL_GenBool_2432 == 1 ) {
        ShowTile( 5, 0 )
        ShowTile( 6, 0 )
    }
    SetRandomBattleFrequency( 128 )
    SetRandomBattles( 1, 67, 67, 67, 67 )
    if ( ( General_ScenarioCounter == 2010 ) && ( !VARL_GenBool_2432 ) ) {
        set VAR_GlobUInt8_30 = 1
        InitObject( 10, 0 )
        InitObject( 7, 0 )
        InitCode( 6, 0 )
        InitRegion( 8, 0 )
        InitRegion( 9, 0 )
        set VARL_GenBool_2432 = 1
    } else {
        set VAR_GlobUInt8_30 = 0
        if ( General_FieldEntrance != 10 ) {
            InitObject( 10, 0 )
            InitRegion( 8, 0 )
            InitRegion( 9, 0 )
        } else {
           
                InitObject( 17, 0 )
           
        }

And there this one on the Swamp after the cinematic

Code: [Select]
0xA9( 250 )
        FadeFilter( 2, 1, VAR_GlobUInt8_17, 255, 255, 255 )
        if ( ( ( ( SyncCinematic & 127 ) != 17 ) && ( ( SyncCinematic & 128 ) == 0 ) ) && ( VAR_GlobBool_146 == 1 ) ) {
            while ( ( SyncCinematic & 127 ) != 1 ) {
                Wait( 1 )
            }
            Wait( 1 )
        }
        set VAR_GlobBool_162 = 1
        set VAR_GlobBool_163 = 1
        if ( VAR_GlobBool_167 == 1 ) {
            RunSoundCode( 265, 65535 )
            set VAR_GlobBool_167 = 0
        }
        if ( VAR_GlobBool_162 == 0 ) {
            if ( VAR_GenUInt8_13 < 9 ) {
                set VAR_GenUInt8_13 = 3
            }
            RunSoundCode1( 20864, 655, 0 )
        }
        if ( VAR_GlobBool_163 == 0 ) {
        }
        set General_FieldEntrance = 27
        Field( 250 )

In this last one I simply changed the Field from 256 to 250. I was wrong something for sure..but I prefer to ask you and understand before i can mess everything

Quote
The script not reacting can be because Zidane is already moving, which cancels his animation to play? If he's walking and you use a "RunAnimation", I think that it doesn't work. You can also try to replace this line by a "RunAnimationEx( 4, ... )".

Now I've tried to make somtehing like that

Code: [Select]
   RunScript( 2, 2, 15 )
        WindowSyncEx( 2, 0, 128, 86 )
        Wait( 3 )
        RunAnimationEx( 4, 3397 )
        WindowSyncEx( 4, 0, 128, 276 )
        WaitAnimationEx( 0 )
        Wait( 3 )

But seems to not work anyway... :( Anyway the script is based on an extra that I wanted to add when Blank says that he "decides to join" instead of "the boss asked" so..the script is just an answer of Zidane..nothing particular..

And as I said..is strange..because on Steam works perfectly!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-03-02 11:45:36
tril and tora come to discord would be ALOT ezer to talk there

also tril how did u even find that and how is it linked to setchar data?

hey trill in steam version is location of all the set VAR_GlobUInt8_24 variables ??

TRIL what about this "GetEntryProperty(0, 0)" where is set version?

whats these?  if ( VAR_GlobInt16_8 != 99 ) { ???? the 8 10 12 and 14 mean?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-03-02 15:21:22
@resinate: Dagger also has 2 serial numbers but they are not handled differently than the others.
The variables "VAR_GenUInt16_19" have nothing to do with it. You can easily remove the "if" line so this variable doesn't appear anymore.
This lol FF9Play_Change is part of the game's source code. dnSpy is a tool that can omg access to this code and change it.

Your last post is incomprehensible. Please make some effort.

@ToraCarol: In Blank's Init, remove the block "if ( ( General_FieldEntrance == 4 ) && ( VAR_GlobUInt8_30 == 1 ) ) {" and instead setup the position you want to give to Blank by selecting the line "CreateObject" and the helper "Field" on the left of the window (showing the field's walkmesh).
In Blank's loop, what is the "RunModelCode( 4, 1, -100, 0 )"? You should probably remove that line and the "DisableShadow" (unless you want to hide Blank's shadow for some reason).
In the swamp's function, you still have the line "set General_FieldEntrance = 27" while it should be "set General_FieldEntrance = 10".

Ah, and the animation is not working on PSX because you can't use all the animations there. Each field has the datas of some animations linked to it (the animations that the devs used for that field) and you can't access to the others.
On Steam, you can access any model and any animation at any time.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-02 18:20:16


@ToraCarol: In Blank's Init, remove the block "if ( ( General_FieldEntrance == 4 ) && ( VAR_GlobUInt8_30 == 1 ) ) {" and instead setup the position you want to give to Blank by selecting the line "CreateObject" and the helper "Field" on the left of the window (showing the field's walkmesh).
In Blank's loop, what is the "RunModelCode( 4, 1, -100, 0 )"? You should probably remove that line and the "DisableShadow" (unless you want to hide Blank's shadow for some reason).
In the swamp's function, you still have the line "set General_FieldEntrance = 27" while it should be "set General_FieldEntrance = 10".

Ah, and the animation is not working on PSX because you can't use all the animations there. Each field has the datas of some animations linked to it (the animations that the devs used for that field) and you can't access to the others.
On Steam, you can access any model and any animation at any time.

Yey! It works! Thanks a bunch!  ;D ;D

Oh...I got it. Ok...so I'll keep to work on Steam! Thanks for let me know  8)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-02 21:07:57
(https://i.imgur.com/uG18ZR3.gif)

Tirlititi, why Blank is like he's not walking in the water?x''D  It's something related to the model?

(And what about the "texture" effects? Like the "Night Effect", "Light Of Branbal" on the model etc?  I'd like to solve somehow... it's kinda creepy to see Blank colorful x'D)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-03-03 21:47:56
Apparently, the water effect is handled by the different functions "Code1_Loop", "CodeN_11" and "CodeN_12" (with N ranging through 2, 3 and 4). They are SPS effects.
The problem is that they are specifically made for Zidane (ObjectUID_10). You can change every instance of "ObjectUID_10" to "ObjectUID_250" in these functions: it will refer to the party's character (so Zidane most of the time and Blank in your modifications). It would be more difficult to have two characters in the water at the same time apparently.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: resinate on 2019-03-04 14:09:38
i was more surprised the fact no char data can be fetched thru variables like how chocobo scripts work

so i was looking around at max level coding in game and found this line

ff9play.FF9Play_ChangeLevel(i, 99, false);

can this be used at all in psx version???

well for now im gonna use a boss rush script lol
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-07 16:25:27

Thanks for the reply, as always  ;)

Just want to ask...whats the best way to install the Dwight's "SFX & Missing Enemy Death Sounds Fix" to  be compatible with my Mod? (When i copypaste the resoruce.assets, obviously, the game
looks kinda corrupted)

It's necessary to start from a clean project?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-03-07 16:42:05
@resinate: No, it's not accessible from the PSX version. Only the Steam version allows to modify its source code.

@ToraCarol: The missing death sounds is just a single file to import in the "resources.assets". You can get it there (https://www.dropbox.com/s/n3vt8hqv2f503c9/PC_DeathSoundFix.zip?dl=0) for instance. It can be imported either in your "resources.assets" before doing your stuff with HW or after generating the modded files, it doesn't matter.
I don't remember if that mod also update the sounds with better ones. If that's the case, it is files like p0data61, 62 or 63 that are not modified by HW so it's perfectly compatible.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-03-07 19:21:54
Thanks for the reply, as always  ;)

Just want to ask...whats the best way to install the Dwight's "SFX & Missing Enemy Death Sounds Fix" to  be compatible with my Mod? (When i copypaste the resoruce.assets, obviously, the game
looks kinda corrupted)

It's necessary to start from a clean project?

You can use that resources.assets as a base before beginning your mod with HW!.
If you still have your .hws file, you can do so.

I don't remember if that mod also update the sounds with better ones. If that's the case, it is files like p0data61, 62 or 63 that are not modified by HW so it's perfectly compatible.

It does and is compatible!.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-08 09:41:17
Thanks to both for the reply! For now i put the Enemy Death sound fix and works like  a charm!!!

Now I'm checkin for the SFX mod, I let you know for anything else  ;)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Zara9 on 2019-03-08 22:04:17
I am trying to add Garland to the silverdragon boss fight at disc 3 on the original ff9 steam version

and everytime i try to do so, the game softlocks on me, what am i doing wrong then
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-03-09 11:07:12
Adding an enemy in a battle requires a bunch of things. Have you done everything I wrote in that message (http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485)?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Zara9 on 2019-03-09 12:41:56
hey

this is the stuff i do not understand about adding enemies using the ff9 hades workshop

So, about adding enemies, there are a few constraints and some step-by-step method to follow:
1) Copy the enemy you want to add (right-click), then go to the battle where you want to add him and paste.
2) Copy some attacks for that enemy: it is advised to copy/paste attacks from its original battle since then the sequencing and animations will match. You can get any other spell as well though (but then you need to modify the spell sequence or the animations will look weird).
3) Select those new attacks you copied and change their field "Animations" -> select the new enemy.
4) Similarly, select the new enemy and change its "Default Attack" to one of those you added (it's only used for Berserk/Confuse),
5) Modify at least one of the enemy Groups to include the new enemy in it.
6) Click on "Edit Entries", select the last entry named "Object" in the list, Add one entry (it will pop between that Object and Zidane's entry) and change the entry type to 2,
7) Modify the AI script to include an AI for your enemy. You might copy/paste the AI of the original battle sometimes (for regular enemies mainly) but you can also use a very basic AI:

7-a) Function Main_Init
Add a line "InitObject" with the new enemy's entry for the first argument and 128, 129, 130 or 131 for the second (one that is not taken already). If you added more than once of the new enemy inside the enemy group, add more lines like these.
Example: I added 2 Abominations in a battle with 1 Adamantoise and so I added the two last "InitObject" lines
Code: [Select]

Function Main_Init
    InitObject( 1, 128 )
    InitObject( 2, 129 )
    InitObject( 2, 130 )
    return


7-b) Add a function of type 0 (Main) for your enemy's entry (right-click on the function list for that). Nothing absolutly required there so you can just write a single "return" and parse.
Example: I let this example so you don't forget to add a main function nor a "return" line.
Code: [Select]

Function Abomination_Init
    return


7-c) Add a function of type 5 (ATB).
You're not forced to make an AI as complicated as the ones the game has. You can go with something as simple as a "GetRandom" for selecting the attack and basic SV_Target selection.
Example: My Abomination has two different attacks: Silent Slap which is single-target and Fira which is Multi-target. I make it so Silent Slap is used 2/3 of the time and Fira the remaining third.
Code: [Select]

Function Abomination_ATB
    if ( GetRandom % 3 ) {
        set SV_Target = RandomInTeam(SV_PlayerTeam)
        Attack( 4 )
        return
    }
    set SV_Target = SV_PlayerTeam
    Attack( 5 )
    return


7-d) Counter, CounterEx, Loop and Death functions are optionnal.

i did number 1 fine about adding the enemy, i did number 2 fine, but the other stuff i do not understand very well and i tried your very old ff9 steam mod, but it froze at the title screen and nothing happen and when i tried to open up your very old ff9 steam mod on hades it crashed it each time
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-10 11:10:59
Tirlititi just want/need to ask you an interesting question.. What's the best way to add/replace sounds??? I have not seen a tutorial about it  ;D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-03-10 12:50:11
You can use the Unity Assets Viewer and open the archives p0data61, p0data62 or p0data63: it's the archives containing the sounds and musics.
Right-click on the sound/music you want to replace and export it. It should convert it to a readable OGG file. Replace that file (where it was exported) by another OGG file and then, in the UAV, right-click on the sound/music and import it back.

You should be able to add a new music/sound, but it requires more work: listing it in a soundmetadata.txt (in the archive resources.assets) and making the source code use it (using dnSpy to modify the Assembly-CSharp.dll).

@Zara9: I can't help you; I don't know what you are doing (and so what you are doing wrong).
There is a .hws example in the description I linked in my last message. Have you tried it?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-12 13:16:28
Great, thanks!

I've asked you about adding sound because i'm interested on adding voice to characters in battle for make something like "Opera Omnia" what do you think? It' too hard?

And tell me where I have to go exactly in DnSpy for making the source code?

ps: talking about sounds, is there a way to fix the reflex SFX (maybe adding another sound, instead of the sound of the magic is using..)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-03-13 11:46:48
Tirlititi just want/need to ask you an interesting question.. What's the best way to add/replace sounds??? I have not seen a tutorial about it  ;D

Be weary! Some sounds ignore the pitch and frequency set in Sdlib.dll! What you initially replace as say 44100hz can be played at frequency 22050hz in game! I still haven't understood this doing.

Great, thanks!

I've asked you about adding sound because i'm interested on adding voice to characters in battle for make something like "Opera Omnia" what do you think? It' too hard?

And tell me where I have to go exactly in DnSpy for making the source code?

ps: talking about sounds, is there a way to fix the reflex SFX (maybe adding another sound, instead of the sound of the magic is using..)

Sounds good to me!
On terms of difficult, well, way back when when I attempted to add assets for Voice line in FF9 TZA, I too had to add those assets with Unity Asset Viewer, and later work the source to make it use it. I didn't get successful with that attempt. IIRC, even when I added the assets in the p0data61-63.bin archives, updated soundeffectmetadata.txt and added the necessary functions in Assembly CSharp.dll, the audio still refused to play. I then settled with using some UNUSED sounds of the game for the voice lines. Just so one could still archive their ultimate goal whilst keeping everything else intact.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-13 20:20:45
Be weary! Some sounds ignore the pitch and frequency set in Sdlib.dll! What you initially replace as say 44100hz can be played at frequency 22050hz in game! I still haven't understood this doing.

Sounds good to me!
On terms of difficult, well, way back when when I attempted to add assets for Voice line in FF9 TZA, I too had to add those assets with Unity Asset Viewer, and later work the source to make it use it. I didn't get successful with that attempt. IIRC, even when I added the assets in the p0data61-63.bin archives, updated soundeffectmetadata.txt and added the necessary functions in Assembly CSharp.dll, the audio still refused to play. I then settled with using some UNUSED sounds of the game for the voice lines. Just so one could still archive their ultimate goal whilst keeping everything else intact.

Great, thanks for the reply Incinerator!  You know I've got this idea thanks to your FF9 TZA!  I've seen you used the voices from FFXII so I said..WOW! Maybe I can give a shot  :evil:


Can I ask you now two questions?

First of all..what are exactly the unused sounds? How can i recognize them?
And second...how did you put the sound to play exactly in the instant when, for example, a character die, or attack? I never tried something like this before :roll:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-03-14 21:35:45
Great, thanks for the reply Incinerator!  You know I've got this idea thanks to your FF9 TZA!  I've seen you used the voices from FFXII so I said..WOW! Maybe I can give a shot  :evil:


Can I ask you now two questions?

First of all..what are exactly the unused sounds? How can I recognize them?
And second...how did you put the sound to play exactly in the instant when, for example, a character die, or attack? I never tried something like this before :roll:

Some of them from FFXII, (iirc fran for Freya and Balthier for Zach) the rest from some old colleagues.  8-)

The recent version of HW should identify Unknown Sounds in the Unity assets Viewer as much 37c does. I've only done when characters are KO'd, attacking was buggy for me.
I still have my notes from Tirlititi from then, I knew I kept it for a reason when porting Type-0!

Ah, sorry, my bad !
I've misread the engine code ; I thought that "SetEnforceHP0" was executed everytime a fighter dies.
So, "SetEnforceHP0" is executed in most situations, except for the most frequent: when a character dies because of damage and that its death animation is not delayed or canceled for some reason (when you attack yourself, the character doesn't do its "Death" animation right there because it's already doing its "Attack" animations).

I would say to keep the code in "SetEnforceHP0" but also add it in another place: "btl_para::SetDamage".
At the end of the method, you have something like this:
Code: [Select]
btl.fig = (short)damage;
if (dmg_mot != 0)
{
btl_mot.SetDamageMotion(btl);
}
else if (btl.cur.hp == 0)
{
btl_calc.SetEnforceHP0(btl);
}
Add the lines in the first of alternatives:
Code: [Select]
btl.fig = (short)damage;
if (dmg_mot != 0)
{
btl_mot.SetDamageMotion(btl);
if (btl_util.getPlayerPtr(btl).info.serial_no == 0 || btl_util.getPlayerPtr(btl).info.serial_no == 1)
btl_util.SetBattleSfx(btl, ZIDANE_SOUND_ID, 127);
else if (btl_util.getPlayerPtr(btl).info.serial_no == 2)
btl_util.SetBattleSfx(btl, VIVI_SOUND_ID, 127);
// etc...
}
else if (btl.cur.hp == 0)
{
btl_calc.SetEnforceHP0(btl);
}

PS. : The way it compiled it in dnSpy is normal and perfectly fine. Even though it's not exactly the same C# code as you wrote, it is equivalent and leads to exactly the same CIL code.

Do this and now it should be finally ok:
Code: [Select]
btl.fig = (short)damage;
if (dmg_mot != 0)
{
btl_mot.SetDamageMotion(btl);
if ((btl.cur.hp == 0) && (btl.bi.player != 0) {
if (btl_util.getPlayerPtr(btl).info.serial_no == 0 || btl_util.getPlayerPtr(btl).info.serial_no == 1)
btl_util.SetBattleSfx(btl, ZIDANE_SOUND_ID, 127);
else if (btl_util.getPlayerPtr(btl).info.serial_no == 2)
btl_util.SetBattleSfx(btl, VIVI_SOUND_ID, 127);
// etc...
}
}
else if (btl.cur.hp == 0)
{
btl_calc.SetEnforceHP0(btl);
}

Really, I'm sorry, I got confused because there is not a single piece of code that is executed for sure when a character dies, and you have to add these lines in two different places (SetEnforceHP0 and SetDamage) that have different conditions to trigger.

I didn't do any more tests for the model importer. I've just decided to let the text auto-translation feature for the release after the next one because it'll take some time. I have a couple of things to fix for the text editing feature, then I go back to model exporter/importer to see what's wrong and then I release the next version of HW.

I really hope that the sound code works fine this time ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-15 15:24:13
Thanks alot Incinerator!I'll give a try right now!!! :-D

It's buggy,huh? So no way for adding sound on, for example, spells and victories? (the second one is interesting...because there is to consider a way to not play the sound of every character in the same time but only for the last one who "defeated")

Hope you understand what I mean..sorry for the bad english ^^''

UPDATE:

Uhm...where I have to work exactly? On CIL code?  ???
And the sound ID is in the document "Soudeffectmetadata" right?

Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-03-15 20:43:40
Thanks alot Incinerator!I'll give a try right now!!! :-D

It's buggy,huh? So no way for adding sound on, for example, spells and victories? (the second one is interesting...because there is to consider a way to not play the sound of every character in the same time but only for the last one who "defeated")

I never got adding sounds to work in my scenarios, but it's likely very workable.

UPDATE:

Uhm...where I have to work exactly? On CIL code?  ???
And the sound ID is in the document "Soudeffectmetadata" right?

Use dnspy for this one, editing it in C#. And you can find the relative Sound ID you replace in archive p0data62.bin/p0data63.bin in the Unity Asset Viewer.
Yes such ID can be found in Soundeffectmetadata.txt.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-16 14:08:15
Great, thanks for everything!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: TheHobgoblin on 2019-03-16 14:49:49
Hello! I am a first time poster here, I was hoping I could seek some help on the mod I would like to make to the game.

I am a long-time fan of the Final Fantasy series and played Final Fantasy 9 when it first came out, but I lost my original CDs ages ago.

Anyway, I recalled being disappointed in certain aspects of the game when I played through it ages ago. Only recently did I find that it made it to PC and that there was a robust game editor for it. So I figured I could make the changes I wanted.

Now, I have some experience with altering Final Fantasy games. I played through Final Fantasy 6 while keeping Biggs as an party member, turning him into a Dragoon and altering his stats. And did this without replacing any other character, though it required I accept that I had to keep track of his current stats and keep remaking him and re-making him each time he got over-written by another character and readding him to the party as several points during the World of Balance (wasn't as much of an issue in World of Ruin).

I learned quite a bit about how Final Fantasy games handled their data from this experience-- and from what I have found digging through Hades Workshop so far, it seems quite similar.

I started by grabbing the Alternate Fantasy mod as according to its description it restored lost content, made fixes and allowed Beatrix to be a more fully realized character.

There are generally two things I wanted to do
1) Make it so that Zidane doesn't have to be in the party at all times and so I can use other characters more

I already found the guide on how to do that and implemented it.

2) Turn Marcus into a more fully realized character.

I don't know why, but I really liked the design of the character. And I knew from years ago that it was impossible to get him back once he leaves because his character slot gets over-written by Eiko.

But going by Final Fantasy VI, there should be 16 character slots since the game is written in binary and it should be defined by 0-F.

Anyway-- foolishly thinking this wasn't going to be an issue, I dived right in-- changed up the stats for all characters so that they had the same amount of points and were more similar to their versions in the mobile game Final Fantasy Record Keeper (just made them up for Blank and Cinna as I had no intention of using them anyway), and examining further, I found that I could assign him a list of learnable abilities-- which I quickly did, using Zidane as I base and keeping all abilities he had in common with Steiner, Freya and Amarant-- then creating new abilities.

The Alternate Fantasy started with a couple, but I created 8 new abilities based on him in Final Fantasy Record Keeper (and 2 powerful abilities to Beatrix).

I ran into my first problem when I went to add all of these abilities to the Banditry command and hit the error "You cannot add spells to the list anymore. Maybe you can try to remove spells elsewhere or link commands together to increase the limit here"

That's when I realized that for as easy as this tool was to use, perhaps it wasn't as robust as I was hoping.
Although I am wondering if maybe the easiest way to get around this is to just assign all 3 White Mages a single "White Mage" command set that has the full list of abilities and the characters just need to learn the exclusive ones. Since there will be a few abilities that each of them won't learn, I guess those will either appear blank or grayed out for them. Maybe I can do that if I decide to add Blank to the game.

Anyway, I moved stuff around, parsed things down, made all SFX into a single command set which has been assigned to all of the Tantalus's characters alternate ability sets, removed a few of the miscellaneous spells from seemingly unused other sets and just barely squeezed it down.

I also put the ability to learn Marcus's new abilities onto appropriate weapons that he can use (and the same for Beatrix's new abilities).
If anyone is curious, the abilities I created are Toxic Slash (Non-Elemental Magic Weapon attack that poisons), Wind Slash (Air Elemental Magic Weapon Attack), Flurry (Physical attack that hits all enemies), Hype Up (Hastes the whole party), Poison Impulse (Powerful Physical Wind Elemental Attack that hits and poisons all enemies), as well as the Magic Break and Armor Break from Sword Art and Zidane's "What's That!?!" skill.
Everything else I had him learn is similar to Zidane except I switched out Chemist for HP +10% and Protect Girls with Cover.

The extra abilities I gave to Beatrix are Rose of May which casts Protect on the whole party and Knight's Protector which is a Powerful Physical/Holy Attack that damages all enemies.


Anyway, the next step would be to find a point in the game in which he can enter the party and as I play through the games, find appropriate scenes where he should appear and have dialogue (likely based on where Quina and Amarant appear) and then add him to the game script in those locations as I play through it.

But the problem is that I have looked through this thread and on guides and everything says "To switch out Eiko for Marcus"-- but that's not what I want to do at all. I don't want to get rid of Eiko, I just want to add an additional option.


From my experience with the Final Fantasy XI editing, I was under the impression that the reason for Eiko over-writing Marcus was that the Marcus actor data was written to a particular character slot and then the game accidentally didn't write all her data which is why she inherited his stats.

So within the game code I would think
0 - Zidane
1 - Vivi
2 - Garnet
3 - Steiner
4 - Freya
5 - Cinna/Quina
6 - Marcus/Eiko
7 - Blank/Amarant
8 - Beatrix

But we aren't on a PSX anymore, there is no need to save memory by over-writing the characters.
So why not simply go into the game script and tell the game to write Marcus's data as character 9?
Then when the game script deals with him, change that so it knows to deal with character 9 instead of character 6.
I expect I will also have to tell the menu that there even is a character 9 so that it will know to allow me to scroll there and select the character.

I can find the scripts that allow Amarant and Quina to become available in the party menus, so I imagine I can copy that model.

But, then again, I have already ran into what feels like an artificial limit with the command menus. I get why the game is limited to only 255 items, but I am not sure why I can't assign a different number to a temporary character within the script so that no over-writing occurs.

I would have entirely given up hope except on one of the boards I saw that one could use Memoria and with a simple ini command you can "enable all characters" and a screenshot that shows Beatrix, Cinna, Marcus and Blank in the same party. However, Memoria isn't compatible with anything I have done so far nor the Alternate Fantasy mod nor does it looks like editing the game script is as easy as it is in Hades Workshop-- so I am hoping there is a way to do what I want to do using this program.

I have also read that if I play the game as I have now modded it and allow Marcus to learn the abilities I have given him, that Eiko is likely to inherit those abilities?
Also, there are special things I need to do so that he can Trance (and not crash the game)?

I will keep looking through the threads, but if anyone can point me to the code snippets I will need to use with indication which scene's scripts I need to edit to get the result I want, I would greatly appreciate it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-17 19:01:23
Ehy, forgive me for askin...I've tried to solve by myself but I'm really stuck in this stupid problem and I'm sure that if you'll help me I'll solve it one time forever.

So, now I've got Blank in this "cutscene" ..and I'm playing the character on the Field (250) , how do I move to another field from Region8_Range? Which condition I have to put to make it works with Blank too? Again, I've tried my best but I seriously don't get how to do because for a reason or another I'm still messing with something  :roll:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-03-19 19:48:22
@ToraCarol: I told you to disable the line "InitRegion( 8, 0 )" from the "Main_Init" function because I thought you wanted to make a cutscene (not a playable sequence). Put that line out of the "if" block if you want the region to work even with Blank.
Note that you'll get back to have Zidane as soon as you leave that field. In order to keep Blank along the fields, you need to edit the following fields as well.

Making a cutscene/playable sequence is not easy at all in any case. Make sure you understand the changes I suggest and if you don't, ask why I suggested them. It may be a slow learning process but you'll eventually understand scripts and know what to do.

@TheHobgoblin: All your problems come from the fact that the Steam version is basically a port of the old PSX version to more modern machines. The source code of the PSX version has been turned to a C# code with only the strict minimal changes required (how they handle images, 3D models, menus...). The basis of the code's structures (and a lot of the game's raw data) is a copy of how things worked on the PSX version.

So, the things you want to do are possible but not with Hades Workshop. I think that Memoria's "enable all characters" option doesn't allow to have both Marcus and Eiko in the team at the same time. The list of characters you printed is accurate and that's what needs to be changed if you want no restriction.

Also, I warn you that editing the game's UI (the way the menus look) is something on which we had only partial results. I'm not sure of what could be the resulting display of the "Choose your party's characters" menu after all the changes.

You need to edit the game's source code. You may do it with the devs' version of Memoria but also with a generic tool that is called dnSpy (https://github.com/0xd4d/dnSpy/releases) (if you work on dnSpy after doing the changes in HW, you can use both as I did for Alternate Fantasy).

In dnSpy, open the DLL of the game "Assembly-CSharp.dll". You'll see the list of classes (a structure of data) and their methods (an operation related to that class). If you know C# programing, it will be much easier (it's C# both for Memoria and dnSpy) but a few things can be done quite simply.

1) The total number of spells in the commands' sub-menus.
This is can be modified in the class "rdata" (in dnSpy, that's in the folder "{} -").
You should already see a bit how command datas are initialized in that class. That's exactly the part of the source code that is modified by HW when you edit some commands or stats (except there you'll mostly deal with numbers).

The error "You cannot add spells to the list anymore" refers to the value of "_FF9FAbil_ComAbil". Find where it is defined and "right-click -> edit the method/class" to change it.

It works like this: "_FF9FAbil_ComAbil" is the list of all the spells that are inside a command menu (side note: the terminology between HW and the C# code can differ as I've started developping HW for the PSX version without any access to the source code ; the "spells" of HW are called "Abil" or "Active Abilities" in the C# code). On a non-modded file, it starts with Dagger's Summons (49 is Shiva, 51 is Ifrit...) and continues with Dagger's White Magics (1, 2, 3...).
Simply add a few entries at the end of the list with the spell IDs you want to give.

A bit above that, you have the initialization of "_FF9FAbil_ComData". It's all the commands in the same order as what is displayed in HW.
Dagger's White Magic, for instance, is initialized like this:
Code: [Select]
new rdata.FF9COMMAND(174, 458, 8301, 1, 16, 8UL),The first two numbers can be ignored (it's a leftover of the text hexadecimal position from the PSX's version).
The third number, if I recall correctly, is a code for the help dialog's width and height. I think it is also ignored (the bubble size should be auto-computed on the fly).
The 4th number is the type of command. Here it is a command containing several spells (1).
The 5th number is the number of spells inside that command.
The last number is the starting point of the commands in the "_FF9FAbil_ComAbil" list. Here it starts at the 8th spells (the 1, 2, 3... from before).

If you want to use the spells that you added at the end of the list, put 192 as that last number.

2) Separating the slots of Eiko and Marcus (and Cinna/Quina and Blank/Amarant).
I'll edit this message and write the way to do it later...
Most of the things involved should be in the class "ff9play". The chararcters have several kinds of IDs and the one adding the problem is the "slot_id" or "slot_no". One has to add more "PLAYER_INFO" in the method "ff9play::FF9Play_New" and change all the conversion methods "ff9play::FF9Play_GetCharID2"... There are surely a bunch of other things to do and they need to be done smartly if one doesn't want to change all the field scripts related to Cinna/Blank/Marcus as temporary player characters...

Note: The field scripts are not part of the "Assembly-CSharp.dll" datas but are inside the archive "p0data7.bin" so you can still add HW modifications on top of dnSpy modifications.
If you try to open the modded "Assembly-CSharp.dll" with HW, it will surely crash though, as "rdata" is a key class for HW and it is assumed to have a very specific pattern (plus the total number of spells is hard-coded in HW's source).


Sorry for the late answer.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-03-19 21:03:58
Sooo that's it! Now I get it..stupid me... stupid mistakes..it was so easy!!! Thank you so much! Really!!

Man you're totally right, I guess I need to :oops:
Ok..so lets start with questions right now..so.. I understand that to have Blank to work I have to use that "General_FieldEntrance = 10" ( and "General_FieldEntrance != 10"  is the one who prevents the rest from appearing while I'm using Blank.. I got it man  8) ), so..for the Plant Brain one it was quite easy because there were already two case to work at...
For the other fields, instead, I guess I'll have to use also variables now... right??



Nevermind for this one, I solved in an easier way...! ;)

UPDATE:

Also I was wondering... how can I have a second character that follows the Main? I mean..like Beatrix and Steiner at Alexandria while they're fighting the "Mist Monsters"?

For example, at Burmecia I'd like to have Freya that follows Zidane in this case..is it possible?

UPDATE 2:

One last thing..if it's not too much for you Tirlititi x''D What about if I want to set a Victory pose? I mean.. Amarant does not make the "Victory Pose" until the end of Ipsen Castle. So, is there a way to enable anyway the victory pose?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: TheHobgoblin on 2019-03-20 07:41:03
2) Separating the slots of Eiko and Marcus (and Cinna/Quina and Blank/Amarant).
I'll edit this message and write the way to do it later...
Most of the things involved should be in the class "ff9play". The chararcters have several kinds of IDs and the one adding the problem is the "slot_id" or "slot_no". One has to add more "PLAYER_INFO" in the method "ff9play::FF9Play_New" and change all the conversion methods "ff9play::FF9Play_GetCharID2"... There are surely a bunch of other things to do and they need to be done smartly if one doesn't want to change all the field scripts related to Cinna/Blank/Marcus as temporary player characters...

Note: The field scripts are not part of the "Assembly-CSharp.dll" datas but are inside the archive "p0data7.bin" so you can still add HW modifications on top of dnSpy modifications.
If you try to open the modded "Assembly-CSharp.dll" with HW, it will surely crash though, as "rdata" is a key class for HW and it is assumed to have a very specific pattern (plus the total number of spells is hard-coded in HW's source).


Sorry for the late answer.

Well, it seems like Hades Workshop is better for editing the field scripts, and I am not having too much trouble with the command scripts-- even if I were to make a unique command for Blank afterwards, I could always just have Eiko, Beatrix and Dagger all use the same White Magic set instead of each having their own which would free up the necessary space.

But it sounds like what I will want to do is to have two versions of the Assembly-CSharp.dll, an original version I use for script editing and a second version that separates the character slots that I would use when actually playing the game.

Your answers are extremely helpful! Thank you very much.

-----------------------

A little update. I have searched through the DLL and replaced every instance that sets the max slots and max party size from 9 or 8 to 12. I found those values in FF9PARTY_INFO and PLAYER and FF9Shop and PartySettingUI. I also found and changed boolan values nearby those that were set at 8 or 9 to 12 since they seemed to be dictating this too.

Within the FF9 Play I added additional slots in FF9Dbg_SetCharacter, GetCharID2, GetCharID3, Play_Init, and Play_New.

I also wrote in Delete, GetAvgLevel, and SetParty that there are 12 slots to look at rather than 9.

The game starts just fine with all of these changes.

But, oddly enough, and I can't understand why, but if I change the value for max slot ID in FF9Play_Add or FF9Play_Init, then the game refuses to start. It opens up with the FF9 Logo and won't go any further. It doesn't even go to the main menu. I can go back in and change these values back to 9 and it starts up just fine.

What could I possibly be missing here? Because I feel like for the game scripts to work, that FF9Play_Add needs to not ignore slots that are above 9 and the Init needs to load up those additional slots. But even after changing everything else in the DLL, if I change either of those two values then the game freezes immediately. It doesn't even properly crash-- it just hangs on the logo.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-03-24 03:47:11
UPDATE:

Also I was wondering... how can I have a second character that follows the Main? I mean..like Beatrix and Steiner at Alexandria while they're fighting the "Mist Monsters"?

For example, at Burmecia I'd like to have Freya that follows Zidane in this case..is it possible?

Attempted this once before, never got it too work. Not sure how to mimic this in other scenarios, I would like to know as well Tirlititi if any way to do it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: gledson999 on 2019-04-02 05:16:41
@Tirlititi It's possible expand this box from menu?
I'm translating and i want to expand this box in horizontal to fit the rest of text.

(https://puu.sh/D8S1u.jpg)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Loseless on 2019-05-03 17:08:24
Hello, people!

I added several items to stores in the game, but while they appear listed in their respective stores in Hades, the items only appear up until the number of original items on that store. For instance: Lindblum weapon store sells 17 items during disc 1. I added several of them and they only appear until the number 17 on the list. All items after that do not show at all. I imagine this might be related to the number of items visible or listed, but I found no option on Hades to extend the list.

Anyone has any ideas?


Another thing: does anybody know how to make it so that the Beatrix fights have no time/turn limit, so that you can only end them by depleting her HP and triggering her final move?

Thanks in advance
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Rikku on 2019-05-05 09:10:24
Hello, people!

Is it possible to use this editor on Android, or maybe Switch ?

It could be a good thing using Unleashed or Alternate Fantasy (i don´t know which is better) on Android.

Thanks.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-05-06 05:39:16
Hello, people!

Is it possible to use this editor on Android, or maybe Switch ?

It could be a good thing using Unleashed or Alternate Fantasy (i don´t know which is better) on Android.

Thanks.

No, sorry!. Only for PSX & PC [Steam]!.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Loseless on 2019-05-09 08:39:05
Hello, people!

I added several items to stores in the game, but while they appear listed in their respective stores in Hades, the items only appear up until the number of original items on that store. For instance: Lindblum weapon store sells 17 items during disc 1. I added several of them and they only appear until the number 17 on the list. All items after that do not show at all. I imagine this might be related to the number of items visible or listed, but I found no option on Hades to extend the list.

Anyone has any ideas?


Another thing: does anybody know how to make it so that the Beatrix fights have no time/turn limit, so that you can only end them by depleting her HP and triggering her final move?

Thanks in advance

Guys, anyone, please? :(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2019-05-09 21:16:39
Another thing: does anybody know how to make it so that the Beatrix fights have no time/turn limit, so that you can only end them by depleting her HP and triggering her final move?

The turn count is a part of Beatrix' AI script. In her ATB script, at the beginning, you have this piece of code:

Code: [Select]
   
if ( VAR_LocUInt8_32 < 10 ) {
        set VAR_LocUInt8_32++
    } else {
        set VAR_LocUInt8_31 = 1
    }

The variable 'VAR_LocUInt8_32' represents the number of turns that need to pass for Beatrix to use her finishing move. It increases by 1 each turn, and once it reaches 10 it activates a different variable 'VAR_LocUInt8_31', the one responsible for telling Beatrix to use Stock Break / Climhazzard next. Now you can either change the value of '<10' that the variable  'VAR_LocUInt8_32' is comparing to to any number of turns you like, OR simply delete this portion of her script altogether. That way, the HP condition remains the only condition triggering her final move.

As for the shop problem, no idea, I've added items to shops as well and it seemed to work as intended. But then I didn't pay attention to the total number of items in a shop, so I don't know if it exceeded a certain number or not.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Loseless on 2019-05-09 22:33:42
Thanks!

I tested in several stores and is as I initially thought: there's a max number of items shown that is equivalent to the store's original number of items. Adding more items after that will result in them not showing up. I guess there is a variable somewhere that controls the number of items visible in each store. Maybe Tirlititi can have a look at this in the future.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-10 14:38:10
Guys, I want to add a new battle in the "You're not alone Event" but I don't know how to start a battle without switch to field-battle music..how can I solve? Thanks for the help
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2019-05-11 10:11:13
Quote
Guys, I want to add a new battle in the "You're not alone Event" but I don't know how to start a battle without switch to field-battle music..how can I solve? Thanks for the help

What a coincidence, I did exactly the same for my mod last year! I've added a Malboro battle in the first screen that you're gonna fight with Vivi and Eiko in the party (always found it kinda sad/wierd that those two were left out of this string of battles in the vanilla game).

Here's an example from me, from the field 'Pandemonium, Laboratory', in the Main_Loop script. At the beginning of the script, right after the 'General_FieldEntrance = 65535', you have to add this code to add the party members that you want to have for the upcoming battle:

Quote
        set Setting_PartyReserve = 255
        SetPartyReserve( Setting_PartyReserve )
        RemoveParty( 0 )
        RemoveParty( 1 )
        RemoveParty( 2 )
        RemoveParty( 3 )
        RemoveParty( 4 )
        RemoveParty( 5 )
        RemoveParty( 9 )
        RemoveParty( 6 )
        RemoveParty( 10 )
        RemoveParty( 7 )
        RemoveParty( 11 )
        RemoveParty( 8 )
        set VAR_GlobBool_147 = AddParty(1)
        set VAR_GlobBool_147 = AddParty(0)
        set VAR_GlobBool_147 = AddParty(6)
        set VAR_GlobBool_147 = AddParty(65535)

You can simply copy/paste this piece of code from one of the other Pandemonium fields of the 'You're not alone' sequence and just change the 'set VAR_GlobBool_147 = AddParty()' to any party members you like, those in my example are Zidane (0), Vivi (1) and Eiko (6), as I said.

Next, the fight itself has to be added in the script of the respective field file at an appropriate point. In my case, it's also in the Main_Loop function:

Quote
RunAnimationEx( 7, 910 )
        Wait( 8 )
        WindowSyncEx( 7, 0, 128, 249 )
        Wait( 60 )
        MoveCamera( 160, 172, 60, 0 )
        Wait( 70 )
        Battle( 0, 897 )

        Wait( 30 )
        RunScript( 2, 12, 28 )
        Wait( 20 )
        WindowSyncEx( 12, 0, 128, 250 )
        RunScript( 2, 7, 28 )
        RunScript( 2, 6, 29 )
        MoveCamera( 160, 272, 100, 0 )

The two bold lines were added by me, in this case the battle triggers at the point after Vivi says "Oh, come on!", and Zidane takes a few steps to the south, and before Eiko says: "There he goes, being the tough guy... Look, Zidane... It's not just about you."

Lastly, the music and victory pose can be checked with the flags in the enemy formation that you want. Just check 'Don't stop music', 'No Victory animations' and 'Can't flee'.

Aaaaand... that should just about be it, if I didn't forget anything.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-12 13:14:47
What a coincidence, I did exactly the same for my mod last year! I've added a Malboro battle in the first screen that you're gonna fight with Vivi and Eiko in the party (always found it kinda sad/wierd that those two were left out of this string of battles in the vanilla game).


Ahahah that's so hilarious, Kefka! I did the same, Eiko and Vivi fight against Malboro with Zidane! Plus a little extra dialog before the battle

So I did everything like you said (the battle is 896 instead of 897 but..whatever), I've also checked "don't stop music", "can't flee" etc etc

But I don't know why, for some reason it keeps start the music battle... it's weird! :| I've also replaced the p0data2 and the AssemblyCSharp..so I really don't know! I've checked once, twice..I can check again..maybe I'm missing something but...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Kefka on 2019-05-12 19:36:47
Quote
But I don't know why, for some reason it keeps start the music battle... it's weird! :| I've also replaced the p0data2 and the AssemblyCSharp..so I really don't know! I've checked once, twice..I can check again..maybe I'm missing something but...

Ah, I knew I forgot something! A few pages back I was asking tirlititi about changing the music used in certain battle formations, and this was his response:

No, it's determined in a couple of .txt files of the "resources.assets" archive. The files are called "BtlEncountBGMMetaData.txt" (for battles on the field) and "WldBtlEncountBGMMetaData.txt" (for battles on the map).

The files present like this :
Code: [Select]
{
  "ID of Field": {
    "ID of Battle in the Field": "ID of Battle Music",
    ...
  },
  ...
}
Battles have the music ID "0" (for normal encounters), "35" (for bosses) and "111" (for Hunter's Chance). Some battles are not registered in these files, when they don't stop the music played in the field (the "Don't Stop Music" battle flag is also checked for them in the "Enemy" panel).

Now what you have to do is open Hades Workshop, but instead of opening the FF9_Launcher the normal way, go to Tools -> Unity Assets Viewer, and open the Launcher there. Then go to Archive -> Shared Assets -> resources. Now scroll until you find the "BtlEncountBGMMetaData.txt" and export it (a text file will be generated in the HadesWorkshopAssets folder). Open this text file, the format is the one described by tirlititi. The list of field IDs is the same as in Hades Workshop when the fields are NOT sorted. In our case, Pandemonium laboratory is field ID 2705. There you will see that battle formation 896 is listed with a "0", which means normal battle theme. You'll have to delete the "896": "0" entry from this field, save, and then import this text file back into the Unity Assets Viewer by right-clicking the "BtlEncountBGMMetaData.txt" and chosing 'Import Selection'.

That should do the trick. Keep in mind that this will keep the field music playing at any time battle formation 896 is triggered, so maybe remove it as a random encounter from that location.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Loseless on 2019-05-12 20:59:56
Hey, guys! Maybe someone has experience regarding a particular idea of mine:

Every character has an ability list. I know how to swap abilities for others, but not all characters have the same number of abilities. So is therefore possible to give or add abilities to the list. What I want to know is how to do this. I want characters to learn abilities they normally don't have access to. I guess this requires some CIL code editing, but I haven't been able to find where it is.

Any thoughts?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-13 14:26:01
Ah, I knew I forgot something! A few pages back I was asking tirlititi about changing the music used in certain battle formations, and this was his response:

Now what you have to do is open Hades Workshop, but instead of opening the FF9_Launcher the normal way, go to Tools -> Unity Assets Viewer, and open the Launcher there. Then go to Archive -> Shared Assets -> resources. Now scroll until you find the "BtlEncountBGMMetaData.txt" and export it (a text file will be generated in the HadesWorkshopAssets folder). Open this text file, the format is the one described by tirlititi. The list of field IDs is the same as in Hades Workshop when the fields are NOT sorted. In our case, Pandemonium laboratory is field ID 2705. There you will see that battle formation 896 is listed with a "0", which means normal battle theme. You'll have to delete the "896": "0" entry from this field, save, and then import this text file back into the Unity Assets Viewer by right-clicking the "BtlEncountBGMMetaData.txt" and chosing 'Import Selection'.

That should do the trick. Keep in mind that this will keep the field music playing at any time battle formation 896 is triggered, so maybe remove it as a random encounter from that location.

It works!! Thanks alot!!!  :-D :-D


Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: eugene9 on 2019-05-13 20:45:31
Hello!! Is there any way of changing Zidane's casting animation for Kuja's, Freya's, Vivi's or Garnet's? If so, could you tell me how I could do that, pls?
Thanks in advance  :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-14 11:57:40
I have also another question if anyone can help.. there's somebody who knows in battle, how to make a model closing their eyes when KO and not look wierd/"creepy" like this?? Unfortunately this happens also when they're sleeping, faint etc etc on the normal field..but..why?

Spoiler: show
(https://i.imgur.com/kYxNKx4.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-05-14 21:10:27
I have also another question if anyone can help.. there's somebody who knows in battle, how to make a model closing their eyes when KO and not look wierd/"creepy" like this?? Unfortunately this happens also when they're sleeping, faint etc etc on the normal field..but..why?

Spoiler: show
(https://i.imgur.com/kYxNKx4.png)

UV texture errors from upscaled NPCs textures and the like of p0data4.bin!. High res textures damage texture animation + UV on some objects for unknown reasons; I have the same issue with my model's 4096x4096 textures. Have not yet found a fix for this yet!.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-15 14:39:21
UV texture errors from upscaled NPCs textures and the like of p0data4.bin!. High res textures damage texture animation + UV on some objects for unknown reasons; I have the same issue with my model's 4096x4096 textures. Have not yet found a fix for this yet!.

Understand..thank you for the reply, Incinerator!  ;)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-15 18:02:40
Guys sorry..I have another problem, and I hope someone of you can help me. Now I've added extra dialogs on Burmecia field, before Cleyra..but for some reason, when it goes on World Map it happens something like..that?

Spoiler: show
(https://i.imgur.com/TlNdfaz.png)


So what happened? What's the problem?

That's the code i modified

Code: [Select]
Function Freya_Loop
    switchex 6 ( VAR_GlobUInt8_24 ) {
    case 0:
        EnableHeadFocus( 0 )
        SetStandAnimation( 8385 )
        Wait( 30 )
        set VAR_GlobUInt8_26--
        while ( VAR_GlobUInt8_26 > 0 ) {
            set VAR_GlobBool_230 = 1
            Wait( 1 )
        }
        while ( VAR_GlobBool_230 == 1 ) {
            Wait( 1 )
        }
        set VAR_GlobBool_231 = 1
        break
    case 1:
        RunAnimation( 8387 )
        WaitAnimation(  )
        SetStandAnimation( 6484 )
        WindowSync( 1, 128, 302 )
        set VAR_GlobBool_231 = 1
        break
    case 5:
        WindowSync( 1, 128, 307 )
        set VAR_GlobBool_231 = 1
        break
    case 12:
        RunAnimation( 6482 )
        WaitAnimation(  )
        SetStandAnimation( 2556 )
        set VAR_GlobUInt8_26--
        while ( VAR_GlobUInt8_26 > 0 ) {
            set VAR_GlobBool_230 = 1
            Wait( 1 )
        }
        while ( VAR_GlobBool_230 == 1 ) {
            Wait( 1 )
        }
        set VAR_GlobBool_231 = 1
        break
    case 13:
        RunAnimation( 6489 )
        SetStandAnimation( 6635 )
        WindowAsync( 1, 128, 319 )
        WindowSync( 1, 128, 320 )
        WaitAnimation(  )
        RunAnimation( 6629 )
        SetStandAnimation( 2556 )
        set VAR_GlobBool_231 = 1
        break
    case 15:
        WaitAnimation(  )
        SetObjectFlags( 7 )
        SetPathing( 0 )
        SetWalkSpeed( 45 )
        TimedTurn( Angle(62969, 61115), 16 )
        WaitTurn(  )
        InitWalk(  )
        Walk( -2567, -4421 )
        SetDialogProgression( 0 )
        set Field_MusicVolume = 0
        RunSoundCode2( 34305, 0, 128, Field_MusicVolume )
        set VAR_GlobBool_167 = 0
        if ( 1 ) {
            set VAR_GlobBool_167 = 1
        }
        RunSoundCode2( 38401, 65535, 128, 0 )
        if ( VAR_GlobUInt8_17 == 255 ) {
            set Op66(( GetData_12 - 160 ), ( GetData_13 - 112 ))
        }



------I MODIFIED FROM HERE------



     0xA9( 250 )
        FadeFilter( 6, 64, 0, 255, 255, 255 )
        Wait( 65 )
        MoveInstantXZY( -1707, 0, -3264 )
        TurnInstant( 56 )
        Wait( 75 )
        WindowAsync( 0, 16, 336 )
        RaiseWindows(  )
        WaitWindow( 0 )
        Wait( 25 )
        0xA9( 250 )
        WindowAsync( 0, 16, 337 )
        RaiseWindows(  )
        WaitWindow( 0 )
        Wait( 25 )
        0xA9( 250 )
        WindowAsync( 0, 16, 338 )
        RaiseWindows(  )
        WaitWindow( 0 )
        Wait( 35 )
        set VAR_GlobBool_158 = 0
        if ( VAR_GlobBool_159 == 1 ) {
            DisableMove(  )
            if ( VAR_GlobBool_144 == 0 ) {
                DisableMenu(  )
            } else {
                Wait( 1 )
            }
        }


----------------TO HERE

        0x27( 127 )
        RunSoundCode1( 21761, 65535, 0 )
        RunSoundCode( 8448, 65535 )
        set VAR_GenInt24_64 = 246588L
        set VAR_GenInt16_67 = 64746
        set VAR_GenInt24_69 = 2147483647L
        set World_PlayerAngle = 248
        set General_FieldEntrance = 51
        set VARL_GenBool_753 = 1
        if ( General_ScenarioCounter >= 4600 ) {
            set VARL_GenBool_754 = 1
        }
        if ( VAR_GenUInt8_13 < 9 ) {
            set VAR_GenUInt8_13 = 3
        }
        RunSoundCode1( 20864, 1321, 0 )
        if ( VAR_GenUInt8_14 < 9 ) {
            set VAR_GenUInt8_14 = 3
        }
        RunSoundCode1( 20864, 1322, 0 )
        set General_ScenarioCounter
        set World_MusicVolume = 125
        switchex 2 ( General_FieldEntrance ) {
        case 65 ; 83:
            set World_WhiteTransition = 1
            break
        default:
            set World_WhiteTransition = 0
            break
        }
        if ( General_ScenarioCounter < 5990 ) {
            switch 67 ( General_FieldEntrance ) from 17 {
            case +0 ; +6 ; +7 ; +9 ; +10 ; +11 ; +16 ; +17 ; +21 ; +24 ; +27 ; +29 ; +34 ; +46 ; +47 ; +49 ; +66:
                WorldMap( 9000 )
                break
            case +18 ; +19 ; +25 ; +26 ; +28 ; +30 ; +31 ; +33:
                WorldMap( 9011 )
                break
            case +1 ; +12 ; +13 ; +20:
                WorldMap( 9010 )
                break
            case +50 ; +51 ; +52 ; +53 ; +54 ; +55 ; +56 ; +57 ; +58 ; +59 ; +60 ; +61:
                WorldMap( 9002 )
                break
            case +35:
                WorldMap( 9001 )
                break
            case +45:
                set General_FieldEntrance = 0
                WorldMap( 9009 )
                break
            }
        } else {
            if ( General_ScenarioCounter < 10400 ) {
                if ( ( General_ScenarioCounter >= 9615 ) && ( General_ScenarioCounter <= 9790 ) ) {
                    switchex 4 ( General_FieldEntrance ) {
                    case 7 ; 10 ; 2 ; 83:
                        WorldMap( 9005 )
                        break
                    }
                } else {
                    switch 84 ( General_FieldEntrance ) from 2 {
                    case +0 ; +2 ; +3 ; +4 ; +5 ; +7 ; +8 ; +11 ; +12 ; +13 ; +14 ; +15 ; +16 ; +17 ; +18 ; +19 ; +20 ; +21 ; +22 ; +23 ; +24 ; +25 ; +26 ; +27 ; +28 ; +29 ; +30 ; +31 ; +32 ; +33 ; +34 ; +35 ; +36 ; +37 ; +39 ; +40 ; +41 ; +42 ; +43 ; +44 ; +45 ; +46 ; +47 ; +48 ; +49 ; +54 ; +57 ; +61 ; +62 ; +77 ; +81:
                        WorldMap( 9003 )
                        break
                    case +51:
                        WorldMap( 9004 )
                        break
                    case +52:
                        WorldMap( 9005 )
                        break
                    case +53:
                        WorldMap( 9006 )
                        break
                    case +83:
                        WorldMap( 9012 )
                        break
                    case +60:
                        set General_FieldEntrance = 0
                        WorldMap( 9009 )
                        break
                    }
                }
            } else {
                if ( General_ScenarioCounter < 11090 ) {
                    switch 85 ( General_FieldEntrance ) from 1 {
                    case +0 ; +1 ; +2 ; +4 ; +5 ; +6 ; +7 ; +9 ; +10 ; +11 ; +12 ; +13 ; +14 ; +15 ; +16 ; +17 ; +19 ; +20 ; +21 ; +22 ; +23 ; +24 ; +25 ; +26 ; +27 ; +28 ; +29 ; +30 ; +31 ; +32 ; +33 ; +34 ; +35 ; +36 ; +37 ; +38 ; +39 ; +40 ; +41 ; +42 ; +43 ; +44 ; +45 ; +46 ; +47 ; +49 ; +50 ; +56 ; +59 ; +62 ; +63 ; +64 ; +79 ; +81 ; +82:
                        WorldMap( 9007 )
                        break
                    case +84:
                        WorldMap( 9012 )
                        break
                    case +61:
                        set General_FieldEntrance = 0
                        WorldMap( 9009 )
                        break
                    }
                } else {
                    switch 85 ( General_FieldEntrance ) from 1 {
                    case +0 ; +1 ; +4 ; +5 ; +6 ; +7 ; +9 ; +12 ; +13 ; +14 ; +15 ; +16 ; +17 ; +19 ; +20 ; +21 ; +22 ; +23 ; +24 ; +25 ; +26 ; +27 ; +28 ; +29 ; +30 ; +31 ; +32 ; +33 ; +34 ; +35 ; +36 ; +37 ; +38 ; +40 ; +41 ; +42 ; +43 ; +44 ; +45 ; +46 ; +47 ; +49 ; +50 ; +57 ; +60 ; +62 ; +63 ; +64 ; +80 ; +82:
                        WorldMap( 9008 )
                        break
                    case +84:
                        WorldMap( 9012 )
                        break
                    case +61:
                        set General_FieldEntrance = 0
                        WorldMap( 9009 )
                        break
                    }
                }
            }
        }
        set VAR_GlobBool_231 = 1
        break
    }
    Wait( 1 )
    loop
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-05-15 20:53:51
Guys sorry..I have another problem, and I hope someone of you can help me. Now I've added extra dialogs on Burmecia field, before Cleyra..but for some reason, when it goes on World Map it happens something like..that?

Spoiler: show
(https://i.imgur.com/TlNdfaz.png)


So what happened? What's the problem?

I've experienced this glitch on to many times!. Not sure what causes this to happen, but it certainly is affected by modifying or adding certain functions in certain fields of the game!. This happened also if done on Madain Sari Disc 2 after recruiting Amarant and heading to the Iifa Tree.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-16 12:17:37
Aw man..now how can I solve? I've tried to copypaste back the original code but it still happen and I really don't know what to do! :(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-16 21:50:18
About a character following another one, you should look at the script of Beatrix in Alexandria and inspire yourself from that.
The important code is this loop:
Code: [Select]
        while ( 1 ) {
            if ( Distance(GetEntryPosX(250), GetEntryPosY(250)) > 640 ) { // Entry 250 is the player's character
                while ( ( Distance(GetEntryPosX(250), GetEntryPosY(250)) > 500 ) && ( ( IsMovementEnabled == 1 ) || ( VAR_GlobUInt8_33 == 1 ) ) ) {
                    SetObjectFlags( 5 )
                    SetWalkSpeed( 45 )
                    if ( Distance(GetEntryPosX(250), GetEntryPosY(250)) > 1000 ) {
                        SetWalkSpeed( 60 )
                    }
                    InitWalk(  )
                    MakeAnimationLoop( 1 )
                    Walk( GetEntryPosX(250), GetEntryPosY(250) )
                }
                if ( IsMovementEnabled == 0 ) {
                    Wait( 1 )
                }
            } else {
                Wait( 10 )
                if ( ( Distance(GetEntryPosX(250), GetEntryPosY(250)) > 640 ) && ( ( IsMovementEnabled == 1 ) || ( VAR_GlobUInt8_33 == 1 ) ) ) {
                    TurnTowardObject( 250, 32 )
                    WaitTurn(  )
                }
            }
        }

About the victory pose, it's the script code 0xDB (I just learnt that).
"0xDB(0, 1)" enables the victory pose of Zidane.
"0xDB(0, 0)" disables the victory pose of Zidane.

I have to reinstall things to test for separating the slots of Eiko and Marcus. Too bad it's not working for you, TheHobgoblin, you seemed to do things pretty well.

About the menu's UI size, you can try to edit the C# source code of the menu and use something like that:
Code: [Select]
this.SubMenuPanel.transform.localScale = new Vector3(1.2f, 1.0f, 1.0f);This would go in the method "MainMenuUI::Awake" (at the beginning, that's fine). I am not sure if it will work though, as UI modding is not something I know a lot about (and some informations are stored in GameObject and Transform files in the archives level1 and level2). Try to play with the figures here if you see that it has an effect.

About the item limit in shops, I'm not sure of what is wrong... That might have been broken because of a Steam update a long time ago?
Anyway, you can change the sold items in shops by modifying the C# code (using dnSpy). It's the field "FF9/ff9buy::_FF9Buy_Data" (it consists of a list of item IDs either of maximum size 32 or ended by the null item 255).

About the Android version, there are a lot of things in common, provided that you can unpack the .obb archives (I don't remember how to do that). For instance, the "sharedassets" archives (yes, that's archives inside other archives... I don't chose the rules) is in the folder "assets\bin\Data" and the engine's source code is in "assets\bin\Data\Managed\Assembly-CSharp.dll".
There should also be "a0dataXXX.bin" equivalents of the Steam's "p0dataXXX.bin" somewhere... This prefix is "i" for iOS and I don't know if the PS4 and Switch versions have different formats.
The class "AssetManagerUtil" shows how different versions are handled. I don't think that the difference between the platforms are so big, but they may be non-trivial.
In any case, it would require some (a lot?) of work to mod the other versions, both for updating HW and for converting the non-PC games to suitable files.

About the list of abilities, all the characters have exactly the same number of (learnable spells + supporting abilities).
The only way to add more spells (= active abilities) without changing a lot of the game's engine is to remove supporting abilities to counter-balance. It's in the "Party -> Stats" panel.

About modifying the animations, you should try using the Unity Assets Viewer: it allows to export animated 3D models (most of them are in the archive p0data4). Unfortunatly, re-importing a modified 3D model bugs and is hardly working at all. However, for modifying the animations only, it should be working. Follow the tutorial there (http://forums.qhimm.com/index.php?topic=14315.msg255679#msg255679) and make sure that the option "Automatically Convert 3D Models -> Import Meshes/Materials" is disabled.

About the eyes animations (both for the characters and for the last battle's structure), it's a bugging feature of the Steam port. I don't know what happened but they apparently rewrote this part of the source code and it's not doing the same as the PSX version. I've no idea of how to fix it. There may also be a problem when the textures are upscaled, as Incinerator says (I've not done any test about that).

About the World Map bug, it's a bug of Hades Workshop, explained here (https://steamcommunity.com/app/377840/discussions/0/353915953249510749/?ctp=65#c1741100729953060489). Sorry about that. The good thing is that it is fairly easy to fix (your mod files are not corrupted or anything).

Sorry answering so late.
Thanks a lot for answering each other.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-16 22:05:10
Thank YOU for all the replies Tirlititi! Tomorrow I check

Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: eugene9 on 2019-05-17 00:55:14

About modifying the animations, you should try using the Unity Assets Viewer: it allows to export animated 3D models (most of them are in the archive p0data4). Unfortunatly, re-importing a modified 3D model bugs and is hardly working at all. However, for modifying the animations only, it should be working. Follow the tutorial there (http://forums.qhimm.com/index.php?topic=14315.msg255679#msg255679) and make sure that the option "Automatically Convert 3D Models -> Import Meshes/Materials" is disabled.


Thank you very much for all your help. But unfortunately, I'm very clumsy in terms of modding. I have tried to do all what your told me (and what I have read in your previous posts) but without success... If you don't mind, could you tell me, step by step, how I could change Zidane's battle animation like his pose, attack and casting by any other character's? I mean, a guide for slow learners like me to follow. Thanks in advance and sorry for being an annoyance.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-18 16:22:46
Thank YOU for all the replies Tirlititi! Tomorrow I check

Ok, the problem on World Map was solved..thank you so much!

Now I'm testing the "following character" thing on Burmesia and..seem to work perfectly! I have Freya that follows Zidane and it's...awesome. But I have a problem on the first part.

At the start of Burmesia there's a looping part where Freya, Zidane etc talking to each other... in this case, where I have to put that code for Freya? Thank you and anyone for the reply!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-19 19:06:27
@eugene9: Ah, I didn't understand exactly what you wanted.
I still don't really do. In most cases, you can't just "make someone uses someone else's animation". For instance, Zidane as a tail, not Steiner, so there's no way to use the animations of Zidane for someone who doesn't have a tail and vice versa... most of the time.

What you can try to do, using the Unity Assets Viewer:
1) In Hades Workshop, open "Tools -> Unity Assets Viewer", then "File -> Open -> FF9_Launcher.exe",
2) Then "Archive -> Streaming Assets -> p0data5" ; you should see a bunch of animation files appearing,
3) Select the animation you want to replace (you can sort the list by the "File Name" to have them grouped by models or by "Infos" to have them grouped by animation name), then "Right click -> Export Selection",
4) Select the animation by which you want to replace the previous one (let's call them A1 and A2: you want to replace A1 by A2) and "Right click -> Export Selection",
5) In the folder of FF9, there should now be a folder called "HadesWorkshopAssets" that contain the two files you just exported,
6) Copy A2 inside the folder of A1 and then rename it to replace it (give to A2 the name of A1),
7) Back in the Unity Assets Viewer, select A1 and "Right click -> Import Selection",
8‌) Done: the animation file has been replaced in the game's archive (if you have several copies of the game, the archive updated is the one corresponding to the "FF9_Launcher.exe" that you opened).

However, as I said, you will likely have bugs and non-working animations... But there might be a few animations that can be compatible with 3D models they were not meant for... if you're lucky.

@ToraCarol: You can put the "Freya follows Zidane" code in a new function with a high function code (let's say "Function Freya_20" if it doesn't exist already) and add the line "RunScriptAsync( 2, 255, 20 )" inside the "Freya_Init" function (replace 20 by your function code if needed).
This way, it won't mess with the "Freya_Loop" function. The condition "IsMovementEnabled" in the code I showed should be enough to disable that feature during cutscenes.
You may want to add a "return" line after the end of the "while ( 1 )" loop even though that shouldn't be problematic (I think I added a warning if there's no "return" or "loop" line when you parse).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: eugene9 on 2019-05-19 19:46:39
@eugene9: Ah, I didn't understand exactly what you wanted.
I still don't really do. In most cases, you can't just "make someone uses someone else's animation". For instance, Zidane as a tail, not Steiner, so there's no way to use the animations of Zidane for someone who doesn't have a tail and vice versa... most of the time.

What you can try to do, using the Unity Assets Viewer:
1) In Hades Workshop, open "Tools -> Unity Assets Viewer", then "File -> Open -> FF9_Launcher.exe",
2) Then "Archive -> Streaming Assets -> p0data5" ; you should see a bunch of animation files appearing,
3) Select the animation you want to replace (you can sort the list by the "File Name" to have them grouped by models or by "Infos" to have them grouped by animation name), then "Right click -> Export Selection",
4) Select the animation by which you want to replace the previous one (let's call them A1 and A2: you want to replace A1 by A2) and "Right click -> Export Selection",
5) In the folder of FF9, there should now be a folder called "HadesWorkshopAssets" that contain the two files you just exported,
6) Copy A2 inside the folder of A1 and then rename it to replace it (give to A2 the name of A1),
7) Back in the Unity Assets Viewer, select A1 and "Right click -> Import Selection",
8‌) Done: the animation file has been replaced in the game's archive (if you have several copies of the game, the archive updated is the one corresponding to the "FF9_Launcher.exe" that you opened).

However, as I said, you will likely have bugs and non-working animations... But there might be a few animations that can be compatible with 3D models they were not meant for... if you're lucky.


Sorry for being an annoyance, but the option "Import selection" remains unavailable even after I have renamed the archive the way you told me. I don't know what I'm doing wrong. Possibly... do I need to rename also the folder? Do I need to reload ("F5") the  Unity Asser Viewer?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-19 19:51:05
You must not have the game's files opened in the main frame of Hades Workshop (the tool should have poped up a warning about that).
Close the main frame and the importation will get available.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: eugene9 on 2019-05-19 20:38:49
You must not have the game's files opened in the main frame of Hades Workshop (the tool should have poped up a warning about that).
Close the main frame and the importation will get available.

Ooops! my bad!!! thank you for your help :). And what about changing Zidane's model for his trance model?
EDIT: I don't get animations working, everytime I try to swap characters' battle animation they remain in T pose.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-20 14:16:39
Quote
@ToraCarol: You can put the "Freya follows Zidane" code in a new function with a high function code (let's say "Function Freya_20" if it doesn't exist already) and add the line "RunScriptAsync( 2, 255, 20 )" inside the "Freya_Init" function (replace 20 by your function code if needed).
This way, it won't mess with the "Freya_Loop" function. The condition "IsMovementEnabled" in the code I showed should be enough to disable that feature during cutscenes.
You may want to add a "return" line after the end of the "while ( 1 )" loop even though that shouldn't be problematic (I think I added a warning if there's no "return" or "loop" line when you parse).

Thank you as always, it works great!  One last question for now about the "following" thing, when I'm going from one Field to another it happens that Zidane keeps to run through the new field as he have to do, but Freya, instead, stops suddenly and waits in that field (anyway she appears back in the new field, obviously) ..so, how can I do to let Freya follow Zidane? Hope I explained well
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-20 18:25:42
@eugene9: I warned you it wouldn't work for most animation swaps... Since the animation is not fitted to the model, no animation is played.

@ToraCarol: It's also the same "IsMovementEnabled" check. Since you don't have the control during the transition, the script stops.
I would say, the best is to add this line in the field transition script ("RegionX_Range" most of the time):
Code: [Select]
set VAR_GlobBool_247 = 1And in the following loop:
Code: [Select]
if ((IsMovementEnabled == 0) && VAR_GlobBool_247) {
    InitWalk(  )
    Walk( GetFieldExitX, GetFieldExitY )
    return
}
"VAR_GlobBool_247" is the last bit of the last global variable and thus is the least often used. It is not used in any script of Burmecia but it is used at some other place (in those places, one can use "VAR_GlobBool_0" because the first 8 bytes are always used for the placing of the objects (VAR_GlobInt16_0, etc...) but then it needs to be re-initialized to 0 in the "Main_Init" script after the placing of all the objects).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-05-20 19:24:28
Ooops! my bad!!! thank you for your help :). And what about changing Zidane's model for his trance model?
EDIT: I don't get animations working, everytime I try to swap characters' battle animation they remain in T pose.

Tirlititi has a mod for trance models defaults!.
https://www.dropbox.com/sh/ac7sr4q3z2cx9vp/AACQDfqXPvn8c3ylXeGUrBKEa?dl=0&preview=PC_AlwaysTranceMod.zip

it sets all characters on trance model but can be edited with the provided .hws!.

Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: eugene9 on 2019-05-20 19:40:43
Tirlititi has a mod for trance models defaults!.
https://www.dropbox.com/sh/ac7sr4q3z2cx9vp/AACQDfqXPvn8c3ylXeGUrBKEa?dl=0&preview=PC_AlwaysTranceMod.zip

it sets all characters on trance model but can be edited with the provided .hws!.
First things first. Thank you all for your help and instructions! I'm very glad to see how supportive this community is :).  I know that mod, and I have used it. But the problem is that it sets all characters into their trance model, I only wnat it for Zidane. Evenmore, I don't know why, but when casting spells with that mod on, there is always a kind of shadow shilouette behind the spellcaster which looks quite weird.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: TheHobgoblin on 2019-05-20 20:37:10
Tirlititi has a mod for trance models defaults!.
https://www.dropbox.com/sh/ac7sr4q3z2cx9vp/AACQDfqXPvn8c3ylXeGUrBKEa?dl=0&preview=PC_AlwaysTranceMod.zip

it sets all characters on trance model but can be edited with the provided .hws!.

I don't suppose this could be used to add trance skins to Beatrix, Marcus, Blank and Cinna and an animation to change into them. Or, perhaps rather, allow them to have a "trance mode" without actually shifting to a new model.

As things are now, the game will crash if they are given a trance bar and it becomes full because the animation/skin is missing from those models.

And the only way I can think of a work around would be to edit the action for what happens when trance happens is so that instead of doing the animation to shift into their trance model, to make it so that all characters maybe just do their victory pose instead. So then none of the characters ever use their trance modes. I am not even sure if that would work, but I imagine it might.

And, honestly, not using the second skin for any of the characters is fine for me. Final Fantasy 7 didn't need its characters to mutate into weird super saiyajin versions of themselves for the round they had trance after all.

But-- still-- I might decide I want to try to make a trance skin for Marcus eventually if I can get him working without eliminating Eiko from the game.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-20 23:31:23
Here is how it works. It's pretty simple:
1) In the class "btl_init", the array "model_id" contains the list of the player character's models:
Code: [Select]
Zidane (2 of them),
Vivi,
Dagger (4 of them),
Steiner (2 of them),
Quina,
Eiko (2 of them),
Freya,
Amarant,
Cinna,
Marcus,
Blank (2 of them),
Beatrix,
Zidane Trance (that's the 20th, at index 19 and there are 2 of them just like the regular),
Vivi Trance,
etc...
up to Amarant Trance.
Which makes a list of size 19 (regular) + 14 (trance) = 33 models.
These are different model names but I think that they mostly use the same mesh files and the different names are meant to link to different animations (but I'm not sure, that's what I remember about). Anyway, the duplicates are because of the different fighting stances when using, for example, thief daggers or thief swords. Dagger also has her long/short hair versions.
About Steiner, I think the difference has to do with a flag that can be activated in the "Battle" and "BattleEx" script codes, but it's a dummied feature and never actually used.

2) The methods "BattlePlayerCharacter::CreateTranceModel" and "btl_init::SetBattleModel" setup the models at the start of the battle. They create both a regular and a trance model/skin for those who have it and hide the trance version. The condition is simply "if ((int)(serialNumber + 19) < btl_init.model_id.Length) // add a trance version" for both methods.
Note that there is a duplicate of the regular model list, "BattlePlayerCharacter::PlayerModelFileName" for some impractical reason. The lists used are thus:
- "BattlePlayerCharacter::PlayerModelFileName" for the regular model and "btl_init::model_id" for its skin (geotexanim),
- "btl_init::model_id" for the trance model and its skin.

3) When creating a trance model, the animations are entirely taken from the regular model so you don't need to care about it (but the trance model has to have exactly the same bone hierarchy as the regular one). I suppose that there is no problem in taking the same "geotexanim" as the regular one or even don't use geotexanim at all (I don't really see a texture animation on battle models, except the trance glowing but that's handled automatically elsewhere).

4) In HW's "Party -> Stats" panel, there's some setting to do in order to have a proper trance command.

5) Characters have a trance gauge if they are not setup with category "temporary character" in the script code initializing them ("SetCharacterData"). Also, trance gauge is disabled early game and for Dagger when she's depressed.

6) Also, another array must be extended for Beatrix. In the method "btl_stat::SetStatusVfx", which mostly takes care of glowing effects (and floating/confused but we don't care there), you can find an array like that
Code: [Select]
byte[][] array = new byte[][]
new byte[] { 255, 96, 96 },
// etc...
These are RGB color factors for the glowing effect of the trance. You must extend the array with one entry (of 3 bytes) corresponding to Beatrix's glowing effect when she turns to trance. The default color factor is 128, which means that "{ 128, 128, 128 }" will not display any glowing at all. Personally, I used the following in my mod:
Code: [Select]
new byte[] { 255, 160, 128 }
In conclusion
In order to add a properly working trance to Blank, Cinna, Marcus or Beatrix, you need to do 3 things:
• In HW, setup a trance command for the character (define it in the panel "Party -> Commands" and give it to the character "Party -> Stats"; remind that Beatrix has 2 ability sets),
• In HW, remove the "Temporary Character" category of the character(s) you want to give trance to. It's in the "Environment -> Fields" scripts, when the characters join the team, there are lines "SetCharacterData" to tweak a bit. For instance, Beatrix's character data is initialized twice:
-- in the script "A. Castle/Queen’s Chamber" (one of them anyway, there are several ones... the good one has "Bandersnatch" functions in its script), whithin the function "Beatrix_Loop", there's a line "SetCharacterData( 8, 1, 11, 22, 14 )" near 4/5 of the function.
-- in the script "Alexandria/Square" (the one at night), whithin the function "Steiner_Init", there's a line "SetCharacterData( 8, 1, 13, 22, 15 )". In both cases, the change should be replacing the argument "22" by a "6" to remove the "Temporary Character" category.
• In dnSpy, append 5 lines to "btl_init::model_id" by giving trance models.
-- Either use the exact same models as the regulars (ie. append "GEO_MAIN_B0_013", "GEO_MAIN_B0_014", "GEO_MAIN_B0_015", "GEO_MAIN_B0_016" and "GEO_MAIN_B0_017" to the list): the only difference will be the glowing,
-- Or use another existing model and the same bone hierarchy (the correspondances between "model name" and "model numerical ID" is in the dictionary "FF9BattleDB::GEO"),
-- Or find a way to import a workable new model with the right bone hierarchy and register it in both "FF9BattleDB::GEO" and "btl_init::model_id". I have been unsuccessful to import a workable model, as the files added to the archives require a lot of registering and linkage and I apparently miss some (I don't remember if I successfully imported a new texture with the Unity Assets Viewer...).
• Still in dnSpy, append 1 entry to the local array that can be found around the middle of "btl_stat::SetStatusVfx".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-05-21 00:31:39
Tirlititi a new model being replaced/added is not limited to a certain poly amount right? I insured the model has the same bone hierarchy as original and model showed invisible in game!. My model has ~117289 polys. ~88790 without spline patches.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-21 10:44:38
Thanks for the help Tirlititi, it works!

ps: while we're in argument of "battle trance model"...there is, so, a way to let temporary characters use trance mode, right?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-21 15:59:58
@Incinerator: I don't think that splines are imported correctly!
Triangularize the mesh before importing it. I think splines are not supported because there is none in the non-modded game and I didn't know how to handle them. If someone is expert in Unity serialized 3D models, he could explain how to handle splines.

There is no hard-coded polygon limit so I guess the problem doesn't come from there. There is no reason for the engine to discard big models if they are valid.

@ToraCarol: Yes, that's the main point of my previous message.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-21 17:48:42
@ToraCarol: Yes, that's the main point of my previous message.

Okay, great! I'll check closer the post later  ;)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-22 00:26:32
Sorry I have another little problem, tomorrow I try to check again but if someone can help me for now, I'll be glad. So on Burmecia I'm in the "Zorn and Thorn event", but I don't know why for some reason it's freezing at the start, when Zidane comes in the Region for the event. I've tried to set the VAR_GlobBool_247=0 because if I don't put the variable in it freezing anyway, and if set to 1 Freya keeps walking randomly for some reason, but..it seems to not work. Have I to set "if" or something on the loop? I really don't understand :| The only thing I know is that before to put the variable the script worked! So it may be the reason..i'm not sure.

I'm sorry if i'm coming with silly problems like this but...sometimes I don't really know how to come through x"D



Ok guys, I've checked and solved...thank you anyway!!! 8)

I also want to say sorry for my oversight, yesterday I was on my phone and I haven't seen that TheHobgoblin asked about the temporary character-trance thing..and Tirlititi explained very well. So I'm very sorry for having asked a so obvious question.  :oops:

Just a thing, it's necessary to use DnSpy? And if so, where I have to go exactly? (I didn't used DnSpy so much, the only time I've used it was just for change the font  :roll:)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-22 15:56:26
Yes, it is necessary to use dnSpy (or mod the source code using Memoria, but that's C# all the same).

When I write about editing C# code (or CIL code), I write about classes and method with the format "class::method". That means that you need to find the class in the list shown by dnSpy and then find the method inside that class. Namely, the classes of interest here are "btl_init" and "BattlePlayerCharacter".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-22 21:01:54

I'm so so sorry to bother you again but this time I seriously don't know where's the problem. So in the end of the Zorn and Thorn loop, when Zidane move is enabled again, it looks like Freya doesn't want to follow him and stay in her place...so..why? I've tried everything but I guess i'm missing something..

Anyway when I change from one field to another, everything it's ok, so this just happen at the end on the loop, before to leave the field!



UPDATE: Another thing, on Memoria I want to make appear on the Field the first character of the Party, to control instead of Zidane..so I've tried to entry a new character for test, set InitObject (251) (TeamCharacter 1),  but it doesn't seem to work..Zidane still appears? Why?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-24 16:56:00
I'm really sorry if I bother...now I'm trying to solve by myself the Burmecia thing..I think I can solve somehow...

Still no Idea about Memoria..can someone help? :(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-05-24 18:41:20
@Incinerator: I don't think that splines are imported correctly!
Triangularize the mesh before importing it. I think splines are not supported because there is none in the non-modded game and I didn't know how to handle them. If someone is expert in Unity serialized 3D models, he could explain how to handle splines.

I figured this may have been it!.
I've become triangulating the mesh, will need re-working, as I see spline are really not supported. I'm also researching the use of splines in Unity serialized models.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-25 15:26:03
@ToraCarol: It's not really possible to do that because not all the characters have the correct animations (like opening a chest or climbing a ladder).
"InitObject( 251 )" works only if there are script functions for the character. For instance, if Eiko is the first character, then the script must have a "Eiko_Init" function attached to Eiko's entry for "InitObject( 251 )" to work.
You can see in the "Edit Entries" window that there is always an entry for the player characters. It's just that they usually don't have any function linked to them.

In order for the player to control a character, it's something different: you need to use "DefinePlayerCharacter()" in the entry that you want the player to take control of (usually, it's in the "Init" function but it can be in another function if, for instance, the control is not given as soon as the characters are placed).

You don't bother me; it's just that I stopped modding so I don't answer right away anymore.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-05-25 16:12:42
@ToraCarol: It's not really possible to do that because not all the characters have the correct animations (like opening a chest or climbing a ladder).
"InitObject( 251 )" works only if there are script functions for the character. For instance, if Eiko is the first character, then the script must have a "Eiko_Init" function attached to Eiko's entry for "InitObject( 251 )" to work.
You can see in the "Edit Entries" window that there is always an entry for the player characters. It's just that they usually don't have any function linked to them.

In order for the player to control a character, it's something different: you need to use "DefinePlayerCharacter()" in the entry that you want the player to take control of (usually, it's in the "Init" function but it can be in another function if, for instance, the control is not given as soon as the characters are placed).

You don't bother me; it's just that I stopped modding so I don't answer right away anymore.

Mhmhmh..maybe I'm missing something. So what I actually did for a test it was to "InitBlank", so I created this Init for him and then I've tried to put on the Main Init the "InitObject (251)"  ???
But it doesn't work anyway.. I've also added the  "DefinePlayerCharacter()"  thing.

I had to mention this before, forgive me!

Anyway, I was thinking about memoria because is the place where it needs less animation (like Hiza and stuff that are in common with all the characters, almost). And since is the last part of the game I thought it would be nice to create something like this!

And don't worry, you've been very helpful and I appreciate it! I want to say thank you for the help you gave me, also Incinerator too! Without you I guess this Mod (even if is not perfect) would never have been created!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-05-31 21:35:13
What did you put in Blank's Init function?
It should look like the example I gave here (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890) for Beatrix (you need to change the position, the model ID and its animation IDs and add the "DefinePlayerCharacter" line).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-01 10:44:34
Here, like I always did.. (in this case I've taken a few codes from Zidane init , but the model and animations are the right ones)

Code: [Select]
Function Blank_Init
    switchex 3 ( General_FieldEntrance ) {
    case 150:
        set VAR_GlobInt16_0 = 65390
        set VAR_GlobInt16_4 = 62586
        set VAR_GlobInt16_6 = 151
        set VAR_GlobInt16_2 = 937
        break
    case 152:
        set VAR_GlobInt16_0 = 117
        set VAR_GlobInt16_4 = 3048
        set VAR_GlobInt16_6 = 255
        set VAR_GlobInt16_2 = 65349
        break
    case 10000:
        set VAR_GlobInt16_0 = 64979
        set VAR_GlobInt16_4 = 65407
        set VAR_GlobInt16_6 = 64
        set VAR_GlobInt16_2 = 65321
        break
    default:
        set VAR_GlobInt16_0 = 65382
        set VAR_GlobInt16_4 = 62643
        set VAR_GlobInt16_6 = 0
        set VAR_GlobInt16_2 = 937
    }
    SetModel( 5467, 87 )
    CreateObject( VAR_GlobInt16_0, VAR_GlobInt16_4 )
    TurnInstant( 80 )
    SetStandAnimation( 5041 )
    SetStandAnimation( 462 )
    SetWalkAnimation( 5225 )
    SetRunAnimation( 5222 )
    SetLeftAnimation( 5223 )
    SetRightAnimation( 5224 )
    SetJumpAnimation( 5041, 9, 25 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 96, 61 )
 MoveInstantXZY( GetEntryPosX(255), VAR_GlobInt16_2, GetEntryPosY(255) )
    SetPathing( 1 )
    DefinePlayerCharacter(  )
    EnableHeadFocus( 0 )
    if ( General_FieldEntrance == 10000 ) {
        SetObjectFlags( 14 )
        SetObjectSize( 12, 0, 0, 0 )
    }
    return
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-06-01 11:11:36
That seems correct.

1) You're using the Steam version, right? It doesn't work easily on the PSX version (though it should work if the animations are the standard ones).
2) Check that you added this function to the correct entry: it should be the 7th entry after Zidane's entry (for instance, if Zidane is the entry 11, Blank should be the entry 18). In particular, this "Blank_Init" function should be displayed below Zidane's functions.
3) In the "Edit Entries" window, check that Blank/Amarant's entry is properly set to a "model entry (2)". They are sometimes defaulted to "255" when they are not used.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-01 11:58:06
UPDATE:
Nevermind Tirlititi, I've decided to solve in another way..let'see if works!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: shikulja on 2019-06-02 12:43:05
http://skrinshoter.ru/s/020619/2MZxG20V?a
iso images http://zipansion.com/1va1s (http://zipansion.com/1va1s)

Is there a guide to just transfer the translation from steam (memoria) to psx (hades)?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: masagrator on 2019-06-03 01:22:23
I want to extract moguri mod merged images. I've tried to use 0.40 0.40b (the second one looks like it has bugged Custom Backgrounds macro). And I can't unpack textures to properly merged images. Images are always mismatched. I've tried to apply macro, save mod, swap csharp and always it looks like it using parameter 32.

I was thinking of changing code, but it shows that I don't have wxwidgets. Yes, I used recursive git to clone.
Tried with vc2017 cmake and it shows that I don't have fbxsdk. Installing it resolved nothing.

Edit: ok, nvm. Solved it.  ::) Still I need to figure out how to properly export/import Backgrounds.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-06-03 13:40:38
@shikulja: I don't understand what you want to do.
- Do you want to open the PSX files that were patched using RGR?
- Do you want to use a russian translation that is available for the Steam version and turn it to a PSX mod?
In the first case, it should work... maybe Hades Workshop bugs since a couple of versions so you should try with older versions (https://www.dropbox.com/home/Public/FinalFantasyIXTools) of HW.
In the second case, it's not possible as I didn't write a script for converting a "Steam formatted text" to a "PSX formatted text".

@masagrator: So, I guess that you went to "File -> Preferences" to solve the first problem, which is what is needed to display and export modded backgrounds properly.
In order to import backgrounds, you need to go to the "Tools -> Background Editor". Here (http://forums.qhimm.com/index.php?topic=14315.msg247956#msg247956) is a tutorial for using it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: shikulja on 2019-06-03 18:49:18
@Tirlititi
I wanted to extract scripts and resources with text from pirated translations, okay, wait, when fix it, then I'll do it.

it's bad that there is no script for converting steam to psx, we have a good translation of leoris and its commands for steam in Russian, but for psx there is still no.
(insert all the text manually, this is just nonsense, and the chance of typos will be higher)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-04 11:25:15
Sorry Tirlititi, one last thing.
I haven't still found a solution about  Freya that stuck in her place after the "Zorn and Thorn event" instead of following Zidane, how can I solve?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-06-04 14:41:30
What is the current script that you got?
There are two possibilities: either the loop enters a case where the script "returns" (which stops for good the script making her following Zidane) or you forget to set the safety variable back to its normal state (that's if the cutscene safety relies on a variable).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: masagrator on 2019-06-05 18:07:46
Is it possible for app to generate textures like in original? 512x512, 1024x512, 1024x1024, 2048x1024, 2048x2048?

Edit: I've did it with imagemagick, but it looks like layers are slightly off. Is tool doing something that may mismatch layers without editing other files? Because Hades Workshop is showing it correctly.
http://screenshotcomparison.com/images/1559842050_4286950371.jpg
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-06-06 19:20:27
I don't see the problem with your screenshot.
Which kind of image do you want to "generate" (= extract from the game?) ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: masagrator on 2019-06-06 20:08:06
I checked few of mismatches (table and piece of furniture have grey line around them)
https://i.imgur.com/CsFy43a.jpg

I'm trying to port Moguri Mod to original dimensions so I can use it with Nintendo Switch (screen is from there). I'm using parameter 32, original dimensions. Now I tried to check without doing any shenanigans, just downscaling extracted layers with imagemagick. I've created texture with tool, imported it and still they're there on PC. Hades Workshop shows it correctly, GIMP shows layers correctly.
I've tried 0.40 and 0.40b. Many tiles are few px off.
Edit:I'm trying now every version from 0.36b as 0.36 crashes.
0.36b and 0.37 looks even worse.
From 0.37b is exactly the same as in 0.40 and 0.40b.

Edit: It looks like even Moguri Mod has issue with mismatching tiles. Hmm...
Edit2: Is this a game issue (mismatching tiles) because of low precision? Because I see that wrong tiling has different offsets dependent on camera position...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-08 11:06:22

What is the current script that you got?
There are two possibilities: either the loop enters a case where the script "returns" (which stops for good the script making her following Zidane) or you forget to set the safety variable back to its normal state (that's if the cutscene safety relies on a variable).

I think is the second case..the loop works correctly, it also finish with "loop"
I simply made here something like this...because I didn't have any idea of how to solve  :|

Code: [Select]
      }
            if ( ( IsMovementEnabled == 0 ) && ( General_ScenarioCounter <= 3820 ) ) {
                Wait( 1 )
                return
            } else {
                if ( ( IsMovementEnabled == 0 ) && VAR_GlobBool_247 ) {
                    InitWalk(  )
                    Walk( GetFieldExitX, GetFieldExitY )
                    return
                }
            }



While we're in argument I also want to ask you..I've tried on South Gate to make Marcus jump on the bridge after Dagger jumps, but I don't know why for some reason the Object "Marcus" moves but not read the "jump" animation, plus takes a little to go back in it's normal state..if you know what I mean. What I did is simply copypaste the same codes of Dagger and use them for Marcus (setting his Jump animation..obviously) and also added the script on the Region...so what's wrong?

Thanks as always if you can help

UPDATE: I was wondering..is there a way, somehow, to emulate a "Change Disc"? Like a save menu, and then an image appears like to change the disc even if it's not? (You know, like Game Over)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: TheHobgoblin on 2019-06-10 22:46:59
While we're in argument I also want to ask you..I've tried on South Gate to make Marcus jump on the bridge after Dagger jumps, but I don't know why for some reason the Object "Marcus" moves but not read the "jump" animation, plus takes a little to go back in it's normal state..if you know what I mean. What I did is simply copypaste the same codes of Dagger and use them for Marcus (setting his Jump animation..obviously) and also added the script on the Region...so what's wrong?

Thanks as always if you can help

UPDATE: I was wondering..is there a way, somehow, to emulate a "Change Disc"? Like a save menu, and then an image appears like to change the disc even if it's not? (You know, like Game Over)

Marcus's model might not have a jump animation as I don't think there is any point in the story that he jumps.
This sounds like the model moving, trying to execute an animation that doesn't exist, so instead doesn't do anything for the duration that the animation is meant to happen and then returning to the normal state.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-11 10:19:32
Marcus's model might not have a jump animation as I don't think there is any point in the story that he jumps.
This sounds like the model moving, trying to execute an animation that doesn't exist, so instead doesn't do anything for the duration that the animation is meant to happen and then returning to the normal state.

Yeah, I think so too..so what's Jump3 stands for?  :| Probably nothing of what I used to think!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-06-11 14:30:35
@masagrator: Yes, that's a problem happening because of the Steam version.
Basically, they used a weird alpha channel for rendering the edges of the tiles while it was a "completly opaque/completly transparent" alternative in the PSX format.
The shift on the carpet (wow, I had a hard time seeing it even with your mark...) surely comes from the way they upscaled the images for the Steam version (because it's not a tile edge).
Fragosso knows better than me this kind of things...

@ToraCarol: There should not be any "return" line if the first "if" block that you show.
The problem with the jump animation is more likely to be the one described here (http://forums.qhimm.com/index.php?topic=14315.msg245063#msg245063). You need to use this jump animation before in the script to let the game load it (using "SetRightAnimation( 5041 )" just before "SetRightAnimation( 5224 )" is enough).
Emulating a "Change disc" screen requires modding the C# code and adding new assets (textures) to the game. I don't know if it can work, sorry.
You may more easily add a "Would you like to save?" screen, as it can simply be emulated with a dialog box... but I can understand that it's not what you want.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-11 15:28:32
Quote
@ToraCarol: There should not be any "return" line if the first "if" block that you show.

The problem with the jump animation is more likely to be the one described here (http://forums.qhimm.com/index.php?topic=14315.msg245063#msg245063). You need to use this jump animation before in the script to let the game load it (using "SetRightAnimation( 5041 )" just before "SetRightAnimation( 5224 )" is enough).

Emulating a "Change disc" screen requires modding the C# code and adding new assets (textures) to the game. I don't know if it can work, sorry.
You may more easily add a "Would you like to save?" screen, as it can simply be emulated with a dialog box... but I can understand that it's not what you want.

Thank you for all you replies, as always.
I was already thinking of adding a dialog box, but I was hoping that somebody has an idea of how to emulate this thing, because as I said i'm not good on C# code an stuff... but it's ok anyway! Let's hope someone someday will find a way! For now i'll just add a dialog box!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-15 16:06:21
I fixed the "following Character" and Marcus thing..thanks a bunch!


1) About the save dialog box, you know guys where can i put it between the Disc 1 and 2? Is kinda complicated because there's a cinematic/unexisting field and the Borden field without any particular main loop..and I don't know where to put properly without mess everything! :|

2) Also, have you find a way to solve this,Tirlititi? I've tried with "Raise Windows" but for some reason it seem to not work!

Spoiler: show
(https://i.imgur.com/fvKbfB6.png)


3) Last but not least, what about if I want to set in a "Trance Mode at start of the battle" other characters instead only Zidane, Steiner and Vivi? It's possible?
 I know there is something that enables "Trance Mode" in the main enemy attacks, is it correct?

Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Satoh on 2019-06-18 01:48:35
[...]
3) Last but not least, what about if I want to set in a "Trance Mode at start of the battle" other characters instead only Zidane, Steiner and Vivi? It's possible?
 I know there is something that enables "Trance Mode" in the main enemy attacks, is it correct?
[...]
Prison Cage; Garnet battle does this.
It has an attack that fills the Trance meter. It may be a different name in later versions of HW, but in version 0.38 its called Transfer.
in that fight there are a few important things that happen related to the trance bar filling. I'll try to show each of the important parts of the code. You can load the battle up yourself if you want to compare.

Code: [Select]
Function Main_Init
    if ( IsBattleInitialized ) {
        CloseAllWindows(  )
        Wait( 5 )
        TerminateBattle(  )
    } else {
        set SV_EnemyTeam[ATB] =$ FirstOf(SV_EnemyTeam[MAX_ATB])
        set #( VAR_GlobUInt16_33 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 0 ) )
        set #( VAR_GlobUInt16_33 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 1 ) )
    }
    return
The first check is to see if battle has ended already, that seems to be normal for most battles. Then at [else] there are some commands and one of them is setting the enemy's ATB to the MAX_ATB of the first enemy. Tirlititi will have to explain how the list assignments work because I don't fully understand them, but I know that's what's happening in that line anyway.
Next we have a variable that is looking for Zidane's dagger animation model, and one that's looking for his thief sword animation model, and setting the party slot either of them is in, to VAR_GlobUInt16_33. The code does this twice for unknown reasons, the second time fully overwriting the first one.
(if you want to change this to a random party member you can change it to this
Code: [Select]
set #( VAR_GlobUInt16_33 = RandomInTeam(SV_PlayerTeam) )now, this variable is important for later, because in that fight ONLY Zidane is supposed to start with Trance, and the game needs to know which party slot he's in, in order to target him. (the battle also tracks all the other characters this way too so there is a variable for each specific character you might want to target)

Next since we already set Prison Cage to have full ATB at the start, we have the Prison Cage ATB code (I've again removed some code not related to Trance):
Code: [Select]
Function Prison_Cage_ATB
    if ( !VAR_LocUInt8_3 ) {
        set VAR_LocUInt8_3 = 1
        set #( SV_Target = VAR_GlobUInt16_33 )
        Attack( 8 )
        return
    }
    return
VAR_LocUInt8_3 is for tracking the cutscene progression for Zidane and Steiner explaining what Trance is. To begin with, its not set, so the battle checks if it doesn't exist yet (it doesn't) and then it sets it to 1, sets the SV_Target variable to the VAR_GlobUInt16_33, which it previously set as the party slot for Zidane, so now the next attack to execute will hit Zidane. Finally, it executes Attack( 8 ) which in this battle is Transfer, which fills up a character's Trance meter completely, and then returns out of the [if] and then processes some other things I removed for brevity, and then returns again to allow the game to continue into the next cycle.

If you wanted to change the character to say, Freya, in the prison cage fight, the game locates her model and stores it in VAR_GlobUInt16_45 using this code
Code: [Select]
        set #( VAR_GlobUInt16_45 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 12 ) ) just like it did for Zidane in UInt16_33
A full list of character models can be seen in the Function List, under Var Code > [DATA ACCESS]
Code: [Select]
[MODEL_TYPE]
Zidane : 0 or 1
Vivi : 2
Dagger : 3, 4, 5 or 6
Steiner : 7 or 8
Quina : 9
Eiko : 10 or 11
Freya : 12
Amarant : 13
Cinna : 14
Marcus : 15
Blank : 16 or 17
Beatrix : 18

Note, that if the character you want to target is not in the battle, the code may freeze while it looks for that character specifically, or it may skip right over the Transfer attack completely. I don't know the exact effects, but if the variables aren't set correctly in the PSX version, the battle will just stall as the game tries to attack something that doesn't exist. Tirlititi may have advice on doing other things with targetting.

Battle code is all pretty new to me, but I did just look into this last night, ironically, so I figured I'd explain what I already figured out.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-06-20 10:02:25
Thank you for the reply Satoh! Il check soon  8)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: TheHobgoblin on 2019-06-23 22:47:52
Not really a technical question, but since I want to develop the temporary characters into full ones...

I think I can just move Beatrix over to Sword Art and White Magic-- in fact, link all 3 white mages to the same White Magic command. That will free up some space.

I think I will get rid of the SFX commands and instead just make the "theater" versions of everyone the same as their normal version. They only do 1 fight using those commands anyway.

I can also get rid of the superfluous Magic commands.

That leaves me with choices with the other three.

Being able to do away with the SFX commands gives me 14 new abilities I can make.

So should I

1) Make 4 unique commands for one and 5 for the other two
2) Make Cinna "Green Mage/Gray Mage" so that he would make use of spells from the White Magic and Black Magic lists. Then I can maybe give Marcus and Blank 7 unique commands each (I think I might be able to squeeze this in without running into the command limit since I am pruning unneeded ones)
3) Find a way to expand the Ability List as well as the Command list so that all 3 can have 8 unique commands each.

Since I am already editing the assembly file in order to try to increase the number of slots from 9 to 12 so that the additional characters can be used uniquely and I haven't completely solved that, the only trick to increasing the lists for spells and commands is that I won't be able to further edit it with Hades Workshop. And it would be so much easier to use it to edit the abilities than try to figure out how to do it via hex-editor or something.

And I haven't completely solved the puzzle on how to do it yet anyway. I honestly haven't been working on it much for the past few months.
But I have worked out how to turn that starting area into a test area by assigning it a random encounter script and then putting the characters I want to test into the initial party.

Addendum:

Seeing what I could free up in the Commands list by combining similar commands and removing the unused/1 time use ones, I can arrange this to 34 command blocks free.
That it plenty enough to turn Cinna into a proper mage with plenty of spells taken from the black mage/white mage/blue mage lists and still leave enough room for the other two to get 8 commands each, even if 1 has to be a pre-existing ability.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: TheHobgoblin on 2019-07-08 05:00:15
I think I am 95+% of the way to expanding the character slots from 9 to 12, allowing the remaining 3 characters to be fully utilized.

I have spent basically the past two days on it.

To get as far as I did involved editing all of these classes

Under the "-" category
Actor
btl_init
ETb
EventEngine
FF9PARTY_INFO
ff9play
FF9StateGlobal
FieldHUD
NameSettingUI
NGUIText
PartySettingUI
PLAYER
ShopUI


Under the "FF9" category
ff9abil
ff9shop
FFSHOP_INFO

I will try to give more detailed information in the future.

It seems like Beatrix has to remain the slot 8 character with Cinna, Marcus and Blank becoming 9, 10 and 11 respectively. Initially I was going to try to match their slots to their character numbers, but for whatever reason it didn't work out. I was getting everyone's models shifted by 1 place (Blank was using Beatrix's model, Marcus had Blanks and Cinna had Marcus's)

In fact, the entire thing might be working now, but the issue I am having is that at the end of that initial battle, when the mask is supposed to come off, the game crashes and it reports a violation with the SFX file. I don't know if it is the character animation of the mask falling off or if it is the game trying to focus the camera on the opponent that is causing the crash, but it is one of the two.

But, after experimentation I found that if I leave every other change, but just change two numbers in the EventEngine file, that the game runs smoothly (at least for that first room) but Cinna, Marcus and Blank take the models of Quina, Eiko and Amarant respectively.

I feel like if I can just track down this one error then the job will be completed.


In the meantime, to experiment with this further, I would like to know how to change the game script so that I can add a change party members NPC in the first room. I already figured out how to put battles there. Any clues on how to do it?

Also, is there any possible way to change the settings for Hade's Workshop that would allow me to edit my already edited assembly instead of having to switch back and forth between an edited and unedited one?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-07-17 12:59:00
Hello guys, I'm sorry if I bother but I really hope anyone can help me with this one

Spoiler: show
(https://i.imgur.com/b5TrPHB.png)


As you can see in this image, there's a text window..with no text inside it! Why this happens? How to solve?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: DavidBest1996 on 2019-07-18 11:59:36
Hello, sorry for the silly question but in Hades Workshop I modify some Ending texts but I can't modify the arguments of Text Command "Center" (I think opcode 0x48). Whatever number I write in, it become default again automatically after closing the window, I dunno why, and I don't find any answer about it (sorry for bad english)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-07-19 20:43:05
Hello guys, I'm sorry if I bother but I really hope anyone can help me with this one

Spoiler: show
(https://i.imgur.com/b5TrPHB.png)


As you can see in this image, there's a text window..with no text inside it! Why this happens? How to solve?

Looks like a script called text that doesn't exist!.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-07-20 11:36:29
Looks like a script called text that doesn't exist!.

Thank you for the reply Incinerator..so how can I solve this missing? What did I or didn't I do? I've tried some things but looks like i really don't know how to come through this  :(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-07-23 21:10:24
Thank you for the reply Incinerator..so how can I solve this missing? What did I or didn't I do? I've tried some things but looks like i really don't know how to come through this  :(

I'm a such a turtle!
Is you text added in right text block for this field (iirc Text Panel -> Alexander)
Title: Re: [FF9] General editor - Hades Workshop (0.31b)
Post by: anxietymafia on 2019-07-24 08:13:51
I took Eiko on Lv1 editing Field scripts at Conde Petie Mountain Path in the function "Main_Loop" (Marcus' level was 21)

Hi Vivigix (or anyone else),
Realize this is old but,
I was wondering if what your wrote here is specific to the PSX version? Recently decided to add it to my game, but the code seems to be different for steam (although similar). Would appreciate any advice you'd have for achieving this on the steam version (also for the other characters).

In Hades workshop, for Eiko the code is:

Code: [Select]
Function Main_Loop
    if ( General_FieldEntrance == 65535 ) {
        set Setting_PartyReserve = 103
        SetPartyReserve( Setting_PartyReserve )
        if ( IsInParty(5) ) {
            RemoveParty( 5 )
            set VARL_GenUInt8_303 = 0
            set VAR_GenInt8_60 = ( VAR_GenInt8_61 = ( VAR_GenInt8_62 = ( VAR_GenInt8_63 = ( VAR_GlobInt16_8 = ( VAR_GlobInt16_10 = ( VAR_GlobInt16_12 = ( VAR_GlobInt16_14 = 65535 ) ) ) ) ) ) )
            set VAR_GlobInt16_14 = 0
            while ( VAR_GlobInt16_14 <= 11 ) {
                if ( IsInParty(VAR_GlobInt16_14) ) {

EDIT: Actually, you know what I figured this out I think. You only need to change 1 number in each. I’m going to release this as a hws for anyone else who needs help. Thanks for the info!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-07-24 11:38:15
Sorry for not answering. I am working back a bit on HW in view of releasing a new version. I'll mainly try to fix compatibility issues (Albeoris's Memoria, Moguri Mod, Audio fix and other DLL editing mods...). I'll use the occasion to fix a couple of bugs too.

Thanks a bunch DavidBest1996 for telling me about that one; it's fixed and the next version will be working better on PSX files again.

Good job so far TheHobgoblin ^^
You can see examples of NPC scripts here (http://forums.qhimm.com/index.php?topic=14315.msg247568#msg247568), there (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890) and there (http://forums.qhimm.com/index.php?topic=14315.msg260956#msg260956). The important steps are: add an NPC entry (or use one of the free "player" entries that are after all the others and usually have no functions at first), add an "Init" and a "SpeakBTN" function, setup the model+position in the "Init" and use "SetPartyReserve( xxx )" and "Party( 4, 0 )" in the "SpeakBTN".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-07-24 20:48:59
I'm a such a turtle!
Is you text added in right text block for this field (iirc Text Panel -> Alexander)

In my case (Invincible-Garland) the text is on "Alexandria (Night)". I simply added new dialogs next the other ones for Garland,Kuja etc.. and in the script it let me ready the Dialog Window

Spoiler: show
(https://i.imgur.com/8pW1bje.png)


What I don't get,so, is why it give me this kind of error...

It's a scene added after the "Hilda Garde I" talk with Zorn and Thorn, I simply added a new Variable and a general field entrance... like the other scene on Lindblum that work perfectly..kinda strange..idk.

Spoiler: show
(https://i.imgur.com/rWahVZt.png)


And not worries Tirlititi you're doing such an amazing and huge of work so it's ok to not have time for everything anyway  ;D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: DavidBest1996 on 2019-07-29 06:35:59
You're welcome, Tirlititi, on the contrary, thanks to you to fix that :)... I seriously thought to be dumb not figuring out why not working.
I look forward to download the newer version, thanks for your great job in this, I hope that my problem doesn't slow down too much your working  :D (again sorry for bad english)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Tirlititi on 2019-08-02 19:03:49
Update to v0.41:
- Added a Randomizer tool, including the slightly modified features of Meteor On FFIX (which was only working on the PSX US version) and a way to randomize the enemies' spells (unfairness is guaranteed),
- Added more flexibility and compatibility with other mods or modding tools:
--- You should now be able to open and append changes to Assembly-CSharp.dll mods created by other means (Sound Fix, dnSpy-edited DLL, etc...) as long as they don't change the structure of some key things (the datas read by Hades Workshop, such as the spells (AA_DATA)...),
--- Since Albeoris's Memoria change the structure of these key things, you still can't open the Memoria-modded DLL; however, you can now generate .csv files that are suitable to Memoria for most of the modifications. There's a couple of modifications that requires a bit of dnSpy hacking to complete the merging of the mod though: the Magic Sword requirement spells and the Battles' battleground changes (both of them are not editable yet using only Memoria),
--- You may directly generate the assets instead of the full-fledged archive files; this way, assets can be imported into archives modded in different manners and easily merge mods as long as they don't change the same assets (but do change the same archives),
--- Fixed different bugs with the PSX versions of the game; Hades Workshop should fully work on them again (also, the Randomizer works on the PSX version, minus the possibility to have non-updated spell names or descriptions due to the lack of space),
- Fixed a few other bugs (the one pointed by DavidBest1996, the very large numbers bugging in the Script editor, a "switch case + do-while loop" decompilation error...) and improved a few things.

I am still on a break with FF9 modding. I will surely just update my mod Alternate Fantasy to have compatibility with other mods, but then I'll return to not making things.

Note that Gael-Honorez-sb added CMake files to generate Hades Workshop projects using CMake on GitHub. I always have troubles with CMake (but with Visual Studio as well anyway) but it will surely ease the work of people trying to use the tool's source code. Let him be thanked for that.


@ToraCarol: Maybe it has something to do with the dialog itself? What text opcodes are you using?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: Incinerator on 2019-08-02 20:52:36
Excellent update @Tirlititi!  8)
Everyone on compiled CSharp works well with edited one (using dnspy). Did a brief test changing an spell animation and generated CSharp caused no crash!.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41)
Post by: Tirlititi on 2019-08-03 12:16:32
Hold everything!
I found a bug when loading HWS files containing Spell Animations. It corrupts the saves done after that.

If you loaded HWS files containing Spell Animations and then saved HWS again with the version 0.41, you must do that, using the version 0.41b:
- Open the HWS with your latest changes (saved with v0.41) without the Spell Animations (it should crash anyway if you load them),
- Open a previous HWS with Spell Animations changes (saved with <= v040b) if you have a backup or do the Spell Animations changes again.
- Save as HWS; that's fine.

If you don't have a backup, you can also send me your (corrupted) HWS file and I will fix it.

Sorry for the troubles...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41)
Post by: Incinerator on 2019-08-03 15:47:30
Hold everything!
I found a bug when loading HWS files containing Spell Animations. It corrupts the saves done after that.

If you loaded HWS files containing Spell Animations and then saved HWS again with the version 0.41, you must do that, using the version 0.41b:
- Open the HWS with your latest changes (saved with v0.41) without the Spell Animations (it should crash anyway if you load them),
- Open a previous HWS with Spell Animations changes (saved with <= v040b) if you have a backup or do the Spell Animations changes again.
- Save as HWS; that's fine.

If you don't have a backup, you can also send me your (corrupted) HWS file and I will fix it.

Sorry for the troubles...

Good to know warning;
Luckily for me, I didn't use .hws file from v040b!  8-) I literally went this whole test ride without saving .hws. How risky!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: anxietymafia on 2019-08-05 11:09:45
Hi Tirlititi,

Thanks for your tool, I am having heaps of fun with it.

In regards to ongoing modding using the tool, I have made some mods I liked, saved the binary file. If I then later want to mod the disc further, is it safe to use Hades Workshop to open the disc, further mod, and save again? Is there harm in doing so?

I noticed you have said not to use the ppf on previously modified binaries. So if you saved the binary, then tried to mod it with a ppf on the modded binary, bugs can occur? When first playing with the tool, I noticed data corruption of a sort doing that, soft locks and such. I guess what I am asking, if I want to continually mod a binary file is simply overwriting it with Hades workshop safe vs ppf which is not?

Thanks.

btw, I used info in this thread from pesmerga and vivigix to make hws files for all party members join the party at lvl 1, (blank, freya, quina, amarant, and eiko), and to remove the time requirement for the excalibur II. i had trouble figuring it out at first, so i thought id upload for posterity and for anyone else. Feel free to use them as you see fit. https://www.mediafire.com/file/m9l71byhuwcf27o/LVL_1_and_EXII_scripts.7z/file
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-08-08 22:11:11
For the PSX version, it is always safe to open a non-modded version of the game, save mods as .hws and then overwrite binary files.

Here is how it works:
- Save Mod (.hws files) registers the modifications done with the tool since you opened the .bin file; it doesn't know anything about previous modifications you could have done before.
- Export as PPF does a comparison between the file on your hard drive and the modifications done with the tool since you opened the .bin file; it produces a patch that is only good for the file you had on your hard drive at the time you created it (hence the need to use that on non-modded versions).
- Overwrite binary files changes the file on your hard drive but also resets the modification track (if I remember correctly... it may not be the case anymore), that's why it should be used after saving a .hws, or else you'll lost the capability to update your mod after closing the tool.

Also, .hws files can be used to move your mod from a disc to another (instead of repeating the same modifications 4 times).

There can be bugs when opening a modded PSX game file and even if there is no bug by chance, the tool has no way to remember what were the modifications you did on a file before, so it won't mark some parts as modified (for exporting PPF for instance) even though they are not the vanilla (non-modded) datas anymore.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: lvb on 2019-08-10 10:01:34
Greetings, I'm new member here.
I have looked up some tools for FF IX and found this gem to make the game harder.
My problem is understanding the script, which I didn't know how to find the code reference, i.e the meaning of
VAR_LocInt24_9 means ????, and something like that.

I am now in the editing script of Necron attack pattern.
I just looked at https://finalfantasy.fandom.com/wiki/Necron_(boss) (https://finalfantasy.fandom.com/wiki/Necron_(boss)) which there show some sort of Ai Script.
Have compared the script between HadesWorkshop script and ff fandom wiki script shown but still I have difficulties to understand it because some code were different i.e:

- On Hades Workshop
Code: [Select]
set VAR_LocInt8_29 = VAR_LocUInt8_28
        while ( VAR_LocInt8_29 >= 0 ) {
            switch 8 ( VAR_LocInt24_24 ) from 0 {
            case +0:
                set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
                break

- FF fandom wiki
Code: [Select]
if ( dummyindex == 1 )
      if ( ( #NotMatching(SV_PlayerTeam[STATUS_CURRENT], PETRIFY | VENOM | DEATH | STOP | LOW_HP) < 4 ) && ( targetamount != 0 ) )
         set SV_FunctionEnemy[PREVENT_ATTACK] = 1
   elseif ( dummyindex == 2 )

I don't understand how to relate these. What is 257, what is 64, can i put random number like 200 or 120 as I like, and why < 4, why >=0, etc .



If someone could raw translate this Necron script (what is "VAR_LocUInt8_1", or "VAR_LocUInt16_4", or "SV_PlayerTeam[STATUS_CURRENT_B], 32", etc means) :
Code: [Select]
Function Dummy_ATB
    switch 3 ( VAR_LocUInt8_1 ) from 1 {
    case +0:
        if ( VAR_LocUInt8_8 ) {
            set #( VAR_LocUInt16_4 = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
        } else {
            set #( VAR_LocUInt16_4 = 1 )
        }
        set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
        set VAR_LocInt24_33 = GetRandom
        set VAR_LocInt24_36 = 128
        set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
        while ( VAR_LocInt8_29 >= 0 ) {
            if ( VAR_LocInt24_33 > VAR_LocInt24_36 ) {
                break
            }
            set VAR_LocInt24_36 >>= 1
            set VAR_LocInt8_29--
        }
        if ( VAR_LocInt8_29 == 65535 ) {
            set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
        }
        if ( VAR_LocInt8_29 == ( VAR_LocUInt8_28 - 1 ) ) {
            set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
            set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
        } else {
            if ( VAR_LocInt8_29 ) {
                set VAR_LocInt24_30 = ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
                set VAR_LocInt24_33 = ( ( 1 << ( ( VAR_LocInt8_29 + 1 ) * 3 ) ) - 1 )
                set VAR_LocInt24_36 = ( ( VAR_LocInt24_33 & VAR_LocInt24_21 ) >> 3 )
                set VAR_LocInt24_36 |= VAR_LocInt24_30
                set VAR_LocInt24_33 ^= 16777215L
                set VAR_LocInt24_21 &= VAR_LocInt24_33
                set VAR_LocInt24_21 |= VAR_LocInt24_36
            }
        }
        set VAR_LocInt8_29 = VAR_LocUInt8_28
        while ( VAR_LocInt8_29 >= 0 ) {
            switch 8 ( VAR_LocInt24_24 ) from 0 {
            case +0:
                set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
                break
            case +1:
                set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
                break
            case +2:
                set #( SV_Target = SV_PlayerTeam )
                break
            case +3:
                set #( SV_Target = VAR_LocUInt16_4 )
                break
            case +4:
                set #( SV_Target = VAR_LocUInt16_4 )
                break
            case +5:
                set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
                break
            case +6:
                set #( SV_Target = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
                break
            case +7:
                set #( SV_Target = SV_FunctionEnemy )
            }
            if ( VAR_LocInt24_24 >= 4 ) {
                set VAR_LocInt24_33 = ( ( VAR_LocInt24_18 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
            } else {
                set VAR_LocInt24_33 = ( ( VAR_LocInt24_15 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
            }
            set VAR_LocInt24_30 = ( #SV_Target )
            set VAR_LocInt24_36 = FirstOf(SV_FunctionEnemy[MP])
            if ( VAR_LocInt24_30 && ( VAR_LocInt24_33 <= VAR_LocInt24_36 ) ) {
                break
            }
            if ( VAR_LocInt8_29 <= 0 ) {
                break
            }
            set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
            set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
            set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( ( VAR_LocUInt8_28 - 1 ) * 3 ) )
            set VAR_LocInt8_29--
        }
        if ( VAR_LocInt24_24 >= 4 ) {
            set VAR_LocUInt8_27 = ( ( VAR_LocInt24_12 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
        } else {
            set VAR_LocUInt8_27 = ( ( VAR_LocInt24_9 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
        }
        if ( VAR_LocUInt8_27 == 9 ) {
            set VAR_LocUInt8_8 = 1
        }
        break
    case +1:
        set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
        set VAR_LocInt24_33 = GetRandom
        set VAR_LocInt24_36 = 128
        set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
        while ( VAR_LocInt8_29 >= 0 ) {
            if ( VAR_LocInt24_33 > VAR_LocInt24_36 ) {
                break
            }
            set VAR_LocInt24_36 >>= 1
            set VAR_LocInt8_29--
        }
        if ( VAR_LocInt8_29 == 65535 ) {
            set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
        }
        if ( VAR_LocInt8_29 == ( VAR_LocUInt8_28 - 1 ) ) {
            set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
            set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
        } else {
            if ( VAR_LocInt8_29 ) {
                set VAR_LocInt24_30 = ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
                set VAR_LocInt24_33 = ( ( 1 << ( ( VAR_LocInt8_29 + 1 ) * 3 ) ) - 1 )
                set VAR_LocInt24_36 = ( ( VAR_LocInt24_33 & VAR_LocInt24_21 ) >> 3 )
                set VAR_LocInt24_36 |= VAR_LocInt24_30
                set VAR_LocInt24_33 ^= 16777215L
                set VAR_LocInt24_21 &= VAR_LocInt24_33
                set VAR_LocInt24_21 |= VAR_LocInt24_36
            }
        }
        set VAR_LocInt8_29 = VAR_LocUInt8_28
        while ( VAR_LocInt8_29 >= 0 ) {
            switch 8 ( VAR_LocInt24_24 ) from 0 {
            case +0:
                set #( SV_Target = SV_PlayerTeam )
                break
            case +1:
                set #( SV_Target = SV_PlayerTeam )
                break
            case +2:
                set #( SV_Target = SV_PlayerTeam )
                break
            case +3:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +4:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +5:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +6:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +7:
                set #( SV_Target = SV_FunctionEnemy )
            }
            if ( VAR_LocInt24_24 >= 4 ) {
                set VAR_LocInt24_33 = ( ( VAR_LocInt24_18 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
            } else {
                set VAR_LocInt24_33 = ( ( VAR_LocInt24_15 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
            }
            set VAR_LocInt24_30 = ( #SV_Target )
            set VAR_LocInt24_36 = FirstOf(SV_FunctionEnemy[MP])
            if ( VAR_LocInt24_30 && ( VAR_LocInt24_33 <= VAR_LocInt24_36 ) ) {
                break
            }
            if ( VAR_LocInt8_29 <= 0 ) {
                break
            }
            set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
            set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
            set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( ( VAR_LocUInt8_28 - 1 ) * 3 ) )
            set VAR_LocInt8_29--
        }
        if ( VAR_LocInt24_24 >= 4 ) {
            set VAR_LocUInt8_27 = ( ( VAR_LocInt24_12 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
        } else {
            set VAR_LocUInt8_27 = ( ( VAR_LocInt24_9 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
        }
        set #( VAR_LocUInt16_6 = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
        if ( !( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & VAR_LocUInt16_6 ) ) ) {
            set #( SV_Target = 1 )
        }
        break
    case +2:
        set #( VAR_LocUInt16_2 = 0 )
        if ( ( FirstOf(VAR_GlobUInt16_24[HP]) - 10000 ) < ( ( FirstOf(VAR_GlobUInt16_24[MAX_HP]) - 10000 ) >> 1 ) ) {
            set #( VAR_LocUInt16_2 = VAR_GlobUInt16_24 )
        } else {
            set #( VAR_LocUInt16_2 = 1 )
        }
        set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
        set VAR_LocInt24_33 = GetRandom
        set VAR_LocInt24_36 = 128
        set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
        while ( VAR_LocInt8_29 >= 0 ) {
            if ( VAR_LocInt24_33 > VAR_LocInt24_36 ) {
                break
            }
            set VAR_LocInt24_36 >>= 1
            set VAR_LocInt8_29--
        }
        if ( VAR_LocInt8_29 == 65535 ) {
            set VAR_LocInt8_29 = ( VAR_LocUInt8_28 - 1 )
        }
        if ( VAR_LocInt8_29 == ( VAR_LocUInt8_28 - 1 ) ) {
            set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
            set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
        } else {
            if ( VAR_LocInt8_29 ) {
                set VAR_LocInt24_30 = ( VAR_LocInt24_24 << ( VAR_LocInt8_29 * 3 ) )
                set VAR_LocInt24_33 = ( ( 1 << ( ( VAR_LocInt8_29 + 1 ) * 3 ) ) - 1 )
                set VAR_LocInt24_36 = ( ( VAR_LocInt24_33 & VAR_LocInt24_21 ) >> 3 )
                set VAR_LocInt24_36 |= VAR_LocInt24_30
                set VAR_LocInt24_33 ^= 16777215L
                set VAR_LocInt24_21 &= VAR_LocInt24_33
                set VAR_LocInt24_21 |= VAR_LocInt24_36
            }
        }
        set VAR_LocInt8_29 = VAR_LocUInt8_28
        while ( VAR_LocInt8_29 >= 0 ) {
            switch 8 ( VAR_LocInt24_24 ) from 0 {
            case +0:
                set #( SV_Target = VAR_LocUInt16_2 )
                break
            case +1:
                set #( SV_Target = RandomInTeam(( ( NotMatching(SV_EnemyTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_EnemyTeam[STATUS_CURRENT_B], 64) ) & ( ~Matching(SV_EnemyTeam[STATUS_CURRENT_A], 4194304L) ) )) )
                break
            case +2:
                set #( SV_Target = RandomInTeam(( ( NotMatching(SV_EnemyTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_EnemyTeam[STATUS_CURRENT_B], 64) ) & ( ~Matching(SV_EnemyTeam[STATUS_CURRENT_A], 8388608L) ) )) )
                break
            case +3:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +4:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +5:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +6:
                set #( SV_Target = SV_FunctionEnemy )
                break
            case +7:
                set #( SV_Target = SV_FunctionEnemy )
            }
            if ( VAR_LocInt24_24 >= 4 ) {
                set VAR_LocInt24_33 = ( ( VAR_LocInt24_18 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
            } else {
                set VAR_LocInt24_33 = ( ( VAR_LocInt24_15 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
            }
            set VAR_LocInt24_30 = ( #SV_Target )
            set VAR_LocInt24_36 = FirstOf(SV_FunctionEnemy[MP])
            if ( VAR_LocInt24_30 && ( VAR_LocInt24_33 <= VAR_LocInt24_36 ) ) {
                break
            }
            if ( VAR_LocInt8_29 <= 0 ) {
                break
            }
            set VAR_LocInt24_24 = ( VAR_LocInt24_21 & 7 )
            set VAR_LocInt24_21 = ( ( VAR_LocInt24_21 >> 3 ) & 2097151L )
            set VAR_LocInt24_21 |= ( VAR_LocInt24_24 << ( ( VAR_LocUInt8_28 - 1 ) * 3 ) )
            set VAR_LocInt8_29--
        }
        if ( VAR_LocInt24_24 >= 4 ) {
            set VAR_LocUInt8_27 = ( ( VAR_LocInt24_12 >> ( ( VAR_LocInt24_24 - 4 ) * 6 ) ) & 63 )
        } else {
            set VAR_LocUInt8_27 = ( ( VAR_LocInt24_9 >> ( VAR_LocInt24_24 * 6 ) ) & 63 )
        }
    }
    switch 9 ( VAR_LocUInt8_27 ) from 7 {
    case +0:
        if ( #( SV_FunctionEnemy[MP] <$ 46 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +1:
        if ( #( SV_FunctionEnemy[MP] <$ 36 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +2:
        if ( #( SV_FunctionEnemy[MP] <$ 40 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +3:
        if ( #( SV_FunctionEnemy[MP] <$ 24 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +4:
        if ( #( SV_FunctionEnemy[MP] <$ 24 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +5:
        if ( #( SV_FunctionEnemy[MP] <$ 24 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +6:
        if ( #( SV_FunctionEnemy[MP] <$ 20 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +7:
        if ( #( SV_FunctionEnemy[MP] <$ 8 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    case +8:
        if ( #( SV_FunctionEnemy[MP] <$ 8 ) ) {
            set VAR_LocUInt8_27 = 16
        }
        break
    }
    if ( SV_Target == 0 ) {
        set VAR_LocUInt8_27 = 16
    }
    switch 3 ( VAR_LocUInt8_1 ) from 1 {
    case +0:
        if ( ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & ( ~Matching(SV_PlayerTeam[STATUS_CURRENT_A], 512) ) ) ) < 4 ) {
            set #( SV_Target = 0 )
            set VAR_LocUInt8_27 = 16
        }
        break
    case +1:
        if ( ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & ( ~Matching(SV_PlayerTeam[STATUS_CURRENT_A], 512) ) ) ) < 3 ) {
            set #( SV_Target = 0 )
            set VAR_LocUInt8_27 = 16
        }
        break
    case +2:
        if ( ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & ( ~Matching(SV_PlayerTeam[STATUS_CURRENT_A], 512) ) ) ) < 2 ) {
            set #( SV_Target = 0 )
            set VAR_LocUInt8_27 = 16
        }
        break
    }
    set VAR_LocUInt8_39 = ( #SV_Target )
    Attack( VAR_LocUInt8_27 )
    return

And tell me how to understand this by relate the code to 'where', maybe later I can read the rest script used on another enemies, I will be very much helped.

I have read the tips on page 1 posted by Tirlititi and still confused. I have no background of reading the code but I want to know.
I am sorry for the inconvenience.
Thank you very much.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-08-10 13:59:39
I am the one who put the AI script on ffwikia. They are indeed a bit reworked there to make it more clear.

Firstly, the example you gave do not compare the same things. You are not in the same function or at the same point of the function.
Secondly, "VAR_LocInt24_9" is a variable but since it has no name inside the game's code, it is given an obtruse name by default. "Loc" specifies that it's a local variable, "Int24" specifies that it's a signed number using 24 bits (it can represent large numbers, unlike "Int8" that can represent only numbers from -128 to 127; that's binary computation stuff but it's not mandatory to understand it though it makes things easier).
You should totally use "File -> Open Mod -> LocalVariableSettings.hws" as it will give names to these variables according to their usage inside the AI scripts (the work is not done yet with the Field scripts).

Finally, I suggest to see first another AI script to understand how things are done. Necron's AI is not the simplest by a large margin (I mean, Necron's AI is simple but not the AI of his dummies who actually do most of the job).
I recommend looking at the AI script of Tantarian: you should be able to grab how things work and it also uses a feature shared with Necron, the "Stand Animation" alternative.

And don't hesitate to look around; there's a list of function codes available and ~60% of the screen is dedicated to give more information than the raw script text (in particular, the "257" that you spotted should be read as a "Status List A" value and means "Petrify | Death", Petrify or Death).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: lvb on 2019-08-11 12:19:48
Thank you very much for the help, Tirlititi

I don't know if the zip compile contains the localvariable which at first I don't know what is the use of it. I have open the LocalVariableSettings.hws and the code now seems a bit clear to understand. I'm not aware of it at first, thank you anyway.

Actually, I didn't plan to rework the Necron attack pattern script, I just want Necron to use all its skills beside Grand Cross, Neutron ring, and Blue Shockwave (it felt so monotone for me and less challenging if it only attacks with those 3 skills). I'm a bit confused that when I check the skill it had, there's more than Grand Cross, which are Thundaga, Firaga, Holy, etc but it still use only those 3 skills. So I recheck again at wiki and found out Necron had script which detects whose character using Reflect then he won't ever use any reflectable magic attacks (even after I unchecked the "reflect" and "return magic").

After I follow your suggestion to learn first Tantarian script (and I find it very easy to understand), I understood a bit how to read Necron's script. So then I just have to edit the "reflecttargetcheck" to make Necron use all its skills to attack by modifying:
Code: [Select]
        set #( reflecttargetcheck = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) & ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32) ) ) )) )
        if ( !( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & reflecttargetcheck ) ) ) {
            set #( SV_Target = 0 )}

to

Code: [Select]
        set #( reflecttargetcheck = RandomInTeam(( ( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) )) )
        if ( !( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 4355) & reflecttargetcheck ) ) ) {
            set #( SV_Target = 1)}


assuming the SV_Target value is both 0 and 1 only (on/off), I modify it to  (assuming it will be activated even after the reflect checker detects them on 'reflect' or not). Up until now I still don't know why is there '& ( ~( Matching(SV_PlayerTeam[STATUS_CURRENT_B], 32) | Matching(SV_PlayerTeam[STATUS_AUTO_B], 32)' and don't know the meaning of 32. And because it's different than wiki (where there are no 'Matching' only the 'NotMatching'), I decided to remove them.

Problem solved. However, the multiple target magic attack only deals on 1 character. So I tried to relearn again the Tantarian's script, found out it's on the SV_Target. On Necron case it shows 1 (and my assumption is wrong, it's not the on/off value, but actually it's 'amount' value), then I edit it to 5 (just like Tantarian's 'Attack(5)' on 'default: set #( SV_Target = SV_PlayerTeam )' which I don't know the meaning of it and just try it). In my opinion, if Necron's multiple magic deals on 1 character equals to 'SV_Target = 1', and Tantarian's multiple attack deals on all 4 character, it should be equal to 'Attack(4)' (which I still don't know the meaning of 5 it has).

Then finally, all character can be damaged by modifying:
Code: [Select]
            set #( SV_Target = 1)
to

Code: [Select]
            set #( SV_Target = 5)

I agree that Necron's script case is a whole complicated one, but I do believe Ozma one will be the most complicated. Fortunately, all I want to do is minor modify.

Anyway, thank you so much for the help.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-08-12 12:39:16
SV_Target does not work like that.

"set SV_Target = 1" -> Only the 1st player's character is targeted (usually Zidane).
"set SV_Target = 2" -> Only the 2nd player's character is targeted.
"set SV_Target = 4" -> Only the 3rd player's character is targeted.
"set SV_Target = 8" -> Only the 4th player's character is targeted.
"set SV_Target = 16" -> Only the 1st enemy is targeted.
"set SV_Target = 32" -> Only the 2nd enemy is targeted.
"set SV_Target = 64" -> Only the 3rd enemy is targeted.
"set SV_Target = 128" -> Only the 4th enemy is targeted.
And then, you add numbers to have multiple targets. The whole player's party is thus targeted with "set SV_Target = 15" and not 5 (if you watch more carefully, you'll see that only two characters are affected when you use 5).
However, because the number of characters/enemies may vary, it is very unusual to use the numbers directly; oftentimes, "SV_PlayerTeam" or "SV_EnemyTeam" are used instead of "15" or "240" respectively. The "NotMatching" or "Matching" rules out characters not matching some conditions (the "32" means "Reflect": again, select that number and see how it converts to the "Status List B" which can be seen on the left of the window, inside the "Battle" panel). For single-targeted spells, a "RandomInTeam" is used.

The number used as an argument for the "Attack" corresponds to the attack in the attack list. Look at what's displayed on the right.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: lvb on 2019-08-13 15:18:11
SV_Target does not work like that.

"set SV_Target = 1" -> Only the 1st player's character is targeted (usually Zidane).
"set SV_Target = 2" -> Only the 2nd player's character is targeted.
"set SV_Target = 4" -> Only the 3rd player's character is targeted.
"set SV_Target = 8" -> Only the 4th player's character is targeted.
"set SV_Target = 16" -> Only the 1st enemy is targeted.
"set SV_Target = 32" -> Only the 2nd enemy is targeted.
"set SV_Target = 64" -> Only the 3rd enemy is targeted.
"set SV_Target = 128" -> Only the 4th enemy is targeted.
And then, you add numbers to have multiple targets. The whole player's party is thus targeted with "set SV_Target = 15" and not 5 (if you watch more carefully, you'll see that only two characters are affected when you use 5).
However, because the number of characters/enemies may vary, it is very unusual to use the numbers directly; oftentimes, "SV_PlayerTeam" or "SV_EnemyTeam" are used instead of "15" or "240" respectively. The "NotMatching" or "Matching" rules out characters not matching some conditions (the "32" means "Reflect": again, select that number and see how it converts to the "Status List B" which can be seen on the left of the window, inside the "Battle" panel). For single-targeted spells, a "RandomInTeam" is used.

The number used as an argument for the "Attack" corresponds to the attack in the attack list. Look at what's displayed on the right.

Hello, sorry for late replying. I have some work to do.
Strange. I find that '5' has done some damage to all of the character in the team, however this is very useful information. Now I know how to use the SV_target value properly.
Actually, I'm aware the left panel were use to define the conditions. I did some change for the treasure item by looking at it, but in this case it was very confusing at first because when I hit on some number in the script, it defines some condition even if the number does not relate to 'item' or something else.

Now I get the point of how to hit on the right number so it will define the right condition (based on your short explanation above). Much appreciate it. I will update anything later including anything confuse me. For someone who had no idea of reading script your explanation was very much helpful. Thank you.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Incinerator on 2019-08-14 05:03:45
SV_Target does not work like that.

"set SV_Target = 1" -> Only the 1st player's character is targeted (usually Zidane).
"set SV_Target = 2" -> Only the 2nd player's character is targeted.
"set SV_Target = 4" -> Only the 3rd player's character is targeted.
"set SV_Target = 8" -> Only the 4th player's character is targeted.
"set SV_Target = 16" -> Only the 1st enemy is targeted.
"set SV_Target = 32" -> Only the 2nd enemy is targeted.
"set SV_Target = 64" -> Only the 3rd enemy is targeted.
"set SV_Target = 128" -> Only the 4th enemy is targeted.
And then, you add numbers to have multiple targets. The whole player's party is thus targeted with "set SV_Target = 15" and not 5 (if you watch more carefully, you'll see that only two characters are affected when you use 5).
However, because the number of characters/enemies may vary, it is very unusual to use the numbers directly; oftentimes, "SV_PlayerTeam" or "SV_EnemyTeam" are used instead of "15" or "240" respectively. The "NotMatching" or "Matching" rules out characters not matching some conditions (the "32" means "Reflect": again, select that number and see how it converts to the "Status List B" which can be seen on the left of the window, inside the "Battle" panel). For single-targeted spells, a "RandomInTeam" is used.

The number used as an argument for the "Attack" corresponds to the attack in the attack list. Look at what's displayed on the right.

I'm glad you showed that, because I've beaconed to have the enemy target a specific character!.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: lvb on 2019-08-17 13:12:13
Hello, Tirlititi.
I have some problem with HW, but this is not the code thing probelm like I have posted before.

First, When I tried to 'Open Mod' my .hws save file (compiled completely from Spells to Fields) to the original clean game, it suddenly force close the Hades Workshop.
I try to find the cause by opening the hws once again and checking 1 by 1 category (from Spells, Items, then Enemies, etc) and once it open on the 'World Maps', HW closed itself with no loading bar at all (the loading bar with 'n/n' text)
I have unchecked 'including text' and 'including locals', and checked the text only, checked the locals only, still force closed.
So then the problems found while I open Mod the 'World Maps' only.

My FF IX game is clean with no mod except HW mods only.

Notes: In 'World Maps', I have some modified only on the 'Battle Spots' tab, to change what enemy should show on the specific places. And also I find that the 'battle spots' tab is actually loaded incorrectly at first opened the HW (e.g. on Battle Spot 1, Normal, Mist Continent, Grassland (Day), etc. the enemy selection shown a bit mess), but after I maximize the HW window, it loaded correctly. And it always like that whenever I open the HW and load the game.

Second, I want to combine the mods with Moguri Mod. However, after I successfully patched the Moguri Mod, and wanted to 'open Mod' my .hws to get my HW mods back after the Moguri patch by opening the FF9Launcher.exe file, it takes very long to load the HW data. I assume the HW won't work on the patched with any mods FFIX Launcher. So I decided to reinstall the game, and open mod my .hws on it, then the first problem above appeared.
I have downloaded the latest 0.41b HW.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-08-17 20:44:30
First: that's absolutly impossible.
If the loading bar is not showing for the World Maps, it means that HW has bugs while loading the WM datas from the game. As long as the datas required are not loaded, the .hws file is barely checked (it's only checked to see the available sections, which works fine since you see them before confirming).
So either the loading bar shows up, or you have a file modded without you knowing it (most probable). The WM datas are mainly in the p0data3.bin archive.

Second: You should be able to open HW on the Moguri Mod except for the DLL changes.
In order to do that, you need a folder with:
1) A "FF9_Launcher.exe", whichever one (even a dummy file of 0kb would work as long as it's correctly named),
2) The archive files of the Moguri Mod (all the p0dataX.bin, the "mainData", "resources.assets" and all the "sharedassetsX.assets", the "levelX" shouldn't be needed except if you want to use the Unity Assets Viewer tool),
3) The "Assembly-CSharp.dll" of the normal game, unmodded (at least not modded by Memoria or the Moguri Mod).

Put all these files in sub-folders mimicking the directory of the game, select the "FF9_Launcher.exe" with HW and it should be alright.
When saving, choose the options "Spreadsheets" + "Unity Archives": the archives of Moguri should be generated correctly and there will be .csv files that can be read by Memoria.
The p0dataX.bin should go in the Moguri Mod's folder (that's where the modded archives are), something like "C:\Program Files\Moguri Mod\StreamingAssets".
The .csv files should also go in a Moguri Mod's subfolder, like "C:\Program Files\Moguri Mod\StreamingAssets\Data\Battle\Actions.csv".
The resources/sharedassets should go in the Steam's file folder, as usual.

I hope that it helps. Tell me if I'm wrong somewhere ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: anxietymafia on 2019-08-26 02:28:13
Is it possible to make Garnet use her short hair model on the field?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-08-26 08:56:18
Unfortunatly, this is mainly hard-coded. You can change it using the tool dnSpy but not Hades Workshop only.
In dnSpy, open the Assembly-CSharp.dll, search for the following classes and methods and edit a few lines:

1) In the class "ModelFactory" and its method "CreateModel", there's this block:
Code: [Select]
if (ModelFactory.garnetShortHairTable.Contains(text))
{
ushort num = BitConverter.ToUInt16(FF9StateSystem.EventState.gEventGlobal, 0);
bool flag = num >= 10300;
if (flag)
{
// etc... Disable "long_hair" components
}
else
{
// etc... Disable "short_hair" components
}
}
Replace the "if (flag)" line by "if (flag && isBattle)".

2) In the class "EventEngine" and its method "DoEventCode" (that's a very long one), there is a "case EBin.event_code_binary.MODEL":
Code: [Select]
case EBin.event_code_binary.MODEL:
{
posObj.model = (ushort)this.getv2();
Obj expr_1EA4 = this.gExec;
expr_1EA4.flags |= 1;
posObj.eye = (short)(-4 * this.getv1());
if (this.gMode == 1)
{
string text = FF9BattleDB.GEO[(int)posObj.model];
posObj.go = ModelFactory.CreateModel(text, false);
GeoTexAnim.addTexAnim(posObj.go, text);
if (ModelFactory.garnetShortHairTable.Contains(text))
{
posObj.garnet = true;
ushort num7 = BitConverter.ToUInt16(FF9StateSystem.EventState.gEventGlobal, 0);
posObj.shortHair = (num7 >= 10300);
}
// etc...
Change the line "posObj.shortHair = (num7 >= 10300);" to "posObj.shortHair = false;".

There might be a third method to change, the method "addTexAnim" of the class "GeoTexAnim", but I am not sure if it is important or if it would mess up with the battle model.
And there would be a 4th one, "ff9play::FF9Play_GetSerialID", if you wanted to change her model in battles as well.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: anxietymafia on 2019-08-26 10:08:27
Thanks so much for the reply,

Is this also possible for the psx version?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-08-26 14:52:21
No, sorry.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Clem Fandango on 2019-09-08 22:10:52
I've been working with the tool for a while now and I'm trying to find a way around how Phoenix Downs interact with undead monsters.

Specifically I'm trying to find a way to make the item no longer bring the HP of undead targets down to critical HP levels. My initial thought was to have the item use the Life formula, but that doesn't appear to work since there's no hit rate section for items (unless I'm totally blind) and Phoenix Downs using the formula don't seem to work on dead allies either.

Part of the problem is that I still want to have undead targets take damage from restorative sources since I have at least one spell in the mod based around doing that, so taking away the undead type from enemies isn't something I want to do. I've also noticed that granting enemies Easy Kill status doesn't seem to make them immune to the effect either (which is wild to think about, honestly), so I'm not sure if there's something I'm missing to make this happen.

Worst case scenario I can just make Phoenix Downs really expensive so just chucking them at zombies and such isn't economically feasible, I mean if it's good enough for FF5 it's good enough for me, but I wanted to ask and see if there's something I'm missing.

Also, apologies if this has been asked before, I did a brief and possibly bad search and couldn't find anything.

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-09-10 15:52:48
Hello Clem Fandango. Sorry I didn't see your message before.

It is not possible to do that without modding the battle engine. It can be done either with Albeoris's Memoria tool or with dnSpy, but not directly with HW (or only with added difficulties for no reason). In both case, it's a bit of C# coding.

Using Memoria, you need to change the script of Phoenix Downs (inside "Scripts/Sources/Battle/0072_ItemPhoenixScript.cs"):
Code: [Select]
public void Perform()
{
if (!_v.Target.CanBeRevived())
return;

if (_v.Target.IsZombie)
{
_v.Context.Flags |= BattleCalcFlags.Miss; // Add this line
return; // Add this line
// if ((_v.Target.CurrentHp = (UInt16)(GameRandom.Next8() % 10)) == 0) // Remove this line
// _v.Target.Kill(); // Remove this line
}
else if (_v.Target.CheckIsPlayer())
{
if (_v.Target.IsUnderStatus(BattleStatus.Death))
_v.Target.CurrentHp = (UInt16)(1 + GameRandom.Next8() % 10);

_v.TargetCommand.TryRemoveItemStatuses();
}
}

Using dnSpy, you need to change the method "btl_calc::CalcMain" and more specifically the "case 72":
Code: [Select]
if (Status.checkCurStat(target, 64u) || btl_util.CheckEnemyCategory(target, ENEMY.ENEMY_CATEGORY_UNDEAD))
{
calc_VAR.flags |= 1; // Add this line
// Remove the following lines, "if ((target.cur.hp = (ushort)(Comn.random8() % 10)) == 0)" and "SetEnforceHP0"
}
else if (btl_calc.CheckNotPlayerMiss(calc_VAR))
// etc... no change there
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Clem Fandango on 2019-09-10 16:26:02
Hypothetically, were I to enact the change using dnSpy, would the HWS files used by Hades pick up that change? In other words, if I wanted to distribute a mod as an HWS file, would folks playing the mod still need to make the same changes in order for the Phoenix Down change to be in effect? I'm just trying to figure out which way I should go about this while making it as seamless as possible should I choose to release a mod.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-09-10 18:05:35
No, the .hws wouldn't hold that change.
That's a real problem for me as well as I would largely prefer to have only 1 file for the mod, but the nature of the change is just not embeddable in a .hws... so I decided that I would distribute the C# code as well (generating the mod then requires Memoria or dnSpy in addition to HW).
Using Memoria, it's simply a .cs file to share in addition to the .hws (and then I think that you need to run Memoria's script compiler, but that's easy).

In any case, the default way to share a mod is not to share the .hws (+ maybe C# code) but to share the generated Steam files (p0data, DLL...).
Even if it creates mod compatibility problems, that's the easiest way to do it, both for the modder and the user.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Clem Fandango on 2019-09-10 18:43:47
Thanks for the reply, I was afraid this might make things kind of complicated. I think for the moment I might keep working on other stuff and leave this towards latter parts of this whole process. It's generally not a showstopper for what I'm working with, but I'll definitely need to consider it further if I ever end up releasing anything.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Clem Fandango on 2019-09-20 02:50:45
I've got a question regarding spell sequencing that I didn't see mentioned anywhere in the FAQ.

Is it possible to take a spell that normally has animations set to one target to affect multiple targets instead?

For a specific example (not to mention exactly what I'm trying to change) is something like Shell. The Shell animation in the game only hits one target. What I'm hoping is possible is set the spell sequencing so that the Shell animation hits every target in the party in sequence, similar to how something like Mighty Guard works. I'm not even entirely sure if this is possible due to engine limitations and my experiments in making it do this through editing spell sequencing has generally resulted in crashes. I'm under the impression that this isn't doable, but I wanted to check in this thread first.

It's not a huge issue and if it's not possible I'll probably just opt for the Mighty Guard animation instead or something similar. I've just found through play testing that there's never really any ideal situation to cast just Shell or Protect; both effects don't last very long even in ideal circumstances and while the bonus they have is nice, it's not super necessary in vanilla and I wouldn't want to wind up making it mandatory either. It's fairly weak for a single target buff.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-09-22 14:41:52
It's not possible to make it look nice, unfortunatly :/
The spell animations are the biggest black box of the game now because it's delegated to an external DLL in the Steam version and I can't access its source code, either to see how it works or to modify them (all the possibilities and informations for that section were obtained the old way: guessing and testing).

You may however make Shell's animation hit all the targets in effectivity. For that, you simply need to change the line "Effect Point: 1st target" to "Effect Point: all targets" in its Spell Animation sequence. It will only display the effect on the 1st character though... so I guess that Mighty Guard's animation is still a better choice anyway.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Clem Fandango on 2019-09-29 00:43:00
Ah, okay. Thanks, I appreciate the detailed description.

Also I realized there was an easy workaround for the whole Phoenix Down undead thing I mentioned a couple weeks back: I can just change the targeting so that enemies cannot be targeted with Phoenix Downs, it seems so obvious in retrospect.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Clem Fandango on 2019-10-09 02:02:28
I've got another question that I haven't been able to find an answer for, either here or on the Steam page.

I've learned how to change the content of Chocograph contents, which is great. I'm wondering if it's possible to restrict when certain Chocographs can be obtained. Specifically I was hoping to be able to push the choocgraph that grants the Ocean movement to being only obtainable after Gulug and the final piece of the flight chocograph to be obtained only after Ipsen's castle, or possibly even into Disc 4. I've looked through various scripts, but the truth is that I don't really know where I should be looking or what it is I'm looking for. Is this even doable in the first place?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Tirlititi on 2019-10-09 18:10:20
At some point, I wanted to register the local variables of the Hot & Cold scripts but it is quite a big system and that work went on standby...
The main function (the one deciding the reward at least) is "Barrel_41" in the Chocobo Forest, "Barrel_38" in the Lagoon and "Barrel_46" in Air Garden. It's always the same. Here is that function (https://www.dropbox.com/s/9j71di7ijcfpzii/Script_Hot%26ColdReward.txt?dl=0) with most of variables given a name.

The part you're interested in is close to the top of the function:
Code: [Select]
            switch 3 ( Chocobo_ChocoColor ) from 1 {
            case +0:
                if ( Hot&ColdField == 1 ) {
                    set ChocographAvailableList |= 8 // 4th Chocograph (Yellow to Light Blue)
                    set ChocographLastAvailableFlag = 1
                }
                break
            case +1:
                if ( ( Hot&ColdField == 2 ) && ( Global_ScenarioCounter >= 9400 ) ) {
                    set ChocographAvailableList |= 2048 // 12th Chocograph (Light Blue to Red)
                    set ChocographLastAvailableFlag = 1
                }
                break
            case +2:
                if ( ( Hot&ColdField == 1 ) && ( Global_ScenarioCounter >= 9400 ) ) {
                    set ChocographAvailableList |= 8192 // 14th Chocograph (Red to Deep Blue)
                    set ChocographLastAvailableFlag = 1
                }
                break
            default:
                set ChocographLastAvailableFlag = 0
                break
            }
Without renamed variables (as it appears in Hades Workshop), it's this part:
Code: [Select]
            switch 3 ( Chocobo_ChocoColor ) from 1 {
            case +0:
                if ( Chocobo_CurrentField == 1 ) {
                    set VAR_GenInt24_172 |= 8
                    set VAR_LocUInt8_8 = 1
                }
                break
            case +1:
                if ( ( Chocobo_CurrentField == 2 ) && ( General_ScenarioCounter >= 9400 ) ) {
                    set VAR_GenInt24_172 |= 2048
                    set VAR_LocUInt8_8 = 1
                }
                break
            case +2:
                if ( ( Chocobo_CurrentField == 1 ) && ( General_ScenarioCounter >= 9400 ) ) {
                    set VAR_GenInt24_172 |= 8192
                    set VAR_LocUInt8_8 = 1
                }
                break
            default:
                set VAR_LocUInt8_8 = 0
                break
            }
So you see, you only need to increase the scenario counter lower bound for this special chocograph availability. Here are a few key scenario counter values (the first ones are named in the game's source code and I'm not always sure of the meaning, the last ones are values I searched myself in different field scripts):
Code: [Select]
SC_COUNTER_ARMOR_BLANK_START = 1500
SC_COUNTER_ARMOR_BLANK_END = 1600
SC_COUNTER_WMTITLE_BUNMEI_ON = 2400
SC_COUNTER_SGATE_DESTROYED = 2990
SC_COUNTER_CLAY_DESTROYED = 4990
SC_COUNTER_LIND_DESTROYED = 5598
SC_COUNTER_FOG_END = 5990
SC_COUNTER_KUROMA_APPEAR = 6200
SC_COUNTER_DAGGER_AWAKE = 6875
SC_COUNTER_SGATE_RECOVER = 6990
SC_COUNTER_ALEX_DESTROYED = 8800
SC_COUNTER_SUNA_MAKYU_ON = 9450
SC_COUNTER_WMTITLE_NEW_ON = 9600
SC_COUNTER_SUNA_MAKYU_OFF = 9890
SC_COUNTER_CUT_HAIR = 10300
SC_COUNTER_GET_HILDA3 = 10400
SC_COUNTER_HOKORA_START = 10600
SC_COUNTER_HOKORA_END = 10700
SC_COUNTER_LAST_WORLD = 11090

Hilda Garde obtained = 10400
Ipsen Castle entered = 10500
Ipsen Castle done = 10600
Eiko+Dagger gone to Shrine = 10620
Amarant+Freya gone to Shrine = 10640
Steiner+Vivi gone to Shrine = 10660
Shrines done = 10700
Disc 4 = 11100
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41b)
Post by: Clem Fandango on 2019-10-09 22:45:37
Well how about that! This is great, I look forward to playing around with this. Thanks for the quick reply!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-10-16 16:32:17
Update to v0.41c:
- Added script file batch importing: you can now write script functions with your favorite text editor and import it back when you're done,
- Fixed bugs with text and UI text batch importation; also, the text IDs now start from 0 instead of 1 in the exported batches (so they match with the text ID inside scripts),
- Added more unused/dummied datas (for enemies mainly) that can be recycled when modifying the game's source code; also added enemy attack targetting informations (they are mostly unused, except for deciding if Cover triggers if I'm not mistaken),
- Listed more script functions and general variables in the script editor,
- Fixed a bug with Qu's Marsh's dialogs (it was actually caused by a "mobile" version of the dialogs; I think it's unused),
- In the Randomizer, the Prison Cages' "Absorb" spell is not randomized anymore,
- Fixed another bug with spell animation sequencing.

I am retiring from FF9 modding (presumably definitively). I don't think that I'll update this tool any further. The code is on Github though and I'll still answer questions, so here you go.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: gledson999 on 2019-10-24 16:46:43
Update to v0.41c:
- Added script file batch importing: you can now write script functions with your favorite text editor and import it back when you're done,
- Fixed bugs with text and UI text batch importation; also, the text IDs now start from 0 instead of 1 in the exported batches (so they match with the text ID inside scripts),
- Added more unused/dummied datas (for enemies mainly) that can be recycled when modifying the game's source code; also added enemy attack targetting informations (they are mostly unused, except for deciding if Cover triggers if I'm not mistaken),
- Listed more script functions and general variables in the script editor,
- Fixed a bug with Qu's Marsh's dialogs (it was actually caused by a "mobile" version of the dialogs; I think it's unused),
- In the Randomizer, the Prison Cages' "Absorb" spell is not randomized anymore,
- Fixed another bug with spell animation sequencing.

I am retiring from FF9 modding (presumably definitively). I don't think that I'll update this tool any further. The code is on Github though and I'll still answer questions, so here you go.

All I can tell you with this is, thanks for what you did for Final Fantasy IX!!!

About the menu's UI size, you can try to edit the C# source code of the menu and use something like that:
Code: [Select]

Could you see this issue of Menu's UI size? I don't know anything about programming. But you told this months ago

Code: [Select]
this.SubMenuPanel.transform.localScale = new Vector3(1.2f, 1.0f, 1.0f);
(https://puu.sh/D8S1u.jpg)

This would go in the method "MainMenuUI::Awake" (at the beginning, that's fine). I am not sure if it will work though, as UI modding is not something I know a lot about (and some informations are stored in GameObject and Transform files in the archives level1 and level2). Try to play with the figures here if you see that it has an effect.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-10-24 18:49:32
So? Have you tried doing that?
But it can't be done for the PSX version. It's a modification of the game's engine, so it's for PC.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2019-10-24 21:52:41
I've got a few questions, one regarding the frog catching minigame, the second for setting a kind of AI behavior in an enemy and the last pertains to Chocograph pieces.

First, is there any way to change the amount of frogs required to be captured to make Quale appear? Specifically I'd like to drop down the last total that results in the Quale boss fight, mostly because I don't use the frog count for any damage calculations in any skills (wound up dumping Frog Drop pretty early) and I feel like the road to 99 frogs is way more of a grind than it ought to be. My hope is to drop down to a much nicer number, like 69 frogs. Seems a bit more reasonable.

Second, and I imagine there might be an example already existing in the game that I'm overlooking, but is there a way to force the AI to only use certain attacks when targets have a specific status? So for example, would it be possible for an enemy to only use Full Life on a party member when that party member is under the effects of Zombie? I was considering looking at the AI scripts from enemies in the game that do this, but like I said, I can't seem to think of any examples of it actually happening.

The last thing I wanted to ask about is similar to what I was asking about a while back with regards to changing the availability of Chocographs. I used your method and it's worked perfectly, so no problems there. Is there a way to limit the number of Chocograph Pieces (the six that turn into the Sky upgrade) that you can acquire until specific times? It's not really a huge deal if not, but it'd be cool if it's possible. I've currently got it set so that the Ocean change is only available after Gulug and am hoping to make Sky only available after Ipsen's Castle. Frankly it's not a particularly huge difference though so not a big deal. EDIT: Nevermind all of this actually, like minutes after I wrote it I checked your linked chocograph script with changed variables and was able to sort it out. Pretty obvious in retrospect, not sure how I missed it.

That aside, I'll be sure to update to the latest version of the tool, thanks for continuing to answer questions!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: gledson999 on 2019-10-25 13:00:22
So? Have you tried doing that?
But it can't be done for the PSX version. It's a modification of the game's engine, so it's for PC.

I understood, so the PSX version is impossible  :-( anyway thanks for reply and thanks for you impressive tool
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-10-25 14:30:37
About the frogs, it's in the scripts of the ponds:
1) In the "SpeakBTN" functions of the catchable frogs (Baby, Male, Female, Gold), there's a switch for the appearance of Quale:
Code: [Select]
            switchex 8 ( GetFrogAmount ) {
            case 2 ; 5 ; 9 ; 15 ; 23 ; 33 ; 45 ; 99:
                set VAR_GlobUInt8_64 = 2
                break
            default:
                break
            }
2) In the "Main_Loop", there's most of the cutscene's code, in particular the line "if ( GetFrogAmount == 99 ) {" triggering the battle.
The other rewards are also there, a bit after that line (in the "else" branch).

About the enemy targeting only Zombie characters, you can use that in an enemy script (the ATB function typically):
Code: [Select]
if ( ((GetRandom % 100) < 50) && ( FirstOf(SV_FunctionEnemy[MP]) >= 18 ) ) { // Example: 50% of chances to cast Life if there's a Zombie character and if the enemy has 18 MP or more
    set SV_Target = Matching( SV_PlayerTeam[STATUS_CURRENT_A], 64 ) // All the Zombie characters
    if ( #SV_Target ) { // Same as "if ( SV_Target ) {" or "if ( (#SV_Target) != 0 ) {"
        set SV_Target = RandomInTeam(SV_Target) // Pick only one of them
        Attack( ... ) // Cast Life
        return
    }
}
// etc... do something else if Life is not chosen for any reason
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2019-10-26 23:20:08
This is great, thanks!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-02 21:08:06
It's me from the Steam forum. I've decided to take a shot at modding this with the AF Beatrix source files.

I'm reading up on the threads in the first post and I would like to make a mod that would make her permanetly playable (not optional) after you obtain the Blue Narciss. She would be present at Lindblum when Dagger can no longer speak.

What steps would I need to do to make this possible if at all?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-03 10:00:51
It requires a lot of script writing. It's better if you are familiar with programing but in any case, you should read a bit about how to do simple things with scripts here (https://steamcommunity.com/groups/ff-modding/discussions/13/350533172684330089/?ctp=6#c1846946102851108081), here (http://forums.qhimm.com/index.php?topic=14315.msg242890#msg242890) and here (http://forums.qhimm.com/index.php?topic=14315.msg260956#msg260956) for instance.

In order to add a character to the party without asking the player's opinion (like when Vivi joins in the Prima Vista), it's this line:
Code: [Select]
set AddParty(8)"8" is an ID for Beatrix's character slot (0 is for Zidane, etc... Marcus shares Eiko's character slot).
It works only if there are less than 4 characters already. You can remove a character beforehand using this:
Code: [Select]
RemoveParty(0)
In order to enable Beatrix in the party selection menu, you must add her in party's reserve:
Code: [Select]
set Setting_PartyReserve = 511
SetPartyReserve(Setting_PartyReserve)
Note that it's a bit flag list (it works just like SV_Target (http://forums.qhimm.com/index.php?topic=14315.msg267122#msg267122) in battle scripts). Usually, this party reserve is set to 255 for all the eight normal characters, so adding 256 to that value adds Beatrix.
Party reserve is reseted at different points during the game (when characters are temporarily splitted apart, etc...) so you need to take that into account.
To display the party selection menu, it's this:
Code: [Select]
if ( IsInParty(0) ) {
    Party( 4, 1 ) // Form a party of 4 characters and lock Zidane inside
} else {
    Party( 4, 0 ) // Form a party of 4 characters without locking any character inside
}
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-03 15:48:06
I'll give it a shot.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-08 21:49:03
Editing's going well though I seem to have an issue activating the rewards against Baku in Evil Forest.

He's supposed to give exp, gil and a drop, but only AP was given at the results screen.

I also unticked disabled rewards but that didn't work.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-08 22:34:59
He's surely not defeated by the battle ending script (there's surely a line like "RunBattleCode( EndBattle, VICTORY )") so the reward specific to Baku is not given, only the reward of the group.
Make sure to flag him as defeated right before that line ending the battle:
Code: [Select]
set SV_FunctionEnemy[DEFEATED_ON] =$ 1You could also kill him for good with "set SV_FunctionEnemy[HP] =$ 0" but that would trigger other things like his death cry (I don't think he has one though), his death animation and fading... so that's a less good option.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-09 06:47:55
Thanks, it works pefect.  :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-10 20:23:58
Meant perfect/ ::)

Anyway, I'm trying to add some black magic spells to Dagger with this guide (http://forums.qhimm.com/index.php?topic=14315.msg262683#msg262683).

Code: [Select]
new rdata.FF9COMMAND(89, 349, 8276, 1, 16, 192UL)
It's not working as I'm getting that error.

Is there more I need to change to get it working?

I plan to make her a Red Mage.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-10 22:10:25
You didn't show the error.
Maybe that's a missing comma.
Maybe that's caused by a non-automatic type conversion: dnSpy does that a lot, you need to add type conversion to many places, like:
Code: [Select]
varshort = something + 16; // Error
varshort = (short)(something + 16); // Use this instead if the compiler complains: write the required converted type and wrap the computation inside parentheses
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-11 07:11:42
I never saw that error in dnspy. It complied just fine.

It was in HW when I was trying to add more spells to Dagger's magic command.  Despite following the guide, it says I can't add anymore spells to what she already has. :?

Hope that cleared the confusion
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-11 16:14:53
You can't add many spells inside commands in HW. Using dnSpy and the guide you linked is meant to bypass the limit in HW. Since you're using the Beatrix mod, I guess, that limit is already reached and that's why you need to use dnSpy.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-11 17:42:22
I am using the Beatrix mod, but not her Shiroken Trance abilities. I made her a third dualcaster with her white magic.

In dnspy, her code is:

Code: [Select]
new rdata.FF9COMMAND(89, 349, 8276, 1, 16, 8UL)Like in your guide, I changed the last number to 192.

I changed the 16 to 24 so she could gain new spells. But HW still says I can't add anymore commands.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-11 18:05:25
You can't use HW after doing that modification; that's something you have to do last.
Well, actually, I'm not sure of what are the consequences of using HW after doing that engine modification... But the limit is hardcoded in HW and the program can't catch that the limit was increased with dnSpy.

If her White Magic and her trance command use the same spells, you can avoid using dnSpy though. Simply select either one of these commands and link it to the other: doing this saves up spell slots.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-11 19:32:04
I have to be more specific in future, sorry. ::)

I want Dagger to learn more spells, not Beatrix.

Beatrix's commands will stay the same.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-11 19:55:31
Still, if you link Beatrix's commands, it saves up space for adding more spells to another command.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-11 20:14:31
That's what I've done for Beatrix, Dualcast with her White spells.

All I can do for now is leave Dagger with 6 white and 10 black spells until later.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-13 21:49:54
Is there a way to increase or decrease the time limit when getting to Dagger at Alexandria?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-14 10:34:31
Yes. In the script of "Environment -> Fields -> A. Castle/East Tower", there are these lines near the 2 thirds of the function "Zidane_Loop":
Code: [Select]
        ChangeTimerTime( 1801 )
        ShowTimer( 1 )
        RunTimer( 1 )
1800 seconds = 30 x 60 seconds = 30 minutes. Just put any number you want there to change the initial time limit.
Then, while it is running, you may use a line like "ChangeTimerTime( GetTimerTime + 60 )" to give a time bonus or whatever, for instance after defeating Tantarian in the Library.

Tip: this kind of setting, done in a cutscene, is usually either in the "Main_Loop" function of the cutscene's field or inside a function of the character doing the action at the same time the setup occurs. There, Zidane is the one speaking ("Yeah! We've got 30 minutes...") when the timer shows up, so that's in his function.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-14 14:49:14
Thanks. It worked fine.

I'm almost at the point where I have to fight Beatrix for the last time and I want her special boss theme to play instead of the regular one.

Do I need to go into the Field tab for the Queen's Chamber or dnspy for this?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-14 15:13:53
You need to use the Unity Assets Viewer for that.
Open the resources.assets archive, search for the file "BtlEncountBgmMetaData.txt", export it, modify it and then re-import it.
Inside that file, there's a list of field IDs (so the Queen's Chamber in which you fight Beatrix is 1223) and for each field, a list of battles that can trigger in that field with the music ID of the battle ran. If a battle is missing there, the ambiant music doesn't stop when entering a battle.

So just find the field (1223), the battle (73) and put the correct music ID for it (117, "The Wavering Blade").

Here's a list of music IDs. I don't think that you can actually see it in Hades Workshop (only in the UAV when you open the music archive p0data62).
Code: [Select]
music033 -> A Place to Call Home (internal ID: 58)
music078 -> A Song from Her Memory (internal ID: 106)
music083 -> Aboard the Hilda Garde (internal ID: 112)
music012 -> Aloha De Chocobo (internal ID: 24)
music005 -> Amarant's Theme (internal ID: 2)
music117 -> Another Nightmare (internal ID: 45)
music122 -> Assault of the Silver Dragons (internal ID: 147)
music102 -> Awaking Song (internal ID: 77)
music070 -> Bahamut is Summoned (internal ID: 98)
music006 -> Battle (internal ID: 0)
music071 -> Before the Altar (internal ID: 99)
music043 -> Beyond the Twilight (internal ID: 67)
music054 -> Black Mage Village (internal ID: 82)
music024 -> Boss Battle (internal ID: 35)
music059 -> Bran Bal, the Soulless Village (internal ID: 87)
music114 -> Broken Spell, Healed Hearts (internal ID: 146)
music044 -> Burmecia (internal ID: 68)
music077 -> Chamber of a Thousand Faces (internal ID: 105)
music097 -> Cid's Theme (internal ID: 133)
music049 -> Cleyra Settlement (internal ID: 80)
music064 -> Cleyra's Trunk (internal ID: 92)
music062 -> Conde Petie (internal ID: 90)
music037 -> Court Jesters (internal ID: 53)
music087 -> Crystal World (internal ID: 121)
music093 -> Daguerreo, the Hermit's Library (internal ID: 129)
music003 -> Danger in the Forest (internal ID: 4)
music057 -> Dark City Treno (internal ID: 85)
music098 -> Dark Messenger (internal ID: 134)
music067 -> Desert Palace (internal ID: 96)
music069 -> Devil's Ambition (internal ID: 97)
music030 -> Distant Memory (internal ID: 59)
music121 -> Doga and Une (internal ID: 148)
music050 -> Eidolon Wall (internal ID: 81)
music060 -> Eiko's Theme (internal ID: 88)
music113 -> Esto Gaza (internal ID: 144)
music055 -> Eternal Harvest (internal ID: 83)
music014 -> Eye to Eye (internal ID: 20)
music038 -> Faerie Battle (internal ID: 61)
music101 -> Final Battle (internal ID: 71)
music013 -> Find the Princess (internal ID: 27)
music053 -> Fleeting Life (internal ID: 76)
music116 -> Foolproof Love Letter Scheme (internal ID: 141)
music048 -> Fossil Roo (internal ID: 79)
music011 -> Freya's Theme (internal ID: 32)
music001 -> Game Over (internal ID: 6)
music063 -> Gargan Roo (internal ID: 91)
music010 -> Garnet's Theme (internal ID: 29)
music105 -> Girl of Madain Sari (internal ID: 139)
music118 -> Guardians (internal ID: 72)
music082 -> Hunter's Chance (internal ID: 111)
music111 -> I Want to be Your Canary (internal ID: 145)
music031 -> Ice Cavern (internal ID: 60)
music080 -> Iifa, the Ancient Tree of Life (internal ID: 109)
music112 -> Inseparable Hearts (internal ID: 142)
music075 -> Ipsen's Castle (internal ID: 103)
music115 -> Kiss of Betrayal (internal ID: 41)
music066 -> Kuja's Theme (internal ID: 95)
music088 -> Light of Destiny (internal ID: 124)
music047 -> Lindblum (internal ID: 74)
music058 -> Look Back, See the Frog! (internal ID: 86)
music092 -> Master of Time (internal ID: 118)
music084 -> Melodies of Life (internal ID: 113)
music096 -> Memoria (internal ID: 132)
music046 -> Moogle's Theme (internal ID: 73)
music081 -> Mount Gulug (internal ID: 110)
music061 -> Mourning in the Sky (internal ID: 89)
music025 -> Oeilvert (internal ID: 36)
music027 -> Out of the Frying Pan (internal ID: 49)
music026 -> Outlaws (internal ID: 44)
music045 -> Over the Hill (internal ID: 69)
music056 -> Pandemonium (internal ID: 84)
music106 -> Peaceful City (internal ID: 138)
music120 -> Prelude (internal ID: 156)
music041 -> Prima Vista Orchestra (internal ID: 65)
music089 -> Protecting My Devotion (internal ID: 125)
music032 -> Qu's Marsh (internal ID: 57)
music009 -> Quina's Theme (internal ID: 15)
music036 -> RUN! (internal ID: 52)
music090 -> Roses of May (internal ID: 116)
music052 -> Rufus' Welcoming Ceremony (internal ID: 75)
music094 -> Ruins of Madain Sari (internal ID: 130)
music079 -> South Gate (internal ID: 108)
music110 -> Star-Crossed Lovers (internal ID: 143)
music039 -> Steiner's Delusion (internal ID: 62)
music007 -> Steiner's Theme (internal ID: 10)
music017 -> Swords of Fury (internal ID: 18)
music095 -> Terra (internal ID: 131)
music042 -> Tetra Master (internal ID: 66)
music109 -> The Black Waltz (internal ID: 140)
music020 -> The Evil Within (internal ID: 30)
music108 -> The Extraction (internal ID: 7)
music016 -> The Fateful Hour (internal ID: 17)
music073 -> The Four Mirrors (internal ID: 101)
music018 -> The Meeting (internal ID: 12)
music091 -> The Wavering Blade (internal ID: 117)
music021 -> Thy Warmth (internal ID: 33)
music022 -> Tragic Love (internal ID: 25)
music072 -> Ukulele de Chocobo (internal ID: 100)
music029 -> Unforgettable Silhouette (internal ID: 50)
music004 -> Unforgettable Sorrow (internal ID: 1)
music051 -> Unrequited Love (internal ID: 70)
music015 -> Vamo Alla Flamenco (internal ID: 22)
music000 -> Victory Fanfare (internal ID: 5)
music002 -> Village of Dali (internal ID: 3)
music008 -> Vivi's Theme (internal ID: 9)
music068 -> Wicked Melody (internal ID: 94)
music028 -> You're Not Alone (internal ID: 48)
music085 -> Zidane and Dagger's Song (internal ID: 115)
music023 -> Zidane's Theme (internal ID: 34)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-14 19:33:09
I've changed it, but it won't let me import it back in.

The text for it is greyed out.


NM, I saw I had to close the launcher and import it that way. :-[

Works fine. :-D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-16 21:29:12
OK, I'm nearing the end of disc 2 and one of my major changes is to add another hopeless boss fight.

I plan to add Kuja and end the battle against the party with Flare Star.
Down the line I plan to the same with Steiner and Beatrix face him at Alexandria for another hopeless fight.

I know I need to do a few changes in the fields tab to trigger the fight, but how do I add him as a boss in the enemy tab?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-17 10:10:47
You can't add new battles unfortunatly.
However, there are a few dummied battles (that's what I've used to add the 4 extra bosses):
- 2 dummy vices that have nonsensical names (the names are actually raw japanese glyphs),
- 1 Zorn/Thorn battle that is dummied (it doesn't have the "Marthym" dialogs and only dummy attacks).
Also, you may delete a few redundant battles (Grand Dragons...) and replace them in the World maps battle lists. The two Ozma battles are also nearly the same as the only difference is the "Out of reach" flag, etc...

You can copy/paste single enemies and single attacks with a right-click (so right-clicking "Kuja" -> copy -> go to a dummied battle -> right-click -> paste).
Title: Re: [FF9] General editor - Hades Workshop (0.37)
Post by: jeremyhall2727 on 2019-11-18 02:20:59
@Shinryu actually u can easily remove the time limit in getting the  excalibur 2 using this tool so u dont need to rush your game. ;)  go to
environment---->fields-->memoria gate to space and edit script:


 if ( GetTime <= 43200L ) {
        InitCode( 3, 0 )

remove the [ if ( GetTime <= 43200L ) { ]

and this one

 if ( ( ( ( IsMovementEnabled == 1 ) && ( VARL_GenBool_7730 == 0 ) ) && ( VAR_GlobBool_145 == 0 ) ) && ( GetTime <= 43200L ) ) {

remove this line : && ( GetTime <= 43200L ) ) {
TY
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: jeremyhall2727 on 2019-11-18 02:22:24
thank you for hades workshop
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-18 08:05:07
So if I want to add an extra line when the party confront Kuja, do I need to add these cases like this that's already in the game?

Code: [Select]
case 49:
        RunAnimation( 10382 )
        WaitAnimation(  )
        WaitAnimation(  )
        SetAnimationFlags( 2, 0 )
        RunAnimation( 10388 )
        WindowAsync( 2, 128, 212 )
        WaitWindow( 2 )
        set VAR_GlobInt16_47 = 50
        SetAnimationFlags( 0, 0 )
        RunAnimation( 10392 )
        WaitAnimation(  )
        RunAnimation( 8197 )
        WaitAnimation(  )
        SetAnimationFlags( 2, 0 )
        RunAnimation( 8195 )
        break

In my mod, Zidane will have  a new line after Kuja's Oh, brother... line

Zidane: Play with us?

Looking at Zidane's Function Zidane_Loop, his last case is 141 when they decide to go after dagger

So do I need to make a case 142 for Zidane's new line right after case 49?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-18 18:02:21
2 solutions:

- The simplest, you don't add any case and you just add a "WindowSyncEx" line right after Kuja's line. With the "Ex" variant, you can choose the speaker so you don't need to have that line in a function of Zidane. There are a few things that can't be done with that solution thoug (I think there's no "RunAnimationEx" for instance).

- The cleanest, you add a case 142 indeed with your extra line and whatever happens at that time. You may add a case 142 to the other characters too (if people are reacting with an animation at the same time for instance). Then, you need to reroute the cutscene progression flow that is handled by a variable (surely "VAR_GlobInt16_47" in this case):
1) You want the new reaction to come right after Kuja's "case 49" script, so replace the "set VAR_GlobInt16_47 = 50" by "set VAR_GlobInt16_47 = 142",
2) In your new reaction case (142 but in only one character's script, Zidane's in this case), make it so the cutscene gets back on track after the added dialog by using "set VAR_GlobInt16_47 = 50".
That way, the cutscene's progression counter does not increase linearly but does something like "... 47, 48, 49, 142, 50, 51...". That's not optimal but that's less tedious than inserting a case and shift all the others. There *might* be side-effects because of that but I don't think there is (I've never seen a cutscene's script where it could be a problem).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-19 07:43:57
I made a start in Zidane's Function Zidane_Loop and when I tried to parse it I got this message

- Line 251: Cases amount doesn't match

When I press OK and open the box again, the case disappears.

This was what I put in for Zidane

 case 142:
    WindowSync( 2, 128, 335 )
    set VAR_GlobInt16_47 = 143
    break

When I changed Kuja's varglobal to 142, that parsed just fine.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-19 16:29:22
At the top of the function, in the "switchex" line, you need to increment the 1st number by 1.
Like "switchex X ( VAR_GlobInt16_47 ) {" -> "switchex X+1 ( VAR_GlobInt16_47 ) {".

The need of specifying the number of switch cases is bothering... I planned to make it optional at some point (and also make sure that the operation priorities are taken into account when parsing) but I never did in the end.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-19 21:19:09
It worked.

I managed to trigger the boss battle but it got stuck at the black screen.


Looks like I already know what I forgot to add. But I'm happy I managed to trigger it first time.
I still have to add more code after the fight though.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-20 07:53:17
I still seem to be in a soflock.

The transition to Kuja's boss fight happens, but it never gets past the black screen.

This is his case to trigger the fight which works...

Code: [Select]
case 143:
        RunSoundCode( 0, 134 )
        RunAnimation( 1698 )
        WindowSync( 7, 128, 336 )
        Wait( 5 )
        Battle( 1, 198 )
        SetHP( 0, 9999 )
        SetHP( 1, 9999 )
        SetHP( 3, 9999 )
        SetHP( 2, 9999 )
        SetHP( 4, 9999 )
        SetHP( 5, 9999 )
        SetHP( 7, 9999 )
        SetHP( 6, 9999 )
        SetHP( 8, 9999 )
        SetMP( 0, 999 )
        SetMP( 1, 999 )
        SetMP( 3, 999 )
        SetMP( 2, 999 )
        SetMP( 4, 999 )
        SetMP( 5, 999 )
        SetMP( 7, 999 )
        SetMP( 6, 999 )
        SetMP( 8, 999 )
        CureStatus( 0, 127 )
        CureStatus( 1, 127 )
        CureStatus( 3, 127 )
        CureStatus( 2, 127 )
        CureStatus( 4, 127 )
        CureStatus( 5, 127 )
        CureStatus( 7, 127 )
        CureStatus( 6, 127 )
        CureStatus( 8, 127 )
        Wait( 5 )
        break

Is there stuff I need to change in his Enemy Script to trigger the fight properly?
It looked like he's missing his Loop function. I'll look into that. :oops:

Nothing seems to be working now.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-20 16:10:38
I don't know why nothing is working anymore, but the cutscene didn't resume simply because you forgot to add a line "set VAR_GlobInt16_47 = 50" in that "case 143". You need to put that variable back on the track of the normal cutscene.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-20 21:25:53
Facepalms.

I forgot to change Kuja's group position. (I think the game thought that Zorn was still there.) That fixed it and triggered the battle.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-22 12:08:45
This happens after Kuja's boss fight ends.

I've appeared to have hit a bug where the scene after the first Mistodon fight occurs but Dagger, Kuja and his silver dragon are still there.

So it skipped the FMV with the Red Rose appearing at the Iifa Tree and the first fight with the Mistodon.

Guess I'm missing variables in Kuja's case 143 to trigger his case 144?

(https://images2.imgbox.com/05/29/yun4nngo_o.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-22 17:11:47
You are definitely doing (or missing) something wrong with the cutscene progression variable (VAR_GlobInt16_47), but without further indications, I can't guess what.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-23 08:34:23
Code: [Select]
case 143:
RunSoundCode( 0, 134 )
        RunAnimation( 5199 )
        WindowSync( 7, 128, 336 )
        Wait( 5 )
        Battle( 1, 198 )
        Wait( 5 )
        break

Do I need to add some variables after Battle( 1, 198 ) to get to case 144?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-11-23 12:12:20
Yes, if there is a case 144...
Otherwise, you need to set it back to whatever value you jumped from.

Did you understand the purpose of the variable "VAR_GlobInt16_47"? That's what I've been talking about in my last 4 messages.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-23 21:52:00
Yes, everything is set up after Kuja's boss, I just can't get case 144 to trigger after the boss. :(

I looked at Black Waltz No. 3's case for his fight at the Cargo Ship for referance and that didn't need any variables when his boss fight finished. :(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.40b)
Post by: ToraCarol on 2019-11-26 16:09:38

@ToraCarol: Maybe it has something to do with the dialog itself? What text opcodes are you using?

Hey Tirlititi! It's along time..sorry for the late reply, and good job with the updateon HWS! So...what do you mean exactly with text opcode? I know there is something like this for sure but I don't know where to look exactly right now..  :-\

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ApolloGrimoire on 2019-11-28 21:45:34
I've decided to leave that scene for now and it's been changed back to the original scene. Though I did manage to change Blank to Erin for the Blue Narciss segment.

Not sure if this goes here but...

Later at Ipsen's Castle, there seems to be something odd if you have Beatrix join the party inside.
Quina's missing. I did a separate playthrough earlier with Quina in the party and Eiko was missing. Beatrix was also present in the party.

Seems that Beatrix is overriding something here in a Function.

(https://images2.imgbox.com/97/fd/LYcwuqws_o.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2019-12-06 23:36:33
I think I'm just about finished the first draft of what I've been working on for a while now, but I seem to be encountering a freeze whenever I boot up the game from Steam. The launcher works fine, but as soon as I attempt to launch the game it gets stuck on the FF9 logo and doesn't appear to ever get past it, doesn't seem to want to close either. The mod does seem to still load up properly within Hades, so that's good.

Fortunately I've been creating backups of the mod every time I work on it (back after I made a massive mistake in September which wiped a lot of encounter data) so I'm able to go back to a working version, so it's not a huge deal. The thing is, I think the only change I made between my last working state and this crash is a change to what random battles can occur in a few sections of Memoria, specifically I removed the Veteran fights in the area entirely and swapped them to the Ash fights that can appear in the same space. Basically I wanted to get rid of the fights because they're not terribly interesting compared to Ash, even if they're buffed up, plus I figured I might be able to reclaim the fights entirely and possibly use them elsewhere, though I'm not quite at a point where I'm ready to do that yet.

It's entirely possible that there's a factor or something I'm not too sure of that's changed besides this, but so far this is the only thing I've found and I don't remember changing much else during that session. All I've really done is changed the field files for a few spots in Memoria and I didn't have any parse errors or any other input issues that I can see.

Tirlititi, have you ever seen this particular kind of crash before? I haven't really seen the like until now.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-12-07 10:20:21
Yes Clem Fandango, I've encountered such kind of crash before... and when I did, I tried to fix the problem ^^"

If you want to know where it comes from, the first thing is to try launching the game with all the files modded except p0data7.bin (which is the file containing the field scripts). If it doesn't crash with the base p0data7, that's a good point in favor of that Ash/Veteran change having triggered the problem. If it still crashes, then it was something else.

The field scripts are in p0data7 but if it crashes at the logo, then it's not really about the script itself but rather about how the files are packed inside the archive p0data7. I'm afraid you may have encountered a rare bug that happens only at specific settings (a file having a special position in the archive, replaced by an update with a special file size...). I'm not aware of such bug in the latest version of HW, but I expect it to work like that from experience...

Another possibility, that wouldn't make the issue comes from HW, is that you somehow replaced one of the game's files (p0data7 for instance) while HW was opened (and had loaded those game's files). If you do that, then HW will compile the Steam mod files wrongly and pack complete nonsense in the archives. The .hws would not be damaged in that scenario though.

@ApolloGrimoire: Sorry, I don't know about Quina in that cutscene. It's too specific and I don't remember how it is coded in that field :/

@ToraCarol: Text opcodes are things like "[STRT=...]" or "[TIME=-1]" or "[ZDNE]". Basically, everything inside brackets: they are handled specially by the game's text parser and transformed into something else.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: rpg-lad on 2019-12-08 19:43:36
Hello Tirlititi o/

I got a few tiny questions again (yes, we've talked on steam before ^^)

I'm facing some crash problems with HW
(it closes instantly when loading 1 mod or selecting specific tabs)
while putting on a few finishing touches for a smaller mod.
Am I just not importing and editing tabs in the right order?
I found myself with HW crashing/closing on the 'Enemies' tab a few times, even more when I import a mod file (so i guess the mod file's too old since I made it while using 0.38 and I am now trying to edit the Steam FFIX with the most recent release). Also crashes/closes when i try going into the Steam version's 'Stats' tab to edit character skills/stats data.
Is this common after I just imported 2-3 files from the Beatrix-only mod? (since that's basically the only thing that's on my current steam mod)
IF the cause for HW crashing on my file is because i am trying to edit the game with the Beatrix files present (so the p0data2 and -7 ones)... I got another one:
So, if i would chose to edit the whole stuff for the 'Party' tab, mainly everything about the character data first,
on a clean fresh mod and then copy the Beatrix mod into the folder: Would it end up as overwritten? Just want to figure out a way to work around and put them together in the right working order.

Or could it have something to do with my general software setup or specs (insufficient framework version for instance) that would make the app crash on loading one mod file?

Thanks in advance and have a good time!
Sorry if i blocked too much text in here >_<
There's no rush c:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2019-12-09 02:38:03
Yes Clem Fandango, I've encountered such kind of crash before... and when I did, I tried to fix the problem ^^"

If you want to know where it comes from, the first thing is to try launching the game with all the files modded except p0data7.bin (which is the file containing the field scripts). If it doesn't crash with the base p0data7, that's a good point in favor of that Ash/Veteran change having triggered the problem. If it still crashes, then it was something else.

The field scripts are in p0data7 but if it crashes at the logo, then it's not really about the script itself but rather about how the files are packed inside the archive p0data7. I'm afraid you may have encountered a rare bug that happens only at specific settings (a file having a special position in the archive, replaced by an update with a special file size...). I'm not aware of such bug in the latest version of HW, but I expect it to work like that from experience...

Another possibility, that wouldn't make the issue comes from HW, is that you somehow replaced one of the game's files (p0data7 for instance) while HW was opened (and had loaded those game's files). If you do that, then HW will compile the Steam mod files wrongly and pack complete nonsense in the archives. The .hws would not be damaged in that scenario though.

I've had some time to mess around with the the various files that are generated by Hades, launching the game with and without the different files, and it seems that the p0data7 file doesn't seem to be doing it, instead it's the modified resources.assets file that's causing it. Based on the the name, file size and some brief searching, this particular file handles graphical/sound data, right? I haven't really tried messing around with anything like that recently.

Basically what I'm wondering is what kinds of modifications could cause changes to that file, I'm holding out hope that it's a fairly small number possibilities to make debugging it easier.

As always, thanks for your continued responses in this thread Tirlititi. I'm honestly terrible at things like scripting and I don't think I could have come as far on my project as I have without being able to refer to your examples and responses in here.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-12-09 15:57:08
@Clem Fandango: You're welcome :)
I'm out of modding, but I really wish that FF9 modding doesn't die with me (well, it won't because Albeoris, Snouz and a few others are doing great without me anyway).

About the resources.assets, it contains various files. Most of them are the text and dialog files. It may be that a wrong text formatting (like missing a [ENDN] or [TIME=-1] at the end of a text) would make the game softlock at the logo.

@rpg-lad: I don't really understand what you're doing, but it is usually safer to open HW on an un-modded version of the game (though the files p0dataX.bin should not be a problem and the robustness to Assembly-CSharp.dll modifications was improved). If the program crashes before reading the enemy datas or while reading the enemy datas, that means these datas are problematic, even if it happens when trying to open a .hws file (the program first reads the datas from the game before doing anything with the .hws).

The correct way to create a mod based on my "Alternate Fantasy: Beatrix only version" is actually to download the source files of the mod (the link is in AF's topic) and read the Readme.txt to see how to use the files there (there are the source files of each version of the AF mod in that archive).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: rpg-lad on 2019-12-09 16:55:53
Okay, okay, sorry if that was a bit more than confusing.
(I was kinda confused as well about the crashing/freezing while writing that that post up there x.x)

In short, I had HW frequently crashing for the Steam version whenever I tried:
- editing Enemies tab AFTER using a hws file on it
- editing Party(Stats) tabs AFTER applying a .hws file or Beatrix Mode files (p0 2 + 7) on it

Since problem #2 would prevent me from editing most stuff under 'Party' (including stats for Bea) until I remove it (or use a fresh base),
I just wanted to know if the data of p0data 2 & 7 would overwrite each other after
Applying the .hws mod on top of Beatrix Mode or vice versa
?
Or is it safe to apply my own .hws separately on top a Beatrix Mode Steam mod, after I've worked everything I wanted to change out?
So my main point here rn is just checking out about the capacity of modded stuff I can stack
on top of each other. without overwriting things that might store data in the same file (my main concern rn)
before putting on the other touches per dnSpy.

I hope I didnt write it up too complicated this time x_x

My planned order of work looked like this:

Beatrix Mode Import > Party/Inventory/Tetra/Fields tab changes > Enemies > formulas and other stuff that need help of dnSpy

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-12-20 22:37:55
I don't know why that's happening to you.
Your planned order of work looks fine if "Beatrix Mode Import" means that you import the AFBeatrixOnly_v5.0.hws on a clean non-modded game.

You should do this:
1) Import the Beatrix HWS file, do the modifications you want, save as HWS (the .hws will contain both Beatrix's changes and your own),
rather than that:
2) Do the modifications that you want, save as HWS (your modifications only), import the Beatrix HWS and then your modifications again.
Indeed, it is possible to import several HWS one after the other but the latest import will have priority for everything that is common to both mods. For instance, if you modify any of party's spells, all of them will be stored in the HWS file (not only the bit you've changed). You can see in the "Tools -> Mod Manager" how each section is splitted (for instance, if you modify an enemy's HP, all the other enemies are not stored in the HWS and even that enemy's AI script won't be).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: gledson999 on 2019-12-21 21:26:24
Hello Tirlititi, Do you have the address of VWF font of Final Fantasy IX PSX version?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: rpg-lad on 2019-12-22 13:16:14
I don't know why that's happening to you.
Your planned order of work looks fine if "Beatrix Mode Import" means that you import the AFBeatrixOnly_v5.0.hws on a clean non-modded game.

You should do this:
1) Import the Beatrix HWS file, do the modifications you want, save as HWS (the .hws will contain both Beatrix's changes and your own),
rather than that:
2) Do the modifications that you want, save as HWS (your modifications only), import the Beatrix HWS and then your modifications again.
Indeed, it is possible to import several HWS one after the other but the latest import will have priority for everything that is common to both mods. For instance, if you modify any of party's spells, all of them will be stored in the HWS file (not only the bit you've changed). You can see in the "Tools -> Mod Manager" how each section is splitted (for instance, if you modify an enemy's HP, all the other enemies are not stored in the HWS and even that enemy's AI script won't be).

Will do after holidays, thanks o/

I re-checked out the first prob I posted in my previous post (about HWS 0.41c freezing while reading the Enemies tab after importing .hws mod).
Just wanted to strike that one from the list. Apparently it's because the mod file I applied was indeed from an older .hws mod using HWS version 0.38.
Using mods created in the current version worked totally okay and don't cause crashes.

So this left the only major problem with HWS in any version simply shutting down,
that being post-importing Beatrix Mode 5.0 and either importing a .hws containing any changes for 'Party' tab or simply reading the 'Stats' tab, both cases in a freshly opened 'Beatrix Mod'.

Anyways, happy holidays o/
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: rpg-lad on 2019-12-22 21:12:52
Sorry for another post,
but I can't use the edit function on my previous posts, yet need another pointer
as I noticed I lack any form this file you mentioned.
Your planned order of work looks fine if "Beatrix Mode Import" means that you import the AFBeatrixOnly_v5.0.hws on a clean non-modded game.

I don't have a AFBeatrixOnly_v5.0.hws (I don't remember there being any in the .zip if downloading it)
or any .hws that contains the data from that mod yet.
Also can't create it right away after opening (I suppose that requires having the app reading the tabs first...which brings me back to the crash problem in Party > Stats))
With 'Beatrix Mode Import' I was actually referring to a separate file where as I imported and replaced the files in the game folders as instructed in the 'ReadMe'. Just to clarify that. c:
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: anxietymafia on 2019-12-23 07:02:27
Hi Tirlititi

Is it possible in the PSX version to remove the little icon that appears when you caste Haste or Auto Haste on the characters? The little green arrow. I've looked through the options in the tool and its not apparent to me.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-12-23 10:04:52
@gledson999: The VWF is not in a standard format (you can see its format here (https://github.com/Tirlititi/Hades-Workshop/blob/master/Source/Charmaps.cpp)).
I don't have all my FF9 datas available for some time, but the file is a 0x0D chunk that is approximately at position 0x3cb048 (it depends on the disk and the language; 0x3cb048 is the disk 3 of the french version). For informations on chunks and cluster datas, you can check Qhimm's wiki.

@rpg-lad: As I said, you can't mod on top of the Beatrix mod if you don't use the source files of the Beatrix mod. That's this download link (https://www.hiveworkshop.com/attachments/alternatefantasy_v5-0_sources-zip.335459/).

@anxietymafia: Not to my knowledge, no. You can try to find that icon in the "Environment -> Texts -> Generic UI" and edit the image to remove the icon (I don't remember for sure but I think that you can draw pixel by pixel in HW on these images).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: gledson999 on 2019-12-23 22:00:07
@gledson999: The VWF is not in a standard format (you can see its format here (https://github.com/Tirlititi/Hades-Workshop/blob/master/Source/Charmaps.cpp)).
I don't have all my FF9 datas available for some time, but the file is a 0x0D chunk that is approximately at position 0x3cb048 (it depends on the disk and the language; 0x3cb048 is the disk 3 of the french version). For informations on chunks and cluster datas, you can check Qhimm's wiki.

Unfortunately couldn't find it, could you tell me the exact location on offset of FF9.IMG file?
It would help me a lot if you did it for me, thanks.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2019-12-24 09:02:44
I can do that but in 2 weeks only, once I return home.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: gledson999 on 2019-12-25 02:21:06
I can do that but in 2 weeks only, once I return home.
Thanks for you reply, i'll so i'll wait, Merry Christmas
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: anxietymafia on 2019-12-26 05:06:04
anxietymafia: Not to my knowledge, no. You can try to find that icon in the "Environment -> Texts -> Generic UI" and edit the image to remove the icon (I don't remember for sure but I think that you can draw pixel by pixel in HW on these images).

Great thanks i’ll try that.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-01-05 16:20:43
@gledson999: Here are the offsets of the charmap file, in the PSX US version.
Disc 1: 0x3C5478 and 0x7B59AC
Disc 2: 0x3C5DA8 and 0x7B62DC
Disc 3: 0x3C5DA8 and 0x7B62DC
Disc 4: 0x3C5478 and 0x7AA1EC
The first offset is for the charmap of the "Picture 1" of the "Generic UI" in HW, while the second offset is the important one, for the "Picture 1" of "Charmap" in HW.

As said, the format is given by this stucture:
Code: [Select]
Unknown, usually 0 (4 bytes)
Unknown short int (2 bytes)
Unknown short int (2 bytes)
Number of characters, short unsigned int (2 bytes)
Padding, usually 0 (2 bytes)
[
    Img_x (1 byte)
    Img_y (1 byte)
    Img_width (1 byte)
    Width (1 byte)
] (x Number of characters)
Also, you need to know that these font images are compressed in a 2:3 format, ie. 2 colors produce 3 pixels (a mean color is computed and the middle pixel in the x-axis is given that mean color). The coordinates reflect this compression: a width of 6 in the charmap file actually means a width of 9 pixels in the bitmap.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: gledson999 on 2020-01-06 01:45:52
Thank you very much, buddy  :D ;)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2020-01-14 02:21:59
Tirlititi, thanks very much for helping me figure out the issue with my mod was, a couple of weeks ago I managed to figure out that it was a problem in the menu interfaces of all things. Truthfully I'm not entirely sure what it was in the interface, but rebuilding it seems to have done the trick.

I'm getting pretty close to making a thread and spewing the first draft of my project out into the world, but there's one major thing that I'm trying to sort out. I've been trying to replicate your method of refreshing boss HP, but I've been having trouble getting it to work on some of the more basic bosses, like ones that don't die when under 10000 HP due to a script. Here's what I've got for my Lich script, for example:

Code: [Select]
Function Lich_Loop
    while ( GetBattleState != 1 ) {
        Wait( 1 )
    }
    if ( VAR_GlobUInt8_24 == 0 ) {
        Wait( 15 )
        RunBattleCode( 36, 9 )
        Wait( 10 )
        BattleDialog( 12 )
        Wait( 60 )
        BattleDialog( 13 )
        Wait( 75 )
    }
    RunBattleCode( 35, 0 )
    while ( GetBattleState != 4 ) {
        Wait( 1 )
    }
    if ( #( SV_FunctionEnemy[HP] <$ 10000 ) ) {
        if ( VAR_LocUInt8_60 < 1 ) {
            set VAR_LocUInt8_60++
            set SV_FunctionEnemy[HP] =$ 40000
        }
    }
    return

This is after allocating 61 in the local variable panel as well. The script does parse correctly, but it doesn't seem to actually restore Lich's HP. I've also initialized set VAR_LocUInt8_60 to 0 in Lich's Init function, just in case.

One thing that working on this has helped me realize is that I'm really not especially good at scripting at all, like I'm fairly sure I can interpret everything that's going on in this particular loop, but I'm not all that sure on what I'm missing. Any ideas? Every time I fight Lich now I feel like he's mocking me when he dies.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-01-14 09:15:18
Your error is perfectly understandable: that's because of me.
I decided to automatically name several functions with "XXX_Loop" (the functions with ID 1) because that's what they do most of the time. However, it's not because they are called like that that they loop: they loop because they have the lines "Wait(1)" and "loop" at the end most of the time.

In this case, "Lich_Loop" doesn't have those lines but simply returns at the end. You don't want to just replace the "return" by a "Wait(1) + loop" either because it would run the dialog again everytime.
The easiest solution there is to put the looping part in an infinite "while" loop:
Code: [Select]
    // ...
    RunBattleCode( 35, 0 )
    while ( GetBattleState != 4 ) {
        Wait( 1 )
    }
    while ( 1 ) {
        if ( #( SV_FunctionEnemy[HP] <$ 10000 ) ) {
            if ( VAR_LocUInt8_60 < 1 ) {
                set VAR_LocUInt8_60++
                set SV_FunctionEnemy[HP] =$ 40000
            }
        }
        Wait( 1 ) // If you forget that, the game will freeze
    }
    return

More generally:
‣ The "XXX_Main" function runs as soon as the entry is initialized; the script level is set to 0 until it returns, which means that you shouldn't use any RunSync or similars inside the main function that would run a script of the same entry (you can use a RunSync on another entry though, provided that entry was initialized and its main function already returned),
‣ The "XXX_Loop" function runs right after the main function ends; the script level is defaulted to 7 so you can use RunSync codes inside. It runs only once.

In Field and World Map scripts:
‣ The "XXX_Reinit" function runs after returning to the field from a battle. Several datas are flushed when a battle triggers and this function set them back.
‣ The "XXX_Range" function runs every frame when the player's character is close to an object (determined with the collision radius set by SetObjectLogicalSize) or inside a region. It should only be used with entries initialized by InitRegion or InitObject.
‣ The "XXX_SpeakBTN" function runs when pressing the "confirm" button while the player's character is next to the object and facing it (the radius is determined with the talk radius set by SetObjectLogicalSize) or inside a region. In Steam, its presence adds an icon over the player's character. It should only be used with entries initialized by InitRegion or InitObject.
‣ The "XXX_CardBTN" function works the same as "XXX_SpeakBTN" except that it's triggered by the "card/moogle" button.
‣ The "Main_Unk" function runs when a menu opens on a World Map (either the player opens the main menu or the script issues a Menu code).

In Battle scripts:
‣ The "XXX_ATB" function runs when the enemy's ATB gets full. Attacks issued inside are added as "Enemy Command" at the end of the command queue. It has to issue an attack command.
‣ The "XXX_Counter" function runs when the enemy has been affected by an attack from a player character that was not a counter-attack or a Charge!, etc... and if it still has more than 0 HP. Attacks issued inside are added as "Enemy Counter" commands and take priority over most of the other commands.
‣ The "XXX_Death" function runs when the enemy has been affected by an attack from a player character, if it has 0 HP and if the related flag is enabled. Attacks issued inside take priority over most of the other commands. Attacks issued inside are added as "Enemy Death" commands and take priority over most of the other commands.
‣ The "XXX_CounterEx" function runs when the enemy has been affected by any attack.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2020-01-15 01:02:20
This is great, thanks. All I need to do now is refit a few of the other bosses with this method and I should be just about ready to get this whole thing out there.

Also thanks for the rundown on what the different functions do, especially the field scripts. I've got it in my head to eventually make a couple of bonus fights in Memoria but I had no idea where I would even start with that. I think I'm going to get this project out there before I get going on that though, I think it's going to get fairly complicated as the enemy scripts go assuming I really run with what I have in mind.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2020-01-19 22:02:37
Hey Tirlititi, I've got a quick question regarding the normally enemy only Easy Kill status: would anything go horribly wrong if the player were to have access to this status in any way? Specifically I'm wondering if it persists outside of a fight, I'd assume that if it does it'll never wear off, which presents a bit of a problem if I wanted to try to turn it into a buff.

The main reason I'm asking is because I've been messing around with this concept a little bit just to see how it works and unless there are a number statistically unlikely things happening in a row during my testing I'm getting the distinct impression that the status doesn't ever wear off. It doesn't seem to wear off after a character is killed, which is good,  but it seems as though it's lasting forever on top of that.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-01-19 22:29:36
In the PSX version, I'm not sure. However, in the Steam version, it shouldn't last after the fight.
Dying indeed doesn't remove that status but being dead prevents from it to be applied.
So the only ways to remove that "Easy Kill" status (which should better be named "Easy Kill Proof" as it prevents different spells to affect the wearer) are (1) to finish the fight and (2) to use a Esuna-like spell that can remove it.

Normally, it is only used as an "Initial status" on the enemies so an Esuna-like spell may also remove it if it can target the enemies or be reflected. Removing it is unsafe as it can softlock the battle if something bad happens to an enemy that normally has that status (if it gets eaten, for instance).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2020-01-19 23:16:53
Okay, thanks. All of the death misses I had must be due to something else, I'll have to figure out what that is. Truth be told I'm not sure if I'm going to wind up sticking with the status anyway because it seems way too situational to be worth it much of the time. It's kind of fun to play around with though so if I can find a way to make it more practical I might work it in somewhere.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: anxietymafia on 2020-02-13 16:16:51
Hi Tirlititi,

I have another dumb question. PS1 emulated version.

Is it possible to change the player model in one scene? For example I want to change long haired Dagger into short haired Dagger in Gargan Roo, just for fun. However when I change the model with Hades Workshop, the player becomes invisible. Is there something I am missing, some other value I need to change? Short haired Dagger's model seems to be 76. Thank you for your help in the past. This may be impossible to do?

(https://66.media.tumblr.com/3fddf9764435e443afa24d5deebca8c9/be32d217a37d8012-e9/s540x810/bfc1cffa4e240b238ae3823f900b08f292a8649a.png)
(https://66.media.tumblr.com/8d2fa2f8000c28e0673fe477bf7d910b/be32d217a37d8012-5c/s540x810/8ca3a3af327f4ba1ac410fd652ab9da5bc1f6430.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-02-13 16:41:12
There are 2 problems about that when modding the PSX version:

1) Not all the models are available in every field. Most of the time, the models and animations are packed in each field (so there are actually many duplicates in the game's datas) and you can use only the models that are there already.
Fortunatly, there are exceptions and Dagger's models are amongst them: the models of the party members (including the temporary party members) are always available, whatever the field. However, her full set of animations is not available, only the basic ones (stand, walk, run, turn left/right). It might be that the animations of both of Dagger's models (short/long hair) can be used on both models though.

2) You need to register the models and animations that you use in order to have them available. That's probably the problem you have there.
Outside of the script, there's a button "Preloading datas": go there and add Dagger's models and animations to the list of datas to use. You also need to link the model to Dagger's script entry ID there.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: anxietymafia on 2020-02-13 18:37:54
Thanks so much for the reply! It was really helpful.

Forgive me, I'm really dumb. What is the script entry ID? I'm not sure where to find it.

(https://66.media.tumblr.com/13c9fd9cb09fc96f36181f4375a91f6a/f86e3947997ddb89-1b/s1280x1920/3cc7328a94b4c8d63e84a309ecda351741f63846.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-02-13 22:26:38
That's the ID of Dagger's entry in the script.

In concrete terms, you go in the script, in the function "Main_Init" and search for the code line initializing Dagger's model:
"InitObject( ID, [Some other number, surely 0] )"
When selecting those lines, you have the drop-down menu of entries that appear on the right of the window. You know that the line concerns Dagger's entry when it's written there on the right.

The script entry ID is that number given as the 1st parameter of "InitObject".

Alternatively, you can simply write a line "InitObject( 0, 0 )" in any function of the field and search for Dagger's entry in the drop-down menu (it will update the ID automatically in the textual part then). And then exit without parsing.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: anxietymafia on 2020-02-14 00:13:52
You're an absolute genius, thank you so much!

It's weird but this makes me so happy, I wanted to play as Dagger with short hair since I was a kid lol.
Now I know it's possible I'm going to change more scenes.

So curiously in the previous Gargan roo entrance, her short hair model is fine.
But in this field, the model has odd lighting. Overexposed in parts, and pitch black in some shadows. Not a big deal, but any idea why?

You've already helped me heaps, thanks!

edit: nevermind, it was just a random glitch

(https://66.media.tumblr.com/0a82151b31190b7e8cbe9500d6669876/3bc4cb1f1cda646c-b8/s400x600/35aa28fe1fab1fa9ab59c45a2a433eb6b67d1015.png)
(https://66.media.tumblr.com/fe9a8a854470e82deaf6a3edb23cfce3/3bc4cb1f1cda646c-25/s400x600/6eb6ecc753594d9bb98a5092fdc51b4505fd119e.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: anxietymafia on 2020-02-14 00:45:29
Dagger in memoria.
(https://66.media.tumblr.com/d6dccf1649a72b7a8800d1dbf014045e/f17006e21be6781d-72/s400x600/8aceecbc0cf7c41a68666b918e8ef9318f1e4870.png)
Her dismount is hilarious. :-D
(https://66.media.tumblr.com/fe8c8e9389d0a2c650a6e4e3bf55042f/f17006e21be6781d-2b/s400x600/3fca60fa323134bb350b342fc7727c608d6c7e40.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-02-27 02:48:39
just seen a magic bonus formula available for weapons... does it work? and how... just like the spirit and speed ones?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-02-27 16:13:24
Yes, it works correctly and it uses the same kind of formula as the spirit and speed boosts.
Actually... I always thought that these were bonuses... but reading the formula again from the source code and Rebirth Flame's FAQ, it's more like an averaging than a bonus...
Code: [Select]
Damage = (Atk - Def) * (((Strength + OtherStat) / 2) + Rnd MOD (((Lvl + Str) / 8) + 1))So it uses (Strength + OtherStat) / 2 for these special weapons instead of Strength for the normal weapons?
I always thought that these weapons used Strength + OtherStat / 2... No wonder why there is not such a difference in the damage outputs.

Only the Save the Queen's damage formula can really be considered as a boost then.
The formulae displayed in HW are all wrong :/
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-02-27 16:20:27
Quote
The formulae displayed in HW are all wrong :/

They are displayed? Also yeah, i assumed the averaging: the wiki at Final_Fantasy_IX_weapons has the same formula you reported.

nice anyway. I can make staves and rods use magic without issues lol.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-03-16 04:43:21
Sorry to bother you again, but i was looking at command formulas and... isn't Jump very weak? Assuming same atk, def and multiplier, multiplying the attack (like shock, free energy etc) is better than multiplying [atk-def] like jump does.

Moreover, Power Jump grants only a minor improvement (x1.33) compared to something like power throw (x1.5 + vs. aerial bonus + berserk bonus) and is acquired similarly late. Also dunno what to think about the increased randomness in Trance Jump but i'll see that later.

What do you think, considering you didn't really change Jump in your mod?
Also, if i were to change it, could you please tell me where to look for among the CIL code section?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-03-16 12:47:52
It is not very weak, no. The "physical strike" (Shock, Free Energy, etc.) formula is exactly the same (it also takes the defence into account) provided that it has a power of 15 (Free Energy is in this case for instance).

Damage Free Energy = (1.5 * Atk - Def) * Bonus
Damage Jump = (1.5 * Atk - Def) * Bonus
Damage Shock = (3 * Atk - Def) * Bonus

The difference is that Jump costs no MP, is available from the start and has the feature of making Freya untargetable for some time.
High Jump raises Jump's damage to "(2 * Atk - Def) * Bonus", which is the power of Scoop Art.
Of course, if you take damage boosts into account, then the attack command can be tremendously better (there's a reason why it's used in speedruns), but it requires a better preparation and being in front row.
However, the trance damage formula is really bad indeed. The added randomness (similar to Quina's attack) makes it very weak and it's not even counter-balanced by the multi-targeting since the damage are spread (so "more enemies = less damage per enemy").

In my mod, Spear has the same damage formula but it takes the properties of the weapon into account (elemental damage, killer abilities...) so it can be useful even in late game for damage. I had to edit the game's source code for that though. I also fixed the trance damage, removing the added randomness.

If you want to modify Jump's damage formula, you may need to edit the game's source code (that's the CIL code section, but I advise you to use an external tool, dnSpy, instead: it allows to modify the source code as well but it's way more advanced) but that depends on what you want:
1) If you want to make jump's damage use a different already existing formula (like Shock, where you control the multiplier), you can simply change it in the panel "Party -> Spells" and look for the abilities "Spear" at the end of the list: the first one holds the normal damage formula, the second one holds the trance damage formula.
2) If you want to use a new damage formula or if you want to modify Jump's "Freya leaves temporarily the field" principle, then you need to change the source code indeed. Specifically, you need the edit the class "btl_calc" (in dnSpy, open the game's "Assembly-CSharp.dll" and search for "btl_calc" inside the folder "-"). Here (https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0) is what it looks like (I've rewritten the class in order to add comments and readability, but it's still C#). You can see that there is a case 48 and 83 for the formulae of Spear and Trance Spear in the main method CalcMain.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-03-16 13:03:00
Good news then, i was misled by Hades Workshop's effect description. Psysical strikes have a [Atk * Mul - Def] in their formula description, while Spear has a Mul * [Atk - Def] formula (description only).

Issue with solution 1) is that High Jump becomes useless. dnspy sounds exactly like what i need, i had already found spear and trancespear in Memoria Engine's source but with that tool i can even study your changes.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-03-16 13:59:35
Ok I'm dumb ><

Damage Free Energy = (1.5 * Atk - Def) * Bonus
Damage Jump = 1.5 * (Atk - Def) * Bonus
Damage Shock = (3 * Atk - Def) * Bonus

They are not the same indeed. I stand corrected.
So actually, Jump's damage works as if you had 1 damage boost compared to the "attack command without damage modifier".

If you download the Source files (https://www.hiveworkshop.com/attachments/alternatefantasy_v5-0_sources-zip.335459/) of Alternate Fantasy, you'll have a description of the changes I made in the Readme.txt. I think that it can help you understanding what does what. However, the class "btl_calc" was completly changed and there is no details of the changes for that, except the description of the mod in its topic.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-03-16 14:31:35
So i'm right and jump is rendered completely worthless by... anything, like a killer ability. Unless they stack somehow.
Don't worry though, i'm comfortable with comparing changes and with the resources you provided i can change jump however i want. It's pretty easy to figure it out.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-03-16 15:11:49
Still, "Command attack + 1 killer ability + front row" has same damage as "Jump + back row".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-03-16 19:27:12
This is what i came up with for Jump. A physical strike (thinking of atk mul of 1.3) that is boosted by Trance, Berserk, and by High jump (by 1.5 just like throw) and takes the element of the weapon. Funny how Freya's Jump actually became weaker with Trance despite being its main focus.

Code: [Select]
case 48:
case 83:
btl_calc.CalcSub_13A(calc_VAR);
btl_calc.CalcSub_141(calc_VAR);
btl_calc.CalcSub_143(calc_VAR);
btl_calc.CalcSub_151(calc_VAR);
if ((caster.sa[0] & 2097152U) != 0U)
{
calc_VAR.at_num = (short)(calc_VAR.at_num * 3 >> 1);
}
if (prog_no == 48)
{
if (btl_calc.CalcSub_152(calc_VAR))
{
btl_calc.CalcSub_203(calc_VAR);
}
}
else
{
if (btl_calc.CalcSub_152(calc_VAR))
{
int num14;
if ((num14 = (int)(calc_VAR.at_pow - calc_VAR.df_pow)) <= 0)
{
num14 = 1;
}
CALC_VAR calc_VAR33 = calc_VAR;
calc_VAR33.tg_flags |= 1;
if (calc_VAR.at_num < 4)
{
calc_VAR.at_num = 4;
}
int num15 = (int)((long)(num14 * (int)calc_VAR.at_num) / (long)((ulong)btl_util.SumOfTarget(0U)));
if (num15 > 9999)
{
num15 = 9999;
}
if ((calc_VAR.flags & 8) != 0)
{
calc_VAR.tg_flags |= 2;
}
calc_VAR.tg_hp = (short)num15;
}
}
break;

Also i want you to look at this 2 lines of case 19, Physical Strike:
Code: [Select]
btl_calc.ApplySpellElementBoost(calc_VAR);
if (btl_calc.ApplyWeapElement(calc_VAR))
{ [...] }

Dunno if elemental physical strikes exist, but doesn't this mean that the spell uses the element of the weapon for the sake of weaknesses/freeze/heat whatever and the element of the SPELL (not the weapon) for the sake of elm. boost alone?

Aka, an Excalibur II powered Shock will deal improved damage agains enemies weak to holy, BUT non-boosted damage if Steiner is equipped to boost Holy. But if we make Shock, dunno... Fire-elemental, Shock will deal improved damage against enemies weak to Holy (Excalibur II) AND if equipped to boost Fire.

Sounds like an oversight to me, like the first line should be ApplyWeapElementBoost instead of ApplySpellElementBoost.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-03-16 20:00:35
Dunno if elemental physical strikes exist, but doesn't this mean that the spell uses the element of the weapon for the sake of weaknesses/freeze/heat whatever and the element of the SPELL (not the weapon) for the sake of elm. boost alone?
Yes exactly. Not sure if it's an oversight or anything, but that's indeed how it works.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-03-19 16:12:14
https://imgur.com/a/WvbXtHI

I've noticed this minor issue in the equipment UI. With dnSpy i found the code portion that handles this section (EquipUI, mostly within DisplayParameter), but there's code for everything bar positioning (the ones that activate it, ArrowTween for the flashing of the arrow, colors...).

Dunno if a vector with absolute values exists somewhere or if there's an iterator that's supposed to align those numbers either.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-03-19 16:41:27
The positions of UI elements are stored in one of the archives (I don't remember which one though) as Unity serialized objects ("Transform", "GameObject", etc...). I don't know of any tool that would display/mod them nicely but it may exist since it's Unity's format.

Inside the code, you can use lines like that one to change things.
Code: [Select]
// I think this was a working example for BattleUI
this.CommandPanel.GetComponent<UIWidget>().GetChild(0).GetComponent<UIWidget>().SetRect( X, Y, W, H );
// ... or lines like this
this.CommandPanel.transform.localPosition = new Vector3( X, Y, this.CommandPanel.transform.localPosition.z );

But ask TehMighty because he worked a lot on UI and succeeded in having great results.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-03-19 21:04:04
Thanks again Tirlititi!

The transform.localPosition worked somehow, but the best result i managed to achieve is fixing the position every time but one: the very first time it's displayed after a reset it's in the wrong position (x=288 instead of 292). I asked TehMighty just now cause maybe a more permanent solution (finding the actual transform file related to that) is needed.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Xenogears on 2020-03-22 14:00:18
Hi, tell me how can I fix this through HadesW? Map:1807 Loc:88 Alexandria Castle/Hallway
https://drive.google.com/open?id=1TEST7L1PyIw1guMMuh0PHxiNjtIfZ8dk
 I understand that this is due to Widescreen mode, is it possible to somehow center, I do not want to disable this mod.
It should be like this.
https://drive.google.com/open?id=1n2pkpelAdPJsuRNsKbdBBxEVIMHDabi0

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-03-22 15:43:17
It's not currently possible Xenogears, unfortunatly. That's indeed a problem with the widescreen mode: background pictures have a size adjusted to the screen mode used in the PSX version. These backgrounds have not been extended for the PC port (it would have been a huge work).

What might be done to fix some of these problems is to reduce the camera bounds. It can be done in HW for each field script 1 by 1 but it would be much better to do it with dnSpy/source code modding.

It wouldn't fix many fields, like Observatory Mountain's fields.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-03-23 13:57:47
Reporting back after talking with TehMighty, in case you're interested.

The "Spirit value x position bug" is fixed by creating a new class inside EquipUI, like this.

Code: [Select]
    public class FixSpiritSkillNumberLabelPos : MonoBehaviour
    {
        void Start()
        {
            transform.localPosition = Vector2.right * 292;
        }

        void OnEnable()
        {
            transform.localPosition = Vector2.right * 292;
        }
    }

And using it inside ParameterDetailCompareHUD, like this:

Code: [Select]
public class ParameterDetailCompareHUD
    {
        public ParameterDetailCompareHUD(GameObject go)
        {
            this.Self = go;
            Int32 i = 0;
            Int32 num = 0;
            while (i < 10)
            {
                if (i != 4)
                {
                    this.ParameterLabel[num] = go.GetChild(i).GetChild(1).GetComponent<UILabel>();
                    this.NewParameterLabel[num] = go.GetChild(i).GetChild(3).GetComponent<UILabel>();
                    this.ArrowSprite[num] = go.GetChild(i).GetChild(2).GetComponent<UISprite>();
                    this.ArrowTween[num] = go.GetChild(i).GetChild(2).GetComponent<TweenAlpha>();
                    num++;
                }
                i++;
            }
            //This is the added line of code
            NewParameterLabel[3].gameObject.AddComponent<FixSpiritSkillNumberLabelPos>();
        }

        public GameObject Self;
        [...]
    }

Another minor graphical bug i discovered involves the "Remove Equipment" submenu. Parameter changes aren't displayed for the very first piece of equipment the arrow points to, but only after to press up or down to switch to another one. Fixed by adding this.DisplayParameter() here:

Code: [Select]
public override bool OnKeyConfirm(GameObject go)
{
bool flag2 = base.OnKeyConfirm(go);
if (flag2)
{
bool flag3 = ButtonGroupState.ActiveGroup == EquipUI.SubMenuGroupButton;
if (flag3)
{
this.currentMenu = this.GetSubMenuFromGameObject(go);
switch (this.currentMenu)
{
case EquipUI.SubMenu.Equip:
case EquipUI.SubMenu.Off:
FF9Sfx.FF9SFX_Play(103);
ButtonGroupState.ActiveGroup = EquipUI.EquipmentGroupButton;
ButtonGroupState.SetSecondaryOnGroup(EquipUI.SubMenuGroupButton);
ButtonGroupState.HoldActiveStateOnGroup(EquipUI.SubMenuGroupButton);
this.DisplaySubMenuArrow(false);
this.DisplayEquiptmentInfo();
// Line added here
this.DisplayParameter();
break;
case EquipUI.SubMenu.Optimize:
[...]
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Xenogears on 2020-03-28 12:43:15
It's not currently possible Xenogears, unfortunatly. That's indeed a problem with the widescreen mode: background pictures have a size adjusted to the screen mode used in the PSX version. These backgrounds have not been extended for the PC port (it would have been a huge work).

What might be done to fix some of these problems is to reduce the camera bounds. It can be done in HW for each field script 1 by 1 but it would be much better to do it with dnSpy/source code modding.

It wouldn't fix many fields, like Observatory Mountain's fields.

Hi, I already used the dnSpy program somehow, but I still need to find where to write all this. Albeoris told me that somewhere there are lines

public static Boolean IsNarrowMap()
    {
        switch (FF9StateSystem.Common.FF9.fldMapNo)
        {
            case 0052: // Prima Vista - Meeting Room
            case 0455: // Mountain - Base
            case 1507: // Conde Petie - Pathway
            case 1605: // Madain Sari - Eidolon Wall
            case 1606: // Madain Sari - Chamber
            case 1607: // Madain Sari - Kitchen
            case 1807: // Alexandira Castle - Hallway
            case 1823: // Alexandira Castle - Hallway
            case 2000: // Hilda Garde 2 - Deck
            case 2007: // Alexandira Castle - Altar
            case 2204: // Desert Palace - Odessey
            case 2208: // Desert Palace - Hallway
            case 2261: // Oeilvert - Bridge
            case 2363: // Gulug - Path
            case 2510: // Iifa Tree - Silver Dragon
            //case 3009: // Ending - TH
            //case 3010: // Ending - TH
            //case 3011: // Ending - TH
                return true;
        }
        return false;
    }

I managed. But now I do not know how to return the location to its original state after their conversation.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-03-28 19:33:47
Thanks Caledor.

@Xenogears: I don't understand what you mean. What did Albeoris tell you about these lines? What conversation (conversion?) are you talking about? What did you managed to do?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-04-07 17:46:26
Hello everyone !

I am very curious how work modding with FFIX and that's why i decide to test HW !
However... i am big newbie with it  :roll: (never use C# on my life lol but i can learn... i think)

For my first experience, i add BigDragon on Evil Forest first zone (light clearing).... yeah, pretty brutal.

I follow theses steps on "Properly adding a new enemy to a battle (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485)"
Dragon is present with Goblin and Fang, can attack Zidane but i have two issues :

- Dragon is called "Lame" (mean Knife in FR)
- All attacks from Dragon, Goblin and Fang display wrongly : sometimes there's is nothing (text box is empty), or None (EN)/Rien (FR) showed or EnnemyDummy for Dragon

(https://image.noelshack.com/minis/2020/15/2/1586279696-20200407191406-1.png) (https://www.noelshack.com/2020-15-2-1586279696-20200407191406-1.jpg)

As i said, i follow all steps from Tirlititi, use simply IA for Dragon (with 2/3 DragonClaw and 1/3 Thundaga), compare with other battles....
I didn't edit attacks and IA from Goblin and Fang and i copy all Dragon attacks from his original battle.
After few hours of testing... i am lost.

I am asking your help... i think i am dumb to find why it's broken ;D

Spoiler: Main_Init • show
Function Main_Init
    switch 2 ( GetBattleGroupId ) from 0 {
    case +0:
        InitObject( 2, 128 )
        InitObject( 3, 129 )
        break
    case +1:
        InitObject( 1, 128 )
        InitObject( 3, 129 )
        break
    }
    return


Spoiler: Dragon_Init • show
Function Big_Dragon_Init
    return


Spoiler: Dragon_ATB • show
Function Big_Dragon_ATB
    if ( GetRandom % 3 ) {
        set SV_Target = RandomInTeam(SV_PlayerTeam)
        Attack( 6 )
        return
    }
    set SV_Target = SV_PlayerTeam
    Attack( 9 )
    return
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-04-08 00:31:09
Hello everyone !

I am very curious how work modding with FFIX and that's why i decide to test HW !
However... i am big newbie with it  :roll: (never use C# on my life lol but i can learn... i think)

For my first experience, i add BigDragon on Evil Forest first zone (light clearing).... yeah, pretty brutal.

I follow theses steps on "Properly adding a new enemy to a battle (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485)"
Dragon is present with Goblin and Fang, can attack Zidane but i have two issues :

- Dragon is called "Lame" (mean Knife in FR)
- All attacks from Dragon, Goblin and Fang display wrongly : sometimes there's is nothing (text box is empty), or None (EN)/Rien (FR) showed or EnnemyDummy for Dragon

(https://image.noelshack.com/minis/2020/15/2/1586279696-20200407191406-1.png) (https://www.noelshack.com/2020-15-2-1586279696-20200407191406-1.jpg)

As i said, i follow all steps from Tirlititi, use simply IA for Dragon (with 2/3 DragonClaw and 1/3 Thundaga), compare with other battles....
I didn't edit attacks and IA from Goblin and Fang and i copy all Dragon attacks from his original battle.
After few hours of testing... i am lost.

I am asking your help... i think i am dumb to find why it's broken ;D

Spoiler: Main_Init • show
Function Main_Init
    switch 2 ( GetBattleGroupId ) from 0 {
    case +0:
        InitObject( 2, 128 )
        InitObject( 3, 129 )
        break
    case +1:
        InitObject( 1, 128 )
        InitObject( 3, 129 )
        break
    }
    return


Spoiler: Dragon_Init • show
Function Big_Dragon_Init
    return


Spoiler: Dragon_ATB • show
Function Big_Dragon_ATB
    if ( GetRandom % 3 ) {
        set SV_Target = RandomInTeam(SV_PlayerTeam)
        Attack( 6 )
        return
    }
    set SV_Target = SV_PlayerTeam
    Attack( 9 )
    return


EDIT : Ok so i found why that didn't work.
1) I am dumb
2) I forget to copy ressources.assets from HW... I thought only p0data files store data combat but i was wrong...

Sorry for this useless post :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-04-09 16:25:32
Fiou, thank you for telling me that you fixed it. I was thinking that there would be a bug with the copy/paste of enemies or abilities (there used the be some bugs with the same kind of effect as you had but I think it is fixed now).

Indeed, the resources.assets contains pretty much all the texts of the game among other things.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ERAISERZEE on 2020-04-18 13:10:59
hello could you tell me why it doesn't open the p0data2.bin file of the mogouri mod?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-04-19 01:47:17
ERAISERZEE check your PMs, answered you there
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-04-19 03:25:49
Hi everyone,

I want to edit completely Focus and i see you can edit that with CIL or dnSpy... but i have 2 questions :

- First, with Tirlititi's files on dropbox, i find some informations about Focus on Source_btlCalc.cs.
So i found this code on btlCalc with dnSpy

Code: [Select]
case 44:
{
ELEMENT elem2 = target.elem;
if ((elem2.mgc += target.elem.mgc / cmd.aa.Ref.power) > 99)
{
target.elem.mgc = 99;
}
break;
}

But this code only prevent to exceed 99 of magic... no ? If i need to totally change how works Focus, i need to edit this or something else ?

- I never use DnSpy before : i want to edit btl_calc for example but when i compile files, i get a lot of error about some missing method System.UIInt16, System.Object, System.Byte, System.Void, ect...

Spoiler: show
(https://image.noelshack.com/fichiers/2020/16/7/1587265834-dnspy.png)


How fix that ? ...  :-[

Thanks you in advance !
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-04-20 13:14:02
Hello DV,
Well, for your first question: this code actually adds magic to the targets and is not only about capping it to 99, although that's not so obvious (even for people that are a bit used to coding).
Code: [Select]
if ((elem2.mgc += target.elem.mgc / cmd.aa.Ref.power) > 99)There's a "+=" operation there, which adds things but also return the value of "elem2.mgc" after it was updated for a comparison with "99".
You can read that line as this instead, for clarity:
Code: [Select]
elem2.mgc += target.elem.mgc / cmd.aa.Ref.power;
if (elem2.mgc > 99)

The errors you get with dnSpy means that, for some reason, dnSpy doesn't have access to a proper "System.dll"... which is strange because it should be right there, next to the "Assembly-CSharp.dll" that you opened.
Check the list of DLLs that dnSpy opened on the left of the window, it might be that dnSpy opened automatically two different "System.dll", one of which being so dull that it doesn't even define basic types... if that's the case, right-click on the duplicate(s) (the one(s) that are not located inside FF9's game folder) and remove them ("Remove System.dll"; don't worry, it only removes it from dnSpy, it doesn't delete the file from the disc).

That being said, you'll surely have more errors when that one will be fixed. A tedious error that dnSpy gives is "Cannot implicitly convert type '[Type A]' to '[Type B]'. An explicit conversion exists (are you missing a cast?)". Everytime this error appears, you need to add explicitly a cast to [Type B]... and dnSpy just immediatly forgets about it after compilation, such that when you edit the method/class a second time, these errors reappear.

I just updated the class "blt_calc" in my dropbox in order to have a proper compilable code in dnSpy (and added readability things). You can copy/paste the whole class from there and do the changes on that copy: it won't trigger the conversion errors described above.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-04-21 01:57:06
Thank you again for his answer Tirlititi !

....
*after few hours*
Me :
(https://www.brain-magazine.fr/m/posts/42883/originals/doing.jpg)

I can now compile new code with your btl_calc class... but i didn't understand something : which Assembly-CSharp.dll I need to edit ?

Maybe i forget to mention that but i use Moguri Mod : when i patch it, Assembly-CSharp.dll is totally different from NMM used with HW : i can't find btl_calc on this .dll patched by Moguri...

Btl_calc is available on Assembly-CSharp.dll from NMM but how i can replace modifications added ? (can't replace .dll otherwise, game have some troubles lol)

I am a little lost ^^



Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-04-21 15:58:27
Sorry for double post, i can't edit my previous message (don't know why  :-\).

After an entire night searching about that, i finally find : i complety forget Memoria use scripts to edit various things.

But Memoria.compiler didn't work on my side (can't find files location, something like else). What a pain lol

So, i use Dnspy to edit Memoria.scripts.dll directly and finally, i can modify Focus and all !

Thanks again Tirlititi for pointing me in the right direction : I hope I hold all the cards this time :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-04-21 18:53:42
Ah, indeed, sorry ^^"

The Moguri mod changes that part of the DLL a lot, yes.
So, you need to modify the Assembly-CSharp.dll that is used by the game, which should be Moguri's DLL. But then, you also need to change C# code that is externalized inside simple text files.
The content of the class "btl_calc" in Memoria is splitted at two places:

(1) Pretty much all the methods except "CalcMain" were transported to the following classes that you can access using dnSpy: "Memoria.BattleCalculator" (ie. "BattleCalculator" inside the folder "Memoria"), "Memoria.BattleUnit", "Memoria.BattleTarget" and "Memoria.BattleEnemy". They have different names and are reorganized, but they serve the same purposes (for instance, the method "Memoria.BattleCalculator.WeaponPhisicalParams" (sic) in Moguri's DLL is similar to "btl_calc.SetupBaseAttack8" in the "Source_BtlCalc.cs" that I provided).

(2) What should have most interest for you: the main method, "CalcMain", that contains the bone structure of spell effects, is written in the .cs files that are inside the folder "StreamingAssets\Scripts\Sources\Battle". The names of the files start with the same numbers as the "case" number inside the "Source_BtlCalc.cs" that I provided (for instance, the "case 9: // Magic Attack" is in the file "0009_MagicAttackScript.cs"; Albeoris and I didn't always use the same names but it shouldn't be to hard to go from one to the other).

For these other files, you don't need dnSpy a priori. Albeoris made it so you can simply change the scripts using a text editor but it comes with costs...
- It's not obvious of what methods you can use in these text files. If it's not something too complicated, you can copy/paste things from different scripts to get what you want. For a complete list of methods, you have to check the methods in (1) using dnSpy though.
- Editing the script files is not enough: you need to compile them afterwards in order to generate a "Memoria.Scripts.dll". That can be done, hopefully with no error, by running the program "Memoria.Compiler.exe" that is found inside "StreamingAssets\Scripts\Compiler". Running that program either generate a "Memoria.Scripts.dll" or display errors.
- Now, with the Moguri mod, there's a new layer of difficulty: you see, the program "Memoria.Compiler.exe" will read the scripts that are inside the folder "..\Sources\Battle" relative to the compiler's path and also need the DLLs from the folder "..\..\..\x64\FF9_Data\Managed" relative to the compiler's path. That means that you need to do the changes on "Assembly-CSharp.dll" before running the Memoria compiler in order to have compatible DLLs, change the script text files and run the Memoria compiler that are inside the game's folder. But once this is done and you have a proper "Memoria.Scripts.dll", you need to move that DLL to the Moguri's folder where there are a lot of duplicates and where the game modded by the Moguri mod go fetch the files inside a "StreamingAssets" subfolder.

This last difficulty, I think, comes from the fact that Albeoris did something quite obscure for making battle scripts more easily moddable when he did his tool "Memoria". But then, Ze_PilOt used the tool "Memoria" to do his Moguri mod and didn't get what that "Memoria.Scripts.dll" was and thus his mod duplicates it and moves it to another folder without realising that it doesn't fit Albeoris's way of doing things.

Congrats if you've read and understood this far!
I guess that HW is not such a difficult tool to use, right? :p


EDIT: One last things. Albeoris also added a "Spell rate" feature: apart from the method "Perform" that you can find in the battle scripts, you sometimes have a method "RateTarget" that returns a Single (number) and is added when the class derivates from "IEstimateBattleScript". This method is meant to somehow measure the usefulness of an ability in a given situation. I am not sure if that feature is working (maybe it is used when the player turns Auto-battle on?) though, and you can ignore it if you don't care.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: shikulja on 2020-04-21 20:41:59
Hi, I tried different versions of Hades 34-41s, none of them could open the psx image, I don’t know the original ones, but I definitely don’t open the Russian images
writes: cant scan as ff9 binary file.

also some hope and wait for the export of text scripts in memoria, I hope I live to see this day
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-04-22 17:19:23
Thanks for his explanations Tirlititi ! Trying to understand everything you tell me ahah

Quote
(2) What should have most interest for you: the main method, "CalcMain", that contains the bone structure of spell effects, is written in the .cs files that are inside the folder "StreamingAssets\Scripts\Sources\Battle". The names of the files start with the same numbers as the "case" number inside the "Source_BtlCalc.cs" that I provided (for instance, the "case 9: // Magic Attack" is in the file "0009_MagicAttackScript.cs"; Albeoris and I didn't always use the same names but it shouldn't be to hard to go from one to the other).

Oooohh.... ok !  :o Why didn't i see that before lol

Quote
Congrats if you've read and understood this far!
I guess that HW is not such a difficult tool to use, right? :p

HW is a pretty cool software, i respect you (and others modders) to make this kind of tools !
Very easy to edit spells, skills, items and of course... ennemies and IA ! (Didn't test yet model import or background, i will see that later but i success to change content and location of somes hidden chests ^^)

Vive la France !  :-D

Quote
For these other files, you don't need dnSpy a priori. Albeoris made it so you can simply change the scripts using a text editor but it comes with costs...

Maybe i will try to make a hard mod for FFIX (because... why not ^^ it's my favourite FF), that's why i need to access all code on the game. That's will be a long project so i am patient !

I finally create my first edit for Vivi's focus : he lost some HPs to earn some MPs... yeah it's nothing but that's was my first step :D

Spoiler: show
Code: [Select]
using System;

namespace Memoria.Scripts.Battle
{
// Token: 0x0200002D RID: 45
[BattleScript(44)]
public sealed class FocusScript : IBattleScript
{
// Token: 0x0600005C RID: 92 RVA: 0x000023E0 File Offset: 0x000005E0
public FocusScript(BattleCalculator v)
{
this._v = v;
}

// Token: 0x0600005D RID: 93 RVA: 0x00004384 File Offset: 0x00002584
public void Perform()
{
this._v.Target.Flags |= (CalcFlag.HpAlteration | CalcFlag.MpAlteration | CalcFlag.MpRecovery);
short num = (short)(this._v.Target.MaximumHp >> 3);
this._v.Target.HpDamage = num;
this._v.Target.MpDamage = num;
}

// Token: 0x04000051 RID: 81
public const int Id = 44;

// Token: 0x04000052 RID: 82
private readonly BattleCalculator _v;
}
}


However... i have MORE questions !

Tirlititi :
(https://image.noelshack.com/fichiers/2019/15/7/1555247875-1555247650-cover2.jpg)

- It's a mess to search something on .ddl : for example, i want to edit Vanish status. How did you search function of this status on DnSpy ? It's seem the software can't search string  :-\
I search on btl_stat or btl_cmd but can't find (or i search on wrong files)

EDIT : Maybe i got something. I found theses lines on BattleTarget +  SBattleCalculator on Memoria folder

Code: [Select]
public void PenaltyBanishHitRate() // i don't understand why Banish, maybe Vanish instead ?
{
if (base.IsUnderStatus(BattleStatus.Vanish))
{
this._context.HitRate = 0;
}

Code: [Select]
if ((v.Command.Data.aa.Category & 8) != 0) // if attack is not magical ?
{
v.Target.RemoveStatus(BattleStatus.Confuse);
v.Target.RemoveStatus(BattleStatus.Sleep);
}
if ((v.Command.Data.aa.Category & 16) != 0)  // if attack is not physical ?
{
v.Target.RemoveStatus(BattleStatus.Vanish);
}

- It's possible to remove paralysis status on Venom ? I remove Venom from SetCounter & SetEnemyCommandBySequenc but that's not enough it seem ^^

EDIT : I think i found it... on btlseq (folder {-} on assembly) but big pain to edit that, so much error CS0266

Code: [Select]
public const BattleStatus ANIM_STOP_STATUS = BattleStatus.Venom | BattleStatus.Stop | BattleStatus.Freeze;
- On HW, i see somes unused effect : i want to make a special effect for Freya's Reis's Wind.
If i create a new script on Memoria.Scripts.dll with an ID which is unused on HW, that's will work ?

EDIT : Yes you can ! ;D  But i found another issue....  :'( Try to apply White Wind effect on Flee for example : that's apply only on first character... wut ?
EDIT 2 : Ok seems that Flee is special, i can add White Wind effect on Vivi's Fire => Works perfectly but impossible with Flee (test with Chakra too)


I have more questions but that's will be enough for the moment ahah, i will continue to understand theses .dll files.

PS : I will EDIT my questions if i found it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-04-25 06:22:35
I found a bug : when you editing Garnet animation resources (from Prison Cage or if you add her on another battle), HW load few seconds and close.

EDIT : Another question (again !  :evil:), any way to delete file added on assets with UAV ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-01 20:03:36
So, sorry for the late answers.

Quote
PenaltyBanishHitRate
Indeed, there are a few "typos". There are a lot of mistakes like that in the Memoria's battle CS files but also in the normal source code sometimes. It indeed concerns Vanish there.

The "Command.Data.aa.Category" corresponds to the following flags in HW:
Code: [Select]
v.Command.Data.aa.Category & 1 -> "Reflectable"
v.Command.Data.aa.Category & 2 -> "Silence"
v.Command.Data.aa.Category & 4 -> "No M-Sword"
v.Command.Data.aa.Category & 8 -> "Is Physical"
v.Command.Data.aa.Category & 16 -> "Is Magical"
v.Command.Data.aa.Category & 32 -> "Short"
v.Command.Data.aa.Category & 64 -> "Hit Anim Off"
v.Command.Data.aa.Category & 128 -> "Returnable"
Flags are checked like that (it was the standard thing at the time). They use bitwise operators like "&" or "|" to manipulate flags and powers of 2 for the different flags.

In order to remove paralysis on Venom, you indeed have to do a lot of modifications. I think that these would be enough:
- In btlseq, you don't need to change the field "ANIM_STOP_STATUS" because it's not used anywhere in fact (you can check that by right-clicking on it -> Analyze -> Read By -> it gives nothing). You need to change the methods "SeqExecEnd" and "SeqExecWaitAnim" though: in both cases, remove the "BattleStatus.Venom" in the first part of the comparison (the second part is ~(... all the statuses...) which corresponds to "0" but it's not decompiled nicely with the BattleStatus type).
- In Memoria.Data.BattleStatus, remove the Venom flag from different status lists at the end:
Code: [Select]
NoInput = 1107434753u,
CmdCancel = 134401u,
Immobilized = 33558529u,
FrozenAnimation = 1107300353u,
NoMagic = 318905609u,
CannotEscape = 1107431745u,
CannotTrance = 33575233u,
BattleEnd = 4353u,
NoReaction = 1107300609u,
- In the class btl_cmd, remove Venom from the disabling list in the methods "SetCounter" and "SetEnemyCommand[BySequence]".
- In FF9.btl_abil.FindStrongestDefender, remove Venom in the list (for characters who can't cover),
- In FF9.btl_sys.CheckBattlePhase, remove Venom from the list that triggers Game Overs (more specifically for the proc of Phoenix).
... and I think that's all. Not the easiest thing to do.

Flee is actually not a multi-target spell animation, but single-target. If you go in HW's panel "Environment -> Spell Animations -> Flee-Skill -> Edit Spell Sequencing", you can see that the damage point and effect point only apply to the 1st target. Change that to apply to all the targets and you'll be able to use a multi-target White Wind with that (I am not 100% sure of the effect on fleeing though; it might bug to trigger fleeing several time simultaneously but I don't think so).

No, you can't delete files added using UAV and actually... you shouldn't add files either as it bugs and somehow I was never able to make it so new files can be used by the game (it just doesn't find them).
Replacing existing files is okay. Sounds and images are converted back and forth to standard file formats (the raw files couldn't be opened with pretty much all the sound/image readers). 3D models and their animations can be exported to correct FBX files (you need to export the "GameObject" that corresponds to the model, not the "Mesh" entry that usually has the same name and you need to export the textures separatly; sometimes they are not refered automatically correctly in the exported FBX). However, you can barely replace 3D models as it would usually consist of creating new files that the game wouldn't recognize... Using custom 3D models would better be done by reading them out of any archive inside the DLL (last time I've checked, though, I didn't find C# methods for importing FBX models... maybe big libraries like UnityEditor.dll would be required for that).

Thank you for the bug report. Maybe her model's resources are not referenced correctly in HW.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-05-02 04:50:35
So, sorry for the late answers.

Np, was discovering HW waiting yours answers :)

About Vanish & Venom, thank you for his details !
At this moment on my project, to early to use Vanish/Venom so i will see later :) I take note !

Flee is actually not a multi-target spell animation, but single-target. If you go in HW's panel "Environment -> Spell Animations -> Flee-Skill -> Edit Spell Sequencing", you can see that the damage point and effect point only apply to the 1st target. Change that to apply to all the targets and you'll be able to use a multi-target White Wind with that (I am not 100% sure of the effect on fleeing though; it might bug to trigger fleeing several time simultaneously but I don't think so).

Ooooohh.. ok ! I understand why some ennemy animations can't be cast Multiple (for example : Rainbow Storm to make an Aero spell, only works on single target)
That's interesting... maybe i will check inside this "Spell Sequencing" but i am afraid to break some ennemy attack lol

No, you can't delete files added using UAV and actually... you shouldn't add files either as it bugs and somehow I was never able to make it so new files can be used by the game (it just doesn't find them).
Replacing existing files is okay. Sounds and images are converted back and forth to standard file formats (the raw files couldn't be opened with pretty much all the sound/image readers). 3D models and their animations can be exported to correct FBX files (you need to export the "GameObject" that corresponds to the model, not the "Mesh" entry that usually has the same name and you need to export the textures separatly; sometimes they are not refered automatically correctly in the exported FBX). However, you can barely replace 3D models as it would usually consist of creating new files that the game wouldn't recognize... Using custom 3D models would better be done by reading them out of any archive inside the DLL (last time I've checked, though, I didn't find C# methods for importing FBX models... maybe big libraries like UnityEditor.dll would be required for that).

It's very sad that you can't add music on the game... it seem simple but too bad if game didn't understand.
I try to search on .dll files about how game find BGM during battle : what a mess ! :-o
I tried to invert ID Music without using btlencountbgmmetadata.txt or wldbtlencountbgmmetadata.txt but didn't find the right files.... I found an ID Music List on "FF9DBall" : nothing happen when i invert some music... Same thing on "AudioResources".

I want to understand how that's works !!  :P

Besides, how can we read "AssetBundle" on p0Data61 ? I am interesting to see what there is inside (i think i got some idea but i am too curious  ;D)

Thank you again for yours precisions Tirlititi.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-02 08:15:07
Enemy attacks are indeed determined to be multi-target/single-target by several things: the spell animation, the target type/amount (but that one is mainly used to determine whether "Cover" should trigger or not, so it's not very important) and the SV_Target inside its IA. It is perfectly safe to use as a single-target a spell animation that can be multi-target though (the other way around requires changing the spell sequencing and even then, the effect itself will usually be displayed on a single target despite affecting all of them; Flee-Skill is a special case in that regard).

Memoria adds a way to import new sounds through the class Memoria.SoundImporter. It requires the sound to be in .ogg format and I guess that you need to setup a "SoundProfile" yourself (setup an unused soundID and the proper SoundProfileType, etc). It must be possible and easier than importing a new 3D model in any case, but don't try to add it inside the archive, only in a sub-folder of the game (or Moguri mod's folder if it's inside "StreamingAssets").

Musics played in battles are indeed in these .txt files. They consist of a list of field IDs (or World Map IDs) and for each of them, a list of battle IDs encountered in these fields and the music linked to it. If the battle is not present, then the music is uninterrupted.
For my mod, I simply didn't change these files but I've put a line "Play Music" in the field scripts right before triggering some boss battles (something like "RunSoundCode( MusicID )" although I don't remember which "RunSoundCode" alternative should be used). That solution doesn't work with random encounters though.

"AssetBundle" is pretty much the first file that the UAV seeks in an archive: it contains the full paths of some files and IDs and things like that. I don't think that any program can read such a file and display it in a proper way; it's like a part of the archive's header informations.
You can open it with an hexadecimal editor though. Its structure can be found there (https://github.com/Tirlititi/Hades-Workshop/blob/master/Source/UnityArchiver.cpp) (in the method "UnityArchiveAssetBundle::Load").
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-05-02 17:11:39
Memoria adds a way to import new sounds through the class Memoria.SoundImporter. It requires the sound to be in .ogg format and I guess that you need to setup a "SoundProfile" yourself (setup an unused soundID and the proper SoundProfileType, etc). It must be possible and easier than importing a new 3D model in any case, but don't try to add it inside the archive, only in a sub-folder of the game (or Moguri mod's folder if it's inside "StreamingAssets").

... I just forget export/import option on Memoria.ini  ;D

But, how convinient, Memoria can export all folders EXCEPT... Music...

(https://tse2.mm.bing.net/th?id=OIP.fHFxLkKHqLbp7pdZNRq9cwHaFH)

On Memoria.log, no AudioResourceExporter called... wut

Quote
02.05.2020 06:42:17 |M| [TextResourceExporter] Pass through {Configuration.Export.Text = 0}.
02.05.2020 06:42:17 |M| [GraphicResourceExporter] Pass through {Configuration.Export.Graphics = 0}.
02.05.2020 06:42:17 |M| [FieldSceneExporter] Pass through {Configuration.Export.Field = 0}.
02.05.2020 06:42:17 |M| [BattleSceneExporter] Pass through {Configuration.Export.Battle = 0}.
02.05.2020 06:42:17 |M| [ResourceExporter] Application will now quit. Please disable Configuration.Export.Enabled and restart the game.
02.05.2020 06:42:17 |M| [ResourceImporter] Pass through {Configuration.Import.Enabled = 0}.
02.05.2020 06:42:17 |M| [GameLoopManager] RaiseQuitEvent

Maybe i will try later with an another fresh Memoria instance.

EDIT : I can import music with Memoria but export didn't work.... idk why. I will continue my test with import but i see Memoria create a similar file with .ogg file but i can't read this (no extension and have same name)

EDIT2 : With a HEX editor, i see it's an .akb file but there is a way to read the AKB Header ? I know the size is 304 bytes but there is a way to read this header clearly or extract his informations ?
(Thanks for this answer  (https://steamcommunity.com/app/377840/discussions/0/1692659135911392827/#c1692659135912008914)btw ^^)

EDIT3 : I make some test how we create LoopStart and LoopEnd on .ogg files with Audacity... check !  8-)
I think i finally "decrypt" this akb head with AKB2Header on Memoria.Prime.dll : I didn't find what I was looking for but i learn something.

Spoiler: "Here is an image about AKB Header details • show

I don't know why some values are null but works perfectly with .akb files from UAV !

Red for constant or optional.
(https://image.noelshack.com/fichiers/2020/18/7/1588478026-akbheader.png)


Musics played in battles are indeed in these .txt files. They consist of a list of field IDs (or World Map IDs) and for each of them, a list of battle IDs encountered in these fields and the music linked to it. If the battle is not present, then the music is uninterrupted.
For my mod, I simply didn't change these files but I've put a line "Play Music" in the field scripts right before triggering some boss battles (something like "RunSoundCode( MusicID )" although I don't remember which "RunSoundCode" alternative should be used). That solution doesn't work with random encounters though.

I already figure that with theses explications you provided : List of Music ID (http://forums.qhimm.com/index.php?topic=14315.msg269706#msg269706) & Changing the battle music of specific battles (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg259712#msg259712).
I read a lot of informations provided on first page, very usefull for beginner like me ^^ (specially IA, content chest, status and so many things !)

But the point is, i didn't figure how the game correlate "this List of ID Music" on p0data61.

For example, you provide us Dark Messenger's ID is 134. In my research, i found theses lines on FF9DBAll :

Code: [Select]
// Token: 0x04001E7E RID: 7806
public const int SNG_MUSIC095 = 131;

// Token: 0x04001E7F RID: 7807
public const int SNG_MUSIC096 = 132;

// Token: 0x04001E80 RID: 7808
public const int SNG_MUSIC097 = 133;

// Token: 0x04001E81 RID: 7809
public const int SNG_MUSIC098 = 134;

// Token: 0x04001E82 RID: 7810
public const int SNG_MUSIC099 = 135;

// Token: 0x04001E83 RID: 7811
public const int SNG_MUSIC100 = 64;

// Token: 0x04001E84 RID: 7812
public const int SNG_MUSIC101 = 71;

// Token: 0x04001E85 RID: 7813
public const int SNG_MUSIC102 = 77;

SNG_MUSIC098 = 134 (Dark Messenger). And MUSIC098 on p0data91 for Dark Messenger is number 98.

But nothing happen if i change this value... so with your previous answer, i suppose Memoria ignore this file and make this own method (this file seem useless because nothing use it)
But still : if i change 0 to 134 value on a field battle, how the game know 134 = Dark Messenger ?

EDIT : I try to use an unknown ID Music (exemple : 149) on btlencountbgmmetadata.txt and i get theses logs on Memoria.log .

Code: [Select]
03.05.2020 09:02:01 |W| [SoundLib] Music Id: 149 has Exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
03.05.2020 09:02:01 |W|   at System.Collections.Generic.Dictionary`2[System.Int32,System.String].get_Item (Int32 key) [0x00000] in <filename unknown>:0
03.05.2020 09:02:01 |W|   at SoundMetaData.GetSoundProfile (Int32 soundIndex, SoundProfileType type) [0x00000] in <filename unknown>:0
03.05.2020 09:02:01 |W|   at AllSoundDispatchPlayer.CreateSoundProfileIfNotExist (Int32 soundIndex, SoundProfileType type, .OnCreateFinish onFinishDelegate) [0x00000] in <filename unknown>:0
03.05.2020 09:02:01 |W|   at AllSoundDispatchPlayer.FF9SOUND_SONG_PLAY (Int32 ObjNo, Int32 vol) [0x00000] in <filename unknown>:0
03.05.2020 09:02:01 |W|   at FF9Snd.FF9AllSoundDispatch (Int32 ParmType, Int32 ObjNo, Int32 Arg1, Int32 Arg2, Int32 Arg3) [0x00000] in <filename unknown>:0

However, i didn't know what is this "Dictionary" : i suppose that's call kind of DB from SoundProfile but i have no idea where to find/consult that or i didn't understand this part... (i just begun C# since few days xD)

Final edit : Ok... i think i found how to add new OST with Memoria :D (without replacing the existing ones)

I will make more explanations after my little nap but i finally found the file which read IDs Music, it's located on resources.assets (viewed with Unity Assets Viewer) => embeddedasset/manifest/sounds/musicmetadata.txt.

Spoiler: show
{
  "data": [
    {
      "name": "Sounds01/BGM_/music000",
      "soundIndex": "5",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music001",
      "soundIndex": "6",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music002",
      "soundIndex": "3",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music003",
      "soundIndex": "4",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music004",
      "soundIndex": "1",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music005",
      "soundIndex": "2",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music006",
      "soundIndex": "0",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music007",
      "soundIndex": "10",
      "type": "Music"
    },
etc....


On this file, you can add new OST for the game, i just test quickly : seem to work !

Sorry if I didn't make myself clear...  :-\ and thanks again for your quick answer  :)
Sorry for that slightly confusing post  ;D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-03 13:35:58
You keep getting the answers to your own questions, congrats! :)

Indeed, since the port to Android/PC kept many parts of the old engine, they had to keep many numerical IDs used in the PSX version and add translations with other - new - IDs. So there's quite a lot of IDs in the end. Many of these IDs can be found in DLL's "FF9DBAll" or "FF9BattleDB", but also in these meta-data files in the "resources.assets" archive.
A dictionary is a C# standard structure that links a "key" to a "value". You can find many of them in "FF9DBAll" and it allows to use lines like "if (model_dictionary["GEO_MAIN_B0_000"] == 568) ...".
In HW's source code, you can find many of these useful databases in the files "Database_XXX.h" (this one (https://github.com/Tirlititi/Hades-Workshop/blob/master/Source/Database_Steam.h) for instance).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Adho on 2020-05-05 13:33:58
You need to use the Unity Assets Viewer for that.
Open the resources.assets archive, search for the file "BtlEncountBgmMetaData.txt", export it, modify it and then re-import it.
Inside that file, there's a list of field IDs (so the Queen's Chamber in which you fight Beatrix is 1223) and for each field, a list of battles that can trigger in that field with the music ID of the battle ran. If a battle is missing there, the ambiant music doesn't stop when entering a battle.

So just find the field (1223), the battle (73) and put the correct music ID for it (117, "The Wavering Blade").

Here's a list of music IDs. I don't think that you can actually see it in Hades Workshop (only in the UAV when you open the music archive p0data62).
Code: [Select]
34: Zidane's Theme
70: Unrequited Love
9: Vivi's Theme
82: Black Mage Village
76: Fleeting Life
10: Steiner's Theme
62: Steiner's Delusion
29: Garnet's Theme
113: Melodies of Life
69: Over the Hill
77: Awaking Song // A Song from Her Memory, probably sung in Dali
115: Zidane and Dagger's Song
106: A Song from Her Memory
59: Distant Memory
124: Light of Destiny
32: Freya's Theme
68: Burmecia
50: Unforgettable Silhouette
15: Quina's Theme
88: Eiko's Theme
139: Girl of Madain Sari
2: Amarant's Theme
116: Roses of May
117: The Wavering Blade
125: Protecting My Devotion
30: The Evil Within
53: Court Jesters
133: Cid's Theme
118: Master of Time
84: Pandemonium
95: Kuja's Theme
96: Desert Palace // Kuja's Theme, played during the exploration of the Desert Palace
97: Devil's Ambition
98: Bahamut is Summoned
94: Wicked Melody
134: Dark Messenger
73: Moogle's Theme
4: Danger in the Forest
60: Ice Cavern
3: Village of Dali
67: Beyond the Twilight
74: Lindblum
49: Out of the Frying Pan
57: Qu's Marsh
108: South Gate
85: Dark City Treno
92: Cleyra's Trunk
80: Cleyra Settlement
91: Gargan Roo
79: Fossil Roo
90: Conde Petie
99: Before the Altar
130: Ruins of Madain Sari
81: Eidolon Wall
109: Iifa, the Ancient Tree of Life
112: Aboard the Hilda Garde
144: Esto Gaza
110: Mount Gulug
129: Daguerreo, the Hermit's Library
87: Bran Bal, the Soulless Village
132: Memoria
121: Crystal World
24: Aloha De Chocobo
100: Ukulele de Chocobo
22: Vamo Alla Flamenco
58: A Place to Call Home
36: Oeilvert
105: Chamber of a Thousand Faces
103: Ipsen's Castle
101: The Four Mirrors
131: Terra
44: Outlaws
138: Peaceful City // Outlaws, when controlling Vivi early disc 3
18: Swords of Fury
27: Find the Princess
20: Eye to Eye
17: The Fateful Hour
33: Thy Warmth
25: Tragic Love
143: Star-Crossed Lovers
41: Kiss of Betrayal
145: I Want to be Your Canary
142: Inseparable Hearts
65: Prima Vista Orchestra
75: Rufus' Welcoming Ceremony
12: The Meeting
140: The Black Waltz
83: Eternal Harvest
7: The Extraction
141: Foolproof Love Letter Scheme
86: Look Back, See the Frog!
146: Broken Spell, Healed Hearts
72: Guardians
48: You're Not Alone
147: Assault of the Silver Dragons
1: Unforgettable Sorrow
89: Mourning in the Sky
45: Another Nightmare
52: RUN!
111: Hunter's Chance
66: Tetra Master
0: Battle
35: Boss Battle
61: Faerie Battle
71: Final Battle
5: Victory Fanfare
6: Game Over
156: Prelude
148: Doga and Une

Hi Tirlititi and other members!

Beatrix Alexandria Battle was one of the fights that I wanted to change the music for. 
I would also like to change six others:
- in the fight against the guardian of the earth, I'd like it to be the guardians' music that keeps playing.
- when fighting the Nova Dragon , I'd like it to be Assault of the Silver Dragons that keeps playing.
- the four guardians in memoria, once again I would like the Assault of the Silver Dragons to be launched instead of the classic boss theme.
I understood that each location had its own ID and each fight in a location had its own ID. So I have to find the ID of the place (temple of the earth for the first one, memoria for the second one) and then the ID of the fight in question (a priori there is only one for the temple of the earth but several for memoria) to replace the ID of the music (35 -> 72 for the guardian of the earth, and 35 -> 147 for the Nova Dragon and the 4 guardians).

But Idk how to find the IDs of the locations and the fights.

In fact I even wonder: for the 3rd fight against Beatrix, I managed to change the music following your instructions but first I wanted to search by myself in the "BtlEncountBgmMetaData.txt" looking where the "117" of Beatrix's theme appeared. I thought I could find the ID of the fight against Beatrix in Bluemecia and Clayria, and thus find the ID of Alexandria (if the "fight against Beatrix" IDs were the same from one area to another). And in fact, the ID "117" of her theme didn't appear anywhere. I think it's simply because in the first two encounters with Beatrix, the music was already playing before the fight started.

If my reasoning is right, if I replace the "35" with "72" and "147" in the fights that I'm interested in, the music will start playing again from the beginning when the fights start and it won't be great. So how do I fix that? For the 4 guardians in memoria, it's no problem to replace "35" by "147" because the music begin at the same time of the battle, but for the two others (earth temple and nova dragon) Idk how to prevent the music playing from the beginning (if my idea is correct about how "BtlEncountBgmMetaData.txt" works)...

Finally, one last question, for the 6 fights, I would like that the victory music does not start at the end of the fight and that the music of the fight continues until the end of the table of gains of experience, objects, etc.. Checking the "Don't Stop Music" box for each fight will allow this, right?

I hope I made myself clear ^^'?
Anyway, ty for your amazing works and ty in advance for your response !
If other people have the answer to my questions, thank you as well, of course!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-05 20:00:44
Hello Adho,
You can see the IDs of the fields in HW by checking "Option -> Show field IDs". Then, fields are listed with their IDs in the panel "Environment -> Fields".
Indeed, the Beatrix theme starts before the battle for her encounters in Burmecia and Cleyra, thus nothing is listed in the "BtlEncountBgmMetaData.txt" in order to not interrupt her theme. For her 3rd battle though, it's the usual boss battle that is played, which is why you couldn't find any instance of the music "117" in the .txt file.
Unfortunatly, I don't think that it is possible (without modifying the engine) to disable the victory fanfare and still have the post-battle rewards. I think that both options are tightly linked in the engine but the best is to run tests to check that.

Hope that helps.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Adho on 2020-05-06 10:34:06
Hi Tirlititi,

Ty for your answer ! Ok for the IDs, I turn the option ON for both fields ans ennemies so I've found where to change the music ID in the "BtlEncountBgmMetaData.txt" :

Code: [Select]
Earth Guardian :
   "2553": {
    "2": "35"
  },

Nova Dragon :
  "2756": {
    "931": "147"
  },

Maliris:
  "2904": {
    "932": "147"
  },

Tiamat:
  "2908": {
    "933": "147"
  },

Kraken:
  "2915": {
    "934": "147"
  },

Lich:
  "2919": {
    "935": "147"
  },

But I have 2 problems :

1 - As expected, in the case of the Earth Guardian and the Nova Dragon, the music starts again from the beginning. So in game, here's what's going on: the music plays and the events run smoothly, the music stops as the fight starts, the music starts again from the beginning and the fight begins.
Now, I'm trying to figure out how to make sure the music isn't interrupted when the fight starts (like it happens during the hunting in Lindblum, against Beatrix during the first two fights, against the Silver Dragon at Pandemonium, etc.) and stop when the fight is over.

2 - I've tried to remove the fanfare song for these battles by checking both "Disable Rewards" and "No Victory Animations", but in these case, Idk why but the battle never end : the boss dies, the black screen appears, but the music continues and the black screen never leaves... 

Concerning the fanfare music, I thought it was possible to remove it because at the beginning of the game, after defeating the first boss, the Spider Plants don't play fanfare music but still bring back rewards.
But one problem at a time, for now I just wish that the launch of the battles against the Earth Guardian and the Nova Dragon wouldn't make the music start all over again, and that the removal of the rewards wouldn't softlock the game. So if you have any idea/advice, I'd be very grateful.

Ty again for your answer, and ty in advance for the future help :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Adho on 2020-05-06 11:22:32
I tried something out of simple curiosity: I deleted the line corresponding to the fight against the Nova Dragon thinking that if the game didn't launch a new instruction for the music, it wouldn't stop. So I have this:
Code: [Select]
  "2754": {},
  "2755": {},
  "2756": {},
  "2800": {},
  "2801": {},
  "2802": {},

Instead of this:
Code: [Select]
  "2754": {},
  "2755": {},
  "2756": {
    "931": "147"
  },
  "2800": {},
  "2801": {},
  "2802": {},

And I've tried with the "Don't Stop Music" box checked or not. In both cases, the fight begins correctfully but there is no music at all :'( I thought I was on the right track but in my opinion the solution can be found elsewhere than in the "BtlEncountBgmMetaData.txt" file. Or rather both in "BtlEncountBgmMetaData.txt" and in another script file.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-06 14:48:44
1) As said, you must remove the entry in the .txt if you don't want the music to change when entering the battle.
Code: [Select]
Earth Guardian:
   "2553": {},
I guess that the music stops for Nova Dragon because there is a script at the end of the cinematic to stop the music.

2) Indeed, you can decide not to stop the music after the battle and still have rewards. I forgot that the "You're not alone" sequence does that. Simply check the options "No Victory Animations" and "Don't Stop Music". Do not check the "Disable Rewards" option if you want the fight to give exp or AP or gil or items... besides, as it says when you hover your mouse over that option, it would require slightly changing the "Main_Init" function.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Adho on 2020-05-06 17:37:22
Hi Tirlititi,

1 - I've tried for the Earth Guardian too but the result is the same as for the Nova Dragon: if I remove the combat and music IDs, there is no music during the fight. It has to be scripted like for the Nova Dragon. Well, at worst it's not that bad :)

2 - Ooooh OK ! I thought that "Don't Stop Music" acted quite differently: In fact I thought that, in a given environment, the background music was stopped when a fight started and started again after the end of the fight. And I thought that this "Don't Stop Music" option just allowed to resume the background music as if it had continued to play (but mute) during the fight. So ok for this point, with "Don't Stop Music" and "No Victory Animation", the fight music continues until the end of the rewards. Thank you very much!

Ty for your answer !
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Weisshuf on 2020-05-08 19:54:34
So I saw that you pinned the "status immunity" post on the first page, but i only saw that you could replace something. I, for example, would change body temp that it includes Berserk immunity, but I cant for the love of god understand how
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-08 22:12:39
@Adho: I don't know then :/
There must be a flag or something for not stoping the music at the start of battles... or maybe they happen only with a few specially handled fights.

@Weisshuf: The best is to use dnSpy there instead of the CIL code. It makes things much easier to understand and change.
dnSpy is a tool that can open some DLLs. In particular, for doing what you want:
1) Open the game's Assembly-CSharp.dll using dnSpy,
2) Search for the class "btl_abil" that can be found in the virtual folder "FF9" of the DLL,
3) Inside that class, you should see the method "CheckStatusAbility"; right-click and "Edit method" on it,
4) Depending on whether you have the Moguri/Memoria mod installed or not, what's next will be different:
4-a) If you have the Moguri/Memoria mod, you'll see the line "btl.ResistStatus |= (BattleStatus.Heat | BattleStatus.Freeze);"; simply add " | BattleStatus.Berserk" in the parenthesis,
4-b) If you don't have it, it will take the form of numbers instead: "btl.stat.invalid |= 50331648u;", which corresponds to 16777216 | 33554432, so you just need to add the status ID of Berserk to add immunity for it: write "btl.stat.invalid |= 50333696u;" instead and you're good,
5) "Compile" then "File -> Save Module".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Weisshuf on 2020-05-09 08:42:13
@Tirlititi Big thank you. Never thought it could work out that easy.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Adho on 2020-05-09 13:39:39
Hi Tirlititi and others !

No prob for the music, it's fine despite the restart !

I just have another question (w/o link with music this time): while modifying some of the game's dialogs, I noticed that sometimes there were lines of dialog (which were not in the basic game) that were not read. The added dialogs like the discussion between Freya and the King of Burmecia inside Cleyra's temple works perfectly, but I don't understand why some isolated lines are skipped in other scenes, as if the added dialogs weren't all taken into account.

In the image I'm using as an example (in french, sorry but there's a discrepancy with the English dialogue here), the underlined lines do not appear in play :
(https://image.noelshack.com/minis/2020/19/6/1589030775-exemple.png) (https://www.noelshack.com/2020-19-6-1589030775-exemple.png)

I know there are some manipulations to do when you want to add lines of dialog (and it's explained in one of the forum section) but for lines already present I found it strange.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Weisshuf on 2020-05-09 14:15:05
Well i got another problem. I dont know where this bug came from, but now the game has missing letters in the dialogues. Verifying my steam data didnt help. Is my save corrupted?
I also got the bug with "ZidaneZidane" and so on. I dont really know what this is causing it

Even after a clean uninstall and even after setting it to german, some letters are missing in some dialogues. Does someone has a savegame for that part so I can check that?

(https://i.imgur.com/fNdMQ2A.jpg)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Caledor on 2020-05-10 16:30:57
I'll leave this here since there are a lot of "useful information" links on the first post.

This is about altering Fenril and Carbuncle's name and description accordingly, when one of the effect-altering add-ons is equipped on Eiko, both in battle and outside of battle:

Code: ("BattleHUD.cs") [Select]
itemListDetailHUD.Content.SetActive(true);
int num2 = this.PatchAbility(num);                                                    // Added line of code
itemListDetailHUD.NameLabel.text = FF9TextTool.ActionAbilityName(num2);               // Change num to num2
int mp = this.GetMp(aaData);
bool flag2 = mp != 0;
if (flag2)
{
itemListDetailHUD.NumberLabel.text = mp.ToString();
}
else
{
itemListDetailHUD.NumberLabel.text = string.Empty;
}
bool flag3 = abilityState == BattleHUD.AbilityStatus.ABILSTAT_DISABLE;
if (flag3)
{
itemListDetailHUD.NameLabel.color = FF9TextTool.Gray;
itemListDetailHUD.NumberLabel.color = FF9TextTool.Gray;
ButtonGroupState.SetButtonAnimation(itemListDetailHUD.Self, false);
}
else
{
itemListDetailHUD.NameLabel.color = FF9TextTool.White;
itemListDetailHUD.NumberLabel.color = FF9TextTool.White;
ButtonGroupState.SetButtonAnimation(itemListDetailHUD.Self, true);
}
itemListDetailHUD.Button.Help.TextKey = string.Empty;
itemListDetailHUD.Button.Help.Text = FF9TextTool.ActionAbilityHelpDescription(num2);           // Change num to num2

Code: ("AbilityUI.cs") [Select]
private void DisplayAADetail(Transform item, ListDataTypeBase data, int index, bool isInit)
{
[...]
int mp = this.GetMp(FF9StateSystem.Battle.FF9Battle.aa_data[abilityListData.Id]);
int num2 = this.PatchAbility(abilityListData.Id); // Add this line
itemListDetailHUD.NameLabel.text = FF9TextTool.ActionAbilityName(num2); // Change abilityListData.Id to num2
itemListDetailHUD.NumberLabel.text = ((mp != 0) ? mp.ToString() : string.Empty);
if (abilityListData.Type == AbilityUI.AbilityType.CantSpell)
{
itemListDetailHUD.NameLabel.color = FF9TextTool.Gray;
itemListDetailHUD.NumberLabel.color = FF9TextTool.Gray;
}
else if (abilityListData.Type == AbilityUI.AbilityType.Enable)
{
itemListDetailHUD.NameLabel.color = FF9TextTool.White;
itemListDetailHUD.NumberLabel.color = FF9TextTool.White;
}
itemListDetailHUD.Button.Help.Enable = true;
itemListDetailHUD.Button.Help.Text = FF9TextTool.ActionAbilityHelpDescription(num2);     // Change abilityListData.Id to num2
}
}

//*************************************************
//Also copy paste the following anywhere within AbilityUI.cs
//*************************************************

private int PatchAbility(int id)
{
if (AbilityUI.AbilCarbuncle == id)
{
switch (FF9StateSystem.Common.FF9.party.member[this.currentPartyIndex].equip[4])
{
case 227:
id += 3;
break;
case 228:
id++;
break;
case 229:
id += 2;
break;
}
}
else
{
if (AbilityUI.AbilFenril == id)
{
byte b = FF9StateSystem.Common.FF9.party.member[this.currentPartyIndex].equip[4];
id += ((b != 222) ? 0 : 1);
}
}
return id;
}

private static int AbilFenril = 66;

private static int AbilCarbuncle = 68;

Now Carbuncle and Fenril's names and descriptions will match the actual effect when used, which is altered by a few add-ons. Those names and description are already within the game files so no other changes are required. This code simply unlocks these otherwise hidden descriptions.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Albeoris on 2020-05-11 15:42:38
EDIT: One last things. Albeoris also added a "Spell rate" feature: apart from the method "Perform" that you can find in the battle scripts, you sometimes have a method "RateTarget" that returns a Single (number) and is added when the class derivates from "IEstimateBattleScript". This method is meant to somehow measure the usefulness of an ability in a given situation. I am not sure if that feature is working (maybe it is used when the player turns Auto-battle on?) though, and you can ignore it if you don't care.

Code: [Select]
[Battle]
SelectBestTarget = 1 ; 0 - Original, 1 - Estimate the best target via IEstimateBattleScript

Hello! If you enable this option, the cursor will not point to the first goal in the list, but to the best one based on the total score.

For example, if two characters lack 1000 HP, and we select “Heal”, but one character has 20% HP and the other has 80% HP, then the cursor will point to a character with 20% HP, since he is the best target.

If you select "Golden Needle (Soft)" the battle with the gargoyle, then the cursor will point to it.

If you select "Eat", the cursor will be placed on a target whose skill has not yet been learned.

Also, in the latest version, you can replace Vivi's basic attack with basic spells. Which spell will be used is also determined by this rating. BUT (!) since I’m not sure that it’s a good idea to turn on automatic target selection for attacking skills, I excluded script No. 9 (Magic Attack) from the list used to select a target.

Code: [Select]
ViviAutoAttack = 0 ; 0 - Default attack, 1 - One of the basic spells (Fire, Blizzard, Thunder) cost-free MP
P.S. Thank you so much for adding support for CSV tables!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-12 22:51:52
@Adho: Well, for the dialogs, it's really because the dialog list is only a database. It's the script that decides whether a dialog is used or not and when. In theory, those dialogs could be randomly shuffled and still be used in the order as long as the script uses the proper dialogs at the correct time.

@Weisshuf: It's surely because of the font that you use. Someone else already had that bug a long time ago and you need to change the font to a proper one (if you have Memoria, font can be changed in the "Memoria.ini" file).

@Caledor: Thank you :)
I didn't even see that name and description of Carbuncle was not updated. I just never use its alternate effects ^^"

@Albeoris: You're welcome. Thanks to you for clarifying that stuff.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-05-13 20:56:01
Update : 26 November 2023

So here is a little tutorial to add music WITHOUT replacing the existing ones

You will need just Audacity for that but don't worry, it's very simple !

Sorry in advance if I make grammatical or spelling mistakes :)

I) Create/Prepare your soundtrack

First of all, you need to prepare your music with Audacity (or another software if possible).

/_!_\ Open Audacity's config (Ctrl + P), then go in Import/Export and check if the option is enabled => Show Metadata Tags editor before export

On this first step, we need to create two metadata on your file : "LoopStart" and "LoopEnd". Indeed, Memoria can convert .ogg in another format with an AKB header (the important part !).
This header will contain the loop region from your music : this step is essential to make an appropriate OST for FF9.

At the bottom of the screen, right click on numbers and select "samples."

(https://imgur.com/y2ecE81.jpg)

Open your audio file with Audacity and create looping region, you can use labels (Tracks -> Add Label or Ctrl + B).

These labels are optional but are very useful to visualize the loop. Of course, these two points in the song MUST sound exactly the same !

(https://imgur.com/3JPBdG5.jpg)

Once your loop is in place, select the region between theses labels and note the number of frames of the loop start and the loop end.

(https://imgur.com/ycOOzht.jpg)

On this example : Loop Start = 4095758 and LoopEnd = 9166785.

Export your file in .ogg format and the metadata window will pop up.

On this window, "Add" two lines and name them EXACTLY : LoopStart and LoopEnd, with their respective values (frames number), like this :

(https://i.imgur.com/QE9htv5.png)

Save as music123.ogg for example and now, you need to create a specific folder on the selected path : StreamingAssets\assets\resources\Sounds\Sounds01\BGM_

II) Add an index for your soundtrack

Download this file from this link => Pastebin link ! (https://pastebin.com/u9r9LKMV)

Rename it musicmetadata.txt and place it in this folder :
- If you don't use mods => FINAL FANTASY IX\x64\FF9_Data\Resources\resources\embeddedasset\manifest\sounds
- If you use mods, take the folder with the highiest priority and place it here => FINAL FANTASY IX\[YOUR MOD]\FF9_Data\Embeddedasset\manifest\Sounds

On this file, add theses lines at the end :

Code: [Select]
{
      "name": "Sounds01/BGM_/music123",
      "soundIndex": "149",
      "type": "Music"
    }

You must have something like that... carefull with commas !

Code: [Select]
    {
      "name": "Sounds01/BGM_/music121",
      "soundIndex": "148",
      "type": "Music"
    },
    {
      "name": "Sounds01/BGM_/music122",
      "soundIndex": "147",
      "type": "Music"
    }, <======= Don't forget the comma here !
    {
      "name": "Sounds01/BGM_/music123",
      "soundIndex": "149",
      "type": "Music"
    }
  ]
}

To check IDs available, you can check here => List of musics (FF9) (https://github.com/Albeoris/Memoria/wiki/List-of-musics)

Save your musicmetadata.txt.

After that, you can edit "BtlEncountBGMMetaData.txt" (for battles on the field) and "WldBtlEncountBGMMetaData.txt" (for battles on the map) from the ressources.assets to add your music. You can extract these files from Hades Workshop, with the Unity Assets Viewer.

/_!_\ The ID you must use is the "soundIndex" ! For our previous example, the ID will be 149 and not 123 !

If you forget how to change ID music from battle => Changing the battle music of specific battles (Steam) (http://forums.qhimm.com/index.php?topic=14315.msg259712#msg259712)

And... that's all ! Congrats !  ;)

Hopefully, when you will launch a battle with your new soundtrack, Memoria will create your soundtrack with .akb header.

If you encounter any difficulties, don't hesitate to consult the Memoria.log file to see what happens.

Hope that's will be helpfull if you want to make various battle with differents soundtracks !

PS : Didn't test yet but i suppose you can make this same logic with SoundEffect (dictionnary SoundDisplayNames on Memoria and soundeffectmetadata.txt on ressources.assets)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Albeoris on 2020-05-21 09:04:21
DV, friends, if you notice any problem in the game engine (equipment is incorrectly displayed) or in the Memoria (music is not exported), do not hesitate to write about it:
https://github.com/Albeoris/Memoria/issues

In a few weeks, we fixed dozens of problems that I didn’t even know about (thanks to a detailed description from snouz).

If you already have a ready solution, share the pool requests:
https://github.com/Albeoris/Memoria/pulls

If you are not friends with Git, but found a solution and tested it through dnSpy, just describe it in the issue so that I can check it and quickly apply to the game.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-05-23 14:11:29
DV, friends, if you notice any problem in the game engine (equipment is incorrectly displayed) or in the Memoria (music is not exported), do not hesitate to write about it:
https://github.com/Albeoris/Memoria/issues


I didn't report this issue atm because I don't know if the problem comes from my side or from Memoria.
I will test tomorrow on my laptop : if the problem happens again, I'll open a ticket on Github :)

By the way, i have a question (for Tirlititi) : it's possible to know exactly which sound effect (.akb files from p0data62 or p0data63) is used by a spell animation ?
I try to find this information on "Environment/Spell Animations"... it doesn't seem to be there (or i can read this kind of information)

For example, can't find SFX files for Thunder Slash (Steiner/Beatrix).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-23 20:39:02
Found it. Their list is in the file "SpecialEffectMetaData.txt" in the resources.assets.
They are listed depending on the special effect (there are usually many of them for a single special effect). For instance, sounds used by Thunder-Slash-1 (ID 191) are:
Code: [Select]
Sounds03/SE50/se500228
Sounds03/SE50/se500229
Sounds03/SE50/se500230
It's the exact same sounds used for Thunder-Slash-2 and Thunder-Slash-3. I don't know if you have access to the spell effect IDs in HW (I think not) but they are listed there (https://github.com/Tirlititi/Hades-Workshop/blob/master/Source/Database_SpellAnimation.h).

If I understood correctly, sounds in the meta-data are listed by their order of usage.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-05-23 20:56:22
It's the exact same sounds used for Thunder-Slash-2 and Thunder-Slash-3. I don't know if you have access to the spell effect IDs in HW (I think not) but they are listed there (https://github.com/Tirlititi/Hades-Workshop/blob/master/Source/Database_SpellAnimation.h).

If I understood correctly, sounds in the meta-data are listed by their order of usage.

Oooooohhh... perfect ! That's what i need !  ;D

Indeed, theses IDs are not available on "Spell Animation" but now, that's will be perfect to fix somes crappy sounds (like Thunder Slash or when Steiner cast something... rip my ears)

Thank you again Tirlititi  :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: aidolu12 on 2020-05-27 01:19:19
As always, thanks Tirlititi for Hades Workshop.

I am not an expert on programming, I have been trying to modify formulas, so there is already two for strenght and magic based attacks:

( (power-defense) * random[str or mg, str or mg + (level + str or mg)/8]

I would like to add (or replace) a formula like this but based on speed. I tried using dnSpy, but when I compiled i got multiple errors on btl_calc... I saw the error list and the errors comes from others lines completely different from the ones i was modifying, so I though it might be compatibility issues or it is me who is commiting the mistake.

Would anybody help me on this topic to see if is it possible to do this modification?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-27 11:18:09
These are common (and very tedious) errors triggered by dnSpy... For some reason, it doesn't accept many implicit type-cast although it forgets to write them when generating the C# code before you're allowed to edit it.
Eg.:
Code: [Select]
uint i = 1;
ushort u1 = i;
ushort u2 = i+1;
This will possibly be an error for both u1 and u2 because they don't have the proper byte length. The fix for that is to force the type-cast:
Code: [Select]
uint i = 1;
ushort u1 = (ushort)i;
ushort u2 = (ushort)(i+1);
Since the problem repeats everytime you try to edit a method or a class (even if you already fixed it on a previous edit), I took the habit to copy-paste codes in my text editor and do the changes there, then copy-paste back the code in dnSpy and keep the code saved somewhere for subsequent modifications.

For the class btl_calc, you can use my dropbox version (https://www.dropbox.com/s/2k2mkezqx0loe4i/Source_BtlCalc.cs?dl=0) (if you don't use Memoria): it has fixes for these dnSpy errors and makes things more readable without any change in the system.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: aidolu12 on 2020-05-27 13:22:38
I think I understand. Thanks.

BTW, when i open the link you sent me, it says that the folder "Public/FinalFantasyIXCode" does not exist.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-05-27 14:41:37
Thanks, I copied a wrong link and used a wrong tag indeed ^^"
I fixed the link now.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: aidolu12 on 2020-05-27 15:02:20
Awesome, already followed what you told me before you fixed the link.. I did it! I added a formula bases on speed!, i just finished the testing.

First thing was to add a method, cause I saw the STR and MAG formulas also had one, and then had to put it on CalcMain for this to have effect. I took the "unused" ones that appears on the Hades Worskhop list ("unused 78" and so on).

Now I need to mix it with the weapon attack. I know there are formulas for weapon attacks, the issue with them is that they do not count the power on the spell, so it does not matter how much power I add, the damage is about the same.

I was looking into the programming on drain, it seems that they equal the calculated amount for damage to the absorbed caster hp, that way they could put in on one line. I would experiment a little bit to make the same, but instead of absorbing the damage, it just recovers 5% of the caster max hp.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2020-06-01 00:36:16
Hey Tirlititi, I've got a peculiar issue that I'm hoping has an easy answer that I'm missing.

For context, I'm trying to add new enemies to battles, largely to increase the number of battles with multiple opponents in the end game, since FF9 tends to be kind of deficient with that sort of thing. So I've been creating new versions of monsters from different parts of the game with increased stats, attacks and so forth. This has been going rather well, except for one thing: I'm trying to increase the sizes of the monsters.

I have already been able to do this to original monsters in the game (for instance making the Gigan Toad much larger than usual) and it works fine with no bugs I can see. When I do the same thing to monsters I have produced, this results in a very obvious problem: when the battle loads, not only would the monster in question be increased in physical size, so does Zidane. He becomes HUGE.

The size modification that I've been using is the same one found in Torama's loop script. This is what it looks like for the working Gigan Toad:

Code: [Select]
Function Gigan_Toad_Loop
    while ( !( GetBattleLoadState & 8 ) ) {
        Wait( 1 )
        set VAR_GenUInt8_206 = GetRandom
    }
    set SV_FunctionEnemy[MODEL_SIZE] =$ 6144
    set SV_FunctionEnemy[STOP_ANIM] =$ 2
    set SV_FunctionEnemy[PLAY_ANIM_ONCE] =$ 0
    return

And it works perfectly fine. What I'm using for my own monsters is not unlike that, so for example:

Code: [Select]
Function Plastique_Loop
    while ( !( GetBattleLoadState & 8 ) ) {
        Wait( 1 )
        set VAR_GenUInt8_206 = GetRandom
    }
    set SV_FunctionEnemy[MODEL_SIZE] =$ 6144
    return

The monster increases in size as expected, but this produces BIG ZIDANE, who is very amusing but not really what I'm looking for.

I've been fiddling with this on and off for about a week and I'm not entirely sure what I'm missing. Any idea what I have done wrong?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-06-01 05:23:46
I have 2-3 questions as well ^^

1°) About this part "Properly adding a new enemy to a battle (Steam) (http://"http://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485"), i make a special combat with 4 Ghosts (1 King and 3 Minions) : however, they have same stats (i can bypass this with SV_FunctionEnemy so np).

But i can't modify drops for Ghost King for example... it will alter the drops of all the ghosts as well. So my question is : it's possible to separate 2 ennemis with same model, to make 2 distincts ID (something like that) ?

I see the game can do that, some examples with Zaghnol/Mu/Feng from Lindblum or monsters from Treno Arena : there is a way to make that ?

2°) About SV_FunctionEnemy, i see you can edit elemental affinities on battle with SV_FunctionEnemy[ELEMENT_IMMUNE], SV_FunctionEnemy[ELEMENT_WEAK], SV_FunctionEnemy[ELEMENT_ABSORB] and SV_FunctionEnemy[ELEMENT_HALF] (ex : Malboro script)

But i can't edit status effect with SV_FunctionEnemy (STATUS_IMMUNE, STATUS_AUTO and STATUS_CURRENT)... i can read the value in battle (with a Battle Text) but can't find a way to change the value  :-\ is there any way to change that or not by chance?

3°) Not a HW question but.... where i can find all monster attacks SFX from PSX ?  :-D Try to search on .iso/.bin PSX games but... damn ^^ Can't find theses files !
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-06-01 11:53:48
@Clem Fandango: I don't know that bug.
Are you sure that this "loop" function is what makes Zidane big? If you remove it (or keep only "return"), then both the monster and Zidane get regular sized?
If yes, you can try to use something like this instead of "set SV_FunctionEnemy[MODEL_SIZE] =$ 6144":
Code: [Select]
set 16[MODEL_SIZE] =$ 6144Use "16" for the first enemy, "32" for the 2nd, "64" for the 3rd and "128" for the 4th. It may be not the best way to do (if you have several Plastique in the fight, they share the loop function... there should be no problem having a line for each one of them). At least, you can see with that if the problem comes from "SV_FunctionEnemy" for some reason.

Also, double-check that your enemy groups have the correct number of enemies (and with proper enemy type) and that the "Main_Init" function creates them properly as well, with the correct IDs.

@DV:
1°) Yes, there should be no problem copy/pasting a Ghost in the list of enemies for that battle so you have two different Ghosts; the game doesn't care if they have the same models or such... Just maybe uncheck the option "Edit similar enemies" when you do that. Once your super-ghost is given a different level or name, though, you can enable back that option because it won't be considered similar to the other ghosts by HW anymore.

2°) You can't do that by default unfortunatly :/
It goes down to the functionalities implemented in btl_scrp (https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Global/btl_scrp.cs). You can see that you can access to the status properties ("GetCharacterData", cases 42-45) but can't modify them ("SetCharacterData", there's no cases 42-45). In AF's source files (https://www.hiveworkshop.com/attachments/alternatefantasy_v5-0_sources-zip.335459/), there are codes for improving that part though and, in particular, let scripts be able to do that, so you can mod the DLL to add (at least) that feature and then use it in your HW scripts. I am not sure how we will implement all the features I need for AF in a next version of Memoria but it can be safely assumed that for statuses it will be implemented like that (for the new features that were not present at all, such as modifying a spell's stat during the battle, I may make it optional or external...).

3°) The 3D models of their attacks' SFX? You can't. They are not in a format that could be recognized by any model ripping software :/
However, Tasior2's FF9 Reverse (http://forums.qhimm.com/index.php?topic=15957.msg258062#msg258062) tool was able to get a couple of very specific SFX models very well, but it's limited (IIRC, the "Correct answer" and "Wrong answer" SFX of the Ragtime Mouse were amongst the only ones to be read thanks to it).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-06-01 18:59:34

@DV:
1°) Yes, there should be no problem copy/pasting a Ghost in the list of enemies for that battle so you have two different Ghosts; the game doesn't care if they have the same models or such... Just maybe uncheck the option "Edit similar enemies" when you do that. Once your super-ghost is given a different level or name, though, you can enable back that option because it won't be considered similar to the other ghosts by HW anymore.

I never see this option to "Edit similar enemis"..... i am blind lol.
That's perfect o/ Thanks !

2°) You can't do that by default unfortunatly :/
It goes down to the functionalities implemented in btl_scrp (https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Global/btl_scrp.cs). You can see that you can access to the status properties ("GetCharacterData", cases 42-45) but can't modify them ("SetCharacterData", there's no cases 42-45). In AF's source files (https://www.hiveworkshop.com/attachments/alternatefantasy_v5-0_sources-zip.335459/), there are codes for improving that part though and, in particular, let scripts be able to do that, so you can mod the DLL to add (at least) that feature and then use it in your HW scripts. I am not sure how we will implement all the features I need for AF in a next version of Memoria but it can be safely assumed that for statuses it will be implemented like that (for the new features that were not present at all, such as modifying a spell's stat during the battle, I may make it optional or external...).

Oh ok, i just discover that when testing an IA Boss so... that's not important ^^ Thanks for the clarification !

3°) The 3D models of their attacks' SFX? You can't. They are not in a format that could be recognized by any model ripping software :/
However, Tasior2's FF9 Reverse (http://forums.qhimm.com/index.php?topic=15957.msg258062#msg258062) tool was able to get a couple of very specific SFX models very well, but it's limited (IIRC, the "Correct answer" and "Wrong answer" SFX of the Ragtime Mouse were amongst the only ones to be read thanks to it).

Woops ! I didn't mean SFX but Sound Effect... sorry  ;D
Somes sounds effects on Steam version are... yeah that's something. For example Lancer/Ryuken from Freyja, i swear i can hear a dolphin dying at the end  :o :-D Wth.

I found a .zip with all sounds effects from Characters but can't find from Monsters... any idea to get theses files ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-06-01 20:20:35
Sounds are AKAO, which is a common format to at least FF7/FF8/FF9. I guess there are programs to rip them yes, although I've never cared about it (there are a couple of people who extracted all the PSX sounds though so that's definitely possible).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Clem Fandango on 2020-06-03 02:21:25
@Clem Fandango: I don't know that bug.
Are you sure that this "loop" function is what makes Zidane big? If you remove it (or keep only "return"), then both the monster and Zidane get regular sized?
If yes, you can try to use something like this instead of "set SV_FunctionEnemy[MODEL_SIZE] =$ 6144":
Code: [Select]
set 16[MODEL_SIZE] =$ 6144Use "16" for the first enemy, "32" for the 2nd, "64" for the 3rd and "128" for the 4th. It may be not the best way to do (if you have several Plastique in the fight, they share the loop function... there should be no problem having a line for each one of them). At least, you can see with that if the problem comes from "SV_FunctionEnemy" for some reason.

Also, double-check that your enemy groups have the correct number of enemies (and with proper enemy type) and that the "Main_Init" function creates them properly as well, with the correct IDs.

Thanks for the assist Tirlititi, that alternative did the trick.

It was definitely the SV_FunctionEnemy causing the issue, seemingly. If I removed that one line or otherwise just left the Loop function to return, both the monster and Zidane would go back to their regular size. Main_Init was okay too, the monsters were behaving as they were supposed to and there wasn't anything amiss otherwise. Very weird!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-06-06 07:38:02
I have a little question Tirlititi : currently, i create/edit some moves to make combo attacks (serious lack on FFIX).

But i have a little issue... juste here :

(https://i.ibb.co/JnMVzqR/comboFF9.gif)

I use "Effect Point" on "Edit Animation" for each hit. Of course that's works but it missing something : showing damage HP for each hit.

With spell animation, it's pretty simple to make this kind of manipulation.
However, with basic enemy attack... it's only show the last hit.

So my question : you think it's possible to show HP value for each hit ? (maybe with DnSpy or something, to edit Effect Point or by using another trick/idea  ;D).

If this is not possible or too complicated, no worries! I'll do without ^^
Thanks in advance !
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-06-06 12:43:58
I can't see your image.
For Enemy Spell Animations, it all depends on how the effect is triggered. The "Run Spell Animation" and "SFX" codes should give the hand to a generic "Spell Animation" and thus show the numbers every time. However, for both of them, it's not possible to have two different generic "Spell Animations" running at the same time. I could make a two-hit attack with Kraken using a "SFX" after a "Run Spell Animation" (Bubble-gun + Leg), but it requires some time gap between the two to have them work correctly.

For the "Effect Point" of Enemy Spell Animations, it doesn't seem to ever trigger the "Figure point" by itself. You can indeed change that using dnSpy to change that behaviour. The simplest is to display the figures at the same time as applying the effect (it may look a bit odd because the figures are usually delayed a bit, but it makes things way simpler). In the method "btlseq.SeqExecCalc", add a "btl2d" line:
Code: [Select]
public static Int32 SeqExecCalc(SEQ_WORK pSeqWork, BTL_DATA pMe)
{
btlseq.BattleLog("SeqExecCalc");
CMD_DATA cmdPtr = pSeqWork.CmdPtr;
UInt16 tar_id = cmdPtr.tar_id;
for (BTL_DATA next = FF9StateSystem.Battle.FF9Battle.btl_list.next; next != null; next = next.next)
{
if ((next.btl_id & tar_id) != 0)
{
btl_cmd.ExecVfxCommand(next); // Effect point
btl2d.Btl2dReq(next); // Figure point
}
}
pSeqWork.CurPtr++;
return 1;
}
I didn't test it but that should be ok.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-06-07 09:18:10
I thought it would be a pain to solve this problem but you just need one Tirlititi to solve it in a few minutes... incredible, you impress me ahah!

It works perfectly  ;D... except during my tests : I've just learned something... SFX does the damage too! (I get double damage for each hit, i didn't understand at first  ???)

So, when I use SFX instead of Effect Point, I have the same problem: the damage is only shown for the last SFX applied.

EDIT : I just read again your sentence =>
Quote
The "Run Spell Animation" and "SFX" codes should give the hand to a generic "Spell Animation" and thus show the numbers every time. However, for both of them, it's not possible to have two different generic "Spell Animations" running at the same time.

I suppose that's works too when you use same multiples "SFX" on same animation so. I just realized that it's the SFX that triggers the damage report.

I'll see if I can find a way to do it without breaking everything, otherwise I'll just use the Effect Point ^^. I think i will use Effect Point instead xD Too sad.

Thanks again Tirlititi.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ToraCarol on 2020-06-08 13:00:28
Hello Tirlititi, long time I'm not writing here! I write this little post to ask your help another time.

So, I'm trying to modify the DISC 4 from PSX version and I'm making this thing you suggest time ago about swap Blank Amarant Dialogue Window

So i made something like this

Code: [Select]
    case +1:
        if ( 1 ) {
            SetCharacterData( 8, 0, 255, 5, 7 ) <-- this one I made to not make Beatrix temporary and let the passive ability on
            WindowSync( 0, 128, 175 )
            if ( GetDialogChoice == 0 ) {
                SetPartyReserve( 4095 )
                SetCharacterData( 7, 0, 255, 5, 7 )
                Party( 4, 0 )
                UpdatePartyUI(  )
            } else {
                if ( GetDialogChoice == 1 ) {
                    SetPartyReserve( 4095 )
                    SetCharacterData( 11, 0, 255, 21, 7 ) <-- Blank (I could not remove the temporary flag like Marcus and Cinna because if I remove it turns back in Amarant, Eiko and Quina.. I don't know why)
                    SetName( 11, 74 )
                }
                WindowSync( 0, 128, 176 )
                if ( GetDialogChoice == 0 ) {
                    SetPartyReserve( 4095 )
                    SetCharacterData( 6, 1, 255, 21, 6 )
                    Party( 4, 0 )
                    UpdatePartyUI(  )
                } else {
                    if ( GetDialogChoice == 1 ) {
                        SetPartyReserve( 4095 )
                        SetCharacterData( 10, 1, 255, 21, 0 ) <--Marcus
                        SetName( 10, 73 )
                    }
                    WindowSync( 0, 128, 177 )
                    if ( GetDialogChoice == 0 ) {
                        SetPartyReserve( 4095 )
                        SetCharacterData( 5, 0, 255, 5, 5 )
                        Party( 4, 0 )
                        UpdatePartyUI(  )
                    } else {
                        if ( GetDialogChoice == 1 ) {
                            SetPartyReserve( 4095 )
                            SetCharacterData( 9, 0, 255, 21, 5 ) <--Cinna
                            SetName( 9, 72 )
                            Party( 4, 0 )
                            UpdatePartyUI(  )
                        }
                    }
                }
            }
        } else {
            Party( 0, 0 )
            UpdatePartyUI(  )
        }
        if ( IsInParty(5) ) {
            set Setting_OptionalQuina = 1
        }
        break
    }

But something is wrong and I'm messin with something because is not working right it isn't all in the right place..can I say.
I've seen in the Text is quite different from Steam in fact I had to add the "MULTICHOICE" voice, and so that's what I did.

And then is coming out something like

(“Who?”
µEiko
Marcus)

but I guess i'm still wrong with something..what's it? Thank you as always for the reply!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-06-08 13:20:55
I don't get what's your problem, ToraCarol.

Is that something with the text formatting? If yes, then that's the text you use that you should show, not the script.
Usually, you must have a [MULTICHOICE] and [INDENT] opcode at the start of the first line of the multiple choice, then an [INDENT] at the start of each subsequent line, so it would be something like this in the editor:
“Who?”
µµEiko
µMarcus
In-game, µ is not a printable character (in the PSX version), so I guess that what you showed was the text in HW.

The [INDENT] opcode is there to give some space to the hand image and avoid it to be placed over the text.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ToraCarol on 2020-06-08 14:46:47
Oh! Ok! So I did correctly first the step of the TEXT! I solved and change back i was not sure about the [INDENT] opcode but it seems I get right.

Sorry I did not explain right...my fault.

The fact is that I wanted 3 Window that appear one after another to choose which character you want to take with you in the party, and it ends with the "Cinna-Quina Window" that at the end of this last choice it opens the window party based on all your choices.
The problem was that the event does not work correctly. But while I fixed the text and two little things it seems it's finally solved!

So as always, even for a little..thanks for all the help!!

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-06-23 18:58:13
Hello everyone, I hope you're well!

I have a small question that does not concern HW but Memoria Scripts (precisely C#, because I'm a beginner in this...)

I'm trying to modify a magic, which basically takes into account the PV difference but i want to use a logarithm function instead.

Here is the test code i am using :

Code: [Select]
double factor = Math.Abs(Math.Round(Math.Log((double)(this._v.Caster.CurrentHp / this._v.Caster.MaximumHp)), 2));
this._v.NormalMagicParams();
this._v.Caster.PenaltyMini();
this._v.Target.PenaltyShellAttack();
this._v.PenaltyCommandDividedAttack();
this._v.CasterCommand.BonusElement();
if (this._v.CanAttackMagic())
{
this._v.TargetCommand.CalcHpDamage();
this._v.TargetCommand.TryAlterMagicStatuses();
this._v.Target.HpDamage = (short)factor;
}

The final formula will be something like this :
Code: [Select]
short hpDamage = (short)Math.Min(9999, this._v.Context.PowerDifference * (int)this._v.Context.EnsureAttack * factor);
However, on my first code, the HpDamage always shows 0.
Trying with/without Math.Round (to have more precision) and Convert.ToInt16 => That's doesn't work.

Can't the game use this kind of complex functions or am I on the wrong way ?

Thanks in advance  :lol:

EDIT : Whatever... i found it. Sorry for this useless post  :-[

Code: [Select]
public void Perform()
{
int factor = (int)Math.Abs(Math.Floor(Math.Log((double)this._v.Caster.CurrentHp / (double)this._v.Caster.MaximumHp)));
this._v.NormalMagicParams();
this._v.Caster.PenaltyMini();
this._v.Target.PenaltyShellAttack();
this._v.PenaltyCommandDividedAttack();
this._v.CasterCommand.BonusElement();
if (this._v.CanAttackMagic())
{
this._v.TargetCommand.CalcHpDamage();
this._v.TargetCommand.TryAlterMagicStatuses();
short hpDamage = (short)Math.Min(9999, this._v.Context.PowerDifference * (int)this._v.Context.EnsureAttack * factor);
this._v.Target.HpDamage = hpDamage;
}
}
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-06-28 01:23:51
Sorry for double post but i have a little question about Spell Animations : is it possible to duplicate an existing animation ?

For example, i want to create a "Slow (Multi)", without changing the existing one (Slow).

I see some unused spell animation but how can we interact with them ?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-06-28 09:07:10
Hum... It might be possible with a new feature of Memoria.
Even if it works though, it could only be used for adding new spell animations to abilities of player's characters because you can't pick unused spell animation IDs for enemy attacks with the "Set Spell Animation" code (you can do that when the "SFX" code is used though and I'm not sure of the difference between those two).

If you have the latest version of Memoria (the launcher was updated to show several options from the Memoria.ini so it is easy to see; it looks more like this (https://steamuserimages-a.akamaihd.net/ugc/1248008572667737991/1C2283C24B33DCA11E8BADCCEE76A38F92A043C8/) currently), you can:
0) Pick the ID of one of the unused spell animation... careful because there are many IDs that do not appear in HW and are still used (everything that goes directly after "[Attack-1...]" or "[Weapon-Attack-1...]"; I guess that 379 is really unused though),
1) Modify "Slow" as you wish in HW without worrying of overwriting the existing one,
2) "Save Steam Mod" and export things as "Raw assets" instead of archives,
3) In the created files, search for "Resources/SpecialEffects/efXXX" where XXX is the ID of the Spell Animation you changed (for Slow, it's ef126),
4) Copy that file into a new subfolder inside the game's folder; the path should be something like "Final Fantasy IX/MyMod/SpecialEffects/efXXX" where "MyMod" can be replaced by whatever you want; also rename the file so that the XXX id fits the unused one (379 for instance),
5) In Memoria.ini, add "MyMod" to the list of mod folder names (the field should be something like:
FolderNames = "MyMod"
6) In the .csv files that are generated for your final mod, modify the "Actions.csv" to use your custom spell animation ID instead (in the column "animationId1" or "animationId2").

Hopefully, the efXXX file is the only thing required for such spell animation and it will not bug in-game... but I'm not even sure that will work at all.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV on 2020-06-28 21:15:18
Thank you again for your quick and detailed response Tirlititi  ;)

I didn't update Memoria yet (i don't want to break something....  :-X) but I'm almost done finishing the CD1 (I'll make a demo I think).

As soon as I finish this first part, I'll do a last run and I'll make some tests with your proposition (because I have a mob that uses a kind of "Slowaga" and I'd like to make the animation cooler ^^)

Need to make both .dll from Moguri (which I am currently using) and Memoria too...  :'(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-06-29 00:23:09
Just wait for the Moguri mod to update to the forthcoming Memoria update: compiling everything from your end is rather tedious (plus there are a few bugs).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Dark_Ansem on 2020-07-02 07:15:11
Thank you so much for this!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV 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?

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi 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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi 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 (https://github.com/Tirlititi/Hades-Workshop/blob/master/Source/Database_Animation.h) (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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi 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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: Tirlititi on 2020-07-20 00:14:08
Importing and compiling the scripts of all the fields takes some time; you have to wait.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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 (https://drive.google.com/file/d/1wI5r9DHKe2uLwyolVxbXrQEIT-CIhMJF/view?usp=sharing)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: RacketyEsperus 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!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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+ (http://forums.qhimm.com/index.php?topic=20257.msg280919#new) 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?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV 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 !
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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?

(https://i.imgur.com/92tjBHt.png)

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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: RacketyEsperus 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!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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 (http://forums.qhimm.com/index.php?topic=14315.msg277910#msg277910) 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?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: DV 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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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:

(https://i.gyazo.com/b19911b25e89af4e2dc9e1d0aee71d2c.png)

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. :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad 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.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: RacketyEsperus on 2020-08-07 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!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: RacketyEsperus on 2020-08-10 16:27:05
Anyone? Please?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad on 2020-08-13 23:14:12
Hey, I'm having a weird issue in regards to the cutscene after you first enter the Desert Palace via the quicksand on the World Map.

So basically the only change I am making to this Field Script is the party calls. I already did this in a previous iteration of Freya Game+ (which has been discontinued as I found a way to make true Solo Runs possible pretty easily with all of the characters, so I am planning on releasing a mod pack for that including one for Freya - then starting work on a more expansive "DLC expansion" mod centered around Freya where I don't have to worry about creating variants of other characters and have more freedom to make whatever changes I like) and it worked fine.

However, ever since the update on Steam, every time I get to this cutscene while having ANY sort of modded p0data7.bin file, the game softlocks after Zidane asks Cid "Where are we?". Cid will walk over to Zidane and the game just gets stuck there. However, Cid does not normally do this in an unmodded game, he has more dialogue before he makes any sort of movement.

This happens even if I leave the field script for this particular scene unmodded, but just have other field scripts that are modded. However it never happens on an unmodded p0data7.bin, and doesn't happen even if other scripts like the enemy scripts in p0data2.bin are modded, so long as p0data7.bin is unmodded. I did not have this issue before the update.

Checking Memoria.log, there does seem to be some sort of error being thrown with this scene:

Code: [Select]
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: FieldMaps/FBG_N38_SDPL_MAP640_SP_RRO_0/spt.tcb
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab
13.08.2020 11:45:30 |M| [AssetManager] Embeded asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_ACC_F0_FLR.csv
13.08.2020 11:45:30 |M| [AssetManager] Asset not found: Models/GeoTexAnim/GEO_ACC_F0_FLR.tab

I'm really confused about this as I haven't done anything with the game's assets, those are all vanilla. I am just editing scripts. I'm assuming this is what's causing the softlock somehow.

Anyone have any ideas? I'm really stumped on this and it's frustrating as otherwise this mod's development has been really smooth. I've already checked some later parts of the game that I thought would be problematic and didn't have any issues with them, this is the only one I'm having problems with.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad on 2020-08-19 22:24:34
Hey, back again, if anyone else is still here. :P

I figured out the issue from my last post, turns out a call for an extra animation had been added into the cutscene somehow. Either something went weird with my update download, or accidentally pasted something into the script. Either way, I got that working now.

However I have something else I am trying to figure out right now that I am stuck with.

Basically, I want to edit the Epitaph fights in Oelivert into fights where you just have a special boss fight against the mirror character.  Editing the stats and what not should be relatively easy, and I have some other things I need to do like implementing them as secret bosses in the post-game with a place to find them and a cutscene. However there are two problems right now that I want to figure out before doing anything else:

1) Actually removing the Epitaph from the fight so it's just the mirror character at the very start. At the moment, I tried simply using the "Remove" command on the Epitaph in Hades Workshop and then jumping into the game to see what would happen when I spawn the correct fight in Oelivert. However, the Epitaph was still there and they would spawn the mirror character as normal. So what else would I have to do to make the mirror character spawn at the start of the fight and to remove the Epitaph?

2) I want to create custom textures for the mirror characters to make them into "Dark/Shadow" versions of the characters. I created a quick one for Freya just to test it. However this also did not show up in-game on the mirror character and just showed the normal textures. The mirror characters have their own model IDs (indicated in Hades Workshop as "EnemyFreya", "EnemyZidane", etc) which is the one I used for my texture. I used the same process for a custom texture for the player Freya model and that one imported fine, so I'm confused what's wrong here. Am I mistaken in thinking the mirror characters use the "EnemyCharacter" models and textures at all?

I'm probably missing something super basic but any help would be appreciated.

----------

EDIT: OK ignore all of the above. Turns out I was putting the files into the wrong folder by mistake. I had a lot of stuff open and got confused.

Currently the game softlocks when it tries to load my edited fight but I think I have an idea why. So I'll see if I can figure that out.

EDIT2: OK yeah I'm a bit stuck.

The only way I can get it to load up the battle is if I remove the Mirror Freya's Init_Object calls and keep the Epitaph's, but assign it to Mirror Freya. But the problem with that is that it will load Mirror Freya's battle scripts so she can attack and what not but won't load her model. Also changing the battle scene doesn't work for some reason.

Anyone with more experience setting up the Init funcitons of a battle have any insight they can share?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41c)
Post by: ChikoLad on 2020-08-23 22:32:50
Hey, don't know if anyone is still here, but I need a bit of help again with Party Management.

So I've been toying around with this a lot and figuring stuff out.

Currently I'm developing solo run mods for each character, starting with Freya since she's the easiest to solo the game with (making her best for general testing) and since she's my favourite.

I have been refining my process for how I handle this to minimise problematic areas of the game and making mods for the other characters easier since I will know what values to change. Also because I want to make it so the chosen character is the ONLY character in the party as much as the game will allow without causing issues.

So far here's a summary of what I understand of Party Management:


So far this has worked smoothly for the most part. But right now the issue I want to address is at the start of the game in the Prima Vista Cargo Room, just after starting a new game.

Basically I've followed the rules above. I have a replaced every "AddParty(0)" with "AddParty(4)". I have made the PartyReserve only have Freya. Yet for some reason, Zidane is still in the party menu at the start of the game. Freya is there too, but from how I have coded it, it should only have Freya with no Zidane, but he's still there for some reason. This isn't a problem in itself, as I have added a "set AddParty(4)" call and a "RemoveParty" call to every enemy script so the game basically forces just Freya into the party at the start of any battle. I can also add a "RemoveParty(0)" to forcibly remove Zidane from the Party after starting a New Game. However, since there seems to be another function adding Zidane to the party after starting a new game, I want to figure out what it is and change it. It would be useful to future mods I plan to make that involve custom story scenarios.

Basically my question is, am I missing a function in regards to adding characters to the party for field scripts, or is there some unique property I need to change that adds a character to the party when starting a new game?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: trostboot on 2020-09-06 12:56:20
I'm running into strange issues when trying to create patches for the German PS1 version. I've verified that the base image I'm working from matches the checksums on redump, so it should be good to use.

Even making a minor edit like changing Thunder Slash's damage formula, then either creating a PPF from that change or overwriting the binary image directly will result in issues. If overwriting directly, the game will freeze on opening the equipment menu. When trying to apply the PPF patch to an exact copy of the image it was created against, PPF-o-matic warns about blocksize mismatch, and if I apply it anyway, the same freeze issue crops up. That ... probably shouldn't happen.

By contrast, doing the same to a NTSC-U image, it works just fine.

Edit: Digging into my archives, I found a version of Hades 0.40 marked specifically as "for_de", but no dice there, either. I understand that there's some differences between the versions, of course, but the description states compatibility with any language version, so something is amiss here.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: mythikdawn on 2020-09-12 01:42:41
I'm running into a slight issue when trying to use the randomizer. I am attempting to randomize NA PS1 ISOs. When I put in the same random seed for all four discs, with all the same options selected, I'm getting different results for each disc. For example, the seed 756029 might have the Mage Masher teach Blizzaga on Disc 1, but on Disc 2 it will teach Float, etc.

Is this intended? How can I get around this?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: LeOsTyLe on 2020-09-13 22:34:01
Hello i have a question.

When i open the Hades Programm and File open and choose the launcher nothing happens, and the programm dont react , anymore even i wait 15 min. But when i open Unity Asset Viewer and File open the Launcher, everything is alright. Do i am something wrong?

Edit: I reinstalled FF9 without Memoria Engine, then it works.

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: ChikoLad on 2020-09-20 01:40:18
It's been a little while since I tried any FFIX modding but I decided to mess around with changing the character in the field again.

One thing I wanted to try was giving all of the characters animations for riding on Choco in locations like Chocobo's Paradise. However, for Freya, I actually want to have her sitting sideways, with her head facing the same direction as Choco's. I have a pretty good sitting animation for her, I just need to adjust the orientation of the body and head, and then maybe the coordinates slightly. Anyone know what functions I need to use to achieve that? I tried stuff like "TurnInstant" but couldn't get it to work.

Here's an image of how it looks right now. Basically I want to make her sit with her front facing Choco's right side, with her legs hanging down, and Freya's head looking to her side so she is looking at whatever is in front of Choco:

(https://i.imgur.com/JWLUl0t.jpg)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: MysticLord on 2020-09-24 18:30:14
Bit of a long shot here, but I get this error when I try to run Hades Workshop.
Quote
The code execution cannot proceed because MSVCP140.dll was not found. Reinstalling the program may fix this problem.

I run Windows 10, 64-bit, however I used BCUninstaller (Bulk Crap Uninstaller (https://www.bcuninstaller.com/)) to remove such wonderful applications as the WordPad (Now With Ads!), the People icon, Contacts, Maps, and numerous others which I have thankfully forgotten.

Trying to reinstall the framework which google tells me contains MSVCP140.dll doesn't make Hades Workshop work, so I assume something else is required or a configuration file is broken.

If you know, could you tell me more about what Hades Workshop requires to run on Windows 10? Or should I give up and run it on a Linux machine instead?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: OmegaBattle on 2020-09-27 02:21:08
how do you save a change you make in hades workshop?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: Tirlititi on 2020-09-28 17:15:55
So... as you've seen, I am not responsive anymore. I'm afraid that it won't get any better in the future.

@ChikoLad:
1) You can batch import multiple script files at once; they need to be named "something_number.txt" and you have to write "something" or "something_" in the file selector. You may also merge the text files into one big file.
2) The "Inactive" animation might be not automatically preloaded (that's the case for the "SetJumpAnimation" but I don't remember about "SetInactiveAnimation"): you can force the preloading by using lines "SetStandAnimation( Your inactive animation )" then "SetStandAnimation( The normal stand animation )".
3) I don't know about the model exporter. It used to work (export as FBX) on pretty much all the models listed in the archives (you must export the "GameObject", always). Exporting as OBJ or others might work but usually with much data loss in the process (typically, animations are not exported).
4) The model importer, however, doesn't work well. You can do very few things that would work (modifying animations and moving vertices should be OK) and you must absolutely keep the same hierarchy as exported: you can't add/remove bones and things like that, and you must be careful that the model editor you use (I'm not sure if there's a free one that works) doesn't automatically change the hierarchy.
5) When you add/remove enemies from a battle, you must change the "Group" settings and the scripts accordingly. Typically, the "InitObject" lines of the "Main_Init" function of the script, and create script codes for the enemies you add (out of the script window "Edit Entries" and reflect the add/remove there, then in the script window right-click on the list of functions and add functions there).
6) You are correct about "AddParty", "RemoveParty" and such. I guess that you just missed several lines in the Prima Vista's cargo room because there are several moments at which the party is set in that field (IIRC, it's setup twice at the very start, then once right before the battle then once again after). Also, be sure to setup Freya's datas with "SetCharacterData".
7) I'm not sure if changing the orientation with a "AttachObject" line is possible.
You might be forced to completly change the system: use a variable that, when set on, changes Freya's position and orientation to the ones of the chocobo every frame, like this:
Code: [Select]
Function Freya_100
    if (CustomVar_FreyaRiding) {
        MoveInstantXZY( GetEntryPosX( Choco's entry ), GetEntryPosZ( Choco's entry ), GetEntryPosY( Choco's entry ) )
        TurnInstant( GetEntryAngle( Choco's entry ) + 60 ) // 60 is an example there, adjust it
        // Optional: have Freya's animation depend on the situation
        // I don't know what to use to replace "Is Choco Running": you may use "IsButtonDown( 16 | 32 | 64 | 128 )"
        // or write the XZY pos of choco in custom variables and compare the old/new position each frame
        if ( Is Choco Running ) {
            SetStandAnimation( Riding_Move ) // Animation of Freya when Choco moves
        } else {
            SetStandAnimation( Riding_Normal ) // Animation of Freya when Choco doesn't move
        }
    }
    Wait( 1 )
    loop

@RacketyEsperus:
I'm not sure; you seemed to have done things properly...
Maybe double-check that the "Wht Mag" you changed is the good one? Like maybe you mixed Dagger's and Eiko's command? But that doesn't work for "Blk Mag"... So maybe you didn't install your mod properly after generating it.
Best way to have more abilities in the commands is to use the Moguri mod or Memoria Engine mod: with these, many datas are read as .csv files (excel-like files that can also be opened with a text editor). The file for that is "Data\Characters\Commands.csv". HW can generate these .csv files if you choose "Save Steam Mod -> Spreadsheets" that can then be used by Memoria.
We can't make a Waterga Sword because of our lack of knowledge on the format of the spell animations.

@trostboot:
It *might* be because of a deprotection patch that is applied to your german version of the game (Paradox patch).
One of these compresses datas and make them impossible to edit with HW, although it should warn you when opening the game instead of bugging like that.
In any case, it is very strange that "Open -> FF9_German_CD1.bin -> Do changes in HW -> Export as PPF -> Apply that PPF with PPF-O-MATIC on FF9_German_CD1.bin" would lead to an error "Bin/block check fails" or such... A small part of the binary file is copied in the PPF when generating it with HW and it's then compared to the file you want to patch with PPF-O-MATIC, so there shouldn't be any difference whatever you did in HW...
I have worked with the german version of the PSX game, but never did a HW update specifically for that version for what I remember...

@mythikdawn:
Unfortunatly, that's a problem I oversighted when including the randomizer inside HW... also it wouldn't be so easy to solve ><
What you can do is to apply the randomizer for disc 1, then "Save as HWS", then for each other disc, apply the randomizer + "Open Mod -> the HWS of disc 1" (in that order); no need to look for the random seed that way.
Alternatively, you may want to use Meteor on FFIX (http://forums.qhimm.com/index.php?topic=16285.0) instead for the PSX version, even if it has a couple of differences...

@MysticLord:
I didn't know that MSVCP140.dll was required for running HW... It looks like a developer library (Microsoft Visual Studio C++) although you never know with Microsoft.
Anyway, downloading only the DLL (here (https://fr.dll-files.com/msvcp140.dll.html) for instance) and putting that DLL in the same folder as HW should make it work, or at least throw a different message.
Windows 10 is the most suited operating system to run HW since it was compiled on that OS.

@OmegaBattle:
You may save your mod using 4 different ways:
- Save Mod (PSX and PC): save the game datas and the modifications inside a file that can only be read by Hades Workshop without modifying the game’s disc image. This is the most preferred way of saving modifications when you don’t want to apply them at once.
- Export as PPF (PSX): basically does the same as makeppf.exe (only faster): create a PPF3.0 file that can be applied to a disc image using the appropriate tool. You should never use this method if the file on your hard disc has been altered (using Hades Workshop or any other tool). This is the most preferred way of saving when you want to share your modifications.
- Overwrite Binary File (PSX): save the modifications inside the disc image for a ready-to-go game. The modifications can not be undone. This is the most preferred way of saving when you want to test your modifications and have a backup of the original file.
- Save Steam Mod (PC): duplicate the Steam files and apply your modifications to the duplicate. Replacing the Steam files by the created ones will enable the changes. May also generate "Spreadsheets" and "Raw Unity Assets" files instead that can be used as a Memoria mod (to be configured in "Memoria.ini" when Memoria is installed).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: MysticLord on 2020-09-29 07:46:18
@Tirlititi I have a new error message, it occurs with all versions of the DLL in the English version of that link.

Quote
HadesWorkshop.exe - Application Error
The application was unable to start correctly(0xc000007b). Click OK to close the application.

Tried running it from Powershell both with and without the DLL for more informative error messages, but none were printed.

Would building Hades Workshop help, you think?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: Tirlititi on 2020-09-29 10:20:32
If you can't run it, it is very dubious that you can build it in this situation (besides, installing Visual Studio is far worse than having Wordpad if you go that way).

You do have the DLLs packed with the download link of HW next to the program, right? "libfbxsdk.dll", "ucrtbased.dll" and the "wx" DLLs? You may try to use my version (https://www.dropbox.com/s/z6htxh66ik7t4zw/msvcp140.dll?dl=1) of msvcp140.dll which is slightly newer than the versions on the website above, but I don't expect it to work...

The DLLs used directly by HW are the ones packed with it in the download link plus:
- OPENGL32.dll
- GLU32.dll
- USER32.dll
- KERNEL32.dll
- VCRUNTIME140.dll
- api-ms-win-crt-stdio-l1-1-0.dll
- api-ms-win-crt-runtime-l1-1-0.dll
- api-ms-win-crt-filesystem-l1-1-0.dll
- api-ms-win-crt-string-l1-1-0.dll
- api-ms-win-crt-convert-l1-1-0.dll
- api-ms-win-crt-heap-l1-1-0.dll
- api-ms-win-crt-math-l1-1-0.dll
- api-ms-win-crt-time-l1-1-0.dll
- api-ms-win-crt-locale-l1-1-0.dll

Maybe try (re)installing these. The DLLs put in HW's folder have priority other the DLLs installed in your system directories, so you should just download clean DLLs and put them in HW's folder to test if it works before replacing any of your system files (and maybe never replace them at all if HW is the only program with problems).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: trostboot on 2020-09-29 10:53:39
It *might* be because of a deprotection patch that is applied to your german version of the game (Paradox patch).
One of these compresses datas and make them impossible to edit with HW, although it should warn you when opening the game instead of bugging like that.
In any case, it is very strange that "Open -> FF9_German_CD1.bin -> Do changes in HW -> Export as PPF -> Apply that PPF with PPF-O-MATIC on FF9_German_CD1.bin" would lead to an error "Bin/block check fails" or such... A small part of the binary file is copied in the PPF when generating it with HW and it's then compared to the file you want to patch with PPF-O-MATIC, so there shouldn't be any difference whatever you did in HW...
I have worked with the german version of the PSX game, but never did a HW update specifically for that version for what I remember...
Thanks for the reply.
Like I mentioned, the image I'm working from has not been modified and the checksums match the ones in the redump db.
And it doesn't just fail with the PPF method, but also when writing directly to the disc image from HW (fail as in the game will boot, but freeze when accessing the equipment window, and likely other places that load in the equip tables).

There isn't much else I could think to mention as it's a simple and 100% reproducible case on my end, but if you need any more info, I'd be happy to help.
If you no longer have the time to develop or maintain HW, I understand.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: MysticLord on 2020-09-29 12:45:17
Here's the output of dir > files.txt
Code: [Select]
    Directory: C:\Users\pc\Downloads\HadesWorkshop


Mode                LastWriteTime         Length Name                                                                 
----                -------------         ------ ----                                                                 
d-----        9/29/2020   1:27 AM                msvcp140                                                             
-a----        9/29/2020   6:22 AM              0 files.txt                                                             
-a----        9/20/2020   3:21 PM          39609 HadesWorkshop.conf                                                   
-a----        9/20/2020   3:21 PM       42273792 HadesWorkshop.exe                                                     
-a----        9/20/2020   3:21 PM        6919640 libfbxsdk.dll                                                         
-a----        9/20/2020   3:21 PM         294931 LocalVariableSettings_v1.hws                                         
-a----        9/29/2020   6:21 AM         590096 msvcp140.dll                                                         
-a----        9/20/2020   3:21 PM        1526976 ucrtbased.dll                                                         
-a----        9/20/2020   3:21 PM        2134528 wxbase31u_vc_custom.dll                                               
-a----        9/20/2020   3:21 PM         143360 wxbase31u_xml_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM        1350144 wxmsw31u_adv_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM         441344 wxmsw31u_aui_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM        5010944 wxmsw31u_core_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM          75776 wxmsw31u_gl_vc_custom.dll                                             
-a----        9/20/2020   3:21 PM         605696 wxmsw31u_html_vc_custom.dll                                           
-a----        9/20/2020   3:21 PM        1512448 wxmsw31u_richtext_vc_custom.dll                                       

edit

Here is the output of a hashes on all those files.
Code: [Select]
pc@laptop /cygdrive/c/Users/pc/Downloads/HadesWorkshop
$ sha256sum *
16b8f2cc0647648a86a86c2a62e5bbf226f23d94f50a6b7695f9904e977e7c64 *files.txt
466a8e172708a14f526c1da86395a4e9b50456211580065617835a7a553df078 *HadesWorkshop.conf
f0bdace03cd9adb7b1089e425603d7e6904272d138099d2c6e890eaf7dbc4ebc *HadesWorkshop.exe
2dae86a328f4852380ae5f8361badaac562d1c0c72e07d2c781950891d83eedc *libfbxsdk.dll
a81208bf8cf41b8299925855b403a314415bc309f9344b06a61ba1961b87cde7 *LocalVariableSettings_v1.hws
sha256sum: msvcp140: Is a directory
a2cb9cae4b86468ca44ba36320814a204ec8ad311df624b94e12c47e328e2726 *msvcp140.dll
c8fda4b882281f5a4d921416c1f565eddbdd552ef782a32380e0975fcc2696c1 *ucrtbased.dll
313f87259aa568811f2a63fac3e308b8f661dd623317ea655d027e67314443df *wxbase31u_vc_custom.dll
ad5a595cfb4043d3334420fd71adc89c262a0b1c87ec5660d825a3d29f3c2080 *wxbase31u_xml_vc_custom.dll
e44b11ad1de31c2e123bb04dd9d038ddc07b071df3f83cf9c4ee55c856dde3c7 *wxmsw31u_adv_vc_custom.dll
205c3ae91377b9b2c303f7faa947a4978b308c09711ac26a8c03a29cd54d2ac9 *wxmsw31u_aui_vc_custom.dll
7626628b10f75bc999dbc66190c0832cabf118ede7babc06e419ad3125e72a55 *wxmsw31u_core_vc_custom.dll
091e0c4c7a362d8bbe9d2828c38ddc9d49b260ad822aede7a94daffb67c1226b *wxmsw31u_gl_vc_custom.dll
6f566491714e46ad38c4a02b60ee584a20414475a75bd486dece521e0b8c52cf *wxmsw31u_html_vc_custom.dll
44174abf00f498b2ae83827206dd4d9a961efa6ed8d37b7e37ae34f9731e2926 *wxmsw31u_richtext_vc_custom.dll


My understanding of Visual Studio or whatever it's called is that it's an Electron app; which is to say that it contains a web browser (HTML/CSS/Javascript engine), the web browser contains a sort of operating system for dealing with all kinds of stuff that it is very unfair to force a web browser to deal with, and contained within that are the things that make Visual Studio an IDE.

So yes, I probably wouldn't be terribly happy having Visual Studio on my computer.

I don't care about putting Visual Studio on a Linux machine - it's like performing a lobotomy on a cockroach - and from what I understand it's just a couple sudo apt-get installs to get it. I think I remember you saying it works on Linux.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: eugene9 on 2021-03-15 19:15:01
Hi there! I'm here seeking your superior knowledge about an issue... well, two issues:

1. I'm trying to alter Zidane's animations, specifically, his casting animation. I know he has animations A and B depending on the weapon he's wielding (thief sword and daggers respectively). The thing is that I'm trying to swap his thief sword casting animation with his daggers one; with no success at all. I thought it would be easy since they involve basically the same bone structure, but everytime I import and replace the renamed .anim file via Unit Assets Viewer I only get a T pose Zidane everytime he casts a spell. Can you provide me with some step-by-step instructions for this, pls?

2. Also attempting to make Zidane always have his trance model in battle. I know there is a mod for that but it affects all characters. I would really appreciate any kind of help. :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: killXtech on 2021-04-01 23:08:42
I apologize if this has been asked before and I simply overlooked where it was answered but I'm trying to disable trances. Simply because it takes so long for them to activate and deactivate and they're a little more powerful than I'd like anyway. I tried changing their linked commands under stats to No Trance, which is what it shows under Marcus and Blank but they still tranced the commands still changed. Is there another flag that I'm missing somewhere? I should mention I'm working on the psx version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41d)
Post by: MysticLord on 2021-04-12 11:31:35
Update on my previous issues.

No idea what it was, bought a better computer and Hades Workshop works.

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: garlar on 2021-04-27 14:59:20
Hello, I've been playing Alternate Fantasy and I'm on Disc 2 right before Eiko joins. I was wondering if I could use the Hades workshop to edit Eiko and Amarant to join at Lv 1. (The fact that they always end up with lower magic stones has always bothered me.)

Do you know if this would break my saves and I would be better off starting a new file?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Q_Q on 2021-05-26 20:06:13
Hey Tirlititi,

Really appreciate your work on this wonderful game!
Hope you can answer my question. Always wondering about perfect choices with Madain Sari cooking 'mini-game'. Could you please update your game scripts folder with scripts for it? Thanks!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: eugene9 on 2021-05-30 09:29:45
Hi there, I've got a question about casting animations. Everytime a party member cast an enemy-target spell (single-multiple) he/she goes a step forward, casts the spell and then goes backward. In contrast to self-casting or even everyone-target spells in which characters cast it from their position. My question is: do you know any way to make those enemy-target spells being casted like self-casting ones? I mean, without triggering that forward and backward movements. Thanks in advance for all the help you can offer :) .
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: nicolo.sesta on 2021-06-09 09:39:05
Hello everyone.
I learned to edit stat growth with CIL code (Steam version), via ff9level, getdex, getstr, getmag, getwpr.
Is there a way to get access to these also with MIPS code (ps1 version)? I'm using Hades 0.41f, and in MIPS code there are just battle codes.
Thanks.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Shinjeez on 2021-06-19 18:43:14
Hello,
I would like to ask if there is a way to edit Ragtime Mouse's counter of right & wrong answers.

I've unknowingly kept going and saved after giving a wrong answer the first time I met it, so I'd like to avoid having to start the game from the beginning for this sole reason.

Thanks!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: nicolo.sesta on 2021-06-25 11:00:50
Hello,
I would like to ask if there is a way to edit Ragtime Mouse's counter of right & wrong answers.

I've unknowingly kept going and saved after giving a wrong answer the first time I met it, so I'd like to avoid having to start the game from the beginning for this sole reason.

Thanks!

Yes, but not with Hades, because it's a matter of your savefile, not the game values.
Try with some Cheat Engine you can find online.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-06-25 13:06:58
No nicolo.sesta, sorry. I don't look at the PSX version anymore and don't know where other MIPS codes are.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: nicolo.sesta on 2021-06-25 13:50:32
No nicolo.sesta, sorry. I don't look at the PSX version anymore and don't know where other MIPS codes are.

That's so sad.
I tried also to look for the string with Cheat Engine, but I had no success.
Any suggestion?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Shinjeez on 2021-06-30 16:20:43
Yes, but not with Hades, because it's a matter of your savefile, not the game values.
Try with some Cheat Engine you can find online.

Thanks for the answer.

I don't have any idea how I would go about using Cheat Engine to change that one wrong answer to correct thou. Googling didn't help.  :(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Loseless on 2021-07-03 20:52:19
Can someone confirm if this is possible: replace some abilities, like Ability Up or Gamble Defense, for other custom abilities, say Auto-Protect. In the ability tab I can only change the required AP and text (name and description) of the ability, so I assume I would have to edit it elsewhere. Perhaps the CIL codes?

Thanks in advance!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-07-03 22:26:48
About Ragtime's rights and wrongs, the answers are stored in the AI script, in the form of a bit flag:
Code: [Select]
Function False_CounterEx
    // ...
    if ( 27789 & ( 1 << VAR_GlobUInt8_31 ) ) {
        set VAR_GlobUInt8_32 = 4 // Correct answer
    } else {
        set VAR_GlobUInt8_32 = 6 // Wrong answer
    }
"27789" is a bit flag, that is, its meaning appears when writing that number in base 2:

27789 [base 10]
110110010001101 [base 2]

Thus the 1st, 3rd, 4th, 8th questions... (read the number in base 2 from right to left) must be answered False to be correctly answered. There's a symmetric code in "Function True_CounterEx".

About custom supporting abilities, they can be modified in the Steam version but not with Hades Workshop (to be exact, it is very tedious and limited with Hades Workshop), because they are way too intertwined with the rest of the game's code. The modification of supporting ability effects is a feature of the Memoria Engine modifier, which is also installed automatically if you have the Moguri mod. Open the file "FINAL FANTASY IX\StreamingAssets\Data\Characters\Abilities\AbilityFeatures.txt (https://github.com/Albeoris/Memoria/blob/main/Memoria.Patcher/StreamingAssets/Data/Characters/Abilities/AbilityFeatures.txt)". Read the documentation, the examples and the way vanilla abilities are coded there to know how to modify things.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Shinjeez on 2021-07-04 21:22:26
About Ragtime's rights and wrongs, the answers are stored in the AI script, in the form of a bit flag:
Code: [Select]
Function False_CounterEx
    // ...
    if ( 27789 & ( 1 << VAR_GlobUInt8_31 ) ) {
        set VAR_GlobUInt8_32 = 4 // Correct answer
    } else {
        set VAR_GlobUInt8_32 = 6 // Wrong answer
    }
"27789" is a bit flag, that is, its meaning appears when writing that number in base 2:

27789 [base 10]
110110010001101 [base 2]

Thus the 1st, 3rd, 4th, 8th questions... (read the number in base 2 from right to left) must be answered False to be correctly answered. There's a symmetric code in "Function True_CounterEx".

Do you know how to modify a save in order to modify an already given wrong answer into a correct one, so that the Ragtime Mouse says you got 100% correct the next time you meet it?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-07-05 18:32:03
In any field script, add these lines somewhere that is ran once (start of "Main_Init" function for instance):

Code: [Select]
set VAR_GlobUInt8_0 = Ragtime_QuizzSuccess >> 3
set VAR_GlobUInt8_0++
set Ragtime_QuizzSuccess = ( ( Ragtime_QuizzSuccess & 7 ) | ( VAR_GlobUInt8_0 << 3 ) )

Then parse the script, generate and install the mod, go in-game to the field that was modified, leave it and save (or save inside that field without leaving it), close the game, uninstall the mod and that should be it.

This will increase the number of questions you answered correctly without touching the list of questions you answered (right or wrong). If you enter the field more than once, you'll get more correct answers, potentially getting more correct answers than the total number of questions encountered (I guess it would display a score higher than 100% and still consider it as a 100%).

I am not sure if you can edit the save file using the Memoria Save Editor for that because it's a general variable involved, so better do it with HW.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Shinjeez on 2021-07-05 20:43:47
In any field script, add these lines somewhere that is ran once (start of "Main_Init" function for instance):

Code: [Select]
set VAR_GlobUInt8_0 = Ragtime_QuizzSuccess >> 3
set VAR_GlobUInt8_0++
set Ragtime_QuizzSuccess = ( ( Ragtime_QuizzSuccess & 7 ) | ( VAR_GlobUInt8_0 << 3 ) )

Then parse the script, generate and install the mod, go in-game to the field that was modified, leave it and save (or save inside that field without leaving it), close the game, uninstall the mod and that should be it.

This will increase the number of questions you answered correctly without touching the list of questions you answered (right or wrong). If you enter the field more than once, you'll get more correct answers, potentially getting more correct answers than the total number of questions encountered (I guess it would display a score higher than 100% and still consider it as a 100%).

I am not sure if you can edit the save file using the Memoria Save Editor for that because it's a general variable involved, so better do it with HW.

First of all, thanks for dedicating some time into this.

Sadly, it doesn't seem to work for me; after doing what you wrote, encountering Ragtime Mouse again, and giving the next correct answer, the percentage stays 90% correct.

Here are my steps, in case you notice I did something wrong:

1. Opened "HadesWorkshop.exe" with or without administrator's rights
2. File -> Open -> "FF9_Launcher.exe" in the steamapps>common>FINAL FANTASY IX folder
3. Environments -> Fields -> let all the fields load
4. Selected Alexandria's Theatre -> Edit Script -> copy/pasted your three lines of code at the start of the script, right on top of the first line
5. Parsed, no errors
6. File -> Save Steam Mod -> chose the options "Spreadsheets" and "Unity archives" -> Mod files succesfully created
7. Opened "Memoria.ini" and added "HadesWorkshopMod" to the list of mod folders at the bottom
8. Launched the game, went to the Alexandria's Theatre once, saved, closed the game, deleted the "HadesWorkshopMod" folder and the text from the "Memoria.ini" file
9. Launched the game again, loaded the new save, went into the nearest forest, encountered Ragtime Mouse, gave next correct answer... Still 90%, same as no mod

Thanks again
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-07-06 20:52:12
Seems like nothing's wrong with that, but you may have modified an incorrect "Alexandria/Mini-Theater" field (there are several ones depending on the point of the game you're at). You may also have wrongly written "HadesWorkshopMod" in the .ini. Lastly, you must beware that fields are language-dependant so make sure to edit the field's script in "English (US)" and play the game in the same language.

You can test something by writing these lines at the end of the "Main_Init" function, right before the "return" line:
Code: [Select]
set VAR_GlobUInt8_0 = Ragtime_QuizzSuccess >> 3
set VAR_GlobUInt8_0++
set Ragtime_QuizzSuccess = ( ( Ragtime_QuizzSuccess & 7 ) | ( VAR_GlobUInt8_0 << 3 ) )
SetTextVariable( 2, VAR_GlobUInt8_0 )
WindowSync( 6, 0, 68 )
This will display a message box in-game in addition to increasing the variable. You will see how many success you're at after the increase. If you don't see it, that means the script has not been modified for any of the reasons above.

(The message is an unrelated debugging message but it contains a numerical information: "Slot=[N]", and N will be the number of quizz successes.)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Loseless on 2021-07-08 09:49:23
About custom supporting abilities, they can be modified in the Steam version but not with Hades Workshop (to be exact, it is very tedious and limited with Hades Workshop), because they are way too intertwined with the rest of the game's code. The modification of supporting ability effects is a feature of the Memoria Engine modifier, which is also installed automatically if you have the Moguri mod. Open the file "FINAL FANTASY IX\StreamingAssets\Data\Characters\Abilities\AbilityFeatures.txt (https://github.com/Albeoris/Memoria/blob/main/Memoria.Patcher/StreamingAssets/Data/Characters/Abilities/AbilityFeatures.txt)". Read the documentation, the examples and the way vanilla abilities are coded there to know how to modify things.

Thank you for the points up. I don't have much in the knowledge of code, so I'm probably getting this wrong, but If I understood that doc correctly, I would have to create said file and modify the corresponding status. For instance, where is

>SA 0 Auto-Reflect
StatusInit AutoStatus Reflect

I could put

>SA 0 Auto-Reflect
StatusInit AutoStatus Protect

Instead?

--------------

I'm pretty close to complete my difficulty mod, but I still have a few kinks to iron. For example: If I raise the required AP for Garnet to learn her starting Eidolons, she starts without them. Should I check her status page, I can see she has them listed with the previous required AP values, but as she doesn't has the complete AP she has no access to them any more. I would guess the AP values for her starting Eidolons are given at the point she enters the party, post Evil Forest. Then I assume I would have to find the respective CIL field map code and edit these values. Would you know where the code is located? There are an awful amount of them to just randomly go through.

Another question: where can I change the prizes from fighting the monsters in Treno? And the auction items? Are these things easily changed, or too much hassle to bother?

Thanks for the assistance!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-07-08 10:54:30
Garnet learns her starting summon abilities in the function "Region7_Range" of the field "Prima Vista/Engine Roo". She learns them again right before the Steiner/Brutos and the Bomb/Steiner fights and finally she learns them again right before entering the world map for the 1st time. All these are script codes (in field scripts), not CIL code. Just search for the lines "LearnAbility" if you want to spot them.

What "LearnAbility" does is that it sets the current AP of Garnet's summon abilities to their AP requirement, so if you start a game in vanilla, reach the "LearnAbility" point, then mod the game to have AP requirement higher and resume the game, the abilities will indeed not be learnt anymore because it will lack the difference in AP. It will be learnt again if you reach another "LearnAbility" point.

In any case, that's not a problem for anyone who would start a new game with the mod.

Prizes for the monsters in Treno and Auction House are to be modified in the related field scripts, like every treasure. For Treno's Griffin reward, for instance, it is found in the function "Main_12":
Code: [Select]
WindowSyncEx( 2, 0, 128, 357 ) // "Old Woman “Wow, I can’t believe it...  Here’s your prize.”"
if ( 0 ) {
// ...
// Code for receiving gil, but unused since the reward is not gil
} else {
if ( ( ( GetItemCount(557) < 99 ) && 0 ) || ( 1 && ( GetCardAmount < 100 ) ) ) {
if ( VARL_GenBool_7347 == 0 ) {
RunSoundCode3( 53248, 108, 0, -128, 125 )
set VARL_GenBool_7347 = 1
SetTextVariable( 0, 557 ) // Tonberry
if ( 0 ) {
AddItem( 557, 1 ) // Code for receiving an item, unused
WindowSync( 7, 0, 56 )
} else {
if ( 1 ) {
AddItem( 557, 1 ) // Tonberry
WindowSync( 7, 0, 57 ) // "  Received [Tonberry] Card!  "
} else {
// Another unused code
}
}
}
} else {
SetTextVariable( 0, 557 ) // Tonberry
if ( 0 ) {
WindowSync( 7, 0, 60 ) // "  Cannot carry another [Tonberry].  "
} else {
WindowSync( 7, 0, 61 ) // "  Cannot hold more Cards.  "
}
}
}
You need to change that "557" into something else everywhere it appears there.

For the Auction House prizes, things are different than usual but I wrote a simplified version of the script that can be found here (https://www.dropbox.com/home/Public/FinalFantasyIXCode).

As for Auto-Protect, you nailed it right.
The keywords are scattered a bit in the documentation ("Protect" is quite straightforward, but it is better to search for the exact keyword for the spelling of things like "AutoLife").
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: FomaX on 2021-08-26 10:12:11
Hello guys! I am new here, and full of enthusiasm, have a lot questions, but i need to start with something...
First of all for me, i want to understand some basicly things - in particular: how i can access to field scripts files from p0data7.bin, however without hades workshop (its great and amazing, honor and respect for it, Tirlititi!), i tried to do this with UnityEX, but that's all I got - encoded text instead of scripts...
Guide me - How to get scripts from extracted (and encoded?) files?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-08-27 22:41:57
Script files are in a binary format handmade for FF9 (and surely a format that has been developped over the years, improving along with games... I'd bet that at least FFVII to FFX use similar script files). You can't find the readable scripts with lines like "Function Main_Init" or "Wait( 10 )" in the archives because Hades Workshop is doing all the binary <-> script conversion.

IIRC, script files have the extension ".eb.bytes" in p0data7.bin, and p0data7.bin contains pretty much only binary scripts.

I'm not sure why you want to deal with these files without Hades Workshop but that's going to be complicated.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: FomaX on 2021-08-30 14:16:35
Thanks, it seems this approach is not worth it.
Can you help me with some other things?

1) I have some troubles with searching binaries for dnspy unity mono, only for building, can you linked me for it? Or share from your archives?

2) Its possible to make free to play or continuation after original game ending?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-08-30 22:24:23
1) Is it what you're looking for? I'm not sure I understand: https://github.com/dnSpy/dnSpy/releases/
2) Yes. You can simply change the destination field of one of the ending fields to the entrance of Memoria for instance (or you can change the destination in Necron's AI as well).
In Necron's "Main_Init" function:
Code: [Select]
RunBattleCode( 37, 2901 )Or at the end of the function "Vivi_Loop" of the field "Ending/AT":
Code: [Select]
Field( 2901 )You may also put the variable "General_ScenarioCounter" back to some early value, like "11100" (the line "set General_ScenarioCounter = 11100" should bring you back to the situation of the start of the disc 4, so you'll fight the bosses again).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: FomaX on 2021-09-02 11:03:29
Thank you very much for answering, it's great.

1) What about field script vars, which global - is it global through all field scripts? Or only global through functions in current (one) field?
2) What about field script functions? They are somehow related to the AssemblyCSharp.dll ? Where the definitions of this functions?
3) And still no one has been able to expand slots from 9 to 12 to make all 12 characters unique?

4) The condition highlighted below will never be true? My reasoning: Function Main_Init triggered first and once, General_LoadedGame wasn't declared earlier with the value. Or not?
Code: [Select]
Function Main_Init
    set VAR_GlobBool_159 = 0
    set VAR_GlobUInt8_17 = 255
    set VAR_GenBool_191 = 0
    if ( General_LoadedGame == 1 ) {
        set General_FieldEntrance = 10000
    }
Code: [Select]
    set General_LoadedGame = 0

P.S. About DnSpy, i was talking about patched mono.dll, for real time debug. It's just unavailable at github for now. But it's ok, i found it on my other comp, downloaded some time ago.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: ChikoLad on 2021-09-09 01:09:59
Been a while since I posted here.

Deciding to have a little look at modding FFIX again and as part of that I want to attempt to re-create a passive aura that Freya has in another game, Dissidia Final Fantasy: Opera Omnia, and implement it as a support ability she can equip in FFIX.

The main two effects of this ability are:

-Grants HP Regen to the party
-If any party member's current HP is equal to or greater than 50% of their Max HP, and party member takes damage equal to or greater than current HP, party member survives with 1 HP

Here is what I have so far:
Code: [Select]
  >SA 63 Soothing Petals
  StatusInit AutoStatus Regen
  Ability AsTarget WhenBattleScriptEnd
  [code=Condition] HPDamage >= TargetHP && TargetHP >= TargetMaxHP / 50 && (EffectTargetFlags & 3) == 1
                && CasterIsPlayer != TargetIsPlayer
[code=TargetHP] 1 [/ code]

(Extra space in the last "/code" is just for formatting here on the forums, dunno how to do that properly lol)

Basically just looking to verify the code.

I'm a newbie at this so I know it's probably wrong. I don't know how to tell the game to set the target's HP to 1 so I just took a guess.

Additionally, the part I don't have a clue on is how to tell the game to apply this effect to the entire party when the support ability is only equipped to Freya.

Any insight would be appreciated.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-09-09 09:16:50
@FomaX:
1) There are 3 types of variable, "local" variables are local to an entry (they are shared between eg. "Blank_Init" and "Blank_Loop" but not between "Blank_Init" and "Marcus_Init"), "global" variables are local to a script (so all the functions of the same field or world map or battle share them), and "general" variables are shared by everything and are also saved in save files.
2) Somehow yes. The overall system is quite complicated but it's mainly coded in EventEngine.cs (https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Global/Event/Engine/EventEngine.DoEventCode.cs).
3) The problem is that doing so will change the format of save files, thus provoking compatibility issues. If I try to do that, I'll search for a way to have save compatibility backward and forward (= you can use non-Memoria saves after installing Memoria + you can use Memoria saves after deinstalling Memoria).
4) Since "General_LoadedGame" is a general variable, it can be set to 1 in another script or be 1 in the player's save. For this variable in particular, I think it is set everytime the player has a chance to save, like "set General_LoadedGame = 1 ... Menu( Save ) ... set General_LoadedGame = 0".

@ChikoLad: That's a tough one. Your code looks fine except that setting the target's HP to 1 will not prevent the damage to apply and thus still kill the character. You can either add a code "[ code = HPDamage ] 0 [ /code ]" or replace the setting of HP by a change of the damage "[ code = HPDamage ] TargetHP - 1 [ /code ]".
This system wouldn't prevent a "Death" spell or a tick from poison / venom (as they are not damaging through an ability cast). You could add a way to prevent "Death" but the poison / venom tick seems impossible to prevent this way... (although the Regen effect would make it hard to die from poison).

More importantly, I don't see any way to extend any of the two effects to all allies. You can't currently check if an ally has a SA equipped. I'll try to add that kind of features at some point.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: ChikoLad on 2021-09-11 00:43:14
@FomaX:
1) There are 3 types of variable, "local" variables are local to an entry (they are shared between eg. "Blank_Init" and "Blank_Loop" but not between "Blank_Init" and "Marcus_Init"), "global" variables are local to a script (so all the functions of the same field or world map or battle share them), and "general" variables are shared by everything and are also saved in save files.
2) Somehow yes. The overall system is quite complicated but it's mainly coded in EventEngine.cs (https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Global/Event/Engine/EventEngine.DoEventCode.cs).
3) The problem is that doing so will change the format of save files, thus provoking compatibility issues. If I try to do that, I'll search for a way to have save compatibility backward and forward (= you can use non-Memoria saves after installing Memoria + you can use Memoria saves after deinstalling Memoria).
4) Since "General_LoadedGame" is a general variable, it can be set to 1 in another script or be 1 in the player's save. For this variable in particular, I think it is set everytime the player has a chance to save, like "set General_LoadedGame = 1 ... Menu( Save ) ... set General_LoadedGame = 0".

@ChikoLad: That's a tough one. Your code looks fine except that setting the target's HP to 1 will not prevent the damage to apply and thus still kill the character. You can either add a code "[ code = HPDamage ] 0 [ /code ]" or replace the setting of HP by a change of the damage "[ code = HPDamage ] TargetHP - 1 [ /code ]".
This system wouldn't prevent a "Death" spell or a tick from poison / venom (as they are not damaging through an ability cast). You could add a way to prevent "Death" but the poison / venom tick seems impossible to prevent this way... (although the Regen effect would make it hard to die from poison).

More importantly, I don't see any way to extend any of the two effects to all allies. You can't currently check if an ally has a SA equipped. I'll try to add that kind of features at some point.

Thank you for the response!

So I changed the code to what you suggested, but I haven't been able to test it as I realise I've hit a road block - I don't actually know how to put the ability into the game. I saw mention of examining the CIL code in Hades Workshop, but I admittedly can't make much sense of anything there. I know I need to look at the "CheckStatusAbility" code but I'm not sure what to do with it. I can changed the name, description, and cost of the "Void" ability to what I want but I don't know how to change it's code. I also noticed in the Help tab of Hades Workshop, it states that "You can't change the effects of the supporting abilities for now". Is this still the case?

-------------

Other than that, I've gone back and dabbled into changing the field/world map character model and animations. I was reading the documentation for your Play As Kuja mod and it really helped me get back into this, so thanks for that!

Using the Dictionary Patch method, I was able to very easily replaces Zidane's model in the field and world map with Freya's, and replaced a few of the animations the two have in common (like changing Zidane's running animation to Freya's and so on). This is a lot faster and more convenient than the method I was using before (editing each field script individually), but it has the drawback of just completely replacing Zidane's model with Freya's, such that in scenes where Zidane and Freya are normally both present, there will instead be two Freyas.

I was wondering if it was possible to somehow mix the two methods. The ideal scenario in my opinion, would be to use the "global hijack" method so that I just replace Zidane's model/animations with Freya's, which works for just generic exploration scenes where only Zidane is present in the original game (such as exploring in the post-game - Freya only shows up on the Invincible and in the ending cutscenes at that point so those are the only scenes that need attention in the post-game) - scenes like Cleyra and Desert Palace where Freya is already playable would work fine this way too. However, for scenes where both Zidane and Freya are present, I would like to make an "exception" somehow in those field scripts (so that it ignores the Dictionary Patch), and then manually change the model and animations as necessary (making Freya the "player" character and making Zidane the NPC).

I haven't actually had the time to play through your Kuja mod yet so I'm not sure how you handled scenes where Zidane and Kuja were both present in the original game.

Also, for custom animations, I'm wondering how you approached making them. Did you use a 3D program like Blender or Unity? I have experience in Blender and I know how to open FFIX Steam models and animations to preview them in Unity, which also means I could probably make custom animations there and visualise them as I make them. But I'm curious on how things need to be formatted in order for FFIX to read them correctly.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-09-13 10:21:09
"I don't actually know how to put the ability into the game"
=> Oh, I get it now. You don't need to transpose the content of "AbilityFeatures.txt" anywhere. The game (Memoria Engine mod) will read that text file and use these codes automatically. The only things are: if you edited the main "AbilityFeatures.txt", some of the abilities may be overwritten by Alternate Fantasy's own "AbilityFeatures.txt" (but only those that AF uses and it doesn't use SA 63, and only if you have AF of course), and also the behaviour in case of an incorrect code may vary from (IIRC, it can "ignore the ability", "crash the game" or "prevent abilities to deal damage").

Hades Workshop can't handle the "AbilityFeatures.txt". You edit the features with a notepad and/or edit the ability stone costs and descriptions with HW.

In "Play as Kuja", Kuja shows up twice in scenes where he appears normally, just like you said with Freya. I didn't do any field script modification as it was more of a possibility exhibition rather than a complete mod. It is not possible to restrict "DictionaryPatch.txt" to parts of the game and I don't think it should. For a proper 3D model replacement, I think that you should only deal with field scripts like you did with Freya (it was the tough way but also the proper way). DictionaryPatch can be used for battle models or hacky purpose. I mean, if you care enough about "having 2 freyas on the screen", then you should care about "I walked with Freya to Alexandria's boat deck early disc 3, but then Freya was already there and it's Zidane that arrives instead", so half a measure such as a DictionaryPatch restriction would not be satisfying IMO. If you want things to be handled in a credible way, you need field scripts.

About animations, that's a sensible point...
I made a custom animation format (based on JSON); you can only work with these animations using a notepad (so without preview or convenient 3D editing tools) or by exporting the existing ones with Hades Workshop.
I would have gladly use an existing and compatible 3D animation format but alas I couldn't find any that would be similar to Unity animations and open-source. If you know of any animation format that would be nice, please tell me. I'm not a pro with Blender but I couldn't find anything like that (if I recall correctly, even the FBX that can be imported in Blender lose their animations when doing so).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: FomaX on 2021-09-23 21:26:23
Hellow Again!) :)

I have some progress to make unique all 12 characters with there own slots.
Now i can access to ALL 12 characters in the start of the game, (i have custom partymenu script) and shuffle all of them to make very interesting party combinations )
(https://i.ibb.co/RHgr3RZ/ff9-full-party-scr-1.jpg)

Without field scripts editing, all characters with there own slots have their corresponding unique abilities, default equips, stats and etc.
(https://i.ibb.co/thYWMcZ/ff9-full-party-scr-2.jpg)

But i have a problem - first battle (and other in the same reason) cant start with party members (after battle swril - black screen), which have slot ids 9,10 and 11 (Cinna/Marcus/Blank). I also want to note that party formed correctly before battle start (i can access party menu any time by press f8 key). I test first battle with other party members (by editing field script), which slot ids less 9 (8,7,6 ... etc) - all work fine.

Edit 1:
Now i have new progress: Battle can start! With Cinna/Marcus/Blank. But... Now game crush before end of battle...

Edit 2:

O yeah, i solved the problem with it! Now i can start battle with full 12 slots, with cinna/marcus/blank and game don't crush after first battle ending. But there is still a lot of work!)

To fix some bugs with battle shadows, and there will be others, i think.

Thank's all for your moral support!  ;D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: elberuss on 2021-12-13 05:52:39
Hi!
When I try to add a new Object Item (1, 130) for Garuda it doesnt works well, the game play but when I try to open again the files with HW it closes suddently! (when It is loading enemies) some one with more experience can explain what I an doing wrong? (In garuda group I am adding sucessfully the new enemy, currently I added more enemies in others groups but this HW error just happens on garuda and great dragon)

Basically I can play but I cant continue modding xD

Thanks!

Tirlititi you accept donations or patreons? I will happy to bring gratitude for this awesome modding tool!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-12-13 14:22:19
Hum...
It is not a good thing to open a modded game with HW. Depending on whether you have the Moguri/Memoria mod, you should work like this:

== Without Moguri mod or Memoria Engine mod ==
1) Make a copy of the game's (non-modded) folder. This copy (let's call it "FF9 - Copy") will always be used by Hades Workshop. "FF9 - Copy" is the moddable copy while "FF9" is the playable copy.
2) Thus, when using Hades Workshop, always select the file "FF9_Launcher.exe" in "FF9 - Copy".
3) When saving a mod, save it both as a .hws file and as a "Steam Mod" with options "Unity Archives" + "Compiled DLL". The .hws saves are very fast and relatively light in size, so don't restrain from saving often and possibly saving a new file each time if you want to be very cautious.
4) For installing and playing your mod, move the files from "FF9 - Copy/HadesWorkshopMod" (or whatever path you picked) into the related folder of "FF9".
5) When going back to modding, keep opening the non-modded version "FF9 - Copy" and then use "Open Mod" and select your .hws file.

HW *should* be able to open modded games as well but since there are so many things that can happen (like what seems to happen to you), I don't guarantee it to work. Besides, there are other problems if you work that way (the program can't "remember" what has been modded and what has not been changed, from a session to another). The progression bar only shows up during the loading of the game's datas, not the modifications contained in .hws (those are very fast to import as well), so if the program crashes during this progression bar, you can be sure that you open modded game files and the modifications are somehow problematic.

Crashing during the loading of enemies, it can pretty much only relate to the archives p0data2.bin or p0data7.bin (and to a lesser extent, resources.assets). I would urge you to use .hws files instead of modding on top of modded games everytime, but what you can do if you don't have any .hws and don't want to do everything again, it's replacing the problematic archive with the non-modded game's archive (test first p0data2.bin and then p0data7.bin if it still crashes in HW), then open every panel that you have ever modded, then go to "Tools -> Mod Manager" and check all the parts that you ever modded (it is better to tick more than necessary rather than fewer). Then "File -> Save Mod" will generate a .hws containing all the data sections that you have ticked.

You say that the problematic change was a script change "InitObject( 1, 130 )", in which case the problematic file is the p0data7.bin containing all the scripts. But that seems rather suspicious to me and I expect the problematic file to be p0data2.bin instead, containing the non-script datas of enemies. You'll loose your changes in one of these data types in the process.

Then switch to the workflow I described above, or better yet...

== With the Moguri mod or Memoria Engine mod ==
1) No need for making a copy of the game here. In HW, always open the Memoria-modded game (Moguri includes Memoria).
2) Upon opening it, HW should prompt about using the vanilla "Assembly-CSharp.bak" or something like that; this is because Memoria makes a backup of a non-modded DLL and HW can use that backup. If it really finds no usable backup, you'll have to get one yourself by desinstalling Memoria, then copy the "x64/FF9_Data/Managed/Assembly-CSharp.dll" to a safe place, then re-install Memoria, then put the copied DLL next to HadesWorkshop.exe with the name "Assembly-CSharp_Vanilla.dll". Most of the time, though, this step works just fine without you needing to do anything.
3) Do whatever modification you want, and always save them both as a .hws ("File -> Save Mod") and as a Memoria mod ("File -> Save Steam Mod" with the options "Raw assets" + "Spreadsheets (Memoria)").
4) Enabling/disabling your mod is done by adding/removing your mod folder's name in the file "Memoria.ini" (sections "[Mod]", field "FolderNames", having something like the following: FolderNames = "HadesWorkshopMod", "MoguriFiles").
5) When you want to continue modding with HW, still open the same Memoria-modded FF9_Launcher.exe and then "File -> Open Mod" and select your .hws.

I don't accept donations. Here is why:
Quote from: Tirlititi
No, I don't have a patreon and I don't plan on receiving donations for my work in modding. In my opinion, everyone should earn a revenue high enough to live a decent life and possibly work toward their passions. I see donations somehow as a wooden leg trying to compensate for the lack of institutional will toward the rewarding of passion works and securing a decent life for everyone.
Since I am not in need myself and can afford to not use that wooden leg, I prefer not to and hope for a more satisfying framework.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: elberuss on 2021-12-14 04:40:28
Thanks so much for your fast reply,
So basically I was using wrong all time HW xD

You have standars, I can take that! but, we can send to you some valauble items like local gourmet producs for example? I think would be a great way to show to you our gratitude, and I living on a region with exellents gourmets producs like cheese, wine or beer (I live on north of spain), so please, consider bring a public shiping adrees to be able to send to you good products as a gratitude :)

Edit: i can relate that even using wrong HW, I could modified most of parts of the game without crashing game (even when I mod the garudas and great dragons the game runs well), so HW is best that than you thinked xD
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: elberuss on 2021-12-15 05:47:30
-nothing-
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: akirat9 on 2021-12-15 13:00:37
i'm editing the original psx binary charmap. in hadesworkshop can it replace portraits with opera omnia ones for psx verison?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-12-15 19:10:35
No, I don't know where these textures are stored in the PSX binary files. I don't work on it anymore since a long time, sorry :/
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: akirat9 on 2021-12-15 22:13:28
it ok. i thought of as much when didnt see it in hades workshop.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: elberuss on 2021-12-16 10:37:22
When I modified world battle spots and save it as a mod and I try to load again, the HW closed, why? (I tryed just change one entry, saving and open it again to do a most as apossible simple test, and loading from no one modified ffix files)
even crash when I select dont load enviroment, but it load anyway :/
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-12-16 15:15:46
I don't know.
Do you want to share your .hws so I can check it?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: elberuss on 2021-12-16 15:30:57
I don't know.
Do you want to share your .hws so I can check it?
Sure, thanks!
https://drive.google.com/file/d/1PiZu4qSlQtYvEFgif_a3ZGZOACvBIXzY/view?usp=sharing

As i said, I just changed one entry on battle spots, I change a mu for piton, after save it as a mod, and I open it again, HW closes
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-12-16 16:16:26
Ok...
The world map "Places" and "Battle Spots" sub-panels bug.
Don't change anything in them. I need to fix that...

Thanks for warning, elberuss. I didn't think I would need to update this tool anymore. That adds to my todo-list.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: elberuss on 2021-12-16 16:25:21
Ok...
The world map "Places" and "Battle Spots" sub-panels bug.
Don't change anything in them. I need to fix that...

Thanks for warning, elberuss. I didn't think I would need to update this tool anymore. That adds to my todo-list.
But I read many people that changed it on this thread, how they did?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2021-12-16 18:32:35
It used to work correctly. I don't know why it doesn't work anymore. Maybe I changed something when moving to a format that is both compatible with the PSX and the PC versions of the game, maybe it's something else... I'll have to check.
On the same vibe, changing the script of "Opening-for-FMV" tends to create bugs, so that's also something to avoid with the current version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: elberuss on 2021-12-17 16:10:38
It used to work correctly. I don't know why it doesn't work anymore. Maybe I changed something when moving to a format that is both compatible with the PSX and the PC versions of the game, maybe it's something else... I'll have to check.
On the same vibe, changing the script of "Opening-for-FMV" tends to create bugs, so that's also something to avoid with the current version.
Thanks so much for your effort! really thaks! FFIX alwais was my liked game from my childhood and I love modding on it :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: g_west on 2022-01-20 02:34:06
Hello Tirlititi,

Would it be possible to change Quina'a trance command from Cook to Double Blue magic (Dbl Blu)? If so, how would I go about doing that?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-01-20 19:37:57
That's unfortunatly not possible using HW. That is too deeply encoded in the battle system.
On the PC version, modding the BattleHUD can be done to do something like that but it's not a feature that Memoria allows (yet).
BattleHUD (https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Global/battle/BattleHUD/BattleHUD.Public.cs#L23)

Another possibility (that works on PSX) is to have "Double Blue Magic" replace either Double White or Double Black. You'll loose one of them but as long as a command takes the natural slot of one of these, it's considered as a double command.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: g_west on 2022-01-21 00:00:26
Unfortunate. Regardless, thank you for responding so quickly. You're stand up person.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: g_west on 2022-01-28 06:46:13
Hello Tirlititi,

Sorry to pester you, but one last question. Would it be possible for me to make it so Quina could eat an enemy who is usually un-eatable. Tantarian for example? Is it as simple as removing the Easy Kill stat effect?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-01-28 18:34:42
Yes.
Human-type enemies are also non-edible but that doesn't apply to Tantarian.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: g_west on 2022-02-23 18:52:03
Hello again Tirlititi,

Turns out I have another question. I'm trying to give Freya a new spell, Inferno. She can perform it just fine; but when she goes to cast it she does a glitched jump animation. I've searched around online for a few hours now and I couldn't find a solution to this. I know she has a special flag inside the Edit Spell Sequencing, but I can't for the life of me figure out where to put it to make it work with Inferno. Is it even possible?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-02-23 22:01:38
The Memoria Engine mod fixes that on PC.
You can't fix it properly without Memoria: the only solution without Memoria would be to use "Play Freya's casting anim" in the spell sequence of "Inferno" but then it would bug if anything other than Freya uses Inferno and even then I'm not sure that you can get a flawless casting animation for Freya.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: g_west on 2022-02-23 23:42:43
I figured I needed to insert "Freya's casting animation" into "Inferno," I've tired copying the sequence of her other skills into "Inferno" to replicate it, but no luck. I don't mind if it bugs if anything else uses "Inferno" because I don't think anything else does. You wouldn't know how to properly insert it would you? If not, no worries. I really do appreciate you getting back to me so quickly.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-02-24 11:23:48
No sorry, I've never tried doing something like that on the PSX version.
To be honest, I'm not even sure it can work to actually play Freya's casting animation for a non-Dragon effect, that "Freya's casting animation", on the PSX version... The usage I suggest is actually an extrapolation of that sequence code's effect from the source code of the Steam version to its behaviour in the PSX version. It might be that Freya's casting animations are actually packed inside all the Dragon effects, next to the effect models and textures, and that they can't be used by any mean in a non-Dragon effect in the PSX version.
Title: Re: [FF9] General editor - Hades Workshop (0.39b)
Post by: Caledor on 2022-03-09 22:41:31
First of all thank you for this amazing tool.
I am here to ask some help for a very little problem that has FF9 italian steam version: during a battle, when you choose to use magic sword ability (the Steiner+Vivi combo  :)), the text that appears in the top of the screen with the ability name has the words swapped. Here an example:
You choose Firaga Sword (in italian is "Colpo Firaga" and in hades workshop is named perfectly), in the top screen appears as "Firaga Colpo" (maybe use english order with italian text?)

My question is: is it possible to fix with hades workshop or with some manual edit?

Thanks usb :)
Yeah, I thought that they fixed that bug, but apparently not. It doesn't concern only Italian but also French and Spanish. The bug lies in the CIL method "BattleHUD::SetBattleCommandTitle" but it's a bit tricky to fix it there with HW.

What you can do though is bypass the bug: go to the "Interface" panel, select the "Battle Spell Naming" field and add 13 entries to it (right-click -> Add), then write the proper full names ("Colpo Fire" etc...). Finally, go to the "Party -> Spells" panel and change the casting names of the magic swords spells to the entries that you just added.
It's a bit dirty as a fix, but it works. You should also translate the names in the "Interface" panel if you want it to work for all the languages (I think the game would crash in non-italian language otherwise).

For info, you can have up to 62 custom spell names in that interface field.

Bringing back this cause i got to fix the bug itself instead of using workarounds.

Replace, in BattleHUD::SetBattleCommandTitle

Code: [Select]
text = FF9TextTool.ActionAbilityName((int)pCmd.sub_no) + str + FF9TextTool.BattleCommandTitleText(0);
with

Code: [Select]
string locale = Localization.GetSymbol();
if (locale == "IT" || locale == "ES" || locale == "FR")
text = FF9TextTool.BattleCommandTitleText(0) + FF9TextTool.ActionAbilityName((int)pCmd.sub_no);
else
text = FF9TextTool.ActionAbilityName((int)pCmd.sub_no) + str + FF9TextTool.BattleCommandTitleText(0);

Note that IT SP and FR don't need the middle space between words that "str" places cause said space is already within FF9TextTool.BattleCommandTitleText(0) for all the affected languages.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-03-09 23:09:47
The best is to use the Memoria Engine modifier that fixes that bug. There is no reason to edit the game's source code directly instead of installing Memoria.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: child_of_terra on 2022-05-14 06:00:32
Hello Tirlititi,
I need your help. I use the Steam version and Albeori's Memoria. HadesWorkshopMod works correctly, but during ATE Cleyra [Meeting with the King and the High Priest] the text "debug" appears instead of dialogs. The same problem is observed during the balloon mini-game.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-05-14 12:09:38
Hum... By default, these dialogs are not translated in all the languages. The balloon mini-game was translated in french but not in english for example and the ATE in Cleyra was not translated in any language if I recall correctly. In these situations of a missing translation (but with good remnants of the deleted scene in the script), the lines are often replaced by "debug" as a placeholder or empty text. In other situations, the line was completly removed, resulting in a shift in the text IDs depending on the language (that is why there is not always the same number of texts depending on the language).

So you don't have these lines properly translated, either because you unlocked those scenes yourself in the scripts (in which case, congrats!) or because you imported only a part of a mod unlocking them (typically you unticked the "Texts" box when loading the .hws) or because the script-related modifications are properly installed but somehow the text-related modifications are not (the scripts are stored in a sub-folder of "StreamingAssets" while the texts are stored in a subfolder of "FF9_Data").
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: akirat9 on 2022-05-16 05:14:43
why this message appear when opening ff9 psx image?
(https://i.postimg.cc/2jqbTZny/Untitled.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-05-16 10:17:42
HW is quite sensible to mods, even those it generates itself. Other than that, there should be no problem. It used to scan correctly the japanese, US, UK, french, italian, german and spanish PSX images; I don't have copies of them anymore to thoroughly check but it still scans correctly at least the US version.

When it scans a game successfully, it generates a "Final Fantasy IX (Disc 1).hwf" file next to your PSX image that contains the results of the scan so you don't need to do that anymore next time.

So I guess you are trying to open a modded version of a PSX image. If you know which mod it is and you can remove it (eg. it's a .ppf with an "undo" feature), do that then open it with HW. In many cases, HW will then generate a .hwf that you can use even after re-applying the mod (close HW, re-apply the mod but keep the .hwf next to the game and with the same name, then re-open the PSX image with HW).
If you don't know what mod your game has, you'll have to get another version of the PSX image first, one that is not modded or only very slightly modded. If you're using the US version, I can share .hwf files as well; hopefully they'll work.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: akirat9 on 2022-05-16 13:17:52
HW is quite sensible to mods, even those it generates itself. Other than that, there should be no problem. It used to scan correctly the japanese, US, UK, french, italian, german and spanish PSX images; I don't have copies of them anymore to thoroughly check but it still scans correctly at least the US version.

When it scans a game successfully, it generates a "Final Fantasy IX (Disc 1).hwf" file next to your PSX image that contains the results of the scan so you don't need to do that anymore next time.

So I guess you are trying to open a modded version of a PSX image. If you know which mod it is and you can remove it (eg. it's a .ppf with an "undo" feature), do that then open it with HW. In many cases, HW will then generate a .hwf that you can use even after re-applying the mod (close HW, re-apply the mod but keep the .hwf next to the game and with the same name, then re-open the PSX image with HW).
If you don't know what mod your game has, you'll have to get another version of the PSX image first, one that is not modded or only very slightly modded. If you're using the US version, I can share .hwf files as well; hopefully they'll work.

I'm using US version this time. maybe share hwf will work ?

Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: carl09876 on 2022-05-28 00:54:19
@Tirlititi hi , does this program have somewhere an option to increase the drop rate of the items that can be stolen or dropped by the monsters and to do the same with the card drop ?



another thing i need to know is why when i modify a group of enemies , the new enemy i am enabling just don't do anything , for example , enemy id 360 , pyton and goblin , there is a group that only have one pyton , i enabled even the goblin , but then  ,the goblin didn't attacked , just like it didn't got atted at all @Trilititi



also it seem that hades workshop corrupted some of the files i modified , infact after i saved the latest modifications , i had to use my back up files because at some point , the game crashed and i couldn't even open hades workshop , but the moment when i used my back up of the modified files , i could immediately open the game again and use hades workshop



i know the reason of those corrupted data , it is for a problem occurred even long ago, basically , if there are too many data to save all at once , it may happen that the program cause the corruption of the modded files , it happened to me while modifying the data of the monsters all at once , and so i tried to save only half of all the mods , and after i saved the changes , i closed and reopened the program , that solved the problem for now , but clearly the program need a fix to handle all those changes saved at once

Consolidated quad post. - Bonez
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-05-28 23:39:33
@akirat9: Here (https://www.dropbox.com/s/71uhlik7bv0q5jv/FF9%20HWF.zip?dl=1) they are.

@carl09876: About item/card steals/drops, mostly no. These are hardcoded in the battle code, which is MIPS in the PSX version and CIL/C# in the Steam version. I guess you can try changing the steal % of each item slot on the PSX version in the MIPS panel (with a bit of luck, these "256/64/16/1" pourcentages are written plainly in the code, so you'd just have to change these figures, even though it will change the rates for all the enemies). If you are on the Steam version, then you can change the code of the Steal script (https://github.com/Albeoris/Memoria/blob/main/Memoria.Scripts/Sources/Battle/0058_StealScript.cs#L56) for this kind of result (check out the documentations on how to use Memoria). It is actually not a bad idea to add fields to change these % chances; I'll see what I can do for the next version of Memoria.

When you add/remove an enemy to a group, make sure to change the script accordingly (Edit Script -> function Main_Init -> make sure that the "InitObject" lines match with the changes you made).

The corruption of .hws files happen when you try to modify the script of the field "Opening-for FMV" or when you change something in the panels "Environment -> World Maps -> Place Names" and "Environment -> World Maps -> Battle Spots". I am currently working on an update of HW that will fix that bug amongst other things.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: carl09876 on 2022-05-30 03:08:38
@akirat9: Here (https://www.dropbox.com/s/71uhlik7bv0q5jv/FF9%20HWF.zip?dl=1) they are.

@carl09876: About item/card steals/drops, mostly no. These are hardcoded in the battle code, which is MIPS in the PSX version and CIL/C# in the Steam version. I guess you can try changing the steal % of each item slot on the PSX version in the MIPS panel (with a bit of luck, these "256/64/16/1" pourcentages are written plainly in the code, so you'd just have to change these figures, even though it will change the rates for all the enemies). If you are on the Steam version, then you can change the code of the Steal script (https://github.com/Albeoris/Memoria/blob/main/Memoria.Scripts/Sources/Battle/0058_StealScript.cs#L56) for this kind of result (check out the documentations on how to use Memoria). It is actually not a bad idea to add fields to change these % chances; I'll see what I can do for the next version of Memoria.

When you add/remove an enemy to a group, make sure to change the script accordingly (Edit Script -> function Main_Init -> make sure that the "InitObject" lines match with the changes you made).

The corruption of .hws files happen when you try to modify the script of the field "Opening-for FMV" or when you change something in the panels "Environment -> World Maps -> Place Names" and "Environment -> World Maps -> Battle Spots". I am currently working on an update of HW that will fix that bug amongst other things.

hmm , are you sure that there isn't nothing in the cil code section that allow to change the values of the steal rate ? i prefer to modify the files rather than change something in the executable ,also you said that memoria and hades workshop aren't compatible , so if you use one , then the game won't respond properly to the changes in the other program , as for the corruption , i don't think the problem is the mdofication in the battle spot , because i managed to change some battle spots , for example , i placed hades and quera in the desert , and i placed dantarian and ozma in the little island were you usually only find the yan , but it also mean that the problem occur only some times , possible ?



@Trilititi can you be more specific about this: "Edit Script -> function Main_Init -> make sure that the "InitObject" lines match with the changes you made" what should i do ? i am checking that section but i don't understand what i should change , because i am looking now at the scripts , for a group that i didn't modified and a group were i enabled some more enemies , they are identical , i am talking about the main init



ok , the game crashed because i added to group 1 for group id 360 the goblin , making a group of two monsters , then i parsed , and still no warnings or errors , the modification to the main init consisted in copy and paste the line for the goblin from a group were it already existed , so what i am doing wrong ?



another thing that happened is that when i placed a group of monsters that come from the ice cavern (is 029 , kannibal and gelatine) , in the  battle spot of the mist continent , the battle trigger properly , but the music don't , so where is the data of that group there is the option to trigger the music ?



ok , so it seem that the game really crashed for changing the battle spots , to be more precise  , for the fact of have places the group 029 (kannibal and gelatine) in the battle spot of the mist continent , the very first that you visit after the evil forest , the one were you find the group of enemies 360 (pyton and goblin) , so yeah , the problem is really what you said , a bug in the program that somehow corrupt the files for the very fact of have switched certain battle spots , still ti is very strange , because as i said , i could place hades and queera in the desert without any kind of problems , so why some changes works and some other changes doesn't ?



i discovered what was causing the crash: if you change the group of enemies in the battle spot without change the background image then the game crash , but if you do it by changing the background image first and then you change the battle spot , the game doesn't crash , still it is a bug in the program that need to be fixed of course , along with the music that doesn't trigger when for example you put a group of enemies that come from the  ice cavern and you put them in the first open field of the mist continent right after the evil forest

Consolidated sextuple post. my dude. I understand you can't yet edit posts, but bruh... 4 and then 6? So figure out everything you want to say before you post and say it at once please.  - Bonez

Posting Etiquette Rule 1: Double posting is generally not allowed. If your last post was less than 24-48 hours ago, edit your post. Some leeway will be given for new users who do not have access to the edit function yet, but please don't abuse this.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: carl09876 on 2022-06-02 07:00:24
@Trilititi helooo ??? fucking answer you dick , this bullshit about ignore people's messages must end once and for all
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Bonez on 2022-06-02 07:38:53
@Trilititi helooo ??? fucking answer you dick , this bullshit about ignore people's messages must end once and for all

 ::) Couldn't wait 5 whole days for a reply... @Tirlititi don't worry about answering him. He obviously has issues. He's already been banned before for this exact reason. He subverted the ban but is gone again.

Normally I would have deleted his last post and just banned him quietly, but considering he wrote you a novel, I didn't want you to put any work or thought into any replies to him without being aware.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-06-02 10:31:21
I am obviously not going to answer his new questions.

@carl09876: I don't know what is your age or your situation, so I'm not going to lecture you on how to behave, on the internet or elsewhere. I'll only say that, without even considering the insult, I have been thinking that you don't pay attention to what people write to you and mostly ignore them. It is very dishonest of you to accuse someone else of doing that.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Seramera on 2022-06-10 16:53:02
Hello,
working with field scripts right now. I want to make a window on the bottom of the screen, which shows a token string of a random field that the field exit will lead to.
Now the textwindow should disappear when the player leaves the Region on the walkmesh, but that is kinda hard to handle since there is no boolean "isinregion" or sth like that.
this is my approach so far:
region range loop opening textbox if globool1 false, set true then
Code: [Select]
Function Region16_Range
    if ( VAR_GlobBool_1 == 0 ) {
        SetTextVariable( 0, 1 )
        WindowAsync( 0, 4, 9 )
        set VAR_GlobBool_1 = 1
    }
    return

loop code for globool1 waiting ticks until its set false
Code: [Select]
Function Code1_Loop
    if ( VAR_GlobBool_1 == 1 ) {
        set VAR_GlobUInt8_1++
    }
    if ( VAR_GlobUInt8_1 == 59 ) {
        set VAR_GlobBool_1 = 0
        set VAR_GlobUInt8_1 = 0
    }
    Wait( 1 )
    loop
Code: [Select]
[STRT=160,1][TAIL=LOC][IMME]press x to go to[WDTH=0,160,6,0,-1][TEXT=0,0][TIME=60]
if anyone know if there is a better way, im glad to read.

less important Question1: im declaring global and local variables, which i dont see written in the edited field script. like globool_1 in this case. Might it be used in the backengine?
less important Question2: came up bcs i saw, especially in the worldmap scripts, stuff going on not happening in the scripts, like the alexandria worldmap model dependency on the scenariocounter, which is not articulated in the script.

less important Question3: Is there a way to edit 300:IceCavern Entrance or Daguerro? they seem independent
less important Question4: Is there a way to edit "field" 70 to have the "new game" button open an other field than 50:Primavista, as of now when i edit it i cant save the mod in .hws
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Seramera on 2022-06-10 17:32:38
also here is a rather lazy written code for a world moogle dialog option that will get you around town and change scenario counter. applies to WorldMap:Hilda Garde 3. just take care you hit the spot and not get lost in the void ;D
Code: [Select]
Function World_Moogle_27
    RunWorldCode( 35, 1 )
    set VAR_LocUInt8_20 = GetData_199
    set VAR_LocUInt8_19 = GetRandom
    set VAR_LocUInt8_0 = ( 192 - ( VAR_LocUInt8_20 + VAR_LocUInt8_19 ) )
    TurnInstant( Op60(ObjectUID_250) )
    set VAR_LocUInt8_21 = 1
    set VAR_LocUInt8_22 = 0
    while ( VAR_LocUInt8_22 < 10 ) {
        set VAR_LocInt24_1 = ( ( Cos(VAR_LocUInt8_0) * 2 ) + ( ( ( Cos(VAR_LocUInt8_0) * 4 ) - ( Cos(VAR_LocUInt8_0) * 2 ) ) / VAR_LocUInt8_21 ) )
        set VAR_LocInt24_4 = ( ( Sin(VAR_LocUInt8_0) * 2 ) + ( ( ( Sin(VAR_LocUInt8_0) * 4 ) - ( Sin(VAR_LocUInt8_0) * 2 ) ) / VAR_LocUInt8_21 ) )
        MoveInstantXZY( GetEntryPosX(250) + VAR_LocInt24_1, GetEntryPosZ(255), GetEntryPosY(250) + VAR_LocInt24_4 )
        set VAR_LocUInt8_21 = ( VAR_LocUInt8_21 + 1 )
        if ( VAR_LocUInt8_22 == 0 ) {
            MoveInstantXZY( GetEntryPosX(250) + VAR_LocInt24_1, 2000, GetEntryPosY(250) + VAR_LocInt24_4 )
        } else {
            SetObjectFlags( 7 )
        }
        Wait( 1 )
        set VAR_LocUInt8_22++
    }
    set VAR_LocInt24_1 = ( Cos(VAR_LocUInt8_0) * 2 )
    set VAR_LocInt24_4 = ( Sin(VAR_LocUInt8_0) * 2 )
    MoveInstantXZY( GetEntryPosX(250) + VAR_LocInt24_1, GetEntryPosZ(255), GetEntryPosY(250) + VAR_LocInt24_4 )
    SetObjectFlags( 7 )
    set VAR_LocInt24_7 = ( Cos(VAR_LocUInt8_0) / 3 )
    set VAR_LocInt24_10 = ( Sin(VAR_LocUInt8_0) / 3 )
    RunScriptAsync( 4, 4, 34 )
    InitWalk(  )
    Walk( GetEntryPosX(250) + VAR_LocInt24_7, GetEntryPosY(250) + VAR_LocInt24_10 )
    SetWalkSpeed( 60 )
    RunScriptAsync( 4, 4, 35 )
    TurnInstant( GetEntryAngle(7) - 64 )
    RunAnimation( 6151 )
    set VAR_LocInt24_13 = ( Cos(VAR_LocUInt8_0) / 8 )
    set VAR_LocInt24_16 = ( Sin(VAR_LocUInt8_0) / 8 )
    InitWalk(  )
    Walk( GetEntryPosX(250) + VAR_LocInt24_13, GetEntryPosY(250) + VAR_LocInt24_16 )
    set VAR_LocInt8_25 = 0
    while ( VAR_LocInt8_25 >= 0 ) {
        RunWorldCode( 16, 6 )
        RunWorldCode( 17, 126 )
        RunWorldCode( 20, 0 )
        WindowAsync( 5, 4, 42 )
        do {
            Wait( 1 )
        } while ( !IsButton(196608L) )
        CloseWindow( 5 )
        if ( ( GetDialogChoice == 3 ) && IsButton(131072L) ) {
            RunWorldCode( 16, 39 )
            RunWorldCode( 17, 126 )
            RunWorldCode( 20, 0 )
        }
        switch 4 ( GetDialogChoice ) from 0 {
        case +0:
            set VAR_LocUInt8_24 = 0
            RunWorldCode( 16, 39 )
            RunWorldCode( 17, 126 )
            RunWorldCode( 20, 0 )
            WindowAsync( 5, 4, 43 )
            do {
                Wait( 1 )
            } while ( !IsButton(196608L) )
            CloseWindow( 5 )
            if ( ( GetDialogChoice == 1 ) && IsButton(131072L) ) {
                RunWorldCode( 16, 39 )
                RunWorldCode( 17, 126 )
                RunWorldCode( 20, 0 )
            }
            switch 2 ( GetDialogChoice ) from 0 {
            case +0:
                RunWorldCode( 16, 5 )
                RunWorldCode( 17, 126 )
                RunWorldCode( 20, 0 )
                WindowSync( 5, 4, 45 )
                while ( GetData_200 ) {
                    Wait( 1 )
                }
                RunWorldCode( 39, 0 )
                Menu( 4, 0 )
                RunWorldCode( 40, 0 )
                set VAR_LocUInt8_23 = 2
                break
            case +1:
                set VAR_LocUInt8_23 = 1
                break
            }
            break
        case +1:
            set VAR_LocUInt8_24 = 0
            RunWorldCode( 16, 39 )
            RunWorldCode( 17, 126 )
            RunWorldCode( 20, 0 )
            set VAR_GlobUInt8_42 = GetItemCount(253)
            if ( !VAR_GlobUInt8_42 ) {
                WindowSync( 5, 4, 46 )
            } else {
                SetTextVariable( 1, VAR_GlobUInt8_42 )
                WindowAsync( 5, 4, 44 )
                do {
                    Wait( 1 )
                } while ( !IsButton(196608L) )
                CloseWindow( 5 )
                if ( ( GetDialogChoice == 1 ) && IsButton(131072L) ) {
                    RunWorldCode( 16, 39 )
                    RunWorldCode( 17, 126 )
                    RunWorldCode( 20, 0 )
                }
                switch 2 ( GetDialogChoice ) from 0 {
                case +0:
                    RemoveItem( 253, 1 )
                    RunScriptAsync( 5, 4, 37 )
                    FadeFilter( 2, 24, 0, 255, 255, 255 )
                    Wait( 25 )
                    RunScriptAsync( 5, 7, 38 )
                    RunScriptAsync( 5, 250, 38 )
                    RunScriptSync( 5, 10, 40 )
                    FadeFilter( 3, 16, 0, 0, 0, 0 )
                    Wait( 40 )
                    FadeFilter( 2, 24, 0, 255, 255, 255 )
                    Wait( 25 )
                    RunScriptAsync( 5, 10, 41 )
                    RunScriptAsync( 5, 7, 39 )
                    RunScriptSync( 5, 250, 39 )
                    FadeFilter( 3, 16, 0, 0, 0, 0 )
                    Wait( 20 )
                    set VAR_LocUInt8_23 = 2
                    break
                case +1:
                    set VAR_LocUInt8_23 = 1
                    break
                }
            }
            break
        case +2:
            WindowAsync( 5, 4, 90 )
            do {
                Wait( 1 )
            } while ( !IsButton(196608L) )
            CloseWindow( 5 )
            if ( ( GetDialogChoice == 1 ) && IsButton(131072L) ) {
                RunWorldCode( 16, 39 )
                RunWorldCode( 17, 126 )
                RunWorldCode( 20, 0 )
            }
//Dialog Option starts here
            switch 2 ( GetDialogChoice ) from 0 {
            case +0:
                set VAR_LocInt24_2 = 0
                set VAR_LocInt24_5 = 1
                set VAR_LocInt24_6 = 0
                SetTextVariable( 5, VAR_LocInt24_2 )
                SetTextVariable( 6, VAR_LocInt24_5 )
                SetTextVariable( 4, General_ScenarioCounter )
                WindowAsync( 5, 4, 10 )
                do {
                    if ( IsButton(16) ) {
                        if ( VAR_LocInt24_5 == 1000 ) {
                            set VAR_LocInt24_5 = 1000
                        }
                        if ( VAR_LocInt24_5 == 100 ) {
                            set VAR_LocInt24_5 = 1000
                        }
                        if ( VAR_LocInt24_5 == 10 ) {
                            set VAR_LocInt24_5 = 100
                        }
                        if ( VAR_LocInt24_5 == 1 ) {
                            set VAR_LocInt24_5 = 10
                        }
                        SetTextVariable( 6, VAR_LocInt24_5 )
                    }
                    if ( IsButton(64) ) {
                        if ( VAR_LocInt24_5 == 1 ) {
                            set VAR_LocInt24_5 = 1
                        }
                        if ( VAR_LocInt24_5 == 10 ) {
                            set VAR_LocInt24_5 = 1
                        }
                        if ( VAR_LocInt24_5 == 100 ) {
                            set VAR_LocInt24_5 = 10
                        }
                        if ( VAR_LocInt24_5 == 1000 ) {
                            set VAR_LocInt24_5 = 100
                        }
                        SetTextVariable( 6, VAR_LocInt24_5 )
                    }
                    if ( IsButton(128) ) {
                        set VAR_LocInt24_2 = ( VAR_LocInt24_2 - VAR_LocInt24_5 )
                        SetTextVariable( 5, VAR_LocInt24_2 )
                    }
                    if ( IsButton(32) ) {
                        set VAR_LocInt24_2 = ( VAR_LocInt24_2 + VAR_LocInt24_5 )
                        SetTextVariable( 5, VAR_LocInt24_2 )
                    }
                    if ( IsButton(8) ) {
                        set General_ScenarioCounter = VAR_LocInt24_2
                    }
                    Wait( 1 )
                } while ( !IsButton(196608L) )
                break
            case +1:
                set VAR_LocInt24_2 = 0
                set VAR_LocInt24_5 = 1
                set VAR_LocInt24_6 = 0
                SetTextVariable( 5, VAR_LocInt24_2 )
                SetTextVariable( 6, VAR_LocInt24_5 )
                WindowAsync( 5, 4, 9 )
                do {
                    if ( IsButton(16) ) {
                        if ( VAR_LocInt24_5 == 1000 ) {
                            set VAR_LocInt24_5 = 1000
                        }
                        if ( VAR_LocInt24_5 == 100 ) {
                            set VAR_LocInt24_5 = 1000
                        }
                        if ( VAR_LocInt24_5 == 10 ) {
                            set VAR_LocInt24_5 = 100
                        }
                        if ( VAR_LocInt24_5 == 1 ) {
                            set VAR_LocInt24_5 = 10
                        }
                        SetTextVariable( 6, VAR_LocInt24_5 )
                    }
                    if ( IsButton(64) ) {
                        if ( VAR_LocInt24_5 == 1 ) {
                            set VAR_LocInt24_5 = 1
                        }
                        if ( VAR_LocInt24_5 == 10 ) {
                            set VAR_LocInt24_5 = 1
                        }
                        if ( VAR_LocInt24_5 == 100 ) {
                            set VAR_LocInt24_5 = 10
                        }
                        if ( VAR_LocInt24_5 == 1000 ) {
                            set VAR_LocInt24_5 = 100
                        }
                        SetTextVariable( 6, VAR_LocInt24_5 )
                    }
                    if ( IsButton(128) ) {
                        set VAR_LocInt24_2 = ( VAR_LocInt24_2 - VAR_LocInt24_5 )
                        SetTextVariable( 5, VAR_LocInt24_2 )
                    }
                    if ( IsButton(32) ) {
                        set VAR_LocInt24_2 = ( VAR_LocInt24_2 + VAR_LocInt24_5 )
                        SetTextVariable( 5, VAR_LocInt24_2 )
                    }
                    if ( IsButton(8) ) {
                        Field( VAR_LocInt24_2 )
                    }
                    Wait( 1 )
                } while ( !IsButton(196608L) )
                break
            }
            break
        case +3:
            switch 2 ( VAR_LocUInt8_23 ) from 1 {
            case +0:
                WindowAsync( 5, 4, 47 )
                break
            case +1:
                WindowAsync( 5, 4, 48 )
                break
            default:
                if ( VAR_LocUInt8_24 < 8 ) {
                    WindowAsync( 5, 4, 50 )
                } else {
                    if ( VAR_LocUInt8_24 == 8 ) {
                        WindowAsync( 5, 4, 51 )
                    } else {
                        if ( VAR_LocUInt8_24 == 12 ) {
                            WindowAsync( 5, 4, 52 )
                        } else {
                            if ( VAR_LocUInt8_24 >= 16 ) {
                                WindowAsync( 5, 4, 49 )
                            } else {
                                WindowAsync( 5, 4, 50 )
                            }
                        }
                    }
                }
                break
            }
            if ( ( !VAR_LocUInt8_23 ) && ( VAR_LocUInt8_24 < 32 ) ) {
                set VAR_LocUInt8_24 = ( VAR_LocUInt8_24 + 1 )
            }
            RunScriptSync( 5, 7, 42 )
            set VAR_LocInt8_25 = 65535
            set VAR_LocUInt8_23 = 0
            break
        }
        Wait( 1 )
    }
    return
Code: [Select]
[STRT=167,5][TAIL=DEFT][WDTH=0,61,64,0,64,1,-1][IMME][D06050][HSHD] [C8B040][HSHD]Set Field()
[68C0D8][HSHD]New=[NUMB=5], Increment=[NUMB=6]
[DBTN=START]: Overwrite[TIME=-1]
Code: [Select]
[STRT=167,5][TAIL=DEFT][WDTH=0,61,64,0,64,1,-1][IMME][D06050][HSHD] [C8B040][HSHD]Set Scenario Counter()
[68C0D8][HSHD]Old=[NUMB=4], New=[NUMB=5], Increment=[NUMB=6]
[DBTN=START]: Overwrite[TIME=-1]
Code: [Select]
[STRT=136,3][TAIL=UPC][PCHC=2,1][IMME]Debug?
[CHOO][MOVE=18,0]Scenario Counter
[MOVE=18,0]Field[TIME=-1]
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-06-13 08:54:25
Hi Seramera,
Congrats on doing all that already. That's really neat.

Many script variables are indeed used by the back engine. The scenario counter (General_ScenarioCounter) is used indeed a lot (for city destroyed and whether Iifa roots expand to post-Terra spots on the World Map, but also whether Garnet has long or short hair and surely I'm missing some). The friendly flags (FriendlyMonster_Progress and the first bit of Ragtime_QuizzSuccess) disable the possibility to encounter those friendly monsters. The pepper spot flags (Chocobo_ParadiseFound and Chocobo_MognetFound) change the appearance of the entrance on the world map etc...
The "General" variables are usually the ones used by the engine. It sometimes happens that the engine fetch local or global variables for "hotfixes", especially on the Steam version of the game. At the end of the day, that's very rare though so you'll most likely never get to one of these instances. Here's (https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Global/EMinigame.cs#L9) an example of such hotfix that can be found in the engine's source code: it increases the score of the Blank sword fight minigame by checking that the field map is 64 (A. Castle/Public Seats), that the running script is a function of the object 4 (Code4_Init or Code4_Loop) and even the exact binary position of the code executed (after the normal score is computed but before the "SetTextVariable" line). So you can see in that example that hotfixes are very specific: you'll almost surely won't have issues because of them. Also, these hotfixes aside, script variables (local or global) are never used by the engine so you can't mess with it by using "VAR_GlobBool_1" especially if it weren't used in the field's script already.

I don't have a complete list of these hotfixes or how the engine uses general-type variables for purposes like the ones you spotted.
Unfortunatly, these uses are spread in the code and hard to interpret.

I don't understand your 3rd question. Ice Cavern's Entrance and Daguerro's field scripts should be editable like any other. I'll check if there is a problem with these but there shouldn't.

I am currently working on an update of the tool that will fix the issues with the field 70: Opening for FMV (among other things).

I don't know of a better way to check if the player character is in the region. I think that your solution is actually the best suited and fits with the spirit of programming tricks they usually used.

(By the way, Global-type variables can be used up to index 79. If you use "VAR_GlobUInt8_80", it will get out of the array range and probably at least throw an exception on Steam, effectively at least terminating the script function, or have an unexpected behaviour on the PSX version. I'm not sure if that limit is documented correctly in the tool.)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Seramera on 2022-06-18 04:13:53
Hello Tirlititi,
thank you for the elaborate answer.
Having built the Randomizer and other stuff, I indeed found out some Variables are used in the back engine.
It got me burst out laughing when i suddenly swapped control with the npc I interacted with. Bugs can be funny creatures. :-D

So the method (that works for me now) is to look for Variables that are already used on the field, but dont interfere with the added use, instead of searching for unused variables.

Here is a little Speak Script that i use to test Battles.

Code: [Select]
Function YoungWomanB_SpeakBTN
    ifnot ( IsMovementEnabled ) {
        return
    }
    set VAR_GlobBool_158 = 0
    if ( VAR_GlobBool_159 == 1 ) {
        DisableMove(  )
        if ( VAR_GlobBool_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    SetTriangleFlagMask( 127 )
    WaitTurn(  )
    set VAR_GlobUInt8_16 = GetEntryAngle(255)
    TurnTowardObject( 250, 32 )
    WaitTurn(  )
    WindowSync( 5, 2, 2 )
    switch 1 ( GetDialogChoice ) from 0 {
    case +0:
        set VAR_GlobInt16_6 = 0
        set VAR_GlobInt16_4 = 1
        set VAR_GlobBool_21 = 0
        SetTextVariable( 4, VAR_GlobBool_21 )
        SetTextVariable( 5, VAR_GlobInt16_6 )
        SetTextVariable( 6, VAR_GlobInt16_4 )
        WindowAsync( 5, 4, 3 )
        do {
            if ( IsButton(16) ) {
                if ( VAR_GlobInt16_4 == 1000 ) {
                    set VAR_GlobInt16_4 = 1000
                }
                if ( VAR_GlobInt16_4 == 100 ) {
                    set VAR_GlobInt16_4 = 1000
                }
                if ( VAR_GlobInt16_4 == 10 ) {
                    set VAR_GlobInt16_4 = 100
                }
                if ( VAR_GlobInt16_4 == 1 ) {
                    set VAR_GlobInt16_4 = 10
                }
                SetTextVariable( 6, VAR_GlobInt16_4 )
            }
            if ( IsButton(64) ) {
                if ( VAR_GlobInt16_4 == 1 ) {
                    set VAR_GlobInt16_4 = 1
                }
                if ( VAR_GlobInt16_4 == 10 ) {
                    set VAR_GlobInt16_4 = 1
                }
                if ( VAR_GlobInt16_4 == 100 ) {
                    set VAR_GlobInt16_4 = 10
                }
                if ( VAR_GlobInt16_4 == 1000 ) {
                    set VAR_GlobInt16_4 = 100
                }
                SetTextVariable( 6, VAR_GlobInt16_4 )
            }
            if ( IsButton(128) ) {
                set VAR_GlobInt16_6 = ( VAR_GlobInt16_6 - VAR_GlobInt16_4 )
                SetTextVariable( 5, VAR_GlobInt16_6 )
            }
            if ( IsButton(32) ) {
                set VAR_GlobInt16_6 = ( VAR_GlobInt16_6 + VAR_GlobInt16_4 )
                SetTextVariable( 5, VAR_GlobInt16_6 )
            }
            if ( IsButton(8) ) {
                if ( VAR_GlobBool_21 == 0 ) {
                    set VAR_GlobBool_21 = 1
                    SetTextVariable( 4, VAR_GlobBool_21 )
                } else {
                    set VAR_GlobBool_20 = 0
                    SetTextVariable( 4, VAR_GlobBool_21 )
                }
            }
            Wait( 1 )
        } while ( ( !IsButton(196608L) )  )
        break
    default:
        break
    }
    Wait( 5 )
    if ( VAR_GlobBool_21 == 1 ) {
        Battle( 0, VAR_GlobInt16_6 )
    }
    CloseAllWindows(  )
    0xA9( 250 )
    set VAR_GlobBool_158 = 1
    if ( VAR_GlobBool_159 == 1 ) {
        if ( VAR_GlobBool_156 == 0 ) {
            EnableMove(  )
            SetTriangleFlagMask( 255 )
            if ( VAR_GlobBool_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    TimedTurn( VAR_GlobUInt8_16, 16 )
    WaitTurn(  )
    return
Code: [Select]
[STRT=100,3][IMME]What u wanna do?
[CHOO=2,1] Go Battle
Nothing
Code: [Select]
[STRT=200,4] [IMME]Increment: [NUMB=6] Destination: [NUMB=5]
startbattlebool: [NUMB=4] (0=no, 1=yes)
[JCBT=START] change startbattlebool
[JCBT=UP] [JCBT=DOWN]Increment[JCBT=LEFT] [JCBT=RIGHT]Destination

I'll report when I'm stuck elsewhere or have finished sth playable.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: stir472 on 2022-07-07 22:25:09
Hello to the whole community, I wanted to thank you Tirlititi for this incredible tool. I am creating a difficulty mod thanks to your tool and I am learning how to implement npcs. With the latter I have a big problem, when I try to add an npc. I don't know how to add the npc function, for example, if there is Man_A in a scenario and I want to introduce a second NPC called Man_B, I can't change the name of the functions. When you have time can you tell me how I can do it? Thanks in advance. (the english not is my native languaje sorry >.<)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-07-08 12:38:15
Hello stir472.

The name of the function is automatically using the entry's model. You can't change it indeed: it's automatically set when it finds a line "SetModel" in the entry's functions.

In order to add a NPC, first get off the "Edit Script" window and start by adding an entry in the "Edit Entries" window. Set that entry's type to "Object" (I think it is the type number "2" if I recall correctly), remember the newly added entry's ID and confirm.
Then only, go back to the "Edit Script" window and right-click on the function list to add a function. Select the newly added entry and create a function of type "0" (the "_Init" function). In there, add the code to initialize your NPC (you can copy/paste the content of another "_Init" function of an object-type entry and change the positions and the "SetModel" value). Also add a line "InitObject" in the "Main_Init" function to actually initialize it when entering the screen.
Then add whatever code you want for your NPC (most likely, add a function of type "talk button").
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-07-22 11:06:50
Update to v0.43.
That's a big update, with several new features, half of which I still don't know why I did them and who will ever really use them...

- Added a Damage Calculator: that's something I wanted for a long time. It doesn't take into account the enemy's elemental boost bug in the PSX version so it can be inaccurate for a couple of enemy attacks depending on the language you play (in PSX, enemies can benefit from elemental boosts but that depends on the language, eg. Sealion has a Water boost but only in the PSX japanese version).

- Added a Walkmesh editor, a Walkmesh OBJ exporter and a Walkmesh OBJ importer. Now walkmeshes can be (almost) fully edited. The editor of the tool is not very convenient or practical, but it allows to change path flags that cannot be passed to an OBJ model. The addition of this editor makes the script editor a bit more convenient regarding the functions "EnablePathTriangle" and "EnablePath" as you can now double-click on the 3D model of the walkmesh to select the triangle/walkpath you want to enable/disable.
Although the walkmesh editor is accessible for both the Steam and the PSX version, it is very buggy on the PSX version and sometimes place newly-added triangles at random positions in-game.

- Added "command" version of the tool. It is a fake command-line version because it still uses an interface but it allows HW to be used by external programs by providing it a sequence of commands written into a file. In the ZIP, I added a file, "CommandSample.txt", that shows how to use this feature and should run fine if you have the Steam version of the game installed.

- Added the options "Memoria -> Export as Custom Field/Battle". These take an existing field or battle and simply create Steam assets (same as "Save Steam Mod" with the option "Raw Assets") with the correct paths and filenames so they can be used by Memoria as additional fields/battles without the need to replace existing ones. I tested a adding a custom field and that worked correctly.
In addition to using that option, creating a custom field/battle requires:
-- reference them in another script, adding a "Field" or "Battle" line using that custom field/battle's script ID,
-- create a file "DictionaryPatch.txt" in your mod folder and copy/paste a line that Hades Workshop provides,
-- for fields, you need to edit the files "[ModFolder]/FF9_Data/embeddedasset/text/[LANG]/location/loc_name.mes" and adding an entry for specifying the custom field's name (these files are generated when you have modified another field name and saved Steam mod with "Raw Assets" and they can be edited with a text editor).
I guess that the convenient workflow for making a mod with custom fields/battles is to have 2 HWS files: one without the custom fields/battles but with all other modifications and the scripts referencing to custom IDs, a the other HWS with only custom fields/battles (because you can't add fields/battles in the lists in Hades Workshop, so you can't have the base field/battle and the custom field/battle simultaneously).
The assets generated this way are not removed when generating a Steam mod (except if you picked the same identifiers as existing fields/battles, which is not advised).

- Added a couple of datas that can be changed in field backgrounds: the depths and positions of tiles (individual tiles or tile sets) can now be changed. I think that most (all?) bug fixes provided by the Moguri mod concerning incorrect tile depths (as described in this topic (https://forums.qhimm.com/index.php?topic=20007.0)) could be done using that feature instead of editing the scripts (and potentially make mod compatibility more difficult).

- Fixed several bugs and added several improvements. The world map battle spots or place names should now work correctly (both when saving HWS files and generating Steam mods). "Opening-for-FMV" should not cause any problem anymore. Several script functions were given a name and description instead of the "0xXX" default names. Script batch exporting are a bit better commented because entries are correctly named in the Main_Init function (typically the "InitObject" lines). etc.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: rassellek on 2022-08-12 00:02:53
Thank you for your work. Tell me please. Is it possible to overcome the limit of hit points for the mark 65535? In the editor, this is the maximum value...  :-(
Title: Re: [PSX/PC] General editor - Hades Workshop (0.41f)
Post by: Tirlititi on 2022-08-12 08:11:04
No, it's not possible to overcome that limit with HW but you can bypass it using a trick (https://forums.qhimm.com/index.php?topic=14315.msg224426#msg224426) (basically healing the enemy to simulate a max health increase; that's what I did for my own mod for Necron).

On the Steam version of the game, using Albeoris's Memoria tool, it is possible to really overcome the max HP limit without any drawback or side effect. It is not very convenient to do it right now but it should be better relatively soon, and when that comes the information will be provided in the wiki (https://github.com/Albeoris/Memoria/wiki) (it doesn't explain how to do that yet).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-12 08:45:40
Thank you, we will be waiting! I saw your article about it. Just didn't understand you need to open a text document AbilityFeatures.txt or something else to correct the CIL code? Sorry, I'm new to this, and I'm only using Hades Workshop now. I want to learn more))).    :-P
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-13 14:59:46
"Examples of equipment passive effects
Those must be included in the >SA Global or >SA GlobalLast section in order not to be bound to any supporting ability."


(http://file:///C:/Users/79520/Desktop/1.jpg)

For examples, in my AbilityFeatures.txt it looks like:

">SA 62 Bandit (effect is coded in 0058_StealScript.cs)

>SA 63 Void

>SA
GlobalLast
Permanent
Code: (Condition) [Select]
WeaponId == 74
Code: (MaxMP) [Select]
MaxMP + MaxMP / 2 "

I don't understand how to make it works...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-08-13 23:08:30
The "code" tag is problematic with the forum's tag, so it's not obvious to read your message.
However, I think that your only problem is that ">SA" and "GlobalLast" are not on the same line. You must have:
Code: [Select]
>SA GlobalLast
Permanent
etc...
and not:
Code: [Select]
>SA
GlobalLast
Permanent
etc...
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-14 12:51:33
I wrote the code on your recommendation, I attach a screenshot.  I didn't get the expected effect. Maybe the problem is that I'm writing code in the wrong file or place? I will be grateful for the help, I did not find an example.

(https://content.foto.my.mail.ru/bk/rassellek/3/h-4.jpg)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-08-15 09:40:08
That code works perfectly fine when I try it (the weapon 74 is Vivi's Oak Staff).
How did you update Memoria?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-15 09:55:20
I used Memoria.Compiler.exe . Files have been updated ==> (D:\Final Fantasy IX\StreamingAssets\Scripts). But I haven't moved them anywhere. Copies of these files are nowhere to be found.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-17 06:56:42
I used Memoria.Compiler.exe . Files have been updated ==> (D:\Final Fantasy IX\StreamingAssets\Scripts). But I haven't moved them anywhere. Copies of these files are nowhere to be found.

#######################################################################################################

Good Morning! I have studied a lot of your articles. I tried to write some interesting scripts to change the number of attacks, the amount of critical damage, and they work.

But attempts to add effects to weapons using ">SA GlobalLast" did not lead to anything. I studied Git and tried to update the Memoria with a patch, but that didn't help either. I don't understand where and how to move it Memoria.script.dll to make it work. I don't know what I can do about it anymore...

It would be really cool if you made a mini guide as a screen recording :-[

Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-08-17 11:13:13
Good day to you!
It would be awesome to have more visual guides but I have such a long todo-list right now about this game that I don't feel like doing it myself at the moment.

Updating the "Memoria.script.dll" will not help toward "AbilityFeatures.txt". I can tell you however that "Memoria.script.dll" goes to "StreamingAssets/Scripts/Memoria.script.dll" by default and it can also be present in mod folders to take over that default one (for example, I have one for my own mod and thus it has the path "AlternateFantasy/StreamingAssets/Scripts/Memoria.script.dll").

Running Memoria.Patcher.exe should the be correct way to update Memoria.
There are surely problems because you have the game installed in the D: drive though, and not the C: drive. If you didn't install the game using Steam, then I don't know what happens. The normal installation path is "C:\Program Files (x86)\Steam\steamapps\common\FINAL FANTASY IX".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-18 17:24:22
Good day to you!
It would be awesome to have more visual guides but I have such a long todo-list right now about this game that I don't feel like doing it myself at the moment.

Updating the "Memoria.script.dll" will not help toward "AbilityFeatures.txt". I can tell you however that "Memoria.script.dll" goes to "StreamingAssets/Scripts/Memoria.script.dll" by default and it can also be present in mod folders to take over that default one (for example, I have one for my own mod and thus it has the path "AlternateFantasy/StreamingAssets/Scripts/Memoria.script.dll").

Running Memoria.Patcher.exe should the be correct way to update Memoria.
There are surely problems because you have the game installed in the D: drive though, and not the C: drive. If you didn't install the game using Steam, then I don't know what happens. The normal installation path is "C:\Program Files (x86)\Steam\steamapps\common\FINAL FANTASY IX".

Hello again, @Tirlititi! =)

I've done a lot of work on my knowledge, learned what a repository is and how to work with it

With the help of Visual Studio, I downloaded the repository "https://github.com/Albeoris/Memoria.git " and according to his instructions, "I put together a solution."

Updated the game with a patch along the path that you suggested (C:\Program Files (x86)\Steam\steamapps\common\Final Fantasy IX).

After all the manipulations, the game started.

The new launcher has the opportunity to download your Alternative Fantasy mod.

But I found that even in your patch, even after everything I did according to the instructions, "SA GLOBAL" refuses to work =D

I think that Assembly-CSharp.dll  is broken how to download a new one and where I never understood.


Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-26 15:26:02
Hello! ;)

I have a little problem. With maxMP/HP active abilities, the current MP/HP values are constantly reset to base values when changing equipment and activating other SA abilities.

example
## Permanent (code=MaxHP) MaxHP + MaxHP / 2 (/code) ##

the patch from April 29 is installed.


<iframe src='https://my.mail.ru/video/embed/3747690893717536769' width='626' height='367' frameborder='0' scrolling='no' webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-08-26 16:40:18
I'll check what it is but I don't remember having that issue. Maybe that's because you use GlobalLast instead of Global? Although I don't see why it would matter... I'm pretty sure that my implementation of MP+20% on Magus Hat doesn't have that problem.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-26 16:57:24
I'll check what it is but I don't remember having that issue. Maybe that's because you use GlobalLast instead of Global? Although I don't see why it would matter... I'm pretty sure that my implementation of MP+20% on Magus Hat doesn't have that problem.

This happens in >SA 5,6,7,8. The same error occurs in Global and GloBallast. I need to restore HP and MP when I change weapons, equipments or abilities.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-08-28 00:46:16
I must have badly tested it because that was indeed a bug common to all of the HP+X% or MP+X% features.
Thanks for pointing that bug; I've fixed it for the next Memoria release.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-08-28 13:25:57
I must have badly tested it because that was indeed a bug common to all of the HP+X% or MP+X% features.
Thanks for pointing that bug; I've fixed it for the next Memoria release.

@Tirlititi !!!  :-* Thank you for the answer! Thanks to you, I was able to solve this problem. Everything works fine. I'm looking forward to the new patch. I can't build it myself in Visual Studio according to the instructions, there are a lot of errors, apparently I don't have enough experience in this... But I will try to become like you!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Maverick Blue Warrior on 2022-09-06 20:11:34
Tirlititi, I'm using your tool to translate FF IX to Portuguese.
Could you add the functionality of being able to change the original offset of texts to other offsets?
I'm using the American version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-09-07 11:59:42
I don't understand what you mean by "offset of texts". Also, your request surely depends a lot on whether you do a translation for the PSX version or the PC version.
For the PSX version, you can edit the "charmap" (character map) to add or modify letters/glyphs. On the charmap windows, you can also set the width of each character.

Make sure to search for previous translation work before you as well. I know that the PC version already has a (brazilian) portuguese translation (https://steamcommunity.com/sharedfiles/filedetails/?id=813183187).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Maverick Blue Warrior on 2022-09-07 21:16:40
I want to do my own translation for PSX version. There is no complete translation for PSX.
I'm trying to increase the amount of characters per session when I need to. When you pass the number of characters the tool displays the following: "The text size has reached its limit." And I imagine moving to another offset with more space for text could solve the problem. Adding this function in the tool could solve it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-09-08 10:47:04
It's not possible to trade space from one text block (eg. "Black Mage Village (2)") to another. The game can only use the texts of a single text block at a time, it never uses two of them simultaneously.
The only thing you can do is to delete unused lines in order to gain size within a text block. It cannot be automatised because the tool doesn't know which line can be deleted safely.

Usually, the following lines are unused and you can delete them to gain space:

[When there is a moogle in the area covered by the text block]
"table10..." and "table20..."
"Error:Mog command"
"Old letter data. Erasing..."
You could also consider shortening/deleting the lines "Mognet is a mail delivery system..." and the following, because they trigger only if the player never went to the Mognet menu before (usually, those lines are only actually used in the Alexandria (1) text block).

[In all the text blocks]
"Test", "Null"
"Error Set Scenario Counter()..." and the following are debugging messages; they are never displayed except if the player uses an action replay cheat to go back in a closed place.
"Nothing more inside.", "Nothing more to find."
"Skip FMV"
"Party Del Error"
The names of the party members are used in several areas but not in all of them. Zidane's name, for example, is used in the "Prima Vista" text block but is unused in all the others, so you can mostly delete it. For Cinna, Marcus, Blank and Beatrix, you should assume that the name is used everytime they enter temporarily the party (so Beatrix's name is used both in Alexandria Castle (2) and in Alexandria (Night) for example).

The size limit is a big trouble when modding the PSX version and I'm afraid that it will never be possible to remove that limit when modding the PSX version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-09-11 16:09:17
Hello, @ Tirlititi!

The new patch is working with a bang, thank you very much.

I have a new question.
I tried to write code that allows you to attack twice.

Example:
(https://content.foto.my.mail.ru/bk/rassellek/3/h-5.jpg)

How to improve this code so that the character attacks more than twice. For example 3 and more?

Because in my opinion, the counterattack doesn't work more than once.  :(
 



Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-09-11 17:20:12
I don't think that's possible using the supporting ability features. However, you can try doing something like that as a custom SFX sequence.

In "Data\SpecialEffects\ef104\PlayerSequence.seq" (and similarly in ef106 and in ef111):
Code: [Select]
// Player sequence of SFX Player_Attack_Garnet_LH_Racket

WaitAnimation: Char=Caster
PlayAnimation: Char=Caster ; Anim=MP_SET
StartThread: Condition=AreCasterAndTargetsEnemies ; Sync=True
Turn: Char=Caster ; BaseAngle=AllTargets ; Time=10
EndThread
StartThread: Condition=!AreCasterAndTargetsEnemies ; Sync=True
MoveToTarget: Char=Caster ; Target=AllTargets ; Offset=(0.0, 0.0, 1600) ; Time=0
Turn: Char=Caster ; BaseAngle=AllTargets ; Time=0
EndThread
StartThread: Condition=CasterWeaponId == 52 ; LoopCount=3 ; Chain ; Sync
LoadSFX: SFX=Player_Attack_Garnet_LH_Racket
Wait: Time=25
PlaySound: Sound=WeaponAttack
WaitSFXLoaded: SFX=Player_Attack_Garnet_LH_Racket
PlaySFX: SFX=Player_Attack_Garnet_LH_Racket
Wait: Time=7
EffectPoint: Char=AllTargets ; Type=Effect
StartThread: Condition=!IsAttackMiss
PlaySound: Sound=WeaponHit
EndThread
StartThread
Wait: Time=10
EffectPoint: Char=Everyone ; Type=Figure
EndThread
WaitAnimation: Char=Caster
PlayAnimation: Char=Caster ; Anim=MP_SET
EndThread
LoadSFX: SFX=Player_Attack_Garnet_LH_Racket
Wait: Time=25
PlaySound: Sound=WeaponAttack
WaitSFXLoaded: SFX=Player_Attack_Garnet_LH_Racket
PlaySFX: SFX=Player_Attack_Garnet_LH_Racket
Wait: Time=7
EffectPoint: Char=AllTargets ; Type=Effect
StartThread: Condition=!IsAttackMiss
PlaySound: Sound=WeaponHit
EndThread
Wait: Time=10
EffectPoint: Char=Everyone ; Type=Figure
StartThread: Condition=AreCasterAndTargetsEnemies ; Sync=True
Turn: Char=Caster ; BaseAngle=Default ; Time=4
EndThread
StartThread: Condition=!AreCasterAndTargetsEnemies ; Sync=True
MoveToPosition: Char=Caster ; AbsolutePosition=Default ; Time=0
Turn: Char=Caster ; BaseAngle=Default ; Time=0
EndThread
WaitTurn: Char=Caster
WaitSFXDone: SFX=Player_Attack_Garnet_LH_Racket
After a test, that seems to work fine. Maybe I'll do something similar for my own mod ^^
It requires the "SFXRework" system to be activated, which should be the case by default.

However, there is no option "swap to a random target" for now, so she will attack the same target 4 times (that would have also been the case with a SA feature).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-09-11 19:43:21
I tried to copy this part of the code. Works.  :)
How do I determine which "ef#" to use if I want to apply it to other characters or other weapons? Is there a description somewhere?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-09-11 21:47:27
The first line of each file is the description ^^'
The player attack sequences are special cases that all can be found in the range "ef100-ef118".

However, you can see the enum list in Memoria's code here (https://github.com/Albeoris/Memoria/blob/main/Assembly-CSharp/Memoria/Data/Battle/SpecialEffect.cs) as well.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-09-12 14:40:34
I'm trying to figure out how to work with it correctly. I tried it on a Zidan, the result looks terrible...

StartThread: Condition=CasterWeaponId == 8 ; LoopCount=1 ; Chain ; Sync
   LoadSFX: SFX=Player_Attack_Zidane_Sword
   PlaySound: Sound=WeaponAttack
   Wait: Time=2
   WaitSFXLoaded: SFX=Player_Attack_Zidane_Sword
   PlaySFX: SFX=Player_Attack_Zidane_Sword
   PlaySound: Sound=WeaponAttack
   EffectPoint: Char=AllTargets ; Type=Effect
   StartThread: Condition=!IsAttackMiss
      PlaySound: Sound=WeaponHit
   EndThread
   StartThread
      Wait: Time=8
      EffectPoint: Char=Everyone ; Type=Figure
   EndThread
   WaitAnimation: Char=Caster
   PlayAnimation: Char=Caster ; Anim=MP_SET
EndThread
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-09-12 15:59:28
The documentation for SFX sequences can be found there (https://github.com/Albeoris/Memoria/wiki/Battle-SFX-Sequence). It's not easy to master it.

For Zidane's attack, you would want to use "MP_ATTACK" (and/or "MP_RUN_TO_ATTACK") as the main animations that loops, not "MP_SET". For almost all characters (and enemies), the attack animation is splitted into several pieces:
Code: [Select]
MP_SET
then MP_RUN
then MP_RUN_TO_ATTACK
then MP_ATTACK
then MP_BACK
then MP_ATK_TO_NORMAL
It's only the ranged weapons that use only "MP_SET" as a complete attack animation loop.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2022-09-12 18:42:21
Thank you again! I thought about it, tried it, and everything worked.

My code:
StartThread: Condition=CasterWeaponId == 8 ; LoopCount=1 ; Chain ; Sync
   Wait: Time=1
   WaitSFXLoaded: SFX=Player_Attack_Zidane_Sword
   PlaySFX: SFX=Player_Attack_Zidane_Sword
   EffectPoint: Char=AllTargets ; Type=Effect
   PlaySound: Sound=WeaponAttack
   StartThread: Condition=!IsAttackMiss
      PlaySound: Sound=WeaponHit
   EndThread
   StartThread
      Wait: Time=4
      EffectPoint: Char=Everyone ; Type=Figure
      WaitSFXDone: SFX=Player_Attack_Zidane_Sword
   EndThread
   PlayAnimation: Char=Caster ; Anim=MP_ATTACK
    WaitAnimation: Char=Caster
EndThread
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: ChikoLad on 2022-11-21 01:17:33
Hey, I've been doing a little messing around with the Playable Character Pack (Fratley, Lani, and Kuja) and wanted to do a playthrough with it. However I also want Freya in my party at all times as well.

A while ago, I did actually make a mod that forced a solo Freya into every party call and also into every battle as a fail safe. I used this to do a true solo run with Freya before. The way it worked was essentially just using an AddParty call for Freya and RemoveParty for every other character from the vanilla game (including the guest characters), and this would run whenever there was a party call in a Field Script, as well as at the beginning of every enemy script.

I assumed using this mod in combination with Playable Character Pack would allow me to essentially force Freya into the party at all times, but then the Playable Character Pack party members wouldn't be removed since they would have to have unique character IDs that weren't accounted for when I made the Freya solo mod, so they should be there with her and wouldn't be removed.

Problem is if I use Alt + F2 to bring up the party menu and put the Playable Character Pack party members into the party, they will appear in battle, but instead, Freya gets removed from the party for some reason. My Freya solo mod still works as intended if I don't put any of the Playable Character Pack party members into the party, or if I put only one of the Playable Character Pack party members in (Freya will be inserted into the party at the start of the battle as intended, but the other character will be there with her, which is what I would expect to happen). It's only if all three of the custom characters are there, then Freya gets removed. The mod priority order didn't seem to matter either.

Just curious as to why that would be? Moreover, is there a Discord or something where there is more FFIX modding discussion? I feel like there have been a lot of awesome advances in FFIX modding lately but I don't know where I can discuss it, I'd love to get a better understanding on how these recent mods are being achieved so I can make my own mods that work well in tandem with them.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-11-21 12:41:30
There has been several reports yesterday of weird things like that happening. That is very strange.
Normally, the Character Pack shouldn't mess at all with the way you did your Freya Solo mod: there is no "AddParty" or "RemoveParty" in any script that points to the added characters.

The problem is, I fail to reproduce any of these weird bugs and thus I struggle to find out what could be the cause.

Someone said that the bug triggered only if the "[Import]" section of the Memoria.ini is enabled. Indeed, that feature preceeds mod folders, it uses different formats for many files, it messes a lot with other things and I never really cared maintaining it or looking at how it worked. However, even enabling it, I fail to reproduce your bug (Freya is in the party if I use her + the 3 new characters, and I don't see why your mod would make any difference regarding that).

I don't understand though "[It worked by running a script] at the beginning of every enemy script". Do you use "AddParty" in enemy scripts? Maybe that's not the cause of the problem (or maybe it is), but it would be an incorrect behaviour. I don't advise messing with the party members in-battle. Besides, if you've spotted all the places where the party members are changed (including before scripted fights) and added your "AddParty(4)" script there, you shouldn't need to add anything in battles.

You can reach me on Qhimm's discord.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Seramera on 2022-12-06 13:41:06
Hello Tirlititi,
i am now working on generalising the fieldscripts to have a raw engine to work with. (delete the story)
therefore extract vars like camerabounds, regiondata, fieldexits, tileanimations, soundcodes, treasures etc and parse them generalised. 

1. priority goal is to implement a new roguelike gamemode.
2. more far away goal is to get an editor going, with which you can insert objects and behaviour into fieldscripts handily.

i target steam only.

now the extraction and editing is going forward (im using python), and i will use commandshell to import the fieldscripts all at once.
the problem is, that the import function from HadesWorkShop doesnt implement deleting and creating entries and functions. I looked into HWS SourceCode
and i'm a bit blown away by all the c++-libraries i dont know. I wanted to write an import function that adjusts the entries and functions of the field to the fieldscript read.

I will have to look into your tools source code later a lot more, but i thought i might as well ask you now for help.

Thank you
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2022-12-16 23:18:01
Hello,
Good luck, that's an exciting project :D

I thought that you could add/remove entries and functions with the "Batch -> Import" (or "import script" in the commandshell version). Maybe I misremember and I didn't make it possible, but it shouldn't be too hard to add it then if you edit HW's source code or use it for your own project.
What is the error that you get if you try to add eg. a function that doesn't exist yet?

I'm glad that the commandshell is useful to someone ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-01-31 00:11:12
Hello @tirlititi! i have a problem, in the fights in terra with Garland, Kuja and Silver dragon, y try duplicate the enemy but only in this combat (and in a little more fight) the game only show me a black screen. you know how i can repair this problem? ty!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-01-31 17:31:56
Do you use the Steam version or the PSX version?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-06 13:29:28
i use steam version
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-02-12 21:34:27
Have you checked this post (https://forums.qhimm.com/index.php?topic=14315.msg245485#msg245485)? You need to do several things in order to add a new enemy in a fight, especially if you copy/paste it from another battle. Mainly, you need to (1) add it in a group, (2) add a line "InitObject" for it in the script's main function and possibly (3) add an entry and functions for it if you use an enemy from another battle.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-19 13:28:57
Hello!Yes, I followed the instructions in your post but the problem kept happening but finally i fixed. this is the problem for the black screen. when i enter in group some enemies have the option "Link" selected. if i remove the option "link" the black screen is fixed :D
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-20 19:16:59
Now i have another problem with the attacks of enemy, for example i try the attack of kuja flare attack on the whole team and not just one, I tried to change it in the editor but it doesn't work, it keeps hitting only one enemy
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-02-21 01:40:58
The target selection is done in their AI script for enemies. Most likely in the "ATB" function.
A line like this is single-target:
Code: [Select]
set SV_Target = RandomInTeam(SV_PlayerTeam)A line like that is party-wide:
Code: [Select]
set SV_Target = SV_PlayerTeam
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-24 23:49:55
thanks so much! now i have my first difficult mod at 90% ^^
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-02-25 12:46:12
Well done finding out how to do what you wanted to do.
Good luck for the rest 👍
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-27 17:12:32
Hello tirlititi, i have another question, It is possible to add equipment somehow, I am looking to add new armor and weapons to the characters (only names and stats, not new images)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-02-27 17:58:25
That will be possible in the next Memoria release.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-27 18:03:29
excellent news!^^ meanwhile i edit consumable items and some accessories like garnet etc to be equipment
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-27 23:32:54
After trying to edit I found two problems, the first is that if I try to edit the rings that Amarant throws to turn it into a usable weapon I cannot change the "Model id" and therefore when entering combat it crashes, I don't know if there is any way to unlock the "Model id" tab to put the model of another weapon.
The second problem is that the items that can be used as antidote etc. don't have armor values ​​and I can't put defensive stats on them. I understand that this last thing cannot be solved, but I think that the Enabling Model ID thing would allow the change of weapons.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-02-28 00:56:19
In order to have a weapon model for the throwing disc, you need to first generate your mod with Hades Workshop and then manually open the file "{YourModFolder}/StreamingAssets/Data/Items/Weapons.csv" using the Notepad text editor: at the bottom of the file, you'll see that the disc models are "<null>" and that you can copy/paste another weapon's model ID to replace it (eg. replacing the "<null>" by "GEO_WEP_B1_011" will make it look like Cinna's hammer).

Adding defensives stats to any item is also something that the next Memoria release will allow.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-28 02:42:47
I made the changes in the file and the changes were not made in the game, I tried to change many different weapon models, not only the ones with the rings and none of them took effect, I don't know the reason. Do I need to have memory engine installed for those changes?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-02-28 11:48:23
Yes, Memoria Engine (https://github.com/Albeoris/Memoria/releases).
When you use Hades Workshop with a game modded by Memoria, you should generate your mod in the form of "Raw Assets + Spreadsheet (Memoria)". If you didn't use it until now, I suppose you used to generate "Unity Archives + Compiled DLL" and replace the base game's files with them. When you use Memoria, you don't replace any existing file with your mod(s): you use mod folders (https://github.com/Albeoris/Memoria/wiki/Mod-folders) and activate those in the mod manager (https://github.com/Albeoris/Memoria/wiki/Mod-Manager).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-28 14:33:31
Until now I did not use memory, these days I will try to install it and see what can be done with memory, to install it I only have to use the files from the post that you sent me?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-02-28 15:50:11
Yes, running Memoria.Patcher.exe installs it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-02-28 18:12:28
I already installed the memory, it was easy to install, I really appreciate the simplicity ^^ Fixed the problem with the weapon models, thank you very much! I have two questions now, one is about how to change the maximum speed, strength, magic and spirit. I know you have a section in the forum, but I wonder if it can be done with memory too. And I would like to break the limit of support skills that characters can learn.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-03-06 16:54:40
I  try do the change with memoria engine the max stats of dex, strengs, magic and spirit but i not found the form. And i try do your post about how do this changes but when i do and save change with hades, the games always freeze in the first screen. I tried many things but none worked for me
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-14 20:11:50
Hello Tirlititi,

I was hoping you could help me with something. I've edited the rewards Mene exchanges for H&C points. I've changed Protect Ring to Rebirth Ring and Wing Edge to Elixer, however, I can't seem to figure out how to change the text in the menu. It still says Protect Ring, even though I receive a Rebirth Ring. Any help would be appreciated.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-03-14 21:26:11
That's one of the dialogs in the "Chocobo Places". Search for Mene's lines "Mene “What do you want, kupo?”..." in the "Environment -> Texts" panel.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-14 22:06:22
I found this in "Chocobo's Forest"

Function Moogle_Male_64
    switch 3 ( Chocobo_CurrentField ) from 1 {
    case +0:
        SetTextVariable( 2, Chocobo_ForestHighScore )
        SetTextVariable( 3, Chocobo_ForestGamePlayed )
        break
    case +1:
        SetTextVariable( 2, Chocobo_LagoonHighScore )
        SetTextVariable( 3, Chocobo_LagoonGamePlayed )
        break
    case +2:
        SetTextVariable( 2, Chocobo_GardenHighScore )
        SetTextVariable( 3, Chocobo_GardenGamePlayed )
    }
    SetTextVariable( 5, ( Chocobo_ForestGamePlayed + Chocobo_LagoonGamePlayed ) + Chocobo_GardenGamePlayed )
    SetTextVariable( 4, Chocobo_HotColdPoints )
    if ( Chocobo_Lv99 == 0 ) {
        WindowSync( 7, 128, 240 )
    } else {
        WindowSync( 7, 128, 243 )
    }
    if ( GetDialogChoice == 0 ) {
        set VAR_LocUInt16_9 = 0
        set VAR_LocUInt8_2 = 8
        EnableDialogChoices( 511, VAR_LocUInt8_2 )
        WindowAsync( 6, 4, 246 )
        while ( VAR_LocUInt16_9 < 1 ) {
            set VAR_LocInt8_29 = 1
            EnableDialogChoices( 511, VAR_LocUInt8_2 )
            SetTextVariable( 4, Chocobo_HotColdPoints )
            set VAR_LocInt8_30 = 0
            while ( VAR_LocInt8_30 < 1 ) {
                if ( IsButton(655360L) ) {
                    set VAR_LocInt8_30 = 1
                }
                Wait( 1 )
            }
            switch 9 ( GetDialogChoice ) from 0 {
            case +0:
                if ( ( Chocobo_HotColdPoints >= 10000 ) && ( GetItemCount(175) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 10000
                    AddItem( 175, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 0
                break
            case +1:
                if ( ( Chocobo_HotColdPoints >= 8500 ) && ( GetItemCount(208) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 8500
                    AddItem( 208, 1 )
                    set VAR_LocInt8_29 = 0
                }

The 208 at the bottom there is the Rebirth ring. The WindowAsync near the top: "WindowAsync( 6, 4, 246 )", is where he says "What do you want, kupo?" I just can't seem to figure out how to alter the menu text.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-14 22:27:36
The first string was under "Function Moogle_Male_59" I also found this under "Function Moogle_Male_64"

    } else {
        if ( VARL_GenBool_809 == 0 ) {
            WindowSync( 6, 128, 221 )
        } else {
            RunScriptAsync( 6, 25, 30 )
            set VAR_LocUInt8_1 = 0
            while ( VAR_LocUInt8_1 != 99 ) {
                SetTextVariable( 0, 251 )
                EnableDialogChoices( 255, VAR_LocUInt8_1 )
                if ( Chocobo_ForestHighScore > 0 ) {
                    SetTextVariable( 2, Chocobo_HotColdPoints )
                    WindowSync( 6, 128, 226 )
                } else {
                    if ( VARL_GenBool_1087 == 1 ) {
                        WindowSync( 6, 128, 225 )
                    } else {
                        WindowSync( 6, 128, 224 )

Both contain the line you quoted, but I'm still very lost.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-03-14 23:38:42
You found the complicated thing in the complicate panel "Environment -> Fields", congrats 👍
Now you just need to find the easy thing in the easy panel: "Environment -> Texts -> Chocobo Places". It contains all the texts and dialogs used in chocobo places (forest, lagoon, garden, paradise and dream). Around the middle of the list, there's the line you are looking for. Double-click on it and you'll be able to edit that line.

(https://i.imgur.com/obbh8Qe.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-15 00:03:48
Wow I'm dumb. Sorry, I didn't even look at that tab. All these years later and your still out here answering questions. Thank you, really.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: akirat9 on 2023-03-15 19:24:58
hey tiriltiti,
i'm trying to edit enemies panel on FF9 PSX (1.0 version) (pure vanilla/untouched) but when I try to rename an enemy, Hades Workshop crash instantly, even try to backspace one letter it instant crash.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-20 04:47:37
Hey akirat9, I had this same problem. When you try to rename an enemy, you can't just type it in the bar. You have to click the ... button next to the enemy name and then edit and apply.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-20 04:53:56
Hey Tirlititi,

I'm having some difficulty editing the treasures for the chocobo dive spots. I've located the treasure values in "Function World_Chocobo_17" and I've changed the value of what used to be a "Black Robe" but when I save the changes, create a PPF, and patch my game, I still get a "Black Robe." I'm loading a proper save file evey time, not a save state. Am I missing something?

Function World_Chocobo_17
    RunAnimation( 8139 )
    WaitAnimation(  )
    RunAnimation( 8141 )
    WaitAnimation(  )
    SetObjectFlags( 14 )
    Wait( 60 )
    SetObjectFlags( 5 )
    RunAnimation( 8138 )
    WaitAnimation(  )
    switch 1 ( VAR_GlobUInt8_34 ) from 2 {
    case +0:
        switch 5 ( VAR_GlobUInt8_36 ) from 7 {
        case +0:
            set VARL_GenBool_1465 = 1
            set VAR_LocUInt8_37 = 226
            set VAR_LocUInt8_42 = 10
            set VAR_LocUInt8_38 = 15
            set VAR_LocUInt8_43 = 1
            set VAR_LocUInt8_39 = 190
            set VAR_LocUInt8_44 = 1
            set VAR_LocInt16_40 = 594
            set VAR_LocUInt8_45 = 1
            break
        case +1:
            set VARL_GenBool_1464 = 1
            set VAR_LocUInt8_37 = 247
            set VAR_LocUInt8_42 = 10
            set VAR_LocUInt8_38 = 100
            set VAR_LocUInt8_43 = 1
            set VAR_LocUInt8_39 = 109
            set VAR_LocUInt8_44 = 1
            set VAR_LocInt16_40 = 592
            set VAR_LocUInt8_45 = 1
            break
        case +3:

The bottom list of items is what was changed. The "100" is an armlet, it's what used to be a "Black Robe"
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-20 05:37:37
I don't know what's wrong. I can change the world map treasures. Dive spots and Chocographs, but it won't path them to the ISO anymore. I changed some in the a few months ago, and they are still working, but is won't patch anything I change now. It'll patch spell name changes.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-03-20 07:02:36
Ignore me. I figured it out. I completely forgot that you have to edit the world map depending on where you are in the game. Blue Narciss or Invincible.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: gledson999 on 2023-03-25 14:01:51
Is there any version of Hades Workshop that the Background editor works on the psx version of the game?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-03-25 17:51:45
No, Gledson999. Hades Workshop cannot increase the file size of the PSX version, so using custom backgrounds can't be done and will most likely never be possible for the PSX version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: gledson999 on 2023-03-25 20:45:58
No, Gledson999. Hades Workshop cannot increase the file size of the PSX version, so using custom backgrounds can't be done and will most likely never be possible for the PSX version.
I understood, I wanted to translate some city names in my translation, which are those names when we enter somewhere for the first time in some city/location, like Chocobo's Forest, Gizamaluke Grottos... and insert back using the same palette and the same size.

(https://i.imgur.com/cbIqNEM.png)

(https://i.imgur.com/ukJv34k.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: gledson999 on 2023-03-26 14:57:32
@Tirlititi I'm wanting to add one more item to the moogle exchange point menu in the Chocobo Forest, I did the following by adding one more line to "Function Moogle_Male_64"

Code: [Select]
Function Moogle_Male_64
    switch 3 ( Chocobo_CurrentField ) from 1 {
    case +0:
        SetTextVariable( 2, Chocobo_ForestHighScore )
        SetTextVariable( 3, Chocobo_ForestGamePlayed )
        break
    case +1:
        SetTextVariable( 2, Chocobo_LagoonHighScore )
        SetTextVariable( 3, Chocobo_LagoonGamePlayed )
        break
    case +2:
        SetTextVariable( 2, Chocobo_GardenHighScore )
        SetTextVariable( 3, Chocobo_GardenGamePlayed )
    }
    SetTextVariable( 5, ( Chocobo_ForestGamePlayed + Chocobo_LagoonGamePlayed ) + Chocobo_GardenGamePlayed )
    SetTextVariable( 4, Chocobo_HotColdPoints )
    if ( Chocobo_Lv99 == 0 ) {
        WindowSync( 7, 128, 240 )
    } else {
        WindowSync( 7, 128, 243 )
    }
    if ( GetDialogChoice == 0 ) {
        set VAR_LocUInt16_9 = 0
        set VAR_LocUInt8_2 = 8
        EnableDialogChoices( 511, VAR_LocUInt8_2 )
        WindowAsync( 6, 4, 246 )
        while ( VAR_LocUInt16_9 < 1 ) {
            set VAR_LocInt8_29 = 1
            EnableDialogChoices( 511, VAR_LocUInt8_2 )
            SetTextVariable( 4, Chocobo_HotColdPoints )
            set VAR_LocInt8_30 = 0
            while ( VAR_LocInt8_30 < 1 ) {
                if ( IsButton(655360L) ) {
                    set VAR_LocInt8_30 = 1
                }
                Wait( 1 )
            }
            switch 9 ( GetDialogChoice ) from 0 {
            case +0:
                if ( ( Chocobo_HotColdPoints >= 10000 ) && ( GetItemCount(175) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 10000
                    AddItem( 175, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 0
                break
            case +1:
                if ( ( Chocobo_HotColdPoints >= 8500 ) && ( GetItemCount(209) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 8500
                    AddItem( 209, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 1
                break
            case +2:
                if ( ( Chocobo_HotColdPoints >= 3500 ) && ( GetItemCount(87) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 3500
                    AddItem( 87, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 2
                break
            case +3:
                if ( ( Chocobo_HotColdPoints >= 1800 ) && ( GetCardAmount < 100 ) ) {
                    set Chocobo_HotColdPoints -= 1800
                    AddItem( 599, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 3
                break
            case +4:
                if ( ( Chocobo_HotColdPoints >= 450 ) && ( GetItemCount(238) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 450
                    AddItem( 238, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 4
                break
            case +5:
                if ( ( Chocobo_HotColdPoints >= 250 ) && ( GetItemCount(254) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 250
                    AddItem( 254, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 5
                break
            case +6:
                if ( ( Chocobo_HotColdPoints >= 150 ) && ( GetItemCount(249) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 150
                    AddItem( 249, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 6
                break
            case +7:
                if ( ( Chocobo_HotColdPoints >= 10 ) && ( GetItemCount(251) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 10
                    AddItem( 251, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 7
                break
            default:
                set VAR_LocUInt16_9 = 99
                set VAR_LocInt8_29 = 99
                CloseWindow( 7 )
                break
            }
            switch 2 ( VAR_LocInt8_29 ) from 0 {
            case +0:
                Wait( 4 )
                RunSoundCode3( 53248, 108, 0, -128, 125 )
                Wait( 4 )
                break
            case +1:
                Wait( 4 )
                RunSoundCode3( 53248, 102, 0, -128, 125 )
                Wait( 4 )
                break
            }
        }
        RunSoundCode3( 53248, 103, 0, -128, 125 )
    }
    return

To:
Code: [Select]
Function Moogle_Male_64
    switch 3 ( Chocobo_CurrentField ) from 1 {
    case +0:
        SetTextVariable( 2, Chocobo_ForestHighScore )
        SetTextVariable( 3, Chocobo_ForestGamePlayed )
        break
    case +1:
        SetTextVariable( 2, Chocobo_LagoonHighScore )
        SetTextVariable( 3, Chocobo_LagoonGamePlayed )
        break
    case +2:
        SetTextVariable( 2, Chocobo_GardenHighScore )
        SetTextVariable( 3, Chocobo_GardenGamePlayed )
    }
    SetTextVariable( 5, ( Chocobo_ForestGamePlayed + Chocobo_LagoonGamePlayed ) + Chocobo_GardenGamePlayed )
    SetTextVariable( 4, Chocobo_HotColdPoints )
    if ( Chocobo_Lv99 == 0 ) {
        WindowSync( 7, 128, 240 )
    } else {
        WindowSync( 7, 128, 243 )
    }
    if ( GetDialogChoice == 0 ) {
        set VAR_LocUInt16_9 = 0
        set VAR_LocUInt8_2 = 8
        EnableDialogChoices( 511, VAR_LocUInt8_2 )
        WindowAsync( 6, 4, 246 )
        while ( VAR_LocUInt16_9 < 1 ) {
            set VAR_LocInt8_29 = 1
            EnableDialogChoices( 511, VAR_LocUInt8_2 )
            SetTextVariable( 4, Chocobo_HotColdPoints )
            set VAR_LocInt8_30 = 0
            while ( VAR_LocInt8_30 < 1 ) {
                if ( IsButton(655360L) ) {
                    set VAR_LocInt8_30 = 1
                }
                Wait( 1 )
            }
            switch 9 ( GetDialogChoice ) from 0 {
            case +0:
                if ( ( Chocobo_HotColdPoints >= 60000 ) && ( GetItemCount(0) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 60000
                    AddItem( 0, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 0
                break
            case +1:
                if ( ( Chocobo_HotColdPoints >= 10000 ) && ( GetItemCount(175) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 10000
                    AddItem( 175, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 1
                break
            case +2:
                if ( ( Chocobo_HotColdPoints >= 8500 ) && ( GetItemCount(209) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 8500
                    AddItem( 209, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 2
                break
            case +3:
                if ( ( Chocobo_HotColdPoints >= 3500 ) && ( GetItemCount(87) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 3500
                    AddItem( 87, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 3
                break
            case +4:
                if ( ( Chocobo_HotColdPoints >= 1800 ) && ( GetCardAmount < 100 ) ) {
                    set Chocobo_HotColdPoints -= 1800
                    AddItem( 599, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 4
                break
            case +5:
                if ( ( Chocobo_HotColdPoints >= 450 ) && ( GetItemCount(238) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 450
                    AddItem( 238, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 5
                break
            case +6:
                if ( ( Chocobo_HotColdPoints >= 250 ) && ( GetItemCount(254) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 250
                    AddItem( 254, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 6
                break
            case +7:
                if ( ( Chocobo_HotColdPoints >= 150 ) && ( GetItemCount(249) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 150
                    AddItem( 249, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 7
                break
            case +8:
                if ( ( Chocobo_HotColdPoints >= 10 ) && ( GetItemCount(251) < 99 ) ) {
                    set Chocobo_HotColdPoints -= 10
                    AddItem( 251, 1 )
                    set VAR_LocInt8_29 = 0
                }
                set VAR_LocUInt8_2 = 8
                break
            default:
                set VAR_LocUInt16_9 = 99
                set VAR_LocInt8_29 = 99
                CloseWindow( 8 )
                break
            }
            switch 2 ( VAR_LocInt8_29 ) from 0 {
            case +0:
                Wait( 4 )
                RunSoundCode3( 53248, 108, 0, -128, 125 )
                Wait( 4 )
                break
            case +1:
                Wait( 4 )
                RunSoundCode3( 53248, 102, 0, -128, 125 )
                Wait( 4 )
                break
            }
        }
        RunSoundCode3( 53248, 103, 0, -128, 125 )
    }
    return

I also edited the texts in Environment >> Texts to add the extra option text, but when I went to test it in the game, I couldn't make the menu select the extra option, and the "cancel" option is unselectable, could you help me?

Example:

In the original version, when the menu is open, It's begin in "Cancel" text
(https://i.imgur.com/QezXcmx.png)

In the Modded, It's begin in "Gysahl Green" text and the "Cancel" option is unavailable to chose
(https://i.imgur.com/TSQzhFf.png)

EDIT: The funny thing about this is that in addition to the problem that I am not able to make the "Cancel" option selectable, the other problem is that when I choose to buy the Hammer, instead of decreasing -60000 Gil, it simply increases +5536 Gil
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-03-26 15:21:53
Replace "60000" by "60000L" in the code:
Code: [Select]
set Chocobo_HotColdPoints -= 60000LThat is because numbers higher than 32636 should be flagged as "long" numbers, otherwise they are stored as a 2-byte signed integer type.

Also, for the selectability problem, update the lines "EnableDialogChoices". You must both include the added choice to the available choice list (change "511" into "1023", or tick the next box in the script editor), and tell the game that the "default" choice has index 9 instead of 8 (change "set VAR_LocUInt8_2 = 8" into "set VAR_LocUInt8_2 = 9").

Also, when editing the text, there's an opcode that setups the choices ("FORMAT:Multichoice" in the PSX version): double-click to edit its parameter and do the same kind of changes there (number of choices => 10, "Cancel" choice => 9).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: gledson999 on 2023-03-26 17:10:52
Replace "60000" by "60000L" in the code:
Code: [Select]
set Chocobo_HotColdPoints -= 60000LThat is because numbers higher than 32636 should be flagged as "long" numbers, otherwise they are stored as a 2-byte signed integer type.

Also, for the selectability problem, update the lines "EnableDialogChoices". You must both include the added choice to the available choice list (change "511" into "1023", or tick the next box in the script editor), and tell the game that the "default" choice has index 9 instead of 8 (change "set VAR_LocUInt8_2 = 8" into "set VAR_LocUInt8_2 = 9").
Thank you, I corrected the item price issue here, as I also managed to put the value "set VAR_LocUInt8_2 = 9"
Immediately the "Cancel" option becomes available, but when I select another option, I can't go back to cancel again.

I don't know if it's because of this option here:
Also, when editing the text, there's an opcode that setups the choices ("FORMAT:Multichoice" in the PSX version): double-click to edit its parameter and do the same kind of changes there (number of choices => 10, "Cancel" choice => 9).
I couldn't open the menu using the two clicks to edit the parameters, correct me if i'm wrong or i'm trying to click the wrong box
(https://i.imgur.com/RG7fGUR.png)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-03-26 18:10:40
Ah, maybe you can't change "Format" opcodes for the PSX version of the game...
What happens if you delete that opcode? Careful, you won't be able to add it back, I think.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: gledson999 on 2023-03-26 18:42:03
Ah, maybe you can't change "Format" opcodes for the PSX version of the game...
What happens if you delete that opcode? Careful, you won't be able to add it back, I think.
If delete this Opcode, Only this two option are available
(https://i.imgur.com/gJKc53k.gif)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: akirat9 on 2023-04-02 01:51:58
hey tiriltiti,
i'm trying to edit enemies panel on FF9 PSX (1.0 version) (pure vanilla/untouched) but when I try to rename an enemy, Hades Workshop crash instantly, even try to backspace one letter it instant crash.

tirlititi, i tried latest HW on vanilla ff9 psx v1.1 and monster panel still crash if try to edit monster text
ok looks like HW older is ok.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2023-04-18 11:49:25
Hello! Is it possible to rename a character in a specific save file? I messed up with the translation, and now some of the characters' names are duplicated. "ZidaneZidane" "ViviVivi".
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-04-18 13:53:33
The save editor (https://forums.qhimm.com/index.php?topic=11494.0) is more suited for that, Rassellek.

You *could* force naming screens to appear by editing the field scripts of the fields you are currently in (in Hades Workshop, panel "Environment -> Fields -> select the field you're in -> Edit Script"), by writing a line like "Menu( 1, 0 )" for renaming Zidane, but that's not very convenient compared to using the save editor.
Title: Re: [FF9] General editor - Hades Workshop (0.35b)
Post by: rassellek on 2023-04-20 11:46:59
Version 0.35b is up. All the changes apply only to the Steam version :
- Fixed the black screen bug in battles when you modified an item,
- Improved the reading/modding of Assembly-CSharp.dll,
- Added a "Break damage limit" macro, be careful that it will bug with certain bosses,
...->

Hello, Tirlititi!
Please help me! I save the "Apple Macros" macro using "save steam mod" -> "c# code pieces" -> "raw assets". I'm applying a new mod in "memoria.ini". However, in the game, the maximum damage inflicted remains 9999. Did I miss something? This is the only way to achieve breaking the damage limit, if so, how do I make it work? Thank you!)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-04-20 19:39:01
The C# macros (and more generally the "CIL code" panel) don't work with the Memoria Engine mod.
I just added a "Break damage limit" option directly in Memoria though: it will be a new option of the next Memoria release.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2023-04-21 09:06:02
The C# macros (and more generally the "CIL code" panel) don't work with the Memoria Engine mod.
I just added a "Break damage limit" option directly in Memoria though: it will be a new option of the next Memoria release.

Great news!
Thanks Tirlititi  :)
We are waiting for the release, have you planned a date?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-04-21 10:05:20
Not yet.
DV is currently working on a major update from his end (amongst other things, he implemented Triple Triad in the game). I'll also do a couple of things afterwards.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-04-21 18:45:00
what month aprox you think launch the next release? when you have time, you can help me about break the max stats of strengs, speed etc?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: rassellek on 2023-04-24 07:51:49
Hello, Tirlititi!

I use custom AbilityFeatures.txt (>SA global) to change the magic properties of a character with a certain items.

Example:
Permanent
Code: (Condition) [Select]
Weapon ID == 64
Code: (Magic) [Select]
Magic + 6 .

However, this, unlike MaxHP/MaxMP, changes the magic forever. That is, if you remove / put on an item, the magic reaches 99. Is this a bug of the method or is another function used for this?

I didn't find anything in the description (except Max HP, Max MP, Speed, Strength, Magic, Spirit, Defense, Evasion...)

Thanks You!)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: paky-outsider on 2023-05-02 17:35:29
Hello everyone and hello again Tirlititi, it's been some years since my last post. In these past few weeks, I've finally played until disc 3. (PSX - Italian version with Alternate version, run on EpsxE PC and android)

***************** (this part originally was at the end of the post)
THE QUESTIONS of nowadays (to understand how i came to this maybe-billion-time-questions, please read this little truly-(un)satisfied but enthusiastic-guy story)
1 - Is there a GAMESHARK code that works with the PSX italian version to remove trance bar?
2 - Is IMPOSSIBLE to set trance with these guys (Marcus, Blank, Cinna and Beatrix) with psx version (and HW things and tricks)?
2bis - i've read something about in the forum...the issue seems to be that they don't have a trance model (and not only this)... so, according to my ignorance, if i set only thief dagger for zidane, so i don't have to use the zidane with thief sword model and relative trance model,...then for Blank, Blank have a second model with the Pluto soldier suite...
So with these informations, is possibile to think - a MIRACLE? - to set trance models for marcus, cinna, blank (blank with pluto soldier suite) and beatrix?

Where it all begans - DIALOGUES ISSUES with alternate version
I confirm (like my old post in the alternate version thread) that some lines are messed up in some specific area (or maybe it's quite correct call them "field" according HW). Until disc 2 i've take notes about what lines are "corrupted" (or wrong pg says lines that in normal game are attribute of other, or lines during RTE completely wrong) and where it happens.
Maybe the origin of this little mess is...me! I explain...later.

Where my dream set MY AIM
My aim was have Zidan with Excalibur II and Beatrix in the party.

First, I use GAMESHARK CODES... even if at beginning it was hard to find workable codes, reading forums and billions of tons of landing pages and some other down site (my bad), i gone through this and (with many many tentatives, glitches and game freezee) find codes that works. With these codes i'm able to modify the party (one by one) members, with other tentatives i can change the battle menu with relative abilities.

Second, I finally approde to HADESWORKSHOP. It's the big deal!!!!! With this i can modify the same (and much much much more) things and finally got Excalibur II in the hands of Zidane and Beatrix in the party "on call" (whenever gameshark cheat is set up).

Where my mental health is gone - My aim was achieved but i can stop there? YES but...nope!

So from Beatrix i went to marcus and blank (with custom battle menu i've made) (until disc 2...then i was shocked (the big disappointing point) to find out that when Eiko and Amarant join party, these gameshark codes don't call up even more marcus and blank but Eiko and Amarant (and Quina instead Cinna))....
So that hard work to bring them with me...for nothing?
Many sites and forums later, i've find out gameshark's codes that let me to switch every party member with other ones.
Secondary, for these pg, until i've found the Big disappointing point, i want to set some support abilities. So with HW, i can set the support abilities to Marcus, Blank and Cinna but can't activate them, not in game (even if i can see the list) and not in HW (or i don't found out how to do it) BUT it seems that the support abilities of the "originals" are still active (like autopotion).
With gameshark codes i've found the way to can see and can activate/deactivate the support abilities...but this affect also the battle menu, equipment etc.... so i can have Cinna with Quina abilities and so on.
In both case, there was (and there is still) a Big problem.

Big problem: if i want Marcus, Blank and Cinna in the party instead of base pg, i can play with them until trance happens and the game freezee.
How can i solve?
2 solutions i've thought:
1 - i can play with one of this guys (marcus, blank and cinna) instead of Beatrix, so the trance problem can't happen.
2 - Is there a way to remove the trance bar?
so.... 1 is too simple, 2 is much more attractive... so you can imagine how i answer to my question.

Third - CHEAT ENGINE. With this i've found how modify things in "live action" like, guil, time, pg'stats, turn on trance, or set it to zero...but these changes only works until cheatengine is operating. Or maybe i'don't find the right code that modify the existence of trance bar.
I've tried not so many times... 'cause cheatengine is not newbie-idiot-friendly.

Fourth - MEMORIA SAVE EDITOR. The save editor can set same changes that are possible with gameshark codes and with HW (for my aim)...so with memoria i changed something here and there, making some tries, some messing around... then i've found an interesting things...
My Beatrix, called on party with gameshark, with support abilities that you can set but you can't activate (with HW)...with memoria, in the save editor you can activate them, and then in the game you can see in the menu, according to what you've set in HW (in my case i've set with HW autopotion, autolife and many others that are listed in game menu but not activate, with memoria i can activate the support abilities from a list of the program... so in this list i've activated autolife and autohaste (this one i've not choose in HW and is not listed in game menù) ... in game, with this changes i can see the list of supporting abilities i've set with HW, and the active supporting abilities i've chosen with memoria, so in my case i see autolife and i can see it is active but not autohaste that i've not set with HW but activated with MEMORIA... in battle works autolife and so autohaste...
So the conclusion is that the supporting abilities that you set with memoria, affect Beatrix even if you can't see it in game menu.
I think this doesn't work with Marcus Blank and Cinna 'cause they share the code with Eiko and partners...so, i think, if you modify these ones, the changes affect both.

Fifth - CONCLUSION? Maybe
Beatrix is a badass with hammer (with level bonus), and seems like magic hammer when she hit the enemy.
Marcus, Blank and Cinna...'i've made a custom menu, Marcus alternate version, Blank is like a pusher (hahahah), Cinna a sort of support mage.
Zidane...i've achieved the aim to bring excalibur II, like a thief sword, so in the erect version of Zidane in battle...
but the question is: is possibile use Excalibur like a thief dagger? And answer is YES. In HW, you have to set the menu's image font of a dagger instead a sword and the game is set, you can play with excalibur II dagger


AND THE TRANCE BAR ISSUE?????????????
 
Or i change one to one the Cinna Marcus and Blank with Beatrix when i want one of them with gameshark codes.
Or what?

THE QUESTIONS of nowadays ************ (this part is now at the begin of this post)


WHY I THINK THE PROBLEM TO DIALOGUES ISSUE WAS ME. During the game i used the gameshark codes to add beatrix or marcus or blank and so this maybe caused these issues through the game.

Now I'm heading to modify party members with fields on HW....and messing around like that.

Side note 1: this forum is a masterpiece to handling with the tools created for this game and , as i say, HW is a pure Rosetta Stone
Side note 2: yes, i miss some part of this forum to handle in easy way some of the mess i've done. Sorry for that and for my five-yo english.

Thanks for time you dedicate to this post.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-05-04 13:52:38
@rassellek: Can't you just add +6 Magic to the weapon's stats?
I'll see what I can do (it can be useful) but if it's just giving stats to a piece of equipments, it's better to do it directly without using a SA feature.

@paky-outsider: Congrats!
I must say, not only I have stopped working on the PSX version of the game, but also I don't use CheatEngine at all and would have been totally useless to help with anything related to it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: paky-outsider on 2023-05-08 15:50:53
Thanks for the reply.

So, if you remember that, for PSX version:
1) :roll: it's possible to remove trance bar in HW or with gameshark codes?
2) :mrgreen: it's possible to add Cinna/Marcus/Blank or Beatrix to the party whenever in the game you can choose party members? (I can do it with gameshark codes but i want to know if this is possible with HW to make a .bin's permanent modify)
3) :-* it's possibile to add gameshark codes on cheats'cd (like action replay without card, or others)?
4) 8-)  this is not a question but only a time to say a really "thank you" to all your work and to this community.

And I swear... in this century or the next, I play with the PC version (so the mainly features that i request are already in game  :P and i don't have to bother you and the community with this  :'( psxoomer nostalgic request)



 
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-05-08 16:09:51
For trance and whether it's Blank instead of Amarant or the other way around, it's the same thing in HW : it's the character's flag "Temporary party member". That's a flag that is used when settting up the characters before they join the party for the first time.

Example, in Prima Vista/Cargo Room's script, in the function "Baku_Masked_Loop", you have this line:
Code: [Select]
SetCharacterData( 9, 1, 8, 21, 8 )This line setup Cinna in particular by enabling his flag "Temporary character". Without that flag, he would use Quina's model and portrait and would have trance just like the other party members (he wouldn't have it against Masked Man because trance is still disabled for everyone at that point).

I have no idea for gameshark codes.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: paky-outsider on 2023-05-08 18:31:47
For trance and whether it's Blank instead of Amarant or the other way around, it's the same thing in HW : it's the character's flag "Temporary party member". That's a flag that is used when settting up the characters before they join the party for the first time.

Example, in Prima Vista/Cargo Room's script, in the function "Baku_Masked_Loop", you have this line:
Code: [Select]
SetCharacterData( 9, 1, 8, 21, 8 )This line setup Cinna in particular by enabling his flag "Temporary character". Without that flag, he would use Quina's model and portrait and would have trance just like the other party members (he wouldn't have it against Masked Man because trance is still disabled for everyone at that point).

I have no idea for gameshark codes.

So, if i'm correct with what you say, "21" it's the way to have Cinna, so if i modify, turning off temporary flags (and 21 goes to 5), the game set Quina.

I've tried to modify battle menu in that specific field line up to have
Beatrix's menù to Quina?
Vivi's menu to Marcus
Dagger's menu to Blank

And it works...

Why it doesn't work in cd3? or in Battle with the evil forest's boss? (a couple of tries i've done)
It this case i've tried same modification to setcharacterdata in specified field (cd3 field Hilda Garde...where you can change the party, and i set (i guess) amarant to blank (flagging temporary character on, so his fourth argument goes from 5 to 21) - cd1 field 257 evil forest to modify only blank's menu battle in beatrix in that battle, changing only fifth argument) but with no changes in game.

The only differences i see on what i do, is that in case of Masked Man battle i start new game, in other cases i load the game. So
1) loading game is the issue? Or
2) maybe this changes affect the character only when you first meet them in game, like i've read here in some posts?

Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-05-10 11:04:00
That's correct.

Yes, the "SetCharacterData" is almost a "one-time event" (actually not one time but 2 or 3 times depending on the character), ie. it is triggered once when the character is initialised and if the character was initialised with the "temporary" flag, that character will keep that flag for the rest of the game or until it gets re-initialised.

=> If you load a save in which the character was already initialised with this flag, it will keep this flag, no matter what change you did to the event scripts of "Prima Vista".
=> Also, the temporary characters are re-initialised a couple of time: Blank is re-initialised right before the Plant Brain battle (there's a line "SetCharacterData" for Blank a bit above the line that triggers the Plant Brain battle in its nest) / Marcus is re-initialised before the 2nd fight against Black Waltz 3 battle / Beatrix is initialised once in Queen's Chamber before fighting Bandersnatches and is re-initialised in Alexandria's marketplace during Bahamut's attack.

=> You are able remove that "temporary" flag even in your end-game saves if you add new "SetCharacterData" lines at places where there wasn't before. For example, you can add a "SetCharacterData" at the end of a "Main_Init" function of any place so that it removes the flag. Make sure that you use the equipement set "255", which is the value for "don't touch the equipment", otherwise you could lose/duplicate pieces of equipments.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-05-28 08:22:52
Hey Tirlititi,

I'm playing around with the first Earth Guardian boss fight on Disc 3, and I wanted to change the last attack in his move pool to something else. You have it set to Firaga. I've done this with other enemies, so I know how to change the name of the attack as well as the animation, that's all done, but Earth Guardian targets himself every time. I want this new attack to target Zidane and Quina instead. I figure it has something to do with his script in the "Function Earth_Guardian_ATB," but I have no idea what I'm looking at and I was wondering if you could tell me what to change in his script so that last attack in his move pool always targets my party instead of him?

Thanks again.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-05-28 13:43:21
Hi g_west,

You indeed need to change something in the "Earth_Guardian_ATB" script. The lines deciding on its target(s) are the lines "set SV_Target = ...". It's not obvious to understand which "SV_Target" line corresponds to which attack in scripts like that, but I think that it's the last one of the "switch" control.

Since Earth Guardian is targeting itself, you must have Alternate Fantasy's changes, and Earth Guardian willingly Firaga itself because it has Auto-Reflect in this mod. The AI script of the normal version can be found here (https://finalfantasy.fandom.com/wiki/Earth_Guardian#AI_script) in a more readable form. It can help you to understand the AI scripts to compare how they are written in the Wikia and how they really are in Hades Workshop.

I don't have Alternate Fantasy's modified script right now, but assuming that Firaga is still the last attack (whose target is decided in the "case +6" block), you should change it from something like that:
Code: [Select]
        case +6:
            set SV_Target = SV_FunctionEnemy
            break
... into something like that:
Code: [Select]
        case +6:
            set SV_Target = SV_PlayerTeam
            break
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-05-28 21:19:56
Hey Tirlititi,

That indeed worked, thank you very much.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-05-30 05:36:55
Hey Tirlititi,

Is it possible to add new enemies to a location? Could I add new monsters to Popo Heights on disc 1, for example? I've been playing around in the battle spots tab and I'm pretty sure 49 and 50 are Popo Heights, I see I can change the monster, but not the battle scene.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-05-30 11:55:40
I don't remember how much you can change the battle scenes when modding the PSX version of the game.

In any case, you can pick different battle scenes for each battle in the "Enemy" panel (not in the "World Maps" panel). Surely, you can pick a different world map battle scene but I am not sure if all the battle scenes are accessible from the world map. For example, if you select a "Desert Palace" scene for a fight that is triggered on the world map, it could be that it would soft-lock because the "Desert Palace" scenes are not accessible. It could also be that the "Preloading" window (still in the "Enemy" panel) can fix that, if there is the battle scene amongst the objects that are preloaded that way.
I think that you should have no problem for putting a battle in the World Map that originates from another place at least. You just need to change the battle scene in the "Enemy" panel for that situation.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-05-31 02:54:25
I think I got it, thanks. In the World Map > Battle Spots tab, what is the difference or significance between Normal, Mist, Alternate with Mist, and Alternate? Different points in the game?

Edit: I added some new enemies to Popo Heights (49 and 50 in Battle Spots), and now HW crashes whenever I try to export a PPF. I also changed those enemies battle scenes in the Enemy tab. I changed them to mach the scenes that are used in Popo Heights. It still makes the PPF, but when I try to patch, is says it's trying to write outside the disc image. Can't remember the exact message. I'm guessing I can't add Yans to Popo Heights on Disc 1?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-05-31 13:05:59
I have never seen that problem. It's been a long time since I used the tool on the PSX version of the game. I don't know why it bugs.

- The "Normal" battles are those you can find in discs 1, 2 and 3 in places without mist (eg. Outer Continent or after Soulcage is defeated)
- The "Mist" battles are those you can find in discs 1, 2 and 3 where there is mist (ie. Mist Continent in discs 1 and 2)
- The "Alternate with Mist" battles are those you can find in disc 4 (it only exists for the 100 first spots; for the other spots, the "Mist" battles are used instead)
- The "Alternate" battles are not used since it would correspond to the disc 4 world map battles in places without mist.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-06-01 07:00:42
Thank you. One of these days I'll get a good enough computer to play the steam version of this game with the moguri mod. When that day comes, will I be able to load the .HWS file I've been working on with the PSX version of the game and change the Steam version? I'd made a significant amount of changes and I hate to have to do it all over again.

Also, my new current problem is trying to find the scrip for the frog catching awards. I want to change some of the items but I can't find it anywhere.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-06-01 07:44:14
The frog rewards are in the functions "Main_Loop" of the relevant marsh fields. It's a long function that handles many things, so try to search for the lines:
Code: [Select]
if ( GetFrogAmount == 99 ) {or
Code: [Select]
Battle( 1, 330 )or
Code: [Select]
switchex 6 ( GetFrogAmount ) {
case 2:
set VAR_GlobUInt16_66 = 254
break
case 5:
set VAR_GlobUInt16_66 = 238
break
case 9:
set VAR_GlobUInt16_66 = 169
break
case 15:
set VAR_GlobUInt16_66 = 239
break
case 23:
set VAR_GlobUInt16_66 = 82
break
case 33:
set VAR_GlobUInt16_66 = 83
break
default:
set VAR_GlobUInt16_66 = 197
break
}
(all of these are close to each other)

The rewards are setup in this last "switchex" block: these numbers are item IDs. So for instance, the reward after 2 frogs is the item 254 (Ore), the reward after 5 frogs is 238 (Ether) etc...
If you want to add rewards at other steps, you'll also need to add these steps in the different "Frog_XXX_SpeakBTN" functions; there's the list of rewarding steps near the end of these functions in another "switchex" block.

You should have no problem importing your .hws from the PSX version to the Steam version, except for texts. I never did a proper "PSX text format -> PC text format" converter so it will most likely bug if you let the "including texts" boxes ticked when importing your .hws in the Steam version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-06-01 11:58:34
Would I be able to import the text and then just go through and manually spell check/fix the bugs, or do you think it's going to completely scramble everything? Realistically, how much of the text would I have to rewrite or copy/paste? 100%?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-06-01 17:23:50
Expect 100%. It's not impossible that there are situations in which the conversion would be easier, but don't count on it.
You can however use Text Batching (export/import) that eases the process for the Text panel.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-06-01 17:38:17
Expect 100%. It's not impossible that there are situations in which the conversion would be easier, but don't count on it.
You can however use Text Batching (export/import) that eases the process for the Text panel.

I'm not entirely sure what the second half of this statement means? Eases the process for the Text panel? Are you implying some of the text would translate if done that way?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: stir472 on 2023-06-02 19:24:52
Hello tirlititi i have another question, its possible increase or delimit the max level of the characters?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-06-02 22:37:44
@g_west: No, it's only that it's easier to copy/paste a lot of different texts in a .txt file (especially if you have a good text editor) rather than copy/pasting them in Hades Workshop.

@stir472: Hello. No, there are 99 levels and that cannot be changed, at least yet.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-06-03 05:01:27
Got it. So when I go to Batch and chose the two different export text options, all I see is an option for what I assume are in game dialogue and reading signs and such, as well as an option for the various UI menus. I don't see a way to export all of the spell/item names and their 'help' descriptions. Those are what I've changed the most.

edit: Ah, never-mind. Those are in fact under UI it seems.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: g_west on 2023-06-06 15:38:01
Hey Tirlititi,

I know I've been asking a lot lately, so I apologize if I'm coming off as pushy or demanding. It's not my intention.

I've been strongly considering making the switch from the PSX version of the game to the Steam version, as I believe my laptop is new enough to handle it. I was reading on the Steam page that Memoria isn't compatible with Hades workshop, but I think that may be outdated information? Could you possibly direct me where to go so I could read up on using Hades, Memoria and Moguri all together. I've never used or modded a game with Steam, and the task of getting started seems a bit daunting.

On a related note, I was wondering if HW is capable of editing spells animations? I'd like to use Magnitude 8, but whenever I use it the ground shakes underneath the player team and not the enemies targeted. It's the earthquake animation used by Hilgigars.

Thank you for your time and all your responses, it's been much appreciated.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-06-06 17:56:04
Hi,

If the questions are easy and take me 5 minutes to answer, that's fine. If you happen to ask more complicated questions, I'll delay my answer to take more time writing it. Don't worry about it ;)

It is indeed outdated information. The Moguri mod was made using Hades Workshop amongst other tools. From my point of view, it's way easier to mod a PC game instead of the emulated version, for many reasons. I guess it can be more disturbing for you but the latest versions of Hades Workshop / Memoria make it very easy to create and apply the mods (it's even easier to do it if you have Memoria installed than modding the base game).
You'll find your marks in any case.

However, the modding of spell animations is limited and what you're asking for is not currently possible (and it won't be in a foreseeable future).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: paky-outsider on 2023-08-05 18:01:46
That's correct.

Yes, the "SetCharacterData" is almost a "one-time event" (actually not one time but 2 or 3 times depending on the character), ie. it is triggered once when the character is initialised and if the character was initialised with the "temporary" flag, that character will keep that flag for the rest of the game or until it gets re-initialised.

=> If you load a save in which the character was already initialised with this flag, it will keep this flag, no matter what change you did to the event scripts of "Prima Vista".
=> Also, the temporary characters are re-initialised a couple of time: Blank is re-initialised right before the Plant Brain battle (there's a line "SetCharacterData" for Blank a bit above the line that triggers the Plant Brain battle in its nest) / Marcus is re-initialised before the 2nd fight against Black Waltz 3 battle / Beatrix is initialised once in Queen's Chamber before fighting Bandersnatches and is re-initialised in Alexandria's marketplace during Bahamut's attack.

=> You are able remove that "temporary" flag even in your end-game saves if you add new "SetCharacterData" lines at places where there wasn't before. For example, you can add a "SetCharacterData" at the end of a "Main_Init" function of any place so that it removes the flag. Make sure that you use the equipement set "255", which is the value for "don't touch the equipment", otherwise you could lose/duplicate pieces of equipments.

Thanks for the tips. I'll try soon to put tantalus and/or Beatrix in the party by this way on psx.

Now, for trance issue (softlock in game for Blank and the others no trance guys) I got the answer: I remove the lines "change model" from the [Trance_activate]. It does this: no trance model for anybody, so everyone simply is lighting up after trasformation, battle menù changes correctly, maybe the bad status have the same rate that affect the normal model. When trance are finished, characters stop lighting up, trasformations are ok. I've tried this on Tantalus and Beatrix, they without trance bar, have a trance menu that works fine, and if you set trance abilities, like i do, they work as well. Even if no trance bar, they trance off after two or three moves, like the normal trance guys, because of the trance formula i think.

Such a great job is HW!!!

Question:
1-Is it possible to add in some point, a npc that changes the party, allowing to put in Beatrix or Tantalus? (I think it's impossible to have for example amarant and blank, 'cause they share the same code in psx, correct?)

2-Or maybe, npc, allowing to switch between Eiko-Marcus, Quina-Cinna, Amarant-Blank, someoneelse-Beatrix?

I can do that by gameshark codes, but i ask for permanent changes.

Any other tips?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-08-05 20:26:40
Hi.

It's not easy to add a brand new NPC even with minimal interaction, but it is possible to add Beatrix in the party, even in the PSX version. Indeed it's impossible to have both Blank and Amarant simultaneously because they share a common slot. It'd also be problematic to switch between Blank and Amarant back and forth because it would lose some of Amarant's datas in the process.
Basically, you need to add this kind of function to a NPC in a field script. You can add a NPC that normally doesn't appear by adding an entry, but beware that 3D models are field-dependant on the PSX version and you can't have a NPC appearing in a field in which they would never appear otherwise.
Code: [Select]
Function Man_SpeakBTN
    ifnot ( IsMovementEnabled ) {
        return
    }
    set VAR_GlobBool_158 = 0
    if ( VAR_GlobBool_159 == 1 ) {
        DisableMove(  )
        if ( VAR_GlobBool_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    SetTriangleFlagMask( 127 )
    WindowSync( 2, 128, XXX ) // Use whatever dialog line you want, like "Hello, here's a Beatrix for your party."
    set Setting_PartyReserve = 511 // 511 is "all the usual party members + Beatrix
    Party( 4, 1 ) // Open the party menu to allow the player to place Beatrix in
    set VAR_GlobBool_158 = 1
    if ( VAR_GlobBool_159 == 1 ) {
        if ( VAR_GlobBool_156 == 0 ) {
            EnableMove(  )
            SetTriangleFlagMask( 255 )
            if ( VAR_GlobBool_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    return
You can add things like "TurnTowardObject( 250, 32 ) / WaitTurn(  )" to make add fanciness, but the main line is changing the "Setting_PartyReserve". Also, if you use this code before Beatrix joined your party the first time, you need a line like "SetCharacterData( 8, 1, 13, 22, 15 )" as well.

By the way, whether it's Blank or Amarant in your party depends on the flag "temporary character" in the corresponding "SetCharacterData" line that was last used on their shared slot.
Code: [Select]
SetCharacterData( 11, 1, 10, 21, 12 ) // Setup Blank
SetCharacterData( 7, 0, 7, 5, 7 ) // Setup Amarant instead
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Arthandas on 2023-08-10 18:17:09
Hi, is it possible to use your tool to swap the fmvs of the psx version with PC ones?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-08-10 20:21:13
Hi. I wished I have this kind of almighty power ^^'
No, it is not possible to increase the data size of the PSX version to my knowledge, so inserting the heavy FMVs of the PC version in the PSX disc image is out of reach, even before considering format discrepancies.

If you want to do the other way around, it might be possible with other tools. You should be able to extract FMVs from the disc image using generic PSX ISO tools (something like that (https://www.romhacking.net/utilities/1404/)). And then surely video editing tools should be able to change the format of whatever you extracted from PSX into an OGG video, which can then replace the OGG videos used for the PC version (the audio tracks of FMVs are not as easily accessible on PC but are archived in p0data62.bin; more infos there (https://github.com/Albeoris/Memoria/wiki/List-of-cinematics)).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Arthandas on 2023-08-10 20:34:22
Hi. I wished I have this kind of almighty power ^^'
No, it is not possible to increase the data size of the PSX version to my knowledge, so inserting the heavy FMVs of the PC version in the PSX disc image is out of reach, even before considering format discrepancies.
I had to ask :) I know it won't run on original psx even if I managed to swap them but I'm hoping it's somehow possible when emulating in RetroArch for example.

If you want to do the other way around, it might be possible with other tools.
Why would I want to swap those high res movies? xD
Anyway, thanks for your time :)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: Tirlititi on 2023-08-26 21:39:32
Update to v0.50
-------------------


- Added compatibility with many of Memoria's features when it is installed:
-- You can create new spells, supporting abilities, commands, playable characters, sword magic sets, (key) items, (synthesis) shops, with custom IDs. Many limitations are also removed, like the number of abilities taught by items, the recipe ingredient count for synthesised items, etc...
-- Many numerical values or IDs are not capped anymore. This doesn't apply to the datas for enemies as they still use the native binary format, even when modding with Memoria. To bypass these limits, you need to manually use Memoria's BattlePatch.txt feature (https://github.com/Albeoris/Memoria/wiki/Battle-Patch).
-- You can attach weapon / armor / usable effects to any item, so weapons and jewels can increase defensive stats and exotic items can have multiple usages.
-- HW provides an interface to multiple recent Memoria features (boosted supporting abilities, custom textures for weapons...).
-- When adding custom playable characters, you can setup various datas that are required for them to be full-fledged characters. That includes the set of battle animations that they use. However, this isn't magic: you still need to create animations for them as they will have a limited set of animations available from the base game anyway. On top of that, Memoria doesn't like it if you use the same battle animation for two different logical animations (eg. if you use the same animation for "stand" and "stand weak"). The solution for now is to duplicate these animations (using eg. the Unity Assets Viewer) and just give another name to the duplicate. Eventually, Memoria will do that automatically I guess. Also, you'll most likely need to use Memoria's Model Viewer (https://github.com/Albeoris/Memoria/wiki/Model-Viewer) to see at least the skeleton and know which bone ID corresponds to which part of the model.
-- The CSV generated entries are now compared with Memoria's default database and only the new entries and the modified entries are kept. For example, if you only change Thunder Slash's effect, the corresponding CSV will only contain Thunder Slash's entry. This improves mod compatibility and can also help for writing down a description of your mod (keeping track of what you've modified more easily). The same goes for the .mes files (which contain entry names and descriptions).
-- Added a feature for completing the scripting system with custom functions. That's not really something you can use for now but it will be used in the future when Memoria accept new functions to be used in scripts (like, for example, a function "SetCharacterLevel" or "GetTetraMasterRank" to be used in cutscenes). It will allow me to implement support for these functions without having to update the tool each time.

- The list of equipments that each character can equip can now be modified both in the "Inventory -> Items" panel and in the "Party -> Stats" panel. This makes it easier depending on whether you want to think of equipment availability as a per character or per item feature. The equipment availability of custom characters may only be changed in the "Party -> Stats" panel.

- Fixed a couple of errors when de-compiling scripts (AI scripts, field and world map scripts): in some situations, a "break" keyword was added outside of any breakable block. It made it impossible to recompile directly the concerned functions. Sometimes, that "break" was only an extra line that should have just been removed, but sometimes it was a symptom of a more problematic error in the de-compilation of switch(ex) blocks. Now, a commented "// JMP(0)" line is written as placeholders for these exotic situations. Example of functions that were concerned are:
-- "Blue_Narciss_Loop" in World Map scripts, and similar functions for the other transport vehicles,
-- A couple of functions in Scarlet Hair's script (also in a fight against Zorn & Thorn if I recall correctly),
-- A couple of model "Init" functions in fields that just had an extra "break" line where it shouldn't.

- Reworked the way that argument expressions (and "set" expressions) are parsed: they now take operation priority into account so you less need to add parentheses everywhere to force the priority. For example, the expression "set x = 3 * 2 + 5" now parses as "set x = ((3 * 2) + 5)" instead of "set x = (3 * (2 + 5))".

- Fixed a bad practice in my C++ coding that lead the executable's size (and the compilation time!) to be much bigger than it should have (approx. x4).

- Improved a bit (or at least tried) the interface for a couple of panels. The IDs of entries are shown directly when selecting them, which makes things easier in specific situations in which a number corresponds to an ID (eg. for the effect of the Blue Magic "Angel's Snack" in which the spell's power corresponds to the ID of the item used).

- Added a bit of readability for the World Map functions that trigger on specific areas: the region concerned is now shown on the minimap. Also, the keyword "forward" is now used in these scripts instead of having an empty function. It means "use the same code as the one in the next function" and it can only be used if it's the only line of the function.

- Fixed batch script importing not working correctly depending on the Unicode encoding of the .txt.

- Various small bug and typo fixes.


For the first time ever, I could successfully batch export all the field scripts of the game and batch import (and thus compile) them back with no problem. I did that with multiple steps because it gets very slow and very long if you batch-import just one huge file containing all the scripts of the game, but it worked flawlessly. Until now, there was always a couple of rare functions that had a de-compilation problem and required manual fixes.

On the downside, I do not guarantee the Randomizer embedded tool to work correctly if you have more spells than the base 192 spell slots or things like that.

Most of "Creating new spell / command / etc" features are accessible only with a right-click: don't hesitate to try right-clicking on lists to see if you can add or remove entries.
When adding new supporting abilities, you need to manually create an effect for them in AbilityFeatures.txt (https://github.com/Albeoris/Memoria/wiki/Supporting-ability-features): that part cannot be done inside Hades Workshop.

EDIT: Updated with a hotfix to remove the error message when "ScriptAPI.txt" doesn't exist.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50)
Post by: stir472 on 2023-08-29 00:08:33
Thank you very much for this update, in an incredible job that you are doing, during Saturday and Sunday I will test
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50)
Post by: Arthandas on 2023-09-08 17:09:55
What a great tool, I used it on the psx version to set the lv 2 required exp to 9999999 to enforce a lv1 challenge :) Thanks!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-09-14 17:03:01
Update to v0.50b:
- Fix shops having trailing hammers to sell in some situations.
- Fix "ObjectUID_" in scripts so they adapt if you add or remove entrie.
- Add a copy/paste feature for texts. Only enemy, world map and field texts can use this feature.
- Text files (.mes) are not generated anymore if they are empty.
- item icon colors are not limited to just 15 anymore, but the color 15 should still be used solely for the "disabled" icon of the kind.
- Add a couple of interface improvements (mainly some more IDs are displayed).
- Add a couple of functions that can be used in scripts with Memoria.

The new available script functions will only work in-game when using the latest commit of Memoria. So that's something going on together with Memoria updates. For now, the new functionalities are these:
- "SetCharacterEquipment / GetCharacterEquipment" => control over individual pieces of equipements within scripts, so you are not restricted by "initial equipement sets" anymore.
- "SetCharacterLevel / SetCharacterExp / GetCharacterLevel / GetCharacterExp / GetLevelExperience" => control over character experience and levels.
- "AddShopItem / AddShopSynthesis / IsItemInShop / IsSynthesisInShop" => dynamically add or remove items that are sold by specific shops. I was thinking of a kind of synthesis recipe system in which you can find key items that unlock new items/synthesis to be bought.
- "WalkEx / TurnTowardObjectEx / SetLogicalAnimationEx" => more flexible control for cutscenes. Using these should make it easier as more cutscene code can be written in a single function and not splitted apart.
- "CardWinCount / CardLossCount / CardDrawCount / GetCardPoints / GetCardRank / GetTreasureHunterPoints" => access some mini-game points in scripts.
- "ConvertRegularItemId" / etc... => some utility functions required because of the fact you can add items over the 256 limitation.
- "GetPartyMember" => know which characters are in the party, a bit different from the existing "IsInParty".
- "GetItemFullCount" => the number of items of a specific type taking the equipped ones into account as well.
- "IsAbilityLearnt / IsSupportEnabled" => know more about what the party members can do combat-wise.


EDIT: I made a short video showing some of these script possibilities in action.
Link to video (https://www.dropbox.com/scl/fi/n0gbxtzew3umi42pom03j/Memoria-Script-API.mp4?rlkey=fujpv2ubftj11vfanrcmp51pn&dl=0)
Link to the corresponding script code (https://www.dropbox.com/scl/fi/q8syinge6olb7tm26mnwq/Memoria-Script-API.txt?rlkey=a3i9imix11n938v3ybivfc70z&dl=0)

EEDIT: I made another small update (still calling it v0.50b) to fix a crash that happened sometimes when selecting negative numbers in the script editor.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.43)
Post by: paky-outsider on 2023-10-16 10:22:50
Stuck in the marsh.

Hi Tirlititi,
I've an issue with my psx mod.
I'm trying to replace Quina, Eiko and Amarant by Cinna, Marcus and Blank with their own trance, obtained by removing change model line in the trance activate spell animation, and their own support abilities, by a trick in the beginning of the game.
CD1 works fine: for example in Burmesia, with this code for Cinna 5,1,255,21,8 the game thinks Quina is in the party, so on field and on the cinematic scenes she is present, but in the menù and in battle Cinna is on. (In the Marsh, i've to modify in some fields the lines isinparty(5) to isinparty(9) 'cause only like this you can start the frog game, for some reason in these fields the game "see" Cinna and not Quina, with the code 5,1,255,21,8.
Now in cd2 the issue is this.
I'm going to start Fossil Roo sequence.
To do that, after destroyed lindblum, i've to go to qu's Mars, and find the enter of Fossil Roo.
Now...the game with that code for Quina/Cinna, thinks i'm with Cinna...so the quina's find fossil roo entrance sequence is triggered and i cant find it, so i'm stuck in the marsh.
So many tries to use RemoveParty lines before that point of the game but useless, the game see Cinna's code like yet.
So I've tried, but with no working results, to modify field region range code for fields 0655, 0660... to directly access to the Fossil Roo entrance in field 0662...
(Isinparty check moved from 5 to 9 in 0655 and in 0660, no results ; in 0660 field change the region that allow the access to 0655 field, moved from 0655 to 0662, no results).

Can you help me to do that?
Or suggest other options?


Hi.

It's not easy to add a brand new NPC even with minimal interaction, but it is possible to add Beatrix in the party, even in the PSX version. Indeed it's impossible to have both Blank and Amarant simultaneously because they share a common slot. It'd also be problematic to switch between Blank and Amarant back and forth because it would lose some of Amarant's datas in the process.
Basically, you need to add this kind of function to a NPC in a field script. You can add a NPC that normally doesn't appear by adding an entry, but beware that 3D models are field-dependant on the PSX version and you can't have a NPC appearing in a field in which they would never appear otherwise.
Code: [Select]
Function Man_SpeakBTN
    ifnot ( IsMovementEnabled ) {
        return
    }
    set VAR_GlobBool_158 = 0
    if ( VAR_GlobBool_159 == 1 ) {
        DisableMove(  )
        if ( VAR_GlobBool_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    SetTriangleFlagMask( 127 )
    WindowSync( 2, 128, XXX ) // Use whatever dialog line you want, like "Hello, here's a Beatrix for your party."
    set Setting_PartyReserve = 511 // 511 is "all the usual party members + Beatrix
    Party( 4, 1 ) // Open the party menu to allow the player to place Beatrix in
    set VAR_GlobBool_158 = 1
    if ( VAR_GlobBool_159 == 1 ) {
        if ( VAR_GlobBool_156 == 0 ) {
            EnableMove(  )
            SetTriangleFlagMask( 255 )
            if ( VAR_GlobBool_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    return
You can add things like "TurnTowardObject( 250, 32 ) / WaitTurn(  )" to make add fanciness, but the main line is changing the "Setting_PartyReserve". Also, if you use this code before Beatrix joined your party the first time, you need a line like "SetCharacterData( 8, 1, 13, 22, 15 )" as well.

By the way, whether it's Blank or Amarant in your party depends on the flag "temporary character" in the corresponding "SetCharacterData" line that was last used on their shared slot.
Code: [Select]
SetCharacterData( 11, 1, 10, 21, 12 ) // Setup Blank
SetCharacterData( 7, 0, 7, 5, 7 ) // Setup Amarant instead
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-10-16 12:05:43
Hi paky-outsider,

Wouldn't it work to just replace all the occurences of "IsInParty(5)" by "IsInParty(9)", as you've started to do?
You can batch-export the field scripts and do some "search & replace" operation. Normally, you should even be able to batch-reimport the scripts easily then, even though I've not tested with the PSX version and it may bug if there are too many scripts.

The problem with making links to other fields in the PSX version is that it doesn't work well as the game needs to preload some datas. I wouldn't try to hijack the field exits like that in the PSX version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: paky-outsider on 2023-10-16 17:55:05
Thanks for the fast reply Tirlititi.
Tonight I'll make a couple of tries to figure it out by replacing isinparty(9) all over marsh's fields.

In order the HW's new features in yours recent posts, is possible to use them with psx version?

EDIT: In my previous attempts I've missed one single isinparty's check, exactly in 0655 field, function main. Now it works.


Hi paky-outsider,

Wouldn't it work to just replace all the occurences of "IsInParty(5)" by "IsInParty(9)", as you've started to do?
You can batch-export the field scripts and do some "search & replace" operation. Normally, you should even be able to batch-reimport the scripts easily then, even though I've not tested with the PSX version and it may bug if there are too many scripts.

The problem with making links to other fields in the PSX version is that it doesn't work well as the game needs to preload some datas. I wouldn't try to hijack the field exits like that in the PSX version.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: g_west on 2023-10-24 17:42:08
Hey Tirlititi,

Fist off, thank you for the awesome update. I didn't even realize you were still working on it.

I had a question. I know you edited the game so that Quan's Dwelling scene couldn't be done until disc four, and I was wondering if I could do something similar. I wanted to edit the colored stone deposit shrine on the Conde Petie Mountain Path (1554: Mountain Path/Roots) so that you can't deposit the items on disc 2, only on disc 3. I was hoping to simply edit the message that pops up if you try to do it on disc two with something along the lines "looks like it's not working."

If this is too difficult, or not possible, it occurred to me that I can just hide one of the stones somewhere else in the world only available in disc three, and make the player come back later.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: g_west on 2023-10-24 17:47:44
Hey Tirlititi,

Fist off, thank you for the awesome update. I didn't even realize you were still working on it.

I had a question. I know you edited the game so that Quan's Dwelling scene couldn't be done until disc four, and I was wondering if I could do something similar. I wanted to edit the colored stone deposit shrine on the Conde Petie Mountain Path (1554: Mountain Path/Roots) so that you can't deposit the items on disc 2, only on disc 3. I was hoping to simply edit the message that pops up if you try to do it on disc two with something along the lines "looks like it's not working."

If this is too difficult, or not possible, it occurred to me that I can just hide one of the stones somewhere else in the world only available in disc three, and make the player come back later.

I just thought of something. The easiest solution would be replacing one of the stones with an ore. The other solution would be having a message pop up at one of the stone shrines that says "it seems to be empty," and then placing the stone somewhere else. My only problem is I have no idea how to go about doing that.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-11-05 11:05:27
@paky-outsider: No, they are mostly done for the PC version and even for the PC version that is modded with the Memoria Engine Mod.
These 3 points apply to the PSX version as well, but that's pretty much it.
- Fix "ObjectUID_" in scripts so they adapt if you add or remove entries.
- Add a copy/paste feature for texts. Only enemy, world map and field texts can use this feature.
- Add a couple of interface improvements (mainly some more IDs are displayed).


@g_west: These are handled by the field scripts (in "Environment -> Fields -> Edit Script" windows).

The functions that are relevant to this side-quest are mostly those:
1) Picking up the Red Stone: Field Mountain Path/Trail (1550), Function Zidane_48
2) Picking up the Blue Stone: Field Mountain Path/Trail (1551), Function Zidane_15
3) Picking up the Yellow Stone: Field Mountain Path/Roots (1555), Function Zidane_22
4) Picking up the Green Stone: Field Mountain Path/Roots (1557), Function Zidane_14
5) Placing all the stones: Field Mountain Path/Roots (1554), Function Zidane_16

The picking-up functions all look roughly the same. Something like that:
Code: [Select]
Function Zidane_48
    TimedTurn( Angle(2000, 850), 32 )
    WaitTurn(  )
    SetStandAnimation( 2605 ) // Crouch
    RunAnimation( 2607 ) // Idle crouching
    WaitAnimation(  )
    SetTextVariable( 0, 300 ) // "Red Stone"
    WindowSync( 0, 0, 143 ) // "[Item] is set on the stone. Take it out Leave it alone"
    if ( !GetDialogChoice ) {
        Wait( 10 )
        RunSoundCode3( 53248, 1340, 0, -128, 125 ) // Play Sound
        Wait( 10 )
    }
    SetStandAnimation( 200 ) // Idle
    RunAnimation( 2591 ) // Stand up
    if ( !GetDialogChoice ) {
        RunSoundCode3( 53248, 108, 0, -128, 125 ) // Play Sound
        AddItem( 300, 1 ) // Add the Red Stone key item
        SetTextVariable( 0, 300 ) // "Red Stone"
        if ( 1 ) {
            WindowSync( 7, 0, 58 ) // "  Received [Item]!  "
        } else {
            WindowSync( 7, 0, 59 ) // Unused - "  Received [Item] Card!  "
        }
        set VARL_GenBool_2864 = 1
    }
    WaitAnimation(  )
    return
So you see, by changing the ID "300" to something else, you can change the item given at these statues. It also shows how items are given to the player so you can do something similar later on on disk 3.

The function for placing the stones is a bit more complicated (in particular, it uses a variable "VARL_GenUInt8_358" with bitwise operations to keep track of which stones are already placed). It could be done to add another stone requirement (like a custom made "White Stone" or whatever) that would only be picked up in disk 3, but indeed the easiest is to change the reward in one of the pickup spot above + add the missing stone later on in disk 3.

In order to give the missing stone later on, check how to change a chest content (https://forums.qhimm.com/index.php?topic=14315.msg233384#msg233384) that I wrote a long time ago. Most of the time, you'll want to search for the "Chest" functions in field scripts or possibly the "Zidane_XX" functions when the items are placed on the floor and not inside a chest.
It is also possible to add a whole new chest, so you don't replace any other treasure. For that, you mostly need to:
1) Create a new entry in the "Edit Entries" window, of type "Object" (because it will be linked to a chest 3D object).
2) Add functions for that new entry, at least a "Init" (a function of type 0) and a "Range" (a function of type 2). Adding functions is done by right-clicking on the list of functions in the script window. These two functions should be like the functions for existing chests. The "Init" function for instance could look like that:
Code: [Select]
Function ChestA_Init
    SetModel( 75, 0 ) // The model of "ChestA"
    CreateObject( [COORDINATES: Chest position on the field] )
    TurnInstant( [ANGLE: Chest facing angle on the field] )
    SetObjectLogicalSize( 1, 40, 45 )
    SetStandAnimation( 7340 ) // Dummy Close
    SetWalkAnimation( 7340 ) // Dummy Close
    SetRunAnimation( 7340 ) // Dummy Close
    SetObjectFlags( 5 )
    SetHeadFocusMask( 2, 0 )
    if ( [CONDITION: Chest content already picked up] ) {
        SetStandAnimation( 7338 ) // Dummy Open
    } else {
        SetStandAnimation( 7339 ) // Dummy Close
    }
    SetObjectFlags( 49 )
    EnableHeadFocus( 0 )
    return
3) Add a line "InitObject" next to the others in the function "Main_Init" to actually create the chest object when entering the field.


Sorry for the late answers.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Vaylen on 2023-11-07 17:01:22
I ran into some issues with the Moguri mod and would like to double-check some things.

As far as I understand, Alternate Fantasy should be compatible with Moguri.
Hades Workshop is compatible with memoria, but not with Moguri.
Ive got a copy of the unmodded assembly-csharp.dll. If I now rename it to assembly-csharp.bak and copy that into ff9_Data/managed, Hades should work again. Will this disable features from Moguri?
Also, there is something mentioned about it being recommended to run Hades Workshop with Memoria installed. Will any of those functionalities be impacted?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-11-07 20:59:28
No, that's not it.

1) The Moguri Mod includes the Memoria mod. When you install Moguri, it automatically installs an (old) version of Memoria.
2) When installing the Memoria mod, either with Moguri or with the Memoria Patcher, it creates the Assembly-CSharp.bak if it doesn't exist already. So whatever you do, you should have a correct .bak if you don't delete or replace it.
3) Hades Workshop works the same whichever version of Memoria you use. But it has more functionalities (especially the ones from the last version of HW) when you have Memoria installed compared to when you have the PC version without Memoria.

If you try to make the .bak manually yourself, you should use an unmodded DLL for it. In any case, if HW works and tells you that it uses a .bak when opening the game, that means you have a correct .bak (it wouldn't work if you make a .bak using a modded DLL as a basis).

I hope that clears things up. Mod inter-compatibilities are not always very simple ^^'
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Vaylen on 2023-11-08 07:16:18
When I install moguri(and update memoria after, as per instruction), I get the error message with Hades.

Soo, in short.. install ff9->install latest version of memoria->copy the csharp.bak.>install moguri->update memoria->copy the .bak into the proper folder. That correct? And to ask again, will the functionality of moguri be impacted by that or not?

Yeah, compatibility can be a bitch sometimes x.x
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-11-08 11:39:19
1) Install FF9
2) Install Moguri
3) Install latest version of Memoria
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Vaylen on 2023-11-08 12:09:07
Ah, I see. Doing it in this order works. I followed memorias install instruction for moguri(install moguri, then update memoria), but that seems to not work out as cleanly.
Everything seems to work just fine now, thanks a lot.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Vaylen on 2023-11-08 13:57:11
Another quick question: Does editing Magic Sword work now, or is that still broken? I remember you saying about something being hardcoded with that.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-11-08 18:24:58
Yes, it works now with the new system provided by Memoria.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Vaylen on 2023-11-08 18:54:02
Oh very nice, I'll try to use that then, too. I want to enable Steiner to have a few options with the other spellcasters for his attacks.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: g_west on 2023-11-15 08:38:27
Thanks Tirlititi!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Proudpumpkin on 2023-11-24 03:57:56
Hi! I'm playing Alternate Fantasy right now and I'm having a blast, but I would like to know if there's a way to edit bosses stats and stuff like that with Hades Workshop. I'm asking bc when I try to mod/edit something with Hades it always leads me to the non-modded database and I prefer to edit the Alternative Fantasy database with the changes already made by Tirlititi.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-11-24 11:15:04
Hi ProudPumpkin.
You need Alternate Fantasy's HWS file for that. You can download it from there ("AF and PCP source files.zip"):
https://www.dropbox.com/sh/ac7sr4q3z2cx9vp/AACQDfqXPvn8c3ylXeGUrBKEa?dl=0 (https://www.dropbox.com/sh/ac7sr4q3z2cx9vp/AACQDfqXPvn8c3ylXeGUrBKEa?dl=0)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Proudpumpkin on 2023-11-24 16:16:13
@Tirlititi tyvm for all your work and help!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Baby5 on 2023-12-24 17:59:09
I have a text problem, with v0.50b

I installed FF9 > Moguri Mod > Memoria > Hades Workshop v0.50b

I used the original Assembly-Csharp.dll from an unmodded version of FF9, named it Assembly-Csharp_Vanilla.dll and put it in the Hades Workshop Folder.
I made only a single change, the name of the spell Fire to FireA just to test.
I clicked Save Steam Mod, "Spreadsheets(Memoria)" and "Raw Assets", saved to HadesWorkshopMod folder right inside FINAL FANTASY IX.
I changed Memoria.ini

[Mod]
FolderNames="HadesWorkshopMod", "MoguriFiles", "MoguriSoundtrack", "MoguriVideo"

When I load the game, all the spells are showing as blank names. When cast, they still cast but all names are blank.

If I delete HadesWorkshopMod folder, the spell names go back to being Fire etc.
If I mod a non-Moguri non-Memoria (unmodded) FF9 with HWS v0.50b, it works perfectly fine, I see the spell FireA.

Any idea what could have gone wrong?
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-12-24 18:50:21
I think that's because you don't have the latest version of Memoria. Your installation sequence is the best but for some reason I think you didn't use the latest version (June 2023).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Baby5 on 2023-12-24 19:52:39
I think that's because you don't have the latest version of Memoria. Your installation sequence is the best but for some reason I think you didn't use the latest version (June 2023).

Thanks, it was exactly that. Happy Holidays to you Tirlititi.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-12-24 22:09:29
Thank you. Best wishes to you, wherever you are.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Baby5 on 2023-12-25 02:51:05
I actually found a very interesting "Renaming" bug.

When I used HWS to change the names of Support abilities and Items in the Moguri-Memoria FF9, the next line of anything that I changed had the name show as "blank" (empty).

For example, I renamed Auto-Life(the support ability) to Auto-Revive instead (to distinguish with the Blue Magic Auto-Life). Auto-Revive showed up fine in game, but the next support ability after it is HP+10%. HP+10% showed as blank. So I then tested this and named HP+10% as Vitality+10%. Vitality+10% appeared just fine, but then HP+20% showed as blank. Which I then named to Vitality+20%, which made Distract show as blank. And so on.

Then I tried to rename Items as well. I renamed Octagon Rod to Octagon Staff. High Mage Staff's name disappeared and showed blank. I then renamed High Mage Staff to High Sage Staff, and Mace of Zeus showed up as blank.

This does not happen to Spells, only to Support and Items. The functionality is also not affected (if you equip a blank HP+10%, you still see your max HP change immediately).

Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2023-12-25 09:52:39
Ah yes, I didn't remember when I fixed that bug. It's a bug of Memoria and it's fixed in that commit (https://github.com/Albeoris/Memoria/commit/acf64fdd76e4864e870efc48c504729f2c2c76d4#comments)... which is not part of a release yet.

I can't work on FF9 modding for some time. I have a few other bugs to fix / features to add before releasing the next version, and DV's great work to review, but I'm not sure when that will be done.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: charlie_38 on 2023-12-29 17:24:28
Hi Tirlititi,

Maybe this is a stupid question, but I'd like to ask you if there are any issues when loading a project designed on a previous HW version (0.43 in my case) on the latest one. Just to make sure I don't have to edit anything when loading the project on the new version.

Thanks!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-01-01 20:54:14
Hi Charlie_38.
There's no problem. Me and other people have done it without noticing any bug and there shouldn't be any. There would be issues if you tried to load a HWS that was created with HW v0.50b into the older version of HW v0.43, but the other way around is designed to work fine.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: charlie_38 on 2024-01-04 18:31:13
Thanks Tirlititi, I installed the latest version and I could load my project from the previous version.
By doing this I tought I could fix an issue I have when following Incinerator steps about adding a cutscene:

Quote
I. Getting Started

In field: Alexandria/Dock (Field ID: 2458), we need to firstly initiate some character that will pose as our scene starter (in this case, it will be Steiner):

1. In Hades Workshop, navigate to the Fields Tab and scroll down to Field Alexandria/Dock (Field ID: 2458)
1a. Select "Edit Entries"
1b. In the Entries Menu, scroll down and select "Steiner" and "Freya". *Because this field does not natively have Steiner or Freya initiated (par vanilla), we need to add them in manually)
1c. Select "Edit Script"
1d. In the Edit Script Window, under the "Functions" section, right-click and select "Add"
1e. In the Properties Menu, for "Entry" select "Steiner"
1f. For Entry Type, set the value "2". "2" means "object with model", standard for all 3D models initiated
1g. For "Function Type" set the value "0". "0" means "main function". Every 3d model has an _Init function, which is used to create the 3D model in scene
1h. Select "Parse", then "Ok".


In Edit Entries I already see Steiner in the list and I can't add or delete anything. Then, in Edit Script I try to add a function and in Entry I don't see Steiner but "Entry21" instead. The Entry Type is not available in order to set the value 2.
What am I doing wrong?

Thanks in advance.
Regards!

Carlos
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Dynte7 on 2024-01-04 23:10:58
Tirlititi, do you know where the frog timer respawn is located? I want to reduce the time for frog to respawn as 5 to 8 hours for them to respawn is kind of crazy.

I have look at the script and failed to find the respawn timer. I found the rest such as prizes and the number of frogs but i cant seems to get where the respawn timer is. I might have miss it or something. It might be something like Excaliber timer but i kind of failed to find it.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: anxietymafia on 2024-01-06 09:40:00
Hi Tirlititi,

Long time since I poked at HWS but I am playing again, and I am wondering if you know of anyone who has fixed the Eiko/Marcus stat bug? I would like to fix it, so Eiko's stats are more true to her without worrying about leveling Marcus. I am trying to look for the code, assuming it is in the main loop script of Conde Petie mountain path field when Eiko joins, but no luck so far recognising it. (PSX version) Any insight would be appreciated, thank you.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-01-06 14:24:17
Hi.
No, that glitch is tied to the game's engine, not any field script. Unless I'm mistaken, it is fixed by Memoria for the PC version of the game (it may also be fixed by the PC version of the game already with some of the official updates).
You won't be able to fix that glitch for the PSX version of the game... except if you're willing to dig in the hexa-decimal file and decode MIPS assembly. That cannot be done with Hades Workshop anyway.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: anxietymafia on 2024-01-06 20:57:04
Oh, I see! Thank you for the reply. I won’t waste my time poking at it anymore then. Thanks so much. I might just kill Marcus off in that case.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: paky-outsider on 2024-01-07 14:42:45
@paky-outsider: No, they are mostly done for the PC version and even for the PC version that is modded with the Memoria Engine Mod.
These 3 points apply to the PSX version as well, but that's pretty much it.
- Fix "ObjectUID_" in scripts so they adapt if you add or remove entries.
- Add a copy/paste feature for texts. Only enemy, world map and field texts can use this feature.
- Add a couple of interface improvements (mainly some more IDs are displayed).


@g_west: These are handled by the field scripts (in "Environment -> Fields -> Edit Script" windows).

The functions that are relevant to this side-quest are mostly those:
1) Picking up the Red Stone: Field Mountain Path/Trail (1550), Function Zidane_48
2) Picking up the Blue Stone: Field Mountain Path/Trail (1551), Function Zidane_15
3) Picking up the Yellow Stone: Field Mountain Path/Roots (1555), Function Zidane_22
4) Picking up the Green Stone: Field Mountain Path/Roots (1557), Function Zidane_14
5) Placing all the stones: Field Mountain Path/Roots (1554), Function Zidane_16

The picking-up functions all look roughly the same. Something like that:
Code: [Select]
Function Zidane_48
    TimedTurn( Angle(2000, 850), 32 )
    WaitTurn(  )
    SetStandAnimation( 2605 ) // Crouch
    RunAnimation( 2607 ) // Idle crouching
    WaitAnimation(  )
    SetTextVariable( 0, 300 ) // "Red Stone"
    WindowSync( 0, 0, 143 ) // "[Item] is set on the stone. Take it out Leave it alone"
    if ( !GetDialogChoice ) {
        Wait( 10 )
        RunSoundCode3( 53248, 1340, 0, -128, 125 ) // Play Sound
        Wait( 10 )
    }
    SetStandAnimation( 200 ) // Idle
    RunAnimation( 2591 ) // Stand up
    if ( !GetDialogChoice ) {
        RunSoundCode3( 53248, 108, 0, -128, 125 ) // Play Sound
        AddItem( 300, 1 ) // Add the Red Stone key item
        SetTextVariable( 0, 300 ) // "Red Stone"
        if ( 1 ) {
            WindowSync( 7, 0, 58 ) // "  Received [Item]!  "
        } else {
            WindowSync( 7, 0, 59 ) // Unused - "  Received [Item] Card!  "
        }
        set VARL_GenBool_2864 = 1
    }
    WaitAnimation(  )
    return
So you see, by changing the ID "300" to something else, you can change the item given at these statues. It also shows how items are given to the player so you can do something similar later on on disk 3.

The function for placing the stones is a bit more complicated (in particular, it uses a variable "VARL_GenUInt8_358" with bitwise operations to keep track of which stones are already placed). It could be done to add another stone requirement (like a custom made "White Stone" or whatever) that would only be picked up in disk 3, but indeed the easiest is to change the reward in one of the pickup spot above + add the missing stone later on in disk 3.

In order to give the missing stone later on, check how to change a chest content (https://forums.qhimm.com/index.php?topic=14315.msg233384#msg233384) that I wrote a long time ago. Most of the time, you'll want to search for the "Chest" functions in field scripts or possibly the "Zidane_XX" functions when the items are placed on the floor and not inside a chest.
It is also possible to add a whole new chest, so you don't replace any other treasure. For that, you mostly need to:
1) Create a new entry in the "Edit Entries" window, of type "Object" (because it will be linked to a chest 3D object).
2) Add functions for that new entry, at least a "Init" (a function of type 0) and a "Range" (a function of type 2). Adding functions is done by right-clicking on the list of functions in the script window. These two functions should be like the functions for existing chests. The "Init" function for instance could look like that:
Code: [Select]
Function ChestA_Init
    SetModel( 75, 0 ) // The model of "ChestA"
    CreateObject( [COORDINATES: Chest position on the field] )
    TurnInstant( [ANGLE: Chest facing angle on the field] )
    SetObjectLogicalSize( 1, 40, 45 )
    SetStandAnimation( 7340 ) // Dummy Close
    SetWalkAnimation( 7340 ) // Dummy Close
    SetRunAnimation( 7340 ) // Dummy Close
    SetObjectFlags( 5 )
    SetHeadFocusMask( 2, 0 )
    if ( [CONDITION: Chest content already picked up] ) {
        SetStandAnimation( 7338 ) // Dummy Open
    } else {
        SetStandAnimation( 7339 ) // Dummy Close
    }
    SetObjectFlags( 49 )
    EnableHeadFocus( 0 )
    return
3) Add a line "InitObject" next to the others in the function "Main_Init" to actually create the chest object when entering the field.


Sorry for the late answers.

Hi Tirlititi and happy new year to everyone who still enjoying this game.
I'm on my way to mod 3rd disk of psx version.
I've to stop and re-mod the entire disk 2 fields, 'cause i overwrite the binary file directly, 'cause of some issues in Iifa Tree fields that stuck the game. Many of these fields, even if you don't modify anythings, if you parse them, appears some errors.
So i don't touch them (except two or three things). It works.
Something like that it happens on disk 3, pandemonium fields, because of my modification, i suppose.
In 3rd disk i'd wanted to add Beatrix in the party...the idea is switch Freya to Beatrix (simply adjustment of SetPartyReserve and SetCharacterData) but in many places there are some troubles: Desert Palace, Oeilivert, Gulgu, Ipsen Castle and so on till to Branbal. The code of the game, often checks who is in your party (is in party check, or with other VARiables) to put in game fields this o that character. Even if from Quina, Eiko and Amarant to Cinna, Marcus and Blank, I made it, It doesn't work if you adjust these checks to say to the game "if Beatrix is in the party you've to act like Freya is in the party".
Now, 'cause of Pandemonium fields problems, i rewrited fields only to have Tantalus... I added Beatrix in some battles (like when you search amarant in Ipsen Castle with Zidane solo party).

1) Any suggestions?

2) Where (or with what) i can edit something about trance models on psx version?
I've already gave trance to Cinna, Marcus and Blank removing Change Model line in Spell animation for Trance Activate --- but, you know, i'm wondering, for example, can i associate blank with pluto suit like trance version of Blank?
And on it, how can i choose (or set) this suit for Blank, in normal game?

It's almost a year that i've started to mod the game thank to this forum, to you Tirlititi and to who posts here throught the years.

Thanks.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-01-07 17:15:34
Sorry, I can't help you with those.

1) Yes, the game script isn't meant to allow Beatrix in multiple instances. The Desert Palace / Oeilvert split being surely the biggest obstacle. You'd need to create a bunch of functions to have Beatrix appear in these scenes or even to avoid crashes and soft-locks.
Everytime the script uses something like "RunScriptSync( XX, 252, XX )", it searches for a script linked to one of the 4 party members. It soft-locks if Beatrix is that party member and doesn't have the corresponding function. That kind of thing is used a lot for animations, walks, dialogs... in places where the characters present aren't fixed. And as you said, there are also a lot of "IsInParty" checks, sometimes in scripts that assume that "IsInParty(X)" works for exactly 3 characters when X ranges from 1 to 7...
Honestly, that's a huge work to make and it couldn't even be automatized because each script works differently and should be fixed in a different way.

2) You can't do that for the PSX version. Removing the Change Model line is the furthest thing you can do there. I'm actually not even sure if Blank's Pluto Armor model exists in the discs 2, 3 and 4 in the PSX version (or maybe the battle model exists but not the field version).
I guess searching for the IDs of the trance models in the binary file could lead to some results. If you're lucky, these IDs are stored in a row or in a pattern that could be found. Again, that requires the use of a hexa-decimal file editor, not something that HW can do.
The list of model IDs used in the game can be downloaded here (https://github.com/Albeoris/Memoria/wiki/Database/ModelsAndAnimations.xls).
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: ste459 on 2024-01-21 09:35:19
Back to Hades Workshop after a long time  :) Nice to see that FF9 modding is still active!
Congratulations Tirlititi for your wonderful work!

If it were possible I would like to ask for an help. My goal is to create a multi-hit skill for Steiner or Zidane, inspired from limit breaks of previous FF games. The character shoud run towards target (or targets), hit with multiple sword attacks (dealing and displaying damage with every single hit) and then come back. I tried to edit the spell sequencing using Iai strike for animations, but the result was a mess. I am not able to make Steiner run towards the 2nd target after the first damage point and before jumping back (maybe I need to insert some of the unknow instructions like 0x50., 0x71?). It is possible to make a skill like what I intend to do? Is it the only way to do that?
Thanks in advance!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-01-21 15:43:55
Since you have the Steam version of the game, you can use Memoria's feature for doing things like that. For that, you need to have Memoria updated to some recent version if you haven't done that already: https://github.com/Albeoris/Memoria/releases/latest (https://github.com/Albeoris/Memoria/releases/latest).
Then, use custom ".seq" files. These are similar to the animation sequences you can edit in Hades Workshop but they allow much more things.

For example, in Alternate Fantasy, I used this sequence file for one of Zidane's ability: it performs a double-hit much like what you want (I think).
Code: [Select]
// Player sequence of SFX Iai_Strike_2
// Used by Zidane (Windfall with a dagger)

WaitAnimation: Char=Caster
Message: Text=[CastName] ; Priority=1 ; Title=True ; Reflect=True
SetupReflect: Delay=SFXLoaded
LoadSFX: SFX=Iai_Strike_1 ; Reflect=True ; UseCamera=False
PlayAnimation: Char=Caster ; Anim=MP_SET
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=AllTargets ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=-200 ; UseCollisionRadius=True ; Time=0
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=1100 ; UseCollisionRadius=True ; Anim=MP_STEP_BACK
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=AllTargets ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToPosition: Char=Caster ; AbsolutePosition=Default ; Anim=MP_BACK
Turn: Char=Caster ; BaseAngle=Default ; Time=4
WaitMove: Caster
PlayAnimation: Char=Caster ; Anim=Idle
WaitTurn: Char=Caster
ActivateReflect
WaitReflect
By having this file saved as "{Mod Folder}/StreamingAssets/Data/SpecialEffects/ef030/Sequence.seq", the abilities that use the spell effect "Iai Strike 2" (that you can pick in Hades Workshop) will perform a double-hit with the Iai Strike effect.

You can find more informations on how to write .seq files on the wiki: https://github.com/Albeoris/Memoria/wiki/Battle-SFX-Sequence (https://github.com/Albeoris/Memoria/wiki/Battle-SFX-Sequence)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: ste459 on 2024-01-21 20:12:59
Thanks! Yes, this is very similar to what I had in mind (even the same animation!).

I tested and worked perfectly for a single target. I'm trying now to edit the sequence to make a multi-target spell, in my intentions the character should be able to hit once (or maybe twice) every enemy, one-by-one. The main obstacle is that I have zero programming knowledge  ;D
I tried to edit the sequence as follows:

Code: [Select]
/ Player sequence of SFX Iai_Strike_2
// Used by Zidane (Windfall with a dagger)

WaitAnimation: Char=Caster
Message: Text=[CastName] ; Priority=1 ; Title=True ; Reflect=True
SetupReflect: Delay=SFXLoaded
LoadSFX: SFX=Iai_Strike_1 ; Reflect=True ; UseCamera=False
PlayAnimation: Char=Caster ; Anim=MP_SET
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=FirstTarget ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=FirstTarget ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=FirstTarget ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=FirstTarget ; Distance=-200 ; UseCollisionRadius=True ; Time=0
MoveToTarget: Char=Caster ; Target=FirstTarget ; Distance=1100 ; UseCollisionRadius=True ; Anim=MP_STEP_BACK
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=SecondTarget ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=SecondTarget ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=SecondTarget ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=SecondTarget ; Distance=-200 ; UseCollisionRadius=True ; Time=0
MoveToTarget: Char=Caster ; Target=SecondTarget ; Distance=1100 ; UseCollisionRadius=True ; Anim=MP_STEP_BACK
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=ThirdTarget ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=ThirdTarget ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=ThirdTarget ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=ThirdTarget ; Distance=-200 ; UseCollisionRadius=True ; Time=0
MoveToTarget: Char=Caster ; Target=ThirdTarget ; Distance=1100 ; UseCollisionRadius=True ; Anim=MP_STEP_BACK
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=FourthTarget ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=FourthTarget ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=FourthTarget ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToPosition: Char=Caster ; AbsolutePosition=Default ; Anim=MP_BACK
Turn: Char=Caster ; BaseAngle=Default ; Time=4
WaitMove: Caster
PlayAnimation: Char=Caster ; Anim=Idle
WaitTurn: Char=Caster
ActivateReflect
WaitReflect

However this code makes Steiner hit always 4 times (even if there are <4 enemies), furthermore the damage is dealt to all the enemies with every hit. I've checked the Memoria's wiki u linked, but I'm still not sure of how can I fix this (maybe I need a target loop thread?).

Thanks in advance for your suggestions and your time!!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-01-22 09:42:29
Exactly, you need a target loop thread with the option "Chain". You also need to redo a "LoadSFX" operation when you change the target, which is the reason why it applied to all the targets everytime.

Something like:
Code: [Select]
StartThread: TargetLoop ; Chain ; Sync
LoadSFX: SFX=Iai_Strike_1 ; Target=AllTargets ; Reflect=True ; UseCamera=False
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=AllTargets ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=-200 ; UseCollisionRadius=True ; Time=0
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=1100 ; UseCollisionRadius=True ; Anim=MP_STEP_BACK
WaitMove: Char=Caster
EndThread
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: ste459 on 2024-01-22 22:28:42
Thanks!!! Works great
I used your code to make a double-hit, multi target ability for Steiner. I added a check to prevent him from hitting again an enemy already killed by the first strike, and made minor tweaks like playing the victory animation at start.
The result is quite funny, especially when using custom flags to allow criticals  8)


Code: [Select]
WaitAnimation: Char=Caster
Message: Text=[CastName] ; Priority=1 ; Title=True ; Reflect=True
SetupReflect: Delay=SFXLoaded
SetBackgroundIntensity: Intensity=0.5 ; Time=4 ; HoldDuration=50
Wait: Time=30
PlayAnimation: Char=Caster ; Anim=MP_WIN
WaitAnimation: Char=Caster
WaitTurn: Char=Caster
StartThread: TargetLoop ; Chain ; Sync
LoadSFX: SFX=Iai_Strike_1 ; Target=AllTargets ; Reflect=True ; UseCamera=False
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=AllTargets ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=-200 ; UseCollisionRadius=True ; Time=0
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=500 ; UseCollisionRadius=True ; Anim=MP_STEP_BACK
WaitMove: Char=Caster
EndThread
StartThread: TargetLoop ; Chain ; Sync
StartThread: Condition=TargetHP != 0 ; Sync
LoadSFX: SFX=Iai_Strike_1 ; Target=AllTargets ; Reflect=True ; UseCamera=False
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=670 ; UseCollisionRadius=True ; Anim=MP_RUN
Turn: Char=Caster ; BaseAngle=AllTargets ; Time=4
WaitMove: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=400 ; UseCollisionRadius=True ; Anim=MP_RUN_TO_ATTACK
WaitMove: Char=Caster
StartThread
Wait: Time=4
WaitSFXLoaded: SFX=Iai_Strike_1
PlaySFX: SFX=Iai_Strike_1
WaitSFXDone: SFX=Iai_Strike_1
EndThread
PlayAnimation: Char=Caster ; Anim=MP_ATTACK
WaitAnimation: Char=Caster
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=-200 ; UseCollisionRadius=True ; Time=0
MoveToTarget: Char=Caster ; Target=AllTargets ; Distance=500 ; UseCollisionRadius=True ; Anim=MP_STEP_BACK
WaitMove: Char=Caster
EndThread
EndThread
SetBackgroundIntensity: Intensity=1 ; Time=8
MoveToPosition: Char=Caster ; AbsolutePosition=Default ; Anim=MP_BACK
Turn: Char=Caster ; BaseAngle=Default ; Time=4
WaitMove: Caster
PlayAnimation: Char=Caster ; Anim=Idle
WaitTurn: Char=Caster
ActivateReflect
WaitReflect


There is just an issue. I tested this spell against Yans and noticed that after getting hit twice they countered with Float against themselves. I remember that this bug may happen when an enemy able to counterattack gets hit by a double damaging spell, right? There is now a way to fix that, other than disabling counterattacks for the specific spell I made?
I tried to activate CountersBetterTarget in Memoria.ini with no result
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-01-23 17:12:05
I don't understand why there is this issue with a counter-float on themselves, sorry. I don't know where it comes from. I'm afraid that you'll have to investigate that issue yourself. "CounterBetterTarget" only applies to party members' counters so you don't need to take it into account when checking things. I would say you should rather check Yan's IA.

I don't get why they would target themselves because they don't have any spell that would target themselves normally. So even if there is some kind of mess because of 2 counters being queued simultaneously (and there shouldn't: the behaviour now should be that any new counter is dismissed until the 1st counter is performed), I don't see how the target could end up being themselves.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: ste459 on 2024-01-23 19:58:10
Ok, I'm happy if it is not a known issue, maybe I only messed up something while modding, I'll do some check.

Thanks again Tirliti!!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: razzle on 2024-02-13 14:35:09
This is my first time using this mod, and I followed all the directions for installing. However, my problem is that every time I modify something, like changing "thunder" to "thunderZ" just for testing, after saving it using the save Steam mod and attempting to close the app, it says, "There are unsaved changes. (https://gyazo.com/aa8e9807a9fbffa21e23aa241459041f)
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-02-20 08:47:26
You should better always save your mod as "Steam Mod" but also as HWS saves ("File -> Save Mod").
You cannot resume the modding of the game after closing Hades Workshop if you don't do that: Hades Workshop should always load the base game when you open it: you can resume a mod you previously started by using "File -> Open Mod" and selecting the HWS file you previously saved.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: charlie_38 on 2024-02-24 20:16:48
Hi Charlie_38.
There's no problem. Me and other people have done it without noticing any bug and there shouldn't be any. There would be issues if you tried to load a HWS that was created with HW v0.50b into the older version of HW v0.43, but the other way around is designed to work fine.

Hi Tirlititi,

I've noticed that this new version exports csv files that don't have all items, in StreamingAssets\Data\Items folder.
For example, "Weapons.csv" file, when exported from HW, contains the weapons I've modded and some of the rest of non-modded weapons, but not all of them.
I also have an issue with "Items.csv" and "ItemEffects.csv" files, since they don't contain all items ids. Then, when playing game, some attacks or actions don't work fine, like for example giving an elixir or a phoenix down to a party member.
I've modded some armours and none of them appear in "Armours.csv" file when exported. Only five items appear, and they are all non-modded.

However, text files in FF9_Data\embeddedasset\text folder contain only the modded stuff and they work fine. I guess it is because the tag "[TXID=X]" that must mean something like "mantain the name of the non-modded items until the item X that is modded".

Is this caused because my project was started with a previous HW version? Should I configure something else in HW?

Apart from this issue, in the Help window of HW, it says:

"[Scripts]
You can't edit the World Maps' scripts in the Japanese version of the game."

Does this still happen if you change language setting in HW to Japanese, and edit worldmaps' scripts?

Regards!
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: Tirlititi on 2024-03-02 15:22:13
Hello charlie_38,

Regarding the non-complete CSV and MES files, that's normal. You must get an up-to-date version of Memoria in order for it to work properly though. So once you've updated Memoria (https://github.com/Albeoris/Memoria/releases), it should be all good.

Regarding that note in the Help window, it only concerns the PSX Japanese version of the game. If I recall correctly, one of the World Maps used for debugging had a "corrupted" script that would make Hades Workshop crash if it tried to read it. In the Steam version of the game, that's not a problem anymore and you can indeed edit the Japanese World Maps' scripts if you change language setting in HW to Japanese and it will work fine.
Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: charlie_38 on 2024-03-02 20:57:32
Hi Tirlititi,

I had already updated Memoria (v2023.06.11), and I started to use this new version of HW afterwards. I've just re-updated Memoria though, to check again.
The curious thing about this is that it seems to work fine with a new project: it only exports the changes you make, and then in game everything works correctly. But if I load my HW project and export, the CSV files are exported in the way I explained. That's why I thought it might have something to do with the version of my project: it will only work fine in game if I have the CSV files with all items.

Regarding the note in the Help windows, I had not read the top of that section: it clearly says that all those issues only apply for the PSX version. Sorry for not reading it from the beginning, LOL.

Title: Re: [PSX/PC] General editor - Hades Workshop (0.50b)
Post by: stir472 on 2024-03-03 21:36:22
Hii tirlititi, I am curious to know if there will be a memory or hadesworkshop update in the coming months, greetings. I love your job