aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2005-11-13 07:04:56 +0000
committerTravis Howell2005-11-13 07:04:56 +0000
commitc79de31518f6fa3d465d09dc03118fe84c183692 (patch)
tree6b7efe282b2bbd8e1a87c6f3b5e5a29ab041a571
parent85cbb171030432d902c113db377ea30ecedac0e5 (diff)
downloadscummvm-rg350-c79de31518f6fa3d465d09dc03118fe84c183692.tar.gz
scummvm-rg350-c79de31518f6fa3d465d09dc03118fe84c183692.tar.bz2
scummvm-rg350-c79de31518f6fa3d465d09dc03118fe84c183692.zip
Fix slowFadein during Lion ride in Simon2.
Cleanup. svn-id: r19581
-rw-r--r--simon/debug.h4
-rw-r--r--simon/simon.cpp105
-rw-r--r--simon/simon.h4
-rw-r--r--simon/vga.cpp6
4 files changed, 46 insertions, 73 deletions
diff --git a/simon/debug.h b/simon/debug.h
index 40d5578c9c..d61c2e32a2 100644
--- a/simon/debug.h
+++ b/simon/debug.h
@@ -1401,7 +1401,7 @@ const char *const simon2_video_opcode_name_table[] = {
"|FASTFADEIN",
/* 64 */
"|SKIP_IF_SPEECH_ENDED",
- "|PALETTE_THING_3",
+ "|SLOW_FADE_IN",
"|SKIP_IF_NZ",
"|SKIP_IF_GE",
/* 68 */
@@ -1498,7 +1498,7 @@ const char *const feeblefiles_video_opcode_name_table[] = {
"|FASTFADEIN",
/* 64 */
"|SKIP_IF_SPEECH_ENDED",
- "|PALETTE_THING_3",
+ "|SLOW_FADE_IN",
"|SKIP_IF_NZ",
"|SKIP_IF_GE",
/* 68 */
diff --git a/simon/simon.cpp b/simon/simon.cpp
index eda0a6720c..793a37648f 100644
--- a/simon/simon.cpp
+++ b/simon/simon.cpp
@@ -738,7 +738,7 @@ void SimonEngine::palette_fadeout(uint32 *pal_values, uint num) {
p[2] -= 8;
else
p[2] = 0;
- p += sizeof(uint32);
+ p += 4;
} while (--num);
}
@@ -2520,7 +2520,7 @@ void SimonEngine::set_video_mode_internal(uint mode, uint vga_res_id) {
void SimonEngine::o_fade_to_black() {
uint i;
- memcpy(_videoBuf1, _paletteBackup, 256 * sizeof(uint32));
+ memcpy(_videoBuf1, _paletteBackup, 1024);
i = NUM_PALETTE_FADEOUT;
do {
@@ -2534,8 +2534,8 @@ void SimonEngine::o_fade_to_black() {
delay(5);
} while (--i);
- memcpy(_paletteBackup, _videoBuf1, 256 * sizeof(uint32));
- memcpy(_palette, _videoBuf1, 256 * sizeof(uint32));
+ memcpy(_paletteBackup, _videoBuf1, 1024);
+ memcpy(_palette, _videoBuf1, 1024);
}
void SimonEngine::delete_vga_timer(VgaTimerEntry * vte) {
@@ -3770,7 +3770,7 @@ void SimonEngine::openGameFile() {
resfile_read(_gameOffsetsPtr, 0, size);
#if defined(SCUMM_BIG_ENDIAN)
- for (uint r = 0; r < size / sizeof(uint32); r++)
+ for (uint r = 0; r < size / 4; r++)
_gameOffsetsPtr[r] = FROM_LE_32(_gameOffsetsPtr[r]);
#endif
}
@@ -3863,8 +3863,8 @@ void SimonEngine::dx_update_screen_and_palette() {
if (_paletteColorCount == 0 && _paletteFlag == 1) {
_paletteFlag = 0;
- if (memcmp(_palette, _paletteBackup, 256 * 4) != 0) {
- memcpy(_paletteBackup, _palette, 256 * 4);
+ if (memcmp(_palette, _paletteBackup, 1024) != 0) {
+ memcpy(_paletteBackup, _palette, 1024);
_system->setPalette(_palette, 0, 256);
}
}
@@ -3879,79 +3879,52 @@ void SimonEngine::dx_update_screen_and_palette() {
delay(100);
_usePaletteDelay = false;
}
- realizePalette();
+ fastFadeIn();
}
}
-void SimonEngine::realizePalette() {
- _paletteFlag = false;
- memcpy(_paletteBackup, _palette, 256 * 4);
-
+void SimonEngine::fastFadeIn() {
if (_paletteColorCount & 0x8000) {
- fadeUpPalette();
+ slowFadeIn();
} else {
+ _paletteFlag = false;
+ memcpy(_paletteBackup, _palette, 1024);
_system->setPalette(_palette, 0, _paletteColorCount);
+ _paletteColorCount = 0;
}
-
- _paletteColorCount = 0;
}
-void SimonEngine::fadeUpPalette() {
- bool done;
-
- _paletteColorCount = (_paletteColorCount & 0x7fff) / 4;
-
- memset(_videoBuf1, 0, _paletteColorCount * sizeof(uint32));
+void SimonEngine::slowFadeIn() {
+ uint8 paletteTmp[768];
+ uint8 *src, *dst;
+ int c, p;
- // This function is used by Simon 2 when riding the lion to the goblin
- // camp. Note that _paletteColorCount is not 1024 in this scene, so
- // only part of the palette is faded up. But apparently that's enough,
- // as long as we make sure that the remaining palette colours aren't
- // completely ignored.
+ _paletteColorCount &= 0x7fff;
+ _paletteFlag = false;
- if (_paletteColorCount < _videoNumPalColors)
- memcpy(_videoBuf1 + _paletteColorCount * sizeof(uint32),
- _palette + _paletteColorCount * sizeof(uint32),
- (_videoNumPalColors - _paletteColorCount) * sizeof(uint32));
+ memcpy(_videoBuf1, _palette, 1024); // Difference
+ memset(_videoBuf1, 0, 768);
- do {
- uint8 *src;
- byte *dst;
- int i;
+ memcpy(_paletteBackup, _palette, 768);
+ memcpy(paletteTmp, _palette, 768);
- done = true;
- src = _palette;
- dst = _videoBuf1;
+ for (c = 255; c > 0; c -= 4) {
+ src = paletteTmp;
+ dst = _videoBuf1;
- for (i = 0; i < _paletteColorCount; i++) {
- if (src[0] > dst[0]) {
- if (dst[0] > src[0] - 4)
- dst[0] = src[0];
- else
- dst[0] += 4;
- done = false;
- }
- if (src[1] > dst[1]) {
- if (dst[1] > src[1] - 4)
- dst[1] = src[1];
- else
- dst[1] += 4;
- done = false;
- }
- if (src[2] > dst[2]) {
- if (dst[2] > src[2] - 4)
- dst[2] = src[2];
- else
- dst[2] += 4;
- done = false;
- }
- dst += 4;
- src += 4;
- }
-
- _system->setPalette(_videoBuf1, 0, _videoNumPalColors);
- delay(5);
- } while (!done);
+ for (p = _paletteColorCount; p !=0 ; p--) {
+ if (*src >= c)
+ *dst = *dst + 4;
+
+ src++;
+ dst++;
+ }
+ _system->setPalette(_videoBuf1, 0, _videoNumPalColors);
+ if (_fade)
+ _system->updateScreen();
+ delay(5);
+ }
+ _paletteColorCount = 0;
}
int SimonEngine::go() {
diff --git a/simon/simon.h b/simon/simon.h
index b37a94c8b7..7e86a126fe 100644
--- a/simon/simon.h
+++ b/simon/simon.h
@@ -858,8 +858,8 @@ protected:
void decodeStripA(byte *dst, const byte *src, int height);
void scroll_timeout();
void hitarea_stuff_helper_2();
- void realizePalette();
- void fadeUpPalette();
+ void fastFadeIn();
+ void slowFadeIn();
void vc_kill_sprite(uint file, uint sprite);
diff --git a/simon/vga.cpp b/simon/vga.cpp
index 2ef2899961..e1590d2518 100644
--- a/simon/vga.cpp
+++ b/simon/vga.cpp
@@ -1108,7 +1108,7 @@ void SimonEngine::vc12_delay() {
// Work around to allow inventory arrows to be
// shown in some versions of Simon the Sorcerer 1
- if ((getGameType() == GType_SIMON1) && vsp->id == 0x80)
+ if ((getGameType() == GType_SIMON1) && vsp->id == 128)
num = 0;
else
num += VGA_DELAY_BASE;
@@ -1770,7 +1770,7 @@ void SimonEngine::vc62_fastFadeOut() {
if (_windowNum == 4)
_videoNumPalColors = 208;
- memcpy(_videoBuf1, _paletteBackup, _videoNumPalColors * sizeof(uint32));
+ memcpy(_videoBuf1, _paletteBackup, _videoNumPalColors * 4);
for (i = NUM_PALETTE_FADEOUT; i != 0; --i) {
palette_fadeout((uint32 *)_videoBuf1, _videoNumPalColors);
_system->setPalette(_videoBuf1, 0, _videoNumPalColors);
@@ -1787,7 +1787,7 @@ void SimonEngine::vc62_fastFadeOut() {
vsp = _vgaSprites;
while (vsp->id != 0) {
- if (vsp->id == 0x80) {
+ if (vsp->id == 128) {
byte *old_file_1 = _curVgaFile1;
byte *old_file_2 = _curVgaFile2;
uint palmode = _windowNum;