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

  • Thread starter Thread starter Tirlititi
  • Start date Start date
Status
Not open for further replies.
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 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).
 
Last edited:
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?
 
Last edited:
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
 
Last edited:
@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 ) ) {
 
Last edited:
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.
 
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 !
 
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.
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.
 
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 around them).
 
Last edited:
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.
 
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 =(
 
So not even a full alphasmasked texture wouldn't work? :/
What a bummer. ^^
 
Well it would look exactly as my screenshot, that's not a photoshop (except the red question mark), I tried it before posting  :mrgreen:
 
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]
Code:
ldc.i4.2 // Replace this 2 by a 1call 0x600091F // EIcon::PollFIconldc.i4.1stloc.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]
Code:
ldc.i4.1call 0x600091F // EIcon::PollFIconldc.i4.1stloc.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]
Code:
ldc.i4.0ret
 
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]
Code:
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}
 
what is the script command to change which music plays during a battle? I've searched endlessly, and can't find a code.
 
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.
 
Tirlititi, please answer my question, I've searched, scanned every possible function list, can't find it.
 
Status
Not open for further replies.
Back
Top