Show Posts

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


Messages - Tirlititi

Pages: [1] 2 3 4 5 6 ... 35
1
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, 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.

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

3
Hi,
Fortunatly, that shouldn't be too hard. You only need to emulate the method "TryCriticalHit" and change the increase formula it uses.
Code: [Select]
// In your "CommonScript.cs"

public static void TryCriticalHitAdjusted(BattleCalculator _v)
{
Int32 quarterWill = _v.Caster.Data.elem.wpr >> 2;
if (quarterWill != 0 && (Comn.random16() % quarterWill) + _v.Caster.Data.critical_rate_deal_bonus + _v.Target.Data.critical_rate_receive_bonus > Comn.random16() % 100)
{
_v.Target.HpDamage = (Int32)(_v.Target.HpDamage / 4f + Math.Min(15000, _v.Target.HpDamage) / 4f + Math.Min(10000, _v.Target.HpDamage) / 2f);
// Do the same for "_v.Target.MpDamage"; apparently you don't use "_v.Context.Attack" in your situation when the critical strike triggers
_v.Target.Flags |= CalcFlag.Critical;
}
}
And then you use "CommonScript.TryCriticalHitAdjusted(_v)" in place of "_v.TryCriticalHit()".
I think the rounding in my formula is correct, but you'd better check how it behaves exactly in practice to be sure about it.

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

5
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

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

7
Hi.
I'm pretty sure that's the mod Dragon Knight Rising messing with abilities (and surely the items as well, hence the Cotton Robe price). I don't think you can do much about that right now: either you'll have these differences or you need to disable it. Mod compatibility of two mods that both change the gameplay is difficult to maintain unfortunatly.

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

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

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

11
Ah yes, I didn't remember when I fixed that bug. It's a bug of Memoria and it's fixed in that commit... 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.

12
Thank you. Best wishes to you, wherever you are.

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

14
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

15
Yes, it works now with the new system provided by Memoria.

16
1) Install FF9
2) Install Moguri
3) Install latest version of Memoria

17
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 ^^'

18
Very simple: you open a file "AbilityFeatures.txt" (for example "StreamingAssets/Data/Characters/Abilities/AbilityFeatures.txt" but you could do that with the Ability Features of any active mod as they can have cumulative effects).

In this file, at the end, you add these lines:
Code: [Select]
>SA Global+
BattleResult [code=BonusExp] BonusExp / 2 [ /code ]
This reduces the experience gain to 50%. It basically works like the supporting ability "Level Up" but it applies without being tied to any supporting ability.

NOTE: I have to write "[ /code ]" in the code block because it is the same tag as the forum's format, but you need to remove the spaces in there.

19
Not really. In many situations, you can't read a mod without its hws file. It happened to end up this way although that was not especially the objective at start.

The changes in AF in the past few years tended to add a couple more mechanics on one hand (eg. the behaviour of "Blind" that is much more subtile now) but to reduce the overall difficulty of the mod. It never was a "ludicrously hard mod" though, in my opinion.

20
You need the .hws source file of the mod for that.
It's available here.

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

22
Recently i got a Steam Deck, is it the mod playable in a steam deck ?
It should, yes. I don't have a Steam Deck and cannot help you much in that regard, but there are tutorials on how to install the latest Memoria versions. If you succeed in doing that, then using Alternate Fantasy shouldn't be harder (at worst, you'll need to put the mod manually in the game's folder, if the Mod Manager doesn't work on the Steam Deck).

SonicBrawler wrote this about installing Memoria on Steam Deck. It's about the framerate (FPS) update of Memoria but it works the same with the versions even more recent:
Quote
Assuming you've already got Moguri installed, go to Desktop Mode and all you have to do is put the Memoria Patcher from the embedded video's description into your FFIX folder, then add the patcher .exe as a non-Steam game. Then right-click the patcher in Steam and select Properties > Compatibility. There will be a single checkbox that says something like "Force use of a Steam Compatibility tool". Check that, and from the drop down that appears, select Proton 7. Then hit Play in Steam and it will install it.

I found the checkboxes for the launcher did not work in Steam Deck (the Moguri launcher did before), but you can still activate the settings you need by editing Memoria.ini.

Also worth noting you can go as high as 120 FPS, though Steam Deck's screen is 60hz so no need to go higher than that for it.

---‐----------

There are few minor issues to be aware of:

- The game's lack of animation blending is much more apparent at higher framerates.

- World map animations are locked at the original FPS even when increasing it, it really just makes the camera turning look smoother. If you think this looks off-putting, you can turn it off individually for the world map.

- 2D sprite VFX will still be at the original 15 FPS, they would probably need a whole mod to update the VFX through interpolation or just use brand new VFX.

Apparently, the newest (or beta version) of Proton has less problems, especially with tick boxes on the launcher and things like that. Again, I don't really know how all of this work.

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

24
That was a compatibility problem when using an old version of Memoria.
Make sure that your have things up-to-date: the latest version of Memoria can be found here (Memoria.Patcher.exe) and the latest version of Alternate Fantasy should be installed from Memoria's mod manager.

If you install the Moguri Mod afterwards, you need to re-launch the Memoria Patcher.

25
Yes, the mod is made to fully work with all the languages. I don't speak japanese (nor much of german, spanish or italian), so you'll surely find blatant errors in the japanese translation, but there shouldn't be any bug.

Pages: [1] 2 3 4 5 6 ... 35