[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