Show Posts

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


Messages - ChikoLad

Pages: [1]
1
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.

2
@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.
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.

3
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.

4
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:


5
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:

  • "Setting_PartyReserve" is a value used for what characters are in your reserve for party selection menus (includes current active members and inactive members). Each character has a value assigned for this, and to set multiple characters, you add their values together. For example, Zidane's value is 1, and Freya's value is 16. So if I wanted just Zidane and Freya in the party reserve, I set the value to "Setting_PartyReserve = 17".
  • If you see something like "Party( x, y )", where x and y have a number (most instances in the vanilla game will be "Party( 4, 1 )"), this is for the Party Select UI. "x" refers to the number of characters the player must select for their active party, while y refers to the characters that are locked to the active party, meaning the player must select them to continue. y uses the same values for characters as Setting_PartyReserve. So if I wanted to make Freya the locked character and also make the player only select one character, I would enter "Party( 1, 16 )".
  • "set AddParty(x)" and "RemoveParty(x)" are used to forcibly add or remove a character to/from the party whenever you want. You could tie this to anything, such as at the start of a battle, start of a field, interacting with or talking to someone, etc. Each character has an ID number for this, starting at 0 for Zidane, and going up for each character from there, such as 1 for Vivi.

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?

6
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?

7
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.

8
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.

9
Hey DV, thank you for the very detailed response! :D

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

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

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

And this is where the song is located:



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

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

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

Code: [Select]
#HW newfunction 1
Function Beatrix_Loop
    if ( !VAR_LocUInt8_33 ) {
        set VAR_LocUInt8_33 = 1
        while ( GetBattleState != 1 ) {
            Wait( 1 )
            set VAR_GenUInt8_206 = GetRandom
        }
        RunBattleCode( 35, 0 ) // Enable ATB
        while ( GetBattleState != 4 ) {
            Wait( 1 )
        }
    }
    if ( !VAR_LocUInt8_30 ) {
        if ( VAR_LocUInt8_31 ) {
            set SV_FunctionEnemy[HP] =$ FirstOf(SV_FunctionEnemy[MAX_HP])
            set SV_FunctionEnemy[ATB] =$ FirstOf(SV_FunctionEnemy[MAX_ATB])
            if ( VAR_LocUInt8_38 ) {
                if ( #Matching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) {
                    set VAR_LocUInt8_38 = 0
                    set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
                } else {
                    if ( GetAttacker == SV_FunctionEnemy ) {
                        if ( GetTarget && ( #( NotMatching(SV_PlayerTeam[STATUS_CURRENT_A], 257) & NotMatching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) ) ) {
                            set VAR_LocUInt8_30 = 1
                            Wait( 5 )
                            if ( GetBattleState != 4 ) {
                                return
                            }
                            RunBattleCode( 32, 0 ) // Disable ATB
                            while ( GetBattleState != 1 ) {
                                Wait( 1 )
                            }
                            set #( SV_Target = SV_FunctionEnemy )
                            AttackSpecial( 7 ) // Talk
                            while ( IsAttacking != 0 ) {
                                Wait( 1 )
                            }
                            RunBattleCode( 33, 1 ) // End Battle
                            return
                        }
                    }
                }
            } else {
                if ( !( #Matching(SV_PlayerTeam[STATUS_CURRENT_B], 64) ) ) {
                    set SV_FunctionEnemy[PREVENT_ATTACK] =$ 1
                }
            }
        }
    }
    Wait( 1 )
        set #( VAR_GlobUInt16_24 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 0 ) )
        set #( VAR_GlobUInt16_24 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 1 ) )
        set #( VAR_GlobUInt16_26 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 2 ) )
        set #( VAR_GlobUInt16_28 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 3 ) )
        set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 4 ) )
        set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 5 ) )
        set #( VAR_GlobUInt16_28 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 6 ) )
        set #( VAR_GlobUInt16_30 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 7 ) )
        set #( VAR_GlobUInt16_30 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 8 ) )
        set #( VAR_GlobUInt16_32 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 9 ) )
        set #( VAR_GlobUInt16_34 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 10 ) )
        set #( VAR_GlobUInt16_34 |= ( SV_PlayerTeam[MODEL_TYPE] ==$ 11 ) )
        set #( VAR_GlobUInt16_36 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 12 ) )
        set #( VAR_GlobUInt16_38 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 13 ) )
        set #( VAR_GlobUInt16_40 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 15 ) )
        set #( VAR_GlobUInt16_42 = ( SV_PlayerTeam[MODEL_TYPE] ==$ 16 ) )
    loop

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

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

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

