[Scummvm-git-logs] scummvm master -> e1d40b7a8f85387b4397930de779e2961e87a690

athrxx noreply at scummvm.org
Mon Jul 24 17:04:01 UTC 2023


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
fc4c510515 KYRA; (EOB II/ZH) - intro/outro text improvements
e1d40b7a8f KYRA: (EOB II) - intro scrolling improvement


Commit: fc4c5105150cfe1bff94db737207ebc13df4f484
    https://github.com/scummvm/scummvm/commit/fc4c5105150cfe1bff94db737207ebc13df4f484
Author: athrxx (athrxx at scummvm.org)
Date: 2023-07-24T19:03:04+02:00

Commit Message:
KYRA; (EOB II/ZH) - intro/outro text improvements

Changed paths:
    devtools/create_kyradat/resources/eob2_dos_chinese.h
    dists/engine-data/kyra.dat
    engines/kyra/sequence/sequences_darkmoon.cpp


diff --git a/devtools/create_kyradat/resources/eob2_dos_chinese.h b/devtools/create_kyradat/resources/eob2_dos_chinese.h
index 521b6ce8b71..ab9838f72f7 100644
--- a/devtools/create_kyradat/resources/eob2_dos_chinese.h
+++ b/devtools/create_kyradat/resources/eob2_dos_chinese.h
@@ -930,7 +930,7 @@ static const char *const kEoB2TransferLabelsDOSChinese[2] = {
 
 static const StringListProvider kEoB2TransferLabelsDOSChineseProvider = { ARRAYSIZE(kEoB2TransferLabelsDOSChinese), kEoB2TransferLabelsDOSChinese };
 
-static const char *const kEoB2IntroStringsDOSChinese[20] = {
+static const char *const kEoB2IntroStringsDOSChinese[21] = {
 	"\xa6\x62\xa4\x40\xad\xd3\xad\xb7\xab\x42\xa5\xe6\xa5\x5b\xaa\xba\xb2\x4d\xb1\xe1", /* "在一個風雨交加的清晨"; "In a storm early morning" */
 	"\xa7\x41\xa6\xac\xa8\xec\xa4\x46\xa4\x40\xb1\x69\xab\x4b\xa8\xe7", /* "你收到了一張便函"; "You have received a note" */
 	"\xa5\xa6\xac\x4f\xa7\x41\xaa\xba\xa6\x6e\xa4\xcd\r\xc4\xb3\xaa\xf8\xab\xb4\xba\xb8\xaf\x5a\xbc\x67\xa8\xd3\xaa\xba.", /* "它是你的好友\r議長契爾班寫來的."; "It's from your friend Chancellor Khelben." */
@@ -951,6 +951,7 @@ static const char *const kEoB2IntroStringsDOSChinese[20] = {
 	"\xa8\xc6\xa4\xa3\xa9\x79\xbf\xf0,\xa7\x41\xa5\xb2\xb6\xb7\xbb\xb0\xa7\xd6\xb0\xca\xa8\xad.", /* "事不宜遲,你必須趕快動身."; "Without further delay, you must leave quickly."; */
 	"\xa7\xda\xb2\x7b\xa6\x62\xb1\x4e\xa7\x41\xad\xcc\xb6\xc7\xb0\x65\xa8\xec\xb1\xb5\xaa\xf1\xaf\xab\xbc\x71\xaa\xba\xaa\xfe\xaa\xf1.", /* "我現在將你們傳送到接近神廟的附近."; "I will now teleport you closer to the temple." */
 	"\xc4\x40\xa6\x6e\xb9\x42\xa6\xf1\xc0\x48\xb5\xdb\xa7\x41\xad\xcc.", /* "願好運伴隨著你們."; "May good luck be with you."; */
+	"(c)1992""\xb4\xbc\xab""a""\xac\xec\xa7\xde\xa6\xb3\xad\xad\xa4\xbd\xa5""q""\xbc\xf6\xb1\xa1\xb1\xc0\xa5""X ""\xb5""{""\xa6\xa1\xad\xd7\xa7\xef"":""\xa5\xdb\xc5\xe9\xb7\xbd" /* (c)1992智冠科技有限公司熱情推出 程式修改:石體源 */
 };
 
 static const StringListProvider kEoB2IntroStringsDOSChineseProvider = { ARRAYSIZE(kEoB2IntroStringsDOSChinese), kEoB2IntroStringsDOSChinese }; // OK
diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat
index 34209460cd4..8eb17844670 100644
Binary files a/dists/engine-data/kyra.dat and b/dists/engine-data/kyra.dat differ
diff --git a/engines/kyra/sequence/sequences_darkmoon.cpp b/engines/kyra/sequence/sequences_darkmoon.cpp
index 83a95b4064e..13b59c8771d 100644
--- a/engines/kyra/sequence/sequences_darkmoon.cpp
+++ b/engines/kyra/sequence/sequences_darkmoon.cpp
@@ -66,6 +66,7 @@ public:
 private:
 	void init(Mode mode);
 	void setPaletteWithoutTextColor(int index);
+	void printStringIntern(const char *str, int x, int y, int col);
 
 	OSystem *_system;
 	DarkMoonEngine *_vm;
@@ -110,6 +111,7 @@ private:
 	uint32 _hScrollResumeTimeStamp;
 
 	uint8 _textColor[3];
+	int16 _shadowColor;
 
 	int _platformAnimOffset;
 
@@ -286,7 +288,10 @@ void DarkMoonEngine::seq_playIntro() {
 	removeInputTop();
 	sq.delay(18);
 
-	sq.animCommand(3, 18);
+	sq.animCommand(3);
+	if (_flags.lang == Common::ZH_TWN)
+		sq.printText(20, guiSettings()->colors.guiColorYellow);
+	sq.delay(18);
 	sq.animCommand(6, 18);
 	sq.animCommand(0);
 
@@ -295,6 +300,8 @@ void DarkMoonEngine::seq_playIntro() {
 	sq.animCommand(_flags.platform == Common::kPlatformPC98 ? (_configRenderMode == Common::kRenderEGA ? 43 : 42) : (_configRenderMode == Common::kRenderEGA ? 12 : 11));
 	sq.animCommand(7, 6);
 	sq.animCommand(2, 6);
+	if (_flags.lang == Common::ZH_TWN)
+		sq.fadeText();
 
 	sq.waitForSongNotifier(++songCurPos);
 
@@ -353,7 +360,7 @@ void DarkMoonEngine::seq_playIntro() {
 	sq.waitForSongNotifier(++songCurPos);
 	uint32 endtime = _system->getMillis();
 
-	// intro scroll
+	// intro horizontal scroll
 	if (!skipFlag() && !shouldQuit()) {
 		for (int i = sq.hScroll(true); i != 279; i = sq.hScroll()) {
 			endtime += 18;
@@ -1394,7 +1401,7 @@ void DarkmoonSequenceHelper::animCommand(int index, int del) {
 				else
 					_screen->copyRegion(s->x1 - 8, s->y1 - 8, s->x1, s->y1, shapeWidth, shapeHeight, 2, 0, Screen::CR_NO_P_CHECK);
 				_screen->updateScreen();
-				delay(s->delay /** 7*/);
+				delay(s->delay);
 			} else if (_vm->gameFlags().platform == Common::kPlatformAmiga) {
 				end = _system->getMillis() + s->delay * _vm->tickLength();
 
@@ -1498,11 +1505,12 @@ void DarkmoonSequenceHelper::printText(int index, int color) {
 	const ScreenDim *dm = _screen->_curDim;
 	int fontHeight = (_vm->gameFlags().platform == Common::kPlatformPC98) ? (_screen->getFontHeight() << 1) : (_screen->getFontHeight() + 1);
 	int xAlignFactor = (_vm->gameFlags().platform == Common::kPlatformPC98) ? 2 : 1;
+	const char *linebrkChars = (_vm->gameFlags().lang == Common::ZH_TWN) ? "\r " : "\r";
 
 	for (int yOffs = 0; !str.empty(); yOffs += fontHeight) {
-		uint linebrk = str.findFirstOf('\r');
+		uint linebrk = str.findFirstOf(linebrkChars);
 		Common::String str2 = (linebrk != Common::String::npos) ? str.substr(0, linebrk) : str;
-		_screen->printText(str2.c_str(), (dm->sx * xAlignFactor + ((dm->w * xAlignFactor - str2.size()) >> 1)) << (4 - xAlignFactor), dm->sy + yOffs, color, dm->col2);
+		printStringIntern(str2.c_str(), (dm->sx * xAlignFactor + ((dm->w * xAlignFactor - str2.size()) >> 1)) << (4 - xAlignFactor), dm->sy + yOffs, color);
 		str = (linebrk != Common::String::npos) ? str.substr(linebrk + 1) : "";
 	}
 
@@ -1525,7 +1533,12 @@ void DarkmoonSequenceHelper::fadeText() {
 		_screen->fadeTextColor(_palettes[0], col, 8);
 
 	memset(_textColor, 0, 3);
-	_screen->clearCurDim();
+	_screen->setClearScreenDim(17);
+
+	// The Chinese version uses a shadow color for the font which does not get faded.
+	// We clear the shadow as quick as possible after the fading, so it will look less weird.
+	if (_vm->gameFlags().lang == Common::ZH_TWN)
+		_screen->updateScreen();
 }
 
 void DarkmoonSequenceHelper::update(int srcPage) {
@@ -1543,6 +1556,138 @@ void DarkmoonSequenceHelper::update(int srcPage) {
 	_screen->updateScreen();
 }
 
+void DarkmoonSequenceHelper::setPalette(int index) {
+	_screen->setScreenPalette(*_palettes[index]);
+}
+
+void DarkmoonSequenceHelper::fadePalette(int index, int del) {
+	if (_vm->skipFlag() || _vm->shouldQuit())
+		return;
+	if (_vm->_configRenderMode == Common::kRenderEGA) {
+		setPalette(index);
+		_screen->updateScreen();
+	} else {
+		_screen->fadePalette(*_palettes[index], del * _vm->tickLength());
+	}
+}
+
+void DarkmoonSequenceHelper::copyPalette(int srcIndex, int destIndex) {
+	_palettes[destIndex]->copy(*_palettes[srcIndex]);
+}
+
+int DarkmoonSequenceHelper::hScroll(bool restart) {
+	if (restart)
+		_hScrollStartTimeStamp = _system->getMillis();
+	else if (!_hScrollStartTimeStamp)
+		return 0;
+
+	uint32 ct = _system->getMillis();
+	int state = (ct - _hScrollStartTimeStamp) / 18;
+	if (state < 0 || state > 279) {
+		_hScrollStartTimeStamp += (ct - _hScrollResumeTimeStamp);
+		state = (ct - _hScrollStartTimeStamp) / 18;
+		if (state < 0 || state > 279)
+			state = 279;
+	}
+
+	_hScrollResumeTimeStamp = ct;
+
+	_screen->copyRegion(9, 8, 8, 8, 303, 128, 0, 0, Screen::CR_NO_P_CHECK);
+	_screen->copyRegion(state, 0, 311, 8, 1, 128, 2, 0, Screen::CR_NO_P_CHECK);
+	_screen->updateScreen();
+
+	if (state == 279)
+		_hScrollStartTimeStamp = 0;
+
+	return state;
+}
+
+void DarkmoonSequenceHelper::initDelayedPaletteFade(int palIndex, int rate) {
+	_palettes[11]->copy(*_palettes[0]);
+
+	_fadePalIndex = palIndex;
+	_fadePalRate = rate;
+	_fadePalTimer = _system->getMillis() + 2 * _vm->_tickLength;
+}
+
+bool DarkmoonSequenceHelper::processDelayedPaletteFade() {
+	if (_vm->skipFlag() || _vm->shouldQuit())
+		return true;
+
+	if (_vm->_configRenderMode == Common::kRenderEGA || !_fadePalRate || (_system->getMillis() <= _fadePalTimer))
+		return false;
+
+	if (_screen->delayedFadePalStep(_palettes[_fadePalIndex], _palettes[0], _fadePalRate)) {
+		setPaletteWithoutTextColor(0);
+		_fadePalTimer = _system->getMillis() + 3 * _vm->_tickLength;
+	} else {
+		_fadePalRate = 0;
+	}
+
+	return false;
+}
+
+void DarkmoonSequenceHelper::delay(uint32 ticks) {
+	if (_vm->skipFlag() || _vm->shouldQuit())
+		return;
+
+	uint32 end = _system->getMillis() + ticks * _vm->_tickLength;
+
+	if (_config->palFading) {
+		do {
+			if (processDelayedPaletteFade())
+				break;
+			_vm->updateInput();
+		} while (end > _system->getMillis());
+		processDelayedPaletteFade();
+
+	} else {
+		for (uint32 ct = 0; ct < end; ) {
+			if (ct + 18 <= end)
+				hScroll();
+			ct = _system->getMillis();
+			_vm->delay(MIN<uint32>(9, end - ct));
+		}
+	}
+}
+
+void DarkmoonSequenceHelper::waitForSongNotifier(int index, bool introUpdateAnim) {
+	if (_vm->gameFlags().platform == Common::kPlatformFMTowns)
+		index = _sndMarkersFMTowns[index - 1];
+	else if (_vm->sound()->getMusicType() != Sound::kAdLib && _vm->gameFlags().platform != Common::kPlatformPC98)
+		return;
+
+	int seq = 0;
+
+	while (_vm->sound()->musicEnabled() && _vm->sound()->checkTrigger() < index && !(_vm->skipFlag() || _vm->shouldQuit())) {
+		if (introUpdateAnim) {
+			animCommand(30 | seq);
+			seq ^= 1;
+		}
+
+		if (_config->palFading)
+			processDelayedPaletteFade();
+
+		_vm->updateInput();
+	}
+}
+
+void DarkmoonSequenceHelper::updateAmigaSound() {
+	if (_vm->gameFlags().platform != Common::kPlatformAmiga || !_vm->sound()->musicEnabled())
+		return;
+
+	int ct = _vm->sound()->checkTrigger();
+	if (ct < _sndNextTrackMarker)
+		return;
+
+	_vm->snd_playSong(_sndNextTrack++);
+	if (_sndNextTrack == 4)
+		_sndNextTrack = 1;
+
+	static const uint16 interval[4] = { 0, 1015, 4461, 1770 };
+	_sndNextTrackMarker = interval[_sndNextTrack];
+}
+
 void DarkmoonSequenceHelper::init(DarkmoonSequenceHelper::Mode mode) {
 	assert(mode == kIntro || mode == kFinale);
 
@@ -1557,6 +1702,7 @@ void DarkmoonSequenceHelper::init(DarkmoonSequenceHelper::Mode mode) {
 	_sndNextTrackMarker = 0;
 	_sndMarkersFMTowns = soundMarkersFMTowns[mode];
 	_hScrollStartTimeStamp = _hScrollResumeTimeStamp = 0;
+	_shadowColor = -1;
 
 	if (mode == kIntro) {
 		_config = new Config(
@@ -1577,6 +1723,8 @@ void DarkmoonSequenceHelper::init(DarkmoonSequenceHelper::Mode mode) {
 			2
 		);
 
+		if (_vm->_flags.lang == Common::ZH_TWN)
+			_shadowColor = _vm->guiSettings()->colors.guiColorBrown;
 
 		for (int i = 0; i < 48; i++)
 			_config->animData[i] = _vm->staticres()->loadEoB2SeqData(kEoB2IntroAnimData00 + i, size);
@@ -1612,6 +1760,9 @@ void DarkmoonSequenceHelper::init(DarkmoonSequenceHelper::Mode mode) {
 			6
 		);
 
+		if (_vm->_flags.lang == Common::ZH_TWN)
+			_shadowColor = _vm->guiSettings()->colors.fill;
+
 		for (int i = 0; i < 21; i++)
 			_config->animData[i] = _vm->staticres()->loadEoB2SeqData(kEoB2FinaleAnimData00 + i, size);
 
@@ -1693,7 +1844,7 @@ void DarkmoonSequenceHelper::init(DarkmoonSequenceHelper::Mode mode) {
 
 	_screen->setScreenPalette(*_palettes[0]);
 	_prevFont = _screen->setFont(_vm->gameFlags().lang == Common::Language::ZH_TWN ? Screen::FID_CHINESE_FNT :
-				     _vm->gameFlags().platform == Common::kPlatformFMTowns ? Screen::FID_SJIS_LARGE_FNT : (_vm->gameFlags().platform == Common::kPlatformPC98 ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT));
+		_vm->gameFlags().platform == Common::kPlatformFMTowns ? Screen::FID_SJIS_LARGE_FNT : (_vm->gameFlags().platform == Common::kPlatformPC98 ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT));
 	_screen->hideMouse();
 
 	_vm->delay(150);
@@ -1723,136 +1874,11 @@ void DarkmoonSequenceHelper::setPaletteWithoutTextColor(int index) {
 	_system->delayMillis(10);
 }
 
-void DarkmoonSequenceHelper::setPalette(int index) {
-	_screen->setScreenPalette(*_palettes[index]);
-}
-
-void DarkmoonSequenceHelper::fadePalette(int index, int del) {
-	if (_vm->skipFlag() || _vm->shouldQuit())
-		return;
-	if (_vm->_configRenderMode == Common::kRenderEGA) {
-		setPalette(index);
-		_screen->updateScreen();
-	} else {
-		_screen->fadePalette(*_palettes[index], del * _vm->tickLength());
-	}
-}
-
-void DarkmoonSequenceHelper::copyPalette(int srcIndex, int destIndex) {
-	_palettes[destIndex]->copy(*_palettes[srcIndex]);
-}
-
-int DarkmoonSequenceHelper::hScroll(bool restart) {
-	if (restart)
-		_hScrollStartTimeStamp = _system->getMillis();
-	else if (!_hScrollStartTimeStamp)
-		return 0;
-
-	uint32 ct = _system->getMillis();
-	int state = (ct - _hScrollStartTimeStamp) / 18;
-	if (state < 0 || state > 279) {
-		_hScrollStartTimeStamp += (ct - _hScrollResumeTimeStamp);
-		state = (ct - _hScrollStartTimeStamp) / 18;
-		if (state < 0 || state > 279)
-			state = 279;
-	}
-
-	_hScrollResumeTimeStamp = ct;
-
-	_screen->copyRegion(9, 8, 8, 8, 303, 128, 0, 0, Screen::CR_NO_P_CHECK);
-	_screen->copyRegion(state, 0, 311, 8, 1, 128, 2, 0, Screen::CR_NO_P_CHECK);
-	_screen->updateScreen();
-
-	if (state == 279)
-		_hScrollStartTimeStamp = 0;
-
-	return state;
-}
-
-void DarkmoonSequenceHelper::initDelayedPaletteFade(int palIndex, int rate) {
-	_palettes[11]->copy(*_palettes[0]);
-
-	_fadePalIndex = palIndex;
-	_fadePalRate = rate;
-	_fadePalTimer = _system->getMillis() + 2 * _vm->_tickLength;
-}
-
-bool DarkmoonSequenceHelper::processDelayedPaletteFade() {
-	if (_vm->skipFlag() || _vm->shouldQuit())
-		return true;
-
-	if (_vm->_configRenderMode == Common::kRenderEGA || !_fadePalRate || (_system->getMillis() <= _fadePalTimer))
-		return false;
-
-	if (_screen->delayedFadePalStep(_palettes[_fadePalIndex], _palettes[0], _fadePalRate)) {
-		setPaletteWithoutTextColor(0);
-		_fadePalTimer = _system->getMillis() + 3 * _vm->_tickLength;
-	} else {
-		_fadePalRate = 0;
-	}
-
-	return false;
-}
-
-void DarkmoonSequenceHelper::delay(uint32 ticks) {
-	if (_vm->skipFlag() || _vm->shouldQuit())
-		return;
-
-	uint32 end = _system->getMillis() + ticks * _vm->_tickLength;
-
-	if (_config->palFading) {
-		do {
-			if (processDelayedPaletteFade())
-				break;
-			_vm->updateInput();
-		} while (end > _system->getMillis());
-		processDelayedPaletteFade();
-
-	} else {
-		for (uint32 ct = 0; ct < end; ) {
-			if (ct + 18 <= end)
-				hScroll();
-			ct = _system->getMillis();
-			_vm->delay(MIN<uint32>(9, end - ct));
-		}
-	}
-}
-
-void DarkmoonSequenceHelper::waitForSongNotifier(int index, bool introUpdateAnim) {
-	if (_vm->gameFlags().platform == Common::kPlatformFMTowns)
-		index = _sndMarkersFMTowns[index - 1];
-	else if (_vm->sound()->getMusicType() != Sound::kAdLib && _vm->gameFlags().platform != Common::kPlatformPC98)
-		return;
-
-	int seq = 0;
-
-	while (_vm->sound()->musicEnabled() && _vm->sound()->checkTrigger() < index && !(_vm->skipFlag() || _vm->shouldQuit())) {
-		if (introUpdateAnim) {
-			animCommand(30 | seq);
-			seq ^= 1;
-		}
-
-		if (_config->palFading)
-			processDelayedPaletteFade();
-
-		_vm->updateInput();
-	}
-}
-
-void DarkmoonSequenceHelper::updateAmigaSound() {
-	if (_vm->gameFlags().platform != Common::kPlatformAmiga || !_vm->sound()->musicEnabled())
-		return;
-
-	int ct = _vm->sound()->checkTrigger();
-	if (ct < _sndNextTrackMarker)
-		return;
-
-	_vm->snd_playSong(_sndNextTrack++);
-	if (_sndNextTrack == 4)
-		_sndNextTrack = 1;
-
-	static const uint16 interval[4] = { 0, 1015, 4461, 1770 };
-	_sndNextTrackMarker = interval[_sndNextTrack];
+void DarkmoonSequenceHelper::printStringIntern(const char *str, int x, int y, int col) {
+	if (_shadowColor != -1)
+		_screen->printShadedText(str, x, y, col, 0, _shadowColor);
+	else
+		_screen->printText(str, x, y, col, _screen->_curDim->col2);
 }
 
 const char *const DarkmoonSequenceHelper::_palFilesIntroVGA[] = {


Commit: e1d40b7a8f85387b4397930de779e2961e87a690
    https://github.com/scummvm/scummvm/commit/e1d40b7a8f85387b4397930de779e2961e87a690
Author: athrxx (athrxx at scummvm.org)
Date: 2023-07-24T19:03:09+02:00

Commit Message:
KYRA: (EOB II) - intro scrolling improvement

Changed paths:
    engines/kyra/sequence/sequences_darkmoon.cpp


diff --git a/engines/kyra/sequence/sequences_darkmoon.cpp b/engines/kyra/sequence/sequences_darkmoon.cpp
index 13b59c8771d..7bc7af3324a 100644
--- a/engines/kyra/sequence/sequences_darkmoon.cpp
+++ b/engines/kyra/sequence/sequences_darkmoon.cpp
@@ -109,6 +109,7 @@ private:
 
 	uint32 _hScrollStartTimeStamp;
 	uint32 _hScrollResumeTimeStamp;
+	int _hScrollState;
 
 	uint8 _textColor[3];
 	int16 _shadowColor;
@@ -1576,10 +1577,12 @@ void DarkmoonSequenceHelper::copyPalette(int srcIndex, int destIndex) {
 }
 
 int DarkmoonSequenceHelper::hScroll(bool restart) {
-	if (restart)
+	if (restart) {
 		_hScrollStartTimeStamp = _system->getMillis();
-	else if (!_hScrollStartTimeStamp)
+		_hScrollState = -1;
+	} else if (!_hScrollStartTimeStamp) {
 		return 0;
+	}
 
 	uint32 ct = _system->getMillis();
 	int state = (ct - _hScrollStartTimeStamp) / 18;
@@ -1591,13 +1594,19 @@ int DarkmoonSequenceHelper::hScroll(bool restart) {
 	}
 
 	_hScrollResumeTimeStamp = ct;
+	
+	if (state != _hScrollState) {
+		_screen->copyRegion(9, 8, 8, 8, 303, 128, 0, 0, Screen::CR_NO_P_CHECK);
+		_screen->copyRegion(state, 0, 311, 8, 1, 128, 2, 0, Screen::CR_NO_P_CHECK);
+		_screen->updateScreen();
+	}
 
-	_screen->copyRegion(9, 8, 8, 8, 303, 128, 0, 0, Screen::CR_NO_P_CHECK);
-	_screen->copyRegion(state, 0, 311, 8, 1, 128, 2, 0, Screen::CR_NO_P_CHECK);
-	_screen->updateScreen();
+	_hScrollState = state;
 
-	if (state == 279)
+	if (state == 279) {
 		_hScrollStartTimeStamp = 0;
+		_hScrollState = -1;
+	}
 
 	return state;
 }
@@ -1702,7 +1711,7 @@ void DarkmoonSequenceHelper::init(DarkmoonSequenceHelper::Mode mode) {
 	_sndNextTrackMarker = 0;
 	_sndMarkersFMTowns = soundMarkersFMTowns[mode];
 	_hScrollStartTimeStamp = _hScrollResumeTimeStamp = 0;
-	_shadowColor = -1;
+	_hScrollState = _shadowColor = -1;
 
 	if (mode == kIntro) {
 		_config = new Config(
@@ -1870,8 +1879,10 @@ void DarkmoonSequenceHelper::setPaletteWithoutTextColor(int index) {
 		_palettes[11]->copy(*_palettes[0], numCol, 1, numCol);
 	setPalette(11);
 
-	_screen->updateScreen();
-	_system->delayMillis(10);
+	if (_hScrollState == -1) {
+		_screen->updateScreen();
+		_system->delayMillis(10);
+	}
 }
 
 void DarkmoonSequenceHelper::printStringIntern(const char *str, int x, int y, int col) {




More information about the Scummvm-git-logs mailing list