aboutsummaryrefslogtreecommitdiff
path: root/engines/mads
diff options
context:
space:
mode:
authorPaul Gilbert2014-10-14 21:37:00 -0400
committerPaul Gilbert2014-10-14 21:37:00 -0400
commitea9599b763e0e8aef55282d621828ebfc7b1a9f6 (patch)
tree6c99050d86629ac12e78f8ba9bb3ce55198d6f67 /engines/mads
parentb5fb32de5ea2a4f3dd4133c423d666d00f37744f (diff)
downloadscummvm-rg350-ea9599b763e0e8aef55282d621828ebfc7b1a9f6.tar.gz
scummvm-rg350-ea9599b763e0e8aef55282d621828ebfc7b1a9f6.tar.bz2
scummvm-rg350-ea9599b763e0e8aef55282d621828ebfc7b1a9f6.zip
MADS: Implement subtitles for animation cutscenes
Diffstat (limited to 'engines/mads')
-rw-r--r--engines/mads/animation.cpp27
-rw-r--r--engines/mads/animation.h2
-rw-r--r--engines/mads/nebular/menu_nebular.cpp2
3 files changed, 14 insertions, 17 deletions
diff --git a/engines/mads/animation.cpp b/engines/mads/animation.cpp
index bc3708b5f5..9f0e0adb6d 100644
--- a/engines/mads/animation.cpp
+++ b/engines/mads/animation.cpp
@@ -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);
}
}
diff --git a/engines/mads/animation.h b/engines/mads/animation.h
index b7e98e72e4..8b85a5370d 100644
--- a/engines/mads/animation.h
+++ b/engines/mads/animation.h
@@ -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 {
diff --git a/engines/mads/nebular/menu_nebular.cpp b/engines/mads/nebular/menu_nebular.cpp
index 0d7b11cf4b..64c91d5f1b 100644
--- a/engines/mads/nebular/menu_nebular.cpp
+++ b/engines/mads/nebular/menu_nebular.cpp
@@ -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;
}