Yes, that's one of the possible ways and probably the best one
1) create a window with one static control which will contain the narrator text
WINDOW
{
X = 0
Y = 500
WIDTH = 800
HEIGHT = 100
SCRIPT = "path\NarratorWin.script"
STATIC
{
NAME = "text"
X = 0
Y = 0
WIDTH = 800
HEIGHT = 100
FONT = "fonts\MyCoolFont.font"
TEXT_ALIGN = "center"
}
}
Of course, you need to change the position and size appropriately.
2) Edit the logic of the window, i.e. the attached NarratorWin.script
We will add a method to display the text, so that the method is available from the outside.
method DisplayText(Text, Duration)
{
// query the static control
var St = this.GetControl("text");
// set the text and wait
St.Text = Text;
Sleep(Duration);
// hide the text after the "Duration" period has passed
St.Text = "";
}
3) You need to load the narrator window at startup, the best thing would be to load it somewhere in the game.script. We will store the window in a global variable so that it's available everywhere.
global WinNarrator = Game.LoadWindow("path\Narrator.window");
4) Now, whenever you need to display the narrator text, just call the DisplayText of the WinNarrator.
global WinNarrator;
WinNarrator.DisplayText("Balh blah", 2000);
You may want to add the global WinNarrator; line to the base.inc file, so that it's (by default) included in all the scripts so that you don't need to decalre it exlicitly.
If you want to achieve the Gabriel Knight effect, you can also set the game viewport a bit smaller than the game's resolution to get the black stripe at the bottom of the screen. The viewport can be set in ProjectMan.
(Note: I didn't test the code so there may be some mistakes, but you get the idea)