[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