10
So I'm trying to make some changes to the third Beatrix fight, but am having some difficulties and have some questions:

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

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

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

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

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

4) Is it possible to add custom dialogue windows to a battle?

11
So I was able to get my fbx exports working but only if I export as .obj files. A bit strange, but I think this is fine for now as I don't need armature for what I'm doing.

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

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

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



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

FYI I'm using Blender as my 3D program, exporting as FBX.

12
Hey, so I ended up figuring out how to do the party switching stuff I wanted and released an early version of my Freya Game+ mod.

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

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

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

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

EDIT: Just discovered that the reason some models don't open properly is because they're actually empty. Is there a reason for models being empty after an export here?

13


DOWNLOAD


---------------------------------

Since the PS1 days, people have done solo runs of FFIX with their favourite characters. However, due to the way the game frequently shuffles your party around as part of the story, players would either have to set arbitrary restrictions for the sections where their solo character was not available, or rely on frequent save hacking whenever their chosen character was removed from the party.

I had the idea to do a solo run with Freya myself, but was surprised when I found there wasn't a convenient way to do this even in the Steam version with all of it's modding support. So I decided to make a mod that would allow me to do just that.

Freya Game+ is a Final Fantasy IX mod that allows you to have Freya in your party at almost all times throughout the game.
This mod removes the need to do any save editing or setting personal restrictions if you want to do a Freya Solo Run.

However, you can also opt to play the game normally with other characters if you wish, but Freya will be present in your party
after any forced party shuffles throughout the story.

The mod is currently a little inconsistent in how it handles putting Freya in the party, such as sometimes replacing Zidane
or another character, and sometimes adding Freya alongside whichever characters are actually present in the story.

I have personally done a Solo Run using the mod to make sure Freya can beat the entire game by herself, and it is indeed very possible, even without farming Dragon Crest.
There should also be no crashes or other issues along the way.

In order to do a "Solo Run" in most battles, the player should simply let the rest of the party get KO'd (Freya can attack them to speed up the process)
and only engage the enemy after the rest of the party is KO'd. I'm hoping to have a future release include a version of the mod that only has Freya in the party to make this
more authentic.

Why not just make a mod that allows you to do this with any character?

Currently, I do not know of a way to have any sort of party switching menu constantly available throughout the whole game. Even if I technically call for all eight party members whenever there is a party call, the game will just use the first four unless it's already a section that lets you choose your party (such as when Amarant is first recruited). I also was uncertain of how messing with Zidane's placement would be at first (for the most part it seems to pose little issue in the end though). I may include a basic solo run mod for the rest of the cast as a bonus in the future of this mod as for most of the cast, it should just be a case of me switching out Freya's ID for whoever else in my current modded files, but I also want to do more with the Freya version as I am looking to make it a little more ambitious as you will see below. This mod has been an iterative process to help me learn how to mod FFIX, and will continue to be going forward.

---------------------------------

Installation:
If you're playing off an otherwise unmodded game, copy the StreamingAssets folder over the one in your FINAL FANTASY IX folder. Make a backup of the original p0data7.bin file from
your game's StreamingAssets folder in case you want to revert back later.

If you have the Moguri Mod installed via the installer .exe, navigate to C:/Program Files/Moguri Mod, and replace the StreamingAssets folder there instead.
Make a backup of the original p0data7.bin file from the Moguri Mod directory just in case.

Known bugs/quirks to be mindful of:

-While there should be no issue if you load a save from an in progress playthrough after installing Freya Game+, it's better to start the game
from the beginning for the best experience, especially if you want to do a Solo Run. If you're playing Final Fantasy IX for the first time,
I recommend playing through the vanilla game first even if Freya is your favourite character, but the choice is up to you. The mod currently
does not change anything about the cutscenes.

-Freya is not implemented as the exploration avatar in areas where she normally isn't already, as this aspect of the game is actually handled
completely independently of your battle party setup (with the sole exception of Desert Palace). This is a feature I plan to work on in the future.

-If Freya's standard Jump command is used and she is still in the air during a situation where a new party member joins mid-battle
(such as with Blank on the boss at the end of Evil Forest), Freya will stay in the air and continue using her "Spear" command from
her Trance form for the rest of the fight, though the fight will still end as normal once the enemy's HP is depleted.

-For the Festival of the Hunt, you will have only Freya in your party, however your points are still counted as Zidane's points.
This means you still need to lose on purpose to let Freya win if you want to get the Coral Ring. Zidane will be present for the Zahgnol fight, but will leave the party after.

-When the player still has less than the full eight characters from the main party, Blank, Marcus, and Cinna portraits fill in the empty preview slots in Equipment shops.

