MADS: Implement subtitles for animation cutscenes

This commit is contained in:
Paul Gilbert 2014-10-14 21:37:00 -04:00
parent b5fb32de5e
commit ea9599b763
3 changed files with 14 additions and 17 deletions

View File

@ -537,49 +537,44 @@ void Animation::update() {
} else if ((_currentFrame >= _messages[idx]._startFrame) && (_currentFrame <= _messages[idx]._endFrame)) {
// Start displaying the message
AnimMessage &me = _messages[idx];
uint8 colIndex1, colIndex2;
if (_flags & ANIMFLAG_ANIMVIEW) {
_rgbResult = palette._paletteUsage.checkRGB(me._rgb1, -1, true, &_palIndex1);
_rgbResult = palette._paletteUsage.checkRGB(me._rgb2, _rgbResult, true, &_palIndex2);
// Update the palette with the two needed colors
int palCount = _palIndex2 - _palIndex1;
if (palCount < 0)
palCount = _palIndex1 - _palIndex2 + 1;
palette.setPalette(palette._mainPalette, MIN(_palIndex1, _palIndex2), palCount);
colIndex1 = _palIndex1;
colIndex2 = _palIndex2;
int palStart = MIN(_palIndex1, _palIndex2);
int palCount = ABS(_palIndex2 - _palIndex1) + 1;
palette.setPalette(&palette._mainPalette[palStart * 3], palStart, palCount);
} else {
// The color index to use is dependant on how many messages are currently on-screen
switch (_messageCtr) {
case 1:
colIndex1 = 252;
_palIndex1 = 252;
break;
case 2:
colIndex1 = 16;
_palIndex1 = 16;
break;
default:
colIndex1 = 250;
_palIndex1 = 250;
break;
}
colIndex2 = colIndex1 + 1;
_palIndex2 = _palIndex1 + 1;
_vm->_palette->setEntry(colIndex1, me._rgb1[0], me._rgb1[1], me._rgb1[2]);
_vm->_palette->setEntry(colIndex2, me._rgb2[0], me._rgb2[1], me._rgb2[2]);
_vm->_palette->setEntry(_palIndex1, me._rgb1[0], me._rgb1[1], me._rgb1[2]);
_vm->_palette->setEntry(_palIndex2, me._rgb2[0], me._rgb2[1], me._rgb2[2]);
}
// Add a kernel message to display the given text
me._kernelMsgIndex = scene._kernelMessages.add(me._pos,
colIndex1 | (colIndex2 << 8),
_palIndex1 | (_palIndex2 << 8),
0, 0, INDEFINITE_TIMEOUT, me._msg);
assert(me._kernelMsgIndex >= 0);
++_messageCtr;
// If there's an accompanying sound, also play it
if (me._soundId > 0)
_vm->_audio->playSound(me._soundId);
_vm->_audio->playSound(me._soundId - 1);
}
}

View File

@ -38,7 +38,7 @@ enum AnimFlag {
ANIMFLAG_CUSTOM_FONT = 0x2000, // Load ccustom font
ANIMFLAG_LOAD_BACKGROUND = 0x0100, // Load background
ANIMFLAG_LOAD_BACKGROUND_ONLY = 0x0200, // Load background only
ANIMFLAG_ANIMVIEW = 0x8000 // Cutscene animation
ANIMFLAG_ANIMVIEW = 0x4000 // Cutscene animation
};
enum AnimBgType {

View File

@ -55,6 +55,8 @@ void MenuView::show() {
while (!_breakFlag && !_vm->shouldQuit()) {
if (_redrawFlag) {
scene._kernelMessages.update();
_vm->_game->_scene.drawElements(_vm->_game->_fx, _vm->_game->_fx);
_redrawFlag = false;
}