private bool CommandFlirt(ushort[] data, ref int i)
{
_skyScreen.StartSequence(data[i++]);
while ((data[i] != COMMANDEND) || _skyScreen.SequenceRunning())
{
while ((_skyScreen.SeqFramesLeft() < data[i]))
{
i++;
var command = data[i++];
switch (command)
{
case IC_PREPARE_TEXT:
_skyText.DisplayText(data[i++], _textBuf, true, IntroTextWidth, 255);
break;
case IC_SHOW_TEXT:
using (var header = ServiceLocator.Platform.WriteStructure<DataFileHeader>(_textBuf, 0))
{
header.Object.s_x = data[i++];
header.Object.s_y = data[i++];
}
ShowTextBuf();
break;
case IC_REMOVE_TEXT:
RestoreScreen();
break;
case IC_MAKE_SOUND:
_skySound.PlaySound(data[0], data[1], 0);
i += 2;
break;
case IC_FX_VOLUME:
_skySound.PlaySound(1, data[i], 0);
i++;
break;
default:
throw new NotSupportedException(string.Format("Unknown FLIRT command {0:X2}", command));
}
}
if (!EscDelay(50))
{
_skyScreen.StopSequence();
return false;
}
}
i++; // move pointer over "COMMANDEND"
return true;
}