-There are some rare instances where Freya is technically not in the party (i.e not in your party menu). These are mostly limited to situations where the player
cannot engage in any battles until the next party call (at which point Freya is then added back in), or situations where the player CAN go to the world map to fight
but has little reason to especially if they are doing a Solo Run. Most of these will likely be fixed in the next release.

-The one definite exception to this for now is when you control Steiner in Alexandria Castle at the beginning of the game. For some reason, putting Freya in the party
here was causing the game to crash after the FMV where Steiner swings on the flags to pursue Garnet. It's no big deal though since there are no battles in that part
of the game so I plan to just leave this untouched. Steiner will be in your party as normal at this point but Freya will return once you take control of Zidane again.

-When Steiner, Garnet, and Marcus are exploring Treno, and the player attempts to fight the monsters at the weapon shop, Freya will not be selectable for these
fights despite being in the party. She is selectable later in the game when she is actually present in the story.

-For situations where the player is prompted to choose their own party, the player will simply have to select Freya as normal if they want to use her, otherwise
she will not appear until the next forced party call or until the player selects her for the party later.

-When Amarant first joins the party and you are given the choice to select your party, all eight main party members will be selectable (so you could bring Steiner
to the Iifa Tree as well as Freya, for example).

-For the Oelivert/Desert Palace party split, the player should select Freya for Zidane's team if they wish to use her in Oelivert. After finishing Oelivert, the
player will once again be prompted to choose a party from the eight main characters (normally you would just have to use the remaining four in the vanilla game).
Freya should be included once again if you wish to use her. Do NOT select Zidane for your Desert Palace party though, as this will trigger a softlock in the
following cutscene as despite being programmed as the highest priority exploration avatar for this area, Zidane does not have dialogue to progress this cutscene
as he shouldn't be present in Desert Palace's team.

-If the player wishes to control Freya as their exploration avatar in Desert Palace, the player must select Freya/Garnet/Quina/Amarant as their party. Vivi, Steiner, and Eiko
take priority over Freya if any of them are present in the party.

-During the first "You're Not Alone" fight in Pandemonium where Freya and Amarant help Zidane in the vanilla game, the game will at first only load Amarant. Amarant will then disappear
leaving no party members on screen, and then Freya will enter with her "Looks like you could use some help" quote. The battle will continue as normal from there and Freya fights the full boss on her own from it's max HP.
For the following two battles, Freya simply replaces Zidane.

-FFIX's EXP system works in such a way that it splits gained EXP among all participants that aren't KO'd or afflicted by an EXP gain preventing debuff like Virus. If you're doing a Solo Run with Freya, she will gain
EXP far quicker than normal as she will receive all of the gained EXP. For reference, she was Lv. 64 when I reached the end of the game in my test run with minimal grinding/random encounters. Normally she'd likely only to be in the Lv. 40 range if the EXP had been shared as normal.

-If you're using Moguri Mod, you may encounter a softlock after defeating Deathguise (boss before Trance Kuja) as the cutscene with Kuja will not initiate. This is not an issue with Freya Game+ but is an issue with Moguri Mod as it happens with or without Freya Game+ (at least for me).
Uninstall all traces of Moguri Mod when you reach this point in the game and reinstall the vanilla game. You could just finish your run without reinstalling Freya Game+ at this point as Freya is available to use in your party in the end-game anyway.

---------------------------------

Plans for future releases (nothing final yet, I'm learning as I go!)

-Clean up the current implementation a bit (more consistent handling of Freya's party placement).

-A version of the mod that ONLY allows you to use Freya throughout the entire game where other party members are not present in battle, allowing for a true Solo experience.

-Making Freya the exploration avatar for most of the game (not sure what extent I will go to with this - the whole game or just the parts where Freya is present in the story).

-A remixed/expanded story that gives Freya increased prominence and screen time (not usurping Zidane's role in the story, but more exploring her thoughts on everything, some remixed sequences, and more interactions between Freya and the rest of the cast).

-Making the third Beatrix fight a solo fight for Freya, that is properly "winnable" and has a forced Trance moment for Freya, with an altered cutscene before and after the fight.

-Sir Fratley's lance as a new weapon for Freya.

-A new secret boss.

-The more basic version of the mod will always be included in case people aren't interested in the above.

---------------------------------

The included logo is just for if you want to use it in thumbnails or the like if you want to upload your playthrough to YouTube or something.

Hope you enjoy the mod, and feel free to ask any questions or report any issues you encounter!

14
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.

15
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

16
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?

17
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).

18
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

Pages: [1]