[Scummvm-git-logs] scummvm master -> 485831c300d425ee9b8473b6c920fb3e71a70db4
bluegr
noreply at scummvm.org
Sat Apr 25 05:32:44 UTC 2026
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
3e4c040542 SCUMM: MONKEY1: Workaround for issue giving room notes to Herman Fixes #12010
042c2a3a8e SCUMM: MONKEY1: Widen workaround gating for Herman notes bug.
f59b5bb294 SCUMM: MONKEY1: Extend Herman/Room notes workaround to all MI1 versions.
485831c300 SCUMM: MONKEY1: Move Herman/note workaround to a separate function.
Commit: 3e4c040542245b49a543a1313a9797a06c360b00
https://github.com/scummvm/scummvm/commit/3e4c040542245b49a543a1313a9797a06c360b00
Author: Robert Megone (robert.megone at gmail.com)
Date: 2026-04-25T08:32:39+03:00
Commit Message:
SCUMM: MONKEY1: Workaround for issue giving room notes to Herman Fixes #12010
Changed paths:
engines/scumm/script.cpp
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index a4aecc499a0..1f18ec03ae3 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -1188,6 +1188,27 @@ void ScummEngine::checkAndRunSentenceScript() {
_sentenceNum--;
SentenceTab &st = _sentence[_sentenceNum];
+ // WORKAROUND: Monkey Island 1 note/Herman bug #12010.
+ //
+ // This workaround fixes an issue where the scripts would get stuck in a loop
+ // if you tried to give a note to Herman while the note was still in the room
+ // and not in the inventory.
+ // This intercepts the specific note objects that appear in rooms where Herman
+ // can be present, consumes the invalid give, and queues a pickup instead.
+
+ if (_game.id == GID_MONKEY &&
+ _game.version == 5 &&
+ enhancementEnabled(kEnhMinorBugFixes) &&
+ st.verb == 4 && // Give
+ st.objectB == 7 && // Herman
+ getOwner(st.objectA) == OF_OWNER_ROOM && (
+ st.objectA == 27 || // note (volcano beach)
+ st.objectA == 545)) // note (dry pond)
+ {
+ doSentence(9, st.objectA, 0);
+ return;
+ }
+
if (_game.version < 7)
if (st.preposition && st.objectB == st.objectA)
return;
Commit: 042c2a3a8e0c9fe578551b4a5a5fca7707e2d8b2
https://github.com/scummvm/scummvm/commit/042c2a3a8e0c9fe578551b4a5a5fca7707e2d8b2
Author: Robert Megone (robert.megone at gmail.com)
Date: 2026-04-25T08:32:39+03:00
Commit Message:
SCUMM: MONKEY1: Widen workaround gating for Herman notes bug.
Changed paths:
engines/scumm/script.cpp
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index 1f18ec03ae3..763e22f83c0 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -1197,7 +1197,6 @@ void ScummEngine::checkAndRunSentenceScript() {
// can be present, consumes the invalid give, and queues a pickup instead.
if (_game.id == GID_MONKEY &&
- _game.version == 5 &&
enhancementEnabled(kEnhMinorBugFixes) &&
st.verb == 4 && // Give
st.objectB == 7 && // Herman
Commit: f59b5bb294209c6fbd8e8ffc775906bc689637aa
https://github.com/scummvm/scummvm/commit/f59b5bb294209c6fbd8e8ffc775906bc689637aa
Author: Robert Megone (robert.megone at gmail.com)
Date: 2026-04-25T08:32:39+03:00
Commit Message:
SCUMM: MONKEY1: Extend Herman/Room notes workaround to all MI1 versions.
Changed paths:
engines/scumm/script.cpp
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index 763e22f83c0..c341bbd9343 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -1195,16 +1195,16 @@ void ScummEngine::checkAndRunSentenceScript() {
// and not in the inventory.
// This intercepts the specific note objects that appear in rooms where Herman
// can be present, consumes the invalid give, and queues a pickup instead.
-
- if (_game.id == GID_MONKEY &&
+ if ((_game.id == GID_MONKEY || _game.id == GID_MONKEY_EGA || _game.id == GID_MONKEY_VGA) &&
enhancementEnabled(kEnhMinorBugFixes) &&
- st.verb == 4 && // Give
+ // Give(EGA 3, VGA 4)
+ st.verb == (_game.id == GID_MONKEY_EGA ? 3 : 4) &&
st.objectB == 7 && // Herman
- getOwner(st.objectA) == OF_OWNER_ROOM && (
- st.objectA == 27 || // note (volcano beach)
- st.objectA == 545)) // note (dry pond)
- {
- doSentence(9, st.objectA, 0);
+ getOwner(st.objectA) == OF_OWNER_ROOM && // Object in room, not inventory
+ // note (volcano beach VGA), note (dry pond VGA), note (volcano beach EGA), note (dry pond EGA)
+ (st.objectA == 27 || st.objectA == 545 || st.objectA == 296 || st.objectA == 297)) {
+ // Pick up(EGA 11, VGA 9)
+ doSentence(_game.id == GID_MONKEY_EGA ? 11 : 9, st.objectA, 0); // Pick up
return;
}
Commit: 485831c300d425ee9b8473b6c920fb3e71a70db4
https://github.com/scummvm/scummvm/commit/485831c300d425ee9b8473b6c920fb3e71a70db4
Author: Robert Megone (robert.megone at gmail.com)
Date: 2026-04-25T08:32:39+03:00
Commit Message:
SCUMM: MONKEY1: Move Herman/note workaround to a separate function.
Changed paths:
engines/scumm/script.cpp
engines/scumm/scumm.h
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index c341bbd9343..31e0d846480 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -1188,25 +1188,8 @@ void ScummEngine::checkAndRunSentenceScript() {
_sentenceNum--;
SentenceTab &st = _sentence[_sentenceNum];
- // WORKAROUND: Monkey Island 1 note/Herman bug #12010.
- //
- // This workaround fixes an issue where the scripts would get stuck in a loop
- // if you tried to give a note to Herman while the note was still in the room
- // and not in the inventory.
- // This intercepts the specific note objects that appear in rooms where Herman
- // can be present, consumes the invalid give, and queues a pickup instead.
- if ((_game.id == GID_MONKEY || _game.id == GID_MONKEY_EGA || _game.id == GID_MONKEY_VGA) &&
- enhancementEnabled(kEnhMinorBugFixes) &&
- // Give(EGA 3, VGA 4)
- st.verb == (_game.id == GID_MONKEY_EGA ? 3 : 4) &&
- st.objectB == 7 && // Herman
- getOwner(st.objectA) == OF_OWNER_ROOM && // Object in room, not inventory
- // note (volcano beach VGA), note (dry pond VGA), note (volcano beach EGA), note (dry pond EGA)
- (st.objectA == 27 || st.objectA == 545 || st.objectA == 296 || st.objectA == 297)) {
- // Pick up(EGA 11, VGA 9)
- doSentence(_game.id == GID_MONKEY_EGA ? 11 : 9, st.objectA, 0); // Pick up
+ if (monkey1HermanNoteWorkaround(st))
return;
- }
if (_game.version < 7)
if (st.preposition && st.objectB == st.objectA)
@@ -1281,6 +1264,30 @@ void ScummEngine_v0::walkToActorOrObject(int object) {
}
}
+bool ScummEngine::monkey1HermanNoteWorkaround(const SentenceTab &st) {
+ // WORKAROUND: Monkey Island 1 note/Herman bug #12010.
+ //
+ // This workaround fixes an issue where the scripts would get stuck in a loop
+ // if you tried to give a note to Herman while the note was still in the room
+ // and not in the inventory.
+ // This intercepts the specific note objects that appear in rooms where Herman
+ // can be present, consumes the invalid give, and queues a pickup instead.
+ if ((_game.id == GID_MONKEY || _game.id == GID_MONKEY_EGA || _game.id == GID_MONKEY_VGA) &&
+ enhancementEnabled(kEnhMinorBugFixes) &&
+ // Give(EGA 3, VGA 4)
+ st.verb == (_game.id == GID_MONKEY_EGA ? 3 : 4) &&
+ st.objectB == 7 && // Herman
+ getOwner(st.objectA) == OF_OWNER_ROOM && // Object in room, not inventory
+ // note (volcano beach VGA), note (dry pond VGA), note (volcano beach EGA), note (dry pond EGA)
+ (st.objectA == 27 || st.objectA == 545 || st.objectA == 296 || st.objectA == 297)) {
+ // Pick up(EGA 11, VGA 9)
+ doSentence(_game.id == GID_MONKEY_EGA ? 11 : 9, st.objectA, 0);
+ return true;
+ }
+
+ return false;
+}
+
bool ScummEngine_v0::checkPendingWalkAction() {
// before a sentence script is executed, it might be necessary to walk to
// and pickup objects before. Check if such an action is pending and handle
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 847fd147ca5..928cebd9349 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -1074,6 +1074,7 @@ protected:
virtual void runInventoryScript(int i);
virtual void runInventoryScriptEx(int i);
virtual void checkAndRunSentenceScript();
+ bool monkey1HermanNoteWorkaround(const SentenceTab &st);
void runExitScript();
void runEntryScript();
void runQuitScript();
More information about the Scummvm-git-logs
mailing list