1
FF9 Gameplay Releases / Re: [PSX] Comprehensive ATB Enhancement
« on: 2025-04-05 20:39:34 »
Nice work man!
Can this mod ever be made for italian version?
Can this mod ever be made for italian version?
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.
The most recent built of Makou struggles with the Tobal Demo (interactive sampler) and crashes a lot, but older versions such as 1.85 can open it just fine.
@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
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.
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
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
3) Add a line "InitObject" next to the others in the function "Main_Init" to actually create the chest object when entering the field.
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
Sorry for the late answers.
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.
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
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.
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
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
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.
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.
@paky-outsider: Here is the italian version of the mod on PSX (v3.2).
Alternate Fantasy (italiano - PSX)
I didn't test. Tell me if there are bugs.
@fenrrir18: Not yet. Snouz is doing some more works, correcting a couple of bugs. Once he's done, I'll look at what needs to be done for a compatibility version.
Hello Paky-outsider.
Indeed, the description of the v3.2 is gone here, although I could retrieve it from another website:Basically, the integration of Beatrix, the new optional bosses and the change of the battle core mechanics are completly missing from the PSX version. The other aspects are there although a bit different (there are fewer hidden scenes put back, some enemies are different, etc).
However, there is no italian translation for the PSX version, no.
I can make one, though, since I had to do a translation in italian for the PC version. Just give me a couple of days because I need to get the italian version and the process is not so straigtforward.