[Scummvm-git-logs] scummvm master -> 9b582ce0c5ccc2e69858a1c0c39dd9832de0fcfa

athrxx athrxx at scummvm.org
Sun Feb 28 20:02:13 UTC 2021


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

Summary:
65f567d817 SCUMM: (FM-Towns) - array declaration cleanup
80f79d21c9 SCUMM: (FM-Towns) - fix graphics glitch
9b582ce0c5 SCUMM: (LOOM) - fix bug no. 11480


Commit: 65f567d81750cd94fc4c60f6276e381e2725bce6
    https://github.com/scummvm/scummvm/commit/65f567d81750cd94fc4c60f6276e381e2725bce6
Author: athrxx (athrxx at scummvm.org)
Date: 2021-02-28T21:00:23+01:00

Commit Message:
SCUMM: (FM-Towns) - array declaration cleanup

_cyclRects can have no more than 10 entries, but was declared as [16]. Someone put a TODO about it in saveload.cpp, so why not fix it...

Changed paths:
    engines/scumm/saveload.cpp
    engines/scumm/scumm.h


diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 068bf8a697..a05e632680 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -1318,7 +1318,6 @@ void ScummEngine::saveLoadWithSerializer(Common::Serializer &s) {
 
 	if (hasTownsData) {
 		s.syncBytes(_textPalette, 48);
-		// TODO: This seems wrong, there are 16 _cyclRects
 		s.syncArray(_cyclRects, 10, syncWithSerializer, VER(82));
 		if (s.getVersion() >= VER(82))
 			syncWithSerializer(s, _curStringRect);
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index e790841f3a..649d327f54 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -1365,7 +1365,7 @@ protected:
 	void towns_waitForScroll(int waitForDirection, int threshold = 0);
 	void towns_updateGfx();
 
-	Common::Rect _cyclRects[16];
+	Common::Rect _cyclRects[10];
 	int _numCyclRects;
 	int _scrollRequest;
 	int _scrollDeltaAdjust;


Commit: 80f79d21c9db4ae99bab08c075dca4d1c7f1e4e6
    https://github.com/scummvm/scummvm/commit/80f79d21c9db4ae99bab08c075dca4d1c7f1e4e6
Author: athrxx (athrxx at scummvm.org)
Date: 2021-02-28T21:00:23+01:00

Commit Message:
SCUMM: (FM-Towns) - fix graphics glitch

In certain situations a string rect could get restored twice, e. g. LOOM, dragon's lair, when double clicking the gold pile and then pressing Esc.

Changed paths:
    engines/scumm/string.cpp


diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 26c19cd6d6..271f393a54 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -661,7 +661,7 @@ void ScummEngine::CHARSET_1() {
 		memcpy(_charsetColorMap, _charsetData[_charset->getCurID()], 4);
 
 #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE
-	if (_keepText && _game.platform == Common::kPlatformFMTowns)
+	if (_game.platform == Common::kPlatformFMTowns && (_keepText || _haveMsg == 0xFF))
 		memcpy(&_charset->_str, &_curStringRect, sizeof(Common::Rect));
 #endif
 


Commit: 9b582ce0c5ccc2e69858a1c0c39dd9832de0fcfa
    https://github.com/scummvm/scummvm/commit/9b582ce0c5ccc2e69858a1c0c39dd9832de0fcfa
Author: athrxx (athrxx at scummvm.org)
Date: 2021-02-28T21:00:23+01:00

Commit Message:
SCUMM: (LOOM) - fix bug no. 11480

(Loom (VGA) - Graphical glitches where some text appears over previous line and the wood musical note disappear)

The glitch is caused by a workaround in ScummEngine::actorTalk(). Removing it will make the original bug (speech animations for empty text strings) reappear. I have located the code which prevents that in LOOM DOS EGA disasm and added that. The FM-Towns versions don't have such code, but I do not get that weird speech animations either. So it seems to be fixed in a different manner there...

Changed paths:
    engines/scumm/actor.cpp
    engines/scumm/string.cpp


diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index 6f03c46377..06d47b09f8 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -2818,11 +2818,15 @@ void ScummEngine::actorTalk(const byte *msg) {
 
 	convertMessageToString(msg, _charsetBuffer, sizeof(_charsetBuffer));
 
+	// I have commented out this workaround, since it did cause another
+	// bug (#11480). It is not okay to skip the stopTalk() calls here.
+	// Instead, I have added two checks from LOOM DOS EGA disasm (one
+	// below and one in CHARSET_1()).
 	// WORKAROUND for bugs #770039 and #770049
-	if (_game.id == GID_LOOM) {
+	/*if (_game.id == GID_LOOM) {
 		if (!*_charsetBuffer)
 			return;
-	}
+	}*/
 
 	if (_actorToPrintStrFor == 0xFF) {
 		if (!_keepText) {
@@ -2848,7 +2852,11 @@ void ScummEngine::actorTalk(const byte *msg) {
 			setTalkingActor(a->_number);
 			if (_game.heversion != 0)
 				((ActorHE *)a)->_heTalking = true;
-			if (!_string[0].no_talk_anim) {
+			// The second check is from LOOM DOS EGA disasm. It prevents weird speech animations
+			// with empty strings (bug #990). The same code is present in CHARSET_1(). The FM-Towns
+			// versions don't have such code, but I do not get the weird speech animations either.
+			// So apparently it is not needed there.
+			if (!_string[0].no_talk_anim && !(_game.id == GID_LOOM && _game.platform != Common::kPlatformFMTowns && !*_charsetBuffer)) {
 				a->runActorTalkScript(a->_talkStartFrame);
 				_useTalkAnims = true;
 			}
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 271f393a54..db76b18c85 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -681,7 +681,11 @@ void ScummEngine::CHARSET_1() {
 		return;
 	}
 
-	if (a && !_string[0].no_talk_anim) {
+	// The second check is from LOOM DOS EGA disasm. It prevents weird speech animations
+	// with empty strings (bug #990). The same code is present in actorTalk(). The FM-Towns
+	// versions don't have such code, but I do not get the weird speech animations either.
+	// So apparently it is not needed there.
+	if (a && !_string[0].no_talk_anim && !(_game.id == GID_LOOM && _game.platform != Common::kPlatformFMTowns && !_charsetBuffer[_charsetBufPos])) {
 		a->runActorTalkScript(a->_talkStartFrame);
 		_useTalkAnims = true;
 	}




More information about the Scummvm-git-logs mailing list