Штатный метод Talk() делает одно, на первый взляд незаметное, действие - интерпретирует подаваемые на вход реплики согласно данных из String Table. В твоем случае, когда ты пишешь свой Talk() тебе нужно выполнять эту функцию самому. Для этого в движке есть еще один метод Game.ExpandString(String); Ты даешь ему на вход текст в формате "/ID/бла-бла-бла" , а он тебе возвращает соответствие из String table.
Выглядеть это будет примерно так:
method Talk(replika)
{
var WinDialog = Game.LoadWindow("Путь к файлу окна");
var vOkno = WinDialog.GetControl("имя элемента Static control");
vOkno.Text = Game.ExpandString(replika);
код, реализовывающий паузу в игре на время, достаточное для прочтения текста
Game.UnloadObject(WinDialog);
}К слову, штатный Talk() еще и звук воспроизводит, если в параметрах указать имя файла.
юзаю этот метод (вернее 3 его вариации, каждая с разной задержкой, для прочтения текста).
Необходимую задержку можно определять из длины фразы - replika.Length*время_прочтения_одной_буквы
А если использовать озвучку "Game.PlaySound()", то текст должен быть виден, пока звучит реплика. Определяется это с помощью Game.IsSoundPlaying()