@ToraCarol: Making a cutscene is never quite easy but it is possible.
It indeed begins in a "Region" function of the field 254 (Swamp). There are two regions: one going forward to field 256 (Trail) and one going back to field 253 (Spring). You want to make it so that the first time that one gets to 256, a cutscene occurs. You may do it like that in general:
// A variable that is not used ; I think that you can take 60000 and the followings for booleans (it corresponds to 7500 for the other types of variable)
if ( !VARL_GenBool_XXX ) {
set VARL_GenBool_XXX = 1
// Do whatever you want as a one-time event
} else {
// Do whatever you want to be the default (in this case, going to field 256 normally)
}
You can see that there is already a code like this in the function "Region1_Range" because there's already a one-time cinematic playing when you go there for the first time. You can simply use it and change the destination field of the first case to 250 instead of 256, so you get there after the cinematic showing the Plant Brain.
There is a variable, "General_FieldEntrance" that can be used to comunicate simply between fields. Most of the time, it is used to say "where should the player appears on the field". You may also use it to say that you are not entering the field 250 normally but as a cutscene.
So change that variable to something unused ("set General_FieldEntrance = 10" for instance) and code what it should trigger inside the code of the field 250.
First, in the function "Main_Init", you want to prevent Zidane from appearing. So for these lines:
if ( ( General_ScenarioCounter == 2010 ) && ( !VARL_GenBool_2432 ) ) {
set VAR_GlobUInt8_30 = 1
InitObject( 10, 0 )
InitObject( 7, 0 )
InitCode( 6, 0 )
InitRegion( 8, 0 )
InitRegion( 9, 0 )
set VARL_GenBool_2432 = 1
} else {
set VAR_GlobUInt8_30 = 0
InitObject( 10, 0 )
InitRegion( 8, 0 )
InitRegion( 9, 0 )
}
Put a condition for initializing Zidane (and, while we are at it, the exiting regions):
} else {
set VAR_GlobUInt8_30 = 0
if ( General_FieldEntrance != 10 ) {
InitObject( 10, 0 )
InitRegion( 8, 0 )
InitRegion( 9, 0 )
} else {
// Init the object corresponding to Blank, like "InitObject( 17, 0 )"
}
}
So you need to create a new entry that is linked to Blank's 3D model. You are very lucky there because I think that Blank is one of the few models that can be accessed in any field in the PSX version (you won't be able to use a lot of animations though). The Steam version is incredibly better for that, but it's still possible...
So, right-click on the function list and add a new function. You can use the entry 17 that is reserved for the 8th player character normally (it is the slot used by Blank before Amarant joins; it doesn't have a lot of importance here anyway). Use a function of type "0" (for initialization) and put a code like this inside:
SetModel( 5467, 87 )
CreateObject( POSITION_X, POSITION_Y )
TurnInstant( ANGLE )
SetStandAnimation( 462 )
SetWalkAnimation( 5225 )
SetRunAnimation( 5222 )
SetLeftAnimation( 5223 )
SetRightAnimation( 5224 )
SetObjectLogicalSize( 20, 20, 30 )
SetAnimationStandSpeed( 14, 16, 18, 20 )
SetHeadAngle( 96, 61 )
return
Then add a "Loop" function for him (add function of type "1") and code a cutscene there...
At the end of the cutscene (either in that field or in another), you should put the following lines to give the control back to Zidane in the field 256:
set General_FieldEntrance = 27
Field( 256 )
Check
this tutorial for a detailed example of how you can do cutscenes.
You can see that, up to there, you didn't need to declare or use any new variable. You can do a lot with just the variables that are already used by the game, especially when you want to do standard things like moving to another field for a cutscene. Eventually though, you need to use new variables in most cases.
Here is how to declare local and global variables. You can use general variables without declaring them but you should be sure to use one that the game doesn't use already (as said, the variables with an ID higher than 7500 should be fine).
@lyokoffx: I don't really understand what you say...
Hades Workshop is coded in C++ and the source code is available
here.
I can't say if HW is "qualified" to create a sequel to FF9 because I don't know what you are thinking of... It depends of how different the game would be.