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

dreammaster noreply at scummvm.org
Sat Sep 12 01:44:58 UTC 2026


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

Summary:
8321f11232 MADS: PHANTOM: Fix main menu eye quote loading
06a85c3d16 MADS: PHANTOM: Reset main menu eye gag state
6e44855b73 MADS: DRAGONSPHERE: Remove unused main menu eye code
cd336392f5 MADS: PHANTOM: Restore dormant rebel base eye gag
5b65153005 MADS: PHANTOM: Prevent overlapping main menu eye messages
ea217c3300 MADS: PHANTOM: Store main menu quotes in kernel state


Commit: 8321f1123253ba3be2988d4764e94ee8dc6ee8c8
    https://github.com/scummvm/scummvm/commit/8321f1123253ba3be2988d4764e94ee8dc6ee8c8
Author: fusefib (fibofuse at gmail.com)
Date: 2026-09-12T11:44:52+10:00

Commit Message:
MADS: PHANTOM: Fix main menu eye quote loading

Start quote_load() with the first main-menu quote ID instead of the zero
terminator to load the complete quote range before eye clicks are
processed.

Changed paths:
    engines/mads/phantom/main.cpp


diff --git a/engines/mads/phantom/main.cpp b/engines/mads/phantom/main.cpp
index 4a4fb8a8da3..9ed303101fd 100644
--- a/engines/mads/phantom/main.cpp
+++ b/engines/mads/phantom/main.cpp
@@ -37,6 +37,7 @@
 #include "mads/core/player.h"
 #include "mads/core/quote.h"
 #include "mads/core/speech.h"
+#include "mads/phantom/mads/quotes.h"
 #include "mads/phantom/main_menu.h"
 #include "mads/phantom/menus.h"
 #include "mads/mads.h"
@@ -72,7 +73,8 @@ static void main_menu_main() {
 		picture_view_x = 0;
 		picture_view_y = 0;
 
-		quotes = quote_load(0, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+		quotes = quote_load(quote_mainmenu_phantom_1,
+			67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
 			77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
 			87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
 			97, 98, 99, 0);


Commit: 06a85c3d16f26f2f626d34e8b7cba1259c509ab7
    https://github.com/scummvm/scummvm/commit/06a85c3d16f26f2f626d34e8b7cba1259c509ab7
Author: fusefib (fibofuse at gmail.com)
Date: 2026-09-12T11:44:52+10:00

Commit Message:
MADS: PHANTOM: Reset main menu eye gag state

Reset eye selection, message handles, and counter state whenever menu is
presented. Matches the original executable's fresh-process behavior.

Changed paths:
    engines/mads/phantom/main_menu.cpp


diff --git a/engines/mads/phantom/main_menu.cpp b/engines/mads/phantom/main_menu.cpp
index e33b94ff55a..4924df0b4b9 100644
--- a/engines/mads/phantom/main_menu.cpp
+++ b/engines/mads/phantom/main_menu.cpp
@@ -383,6 +383,17 @@ void menu_control() {
 	int anim;
 	int initial_reset = false;
 
+	current_eye = false;
+	eye_latch = false;
+	eye_message[LEFT_EYE] = 0;
+	eye_message[RIGHT_EYE] = 0;
+	eye_pokes = 0;
+	recent_eye = 0;
+	rebel_base = 0;
+	poke_count_message = -1;
+	poke_count = 0;
+	poke_counting = false;
+
 	menu_mode = MENU_APPEARING;
 	menu_state = MENU_HIGH_SPRITE;
 	menu_appear_state = 0;


Commit: 6e44855b73ce6ad5ac0ef78ad41bbdc941bb8957
    https://github.com/scummvm/scummvm/commit/6e44855b73ce6ad5ac0ef78ad41bbdc941bb8957
Author: fusefib (fibofuse at gmail.com)
Date: 2026-09-12T11:44:52+10:00

Commit Message:
MADS: DRAGONSPHERE: Remove unused main menu eye code

Also remove the unused main menu quote buffer.

Changed paths:
    engines/mads/dragonsphere/main.cpp
    engines/mads/dragonsphere/main_menu.cpp


diff --git a/engines/mads/dragonsphere/main.cpp b/engines/mads/dragonsphere/main.cpp
index 285ec1dd1be..2f409bbfee6 100644
--- a/engines/mads/dragonsphere/main.cpp
+++ b/engines/mads/dragonsphere/main.cpp
@@ -35,7 +35,6 @@
 #include "mads/core/mouse.h"
 #include "mads/core/pal.h"
 #include "mads/core/player.h"
-#include "mads/core/quote.h"
 #include "mads/core/speech.h"
 #include "mads/dragonsphere/main_menu.h"
 #include "mads/dragonsphere/menus.h"
@@ -47,8 +46,6 @@ namespace Dragonsphere {
 constexpr bool SHOW_LINES = true;
 constexpr byte LINE_COLOR = 2;
 
-char *quotes;
-
 static void main_menu_main() {
 	auto &screen = *g_engine->getScreen();
 	Palette palette;
@@ -105,7 +102,6 @@ static void main_menu_main() {
 			}
 		}
 
-		free(quotes);
 		kernel_unload_sound_driver();
 		kernel_game_shutdown();
 	}
diff --git a/engines/mads/dragonsphere/main_menu.cpp b/engines/mads/dragonsphere/main_menu.cpp
index d648fd0e230..b271682caf5 100644
--- a/engines/mads/dragonsphere/main_menu.cpp
+++ b/engines/mads/dragonsphere/main_menu.cpp
@@ -49,7 +49,6 @@
 #include "mads/core/kernel.h"
 #include "mads/core/game.h"
 #include "mads/core/pack.h"
-#include "mads/core/quote.h"
 #include "mads/dragonsphere/mads/sounds.h"
 #include "mads/dragonsphere/main_menu.h"
 
@@ -71,15 +70,6 @@ namespace Dragonsphere {
 
 #define MENU_HIGH_SPRITE        15
 
-
-#define EYE_QUOTES      16
-#define EYE_HOTSPOT     32
-#define EYE_MESSAGES    2
-
-#undef MESSAGE_COLOR
-#define MESSAGE_COLOR   1284
-
-
 int mads_mode = false;
 
 FontPtr font = NULL;
@@ -126,26 +116,8 @@ int  swap_line;                          /* Currently active swap line
 long swap_clock;                         /* Time for next swap */
 
 int  current_item;
-int  current_eye   = false;
-int  eye_latch     = false;
 int  selected_item = -1;
 
-#define LEFT_EYE   0
-#define RIGHT_EYE  1
-
-extern char *quotes;
-int  eye_message[2];
-int  eye_pokes   = 0;
-int  recent_eye  = 0;
-int  rebel_base  = 0;
-int  poke_count_message = -1;
-int  poke_count         = 0;
-int  poke_counting      = false;
-
-char poke_count_buf[2][20];
-
-char bonus_buf[80] = "";
-
 Palette special_pal;                     /* Palette for fadeout */
 
 
@@ -213,14 +185,8 @@ static void process_menu() {
 
 	myspot = hspot_which(mouse_x, mouse_y - viewing_at_y, mcga_mode);
 
-	current_eye = false;
-
 	if ((myspot > 0) && mouse_any_stroke && (menu_mode == MENU_ACCEPTING_COMMANDS)) {
 		current_item = spot[myspot].num;
-		if (current_item >= EYE_HOTSPOT) {
-			current_item = -1;
-			current_eye = true;
-		}
 	} else {
 		current_item = -1;
 	}


Commit: cd336392f5b9c2b2220914e2afa854bd4a13ebcc
    https://github.com/scummvm/scummvm/commit/cd336392f5b9c2b2220914e2afa854bd4a13ebcc
Author: fusefib (fibofuse at gmail.com)
Date: 2026-09-12T11:44:52+10:00

Commit Message:
MADS: PHANTOM: Restore dormant rebel base eye gag

Make the dormant rebel base sequence one additional random response
after the five fixed eye-poke messages. Run it once per menu
presentation, then resume ordinary responses while counting the stated
thousand additional pokes.

Assisted-by: Codex:GPT-5.6-sol

Changed paths:
    engines/mads/detection.h
    engines/mads/detection_tables.h
    engines/mads/metaengine.cpp
    engines/mads/phantom/main_menu.cpp


diff --git a/engines/mads/detection.h b/engines/mads/detection.h
index 221995de1aa..eeb709cb4bb 100644
--- a/engines/mads/detection.h
+++ b/engines/mads/detection.h
@@ -63,6 +63,7 @@ struct MADSGameDescription {
 
 #define GAMEOPTION_ORIGINAL_MAC_MENUS  GUIO_GAMEOPTIONS8
 #define GAMEOPTION_PAS                 GUIO_GAMEOPTIONS9
+#define GAMEOPTION_RESTORE_PHANTOM_MAIN_MENU_CONTENT GUIO_GAMEOPTIONS10
 
 } // namespace MADS
 
diff --git a/engines/mads/detection_tables.h b/engines/mads/detection_tables.h
index d8ec1876517..17919e022ab 100644
--- a/engines/mads/detection_tables.h
+++ b/engines/mads/detection_tables.h
@@ -193,7 +193,7 @@ static const MADSGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformDOS,
 			ADGF_TESTING,
-			GUIO6(GUIO_MIDIADLIB, GUIO_MIDIMT32, GUIO_MIDIPCSPK, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_PAS)
+			GUIO7(GUIO_MIDIADLIB, GUIO_MIDIMT32, GUIO_MIDIPCSPK, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_PAS, GAMEOPTION_RESTORE_PHANTOM_MAIN_MENU_CONTENT)
 		},
 		GType_Phantom,
 		0
@@ -208,7 +208,7 @@ static const MADSGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformDOS,
 			ADGF_TESTING | ADGF_CD,
-			GUIO6(GUIO_MIDIADLIB, GUIO_MIDIMT32, GUIO_MIDIPCSPK, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_PAS)
+			GUIO7(GUIO_MIDIADLIB, GUIO_MIDIMT32, GUIO_MIDIPCSPK, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_PAS, GAMEOPTION_RESTORE_PHANTOM_MAIN_MENU_CONTENT)
 		},
 		GType_Phantom,
 		0
diff --git a/engines/mads/metaengine.cpp b/engines/mads/metaengine.cpp
index 77d447c47cf..aa2d7f279bd 100644
--- a/engines/mads/metaengine.cpp
+++ b/engines/mads/metaengine.cpp
@@ -141,6 +141,18 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 		}
 	},
 
+	{
+		GAMEOPTION_RESTORE_PHANTOM_MAIN_MENU_CONTENT,
+		{
+			_s("Enable restored main menu content"),
+			_s("Restore unused content in the main menu."),
+			"restore_main_menu_content",
+			false,
+			0,
+			0
+		}
+	},
+
 #ifdef USE_TTS
 	{
 		GAMEOPTION_TTS_NARRATOR,
diff --git a/engines/mads/phantom/main_menu.cpp b/engines/mads/phantom/main_menu.cpp
index 4924df0b4b9..5c908368c63 100644
--- a/engines/mads/phantom/main_menu.cpp
+++ b/engines/mads/phantom/main_menu.cpp
@@ -19,6 +19,8 @@
  *
  */
 
+#include "common/config-manager.h"
+
 #include "mads/mads.h"
 #include "mads/core/general.h"
 #include "mads/core/config.h"
@@ -137,12 +139,17 @@ int  eye_pokes   = 0;
 int  recent_eye  = 0;
 int  rebel_base  = 0;
 int  poke_count_message = -1;
+int  rebel_second_message = -1;
 int  poke_count         = 0;
 int  poke_counting      = false;
 
 char poke_count_buf[2][20];
 
-char bonus_buf[80] = "";
+static const byte REBEL_QUOTES[][2] = {
+	{ 82, 83 }, { 84, 85 }, { 86, 0 }, { 87, 0 }, { 88, 89 },
+	{ 90, 0 }, { 91, 0 }, { 92, 93 }, { 94, 95 }, { 96, 0 },
+	{ 97, 0 }, { 98, 0 }, { 99, 0 }
+};
 
 Palette special_pal;                     /* Palette for fadeout */
 
@@ -298,6 +305,31 @@ done:
 	;
 }
 
+static void add_bonus_message() {
+	const byte *quote_ids = REBEL_QUOTES[rebel_base - 1];
+
+	if (poke_count_message >= 0)
+		kernel_message_delete(poke_count_message);
+	if (rebel_second_message >= 0)
+		kernel_message_delete(rebel_second_message);
+	rebel_second_message = -1;
+
+	if (quote_ids[1] != 0) {
+		poke_count_message = kernel_message_add(
+			quote_string(quotes, quote_ids[0]), 160, 27,
+			MESSAGE_COLOR, 180, 0, KERNEL_MESSAGE_CENTER);
+		rebel_second_message = kernel_message_add(
+			quote_string(quotes, quote_ids[1]), 160, 40,
+			MESSAGE_COLOR, 180, 0, KERNEL_MESSAGE_CENTER);
+	} else {
+		poke_count_message = kernel_message_add(
+			quote_string(quotes, quote_ids[0]), 160, 40,
+			MESSAGE_COLOR, 180, 0, KERNEL_MESSAGE_CENTER);
+	}
+
+	rebel_base++;
+}
+
 static void process_messages(int anim) {
 	int total;
 	int count;
@@ -319,21 +351,47 @@ static void process_messages(int anim) {
 
 	eye_pokes++;
 
-	if (eye_pokes < 6) {
-		id = eye_pokes - 1;
-	} else {
-		id = imath_random(0, EYE_QUOTES - 1);
-	}
-
 	if (poke_counting) {
-		if (poke_count_message >= 0) {
+		if (poke_count_message >= 0)
 			kernel_message_delete(poke_count_message);
-		}
+		if (rebel_second_message >= 0)
+			kernel_message_delete(rebel_second_message);
+		rebel_second_message = -1;
 		poke_count++;
-		buf = (poke_count & 1);
+		buf = poke_count & 1;
 		Common::sprintf_s(poke_count_buf[buf], "%d", poke_count);
 		poke_count_message = kernel_message_add(poke_count_buf[buf], 160, 40,
 			MESSAGE_COLOR, 180, 0, KERNEL_MESSAGE_CENTER);
+
+		if (poke_count == 999) {
+			add_bonus_message();
+			goto done;
+		}
+		if (poke_count >= 1000)
+			poke_counting = false;
+	}
+
+	if ((rebel_base > 0) && (rebel_base != 9) &&
+			(rebel_base <= (int)ARRAYSIZE(REBEL_QUOTES))) {
+		add_bonus_message();
+		if (rebel_base == 9) {
+			poke_count = 0;
+			poke_counting = true;
+		}
+		goto done;
+	}
+
+	if (eye_pokes < 6) {
+		id = eye_pokes - 1;
+	} else {
+		id = imath_random(0,
+			(ConfMan.getBool("restore_main_menu_content") && !rebel_base) ?
+			EYE_QUOTES : EYE_QUOTES - 1);
+		if (id == EYE_QUOTES) {
+			rebel_base = 1;
+			add_bonus_message();
+			goto done;
+		}
 	}
 
 	id += quote_mainmenu_phantom_1;
@@ -391,6 +449,7 @@ void menu_control() {
 	recent_eye = 0;
 	rebel_base = 0;
 	poke_count_message = -1;
+	rebel_second_message = -1;
 	poke_count = 0;
 	poke_counting = false;
 


Commit: 5b65153005cca053a7138b49d9bf2695a917284f
    https://github.com/scummvm/scummvm/commit/5b65153005cca053a7138b49d9bf2695a917284f
Author: fusefib (fibofuse at gmail.com)
Date: 2026-09-12T11:44:52+10:00

Commit Message:
MADS: PHANTOM: Prevent overlapping main menu eye messages

Changed paths:
    engines/mads/phantom/main_menu.cpp


diff --git a/engines/mads/phantom/main_menu.cpp b/engines/mads/phantom/main_menu.cpp
index 5c908368c63..21170d542f6 100644
--- a/engines/mads/phantom/main_menu.cpp
+++ b/engines/mads/phantom/main_menu.cpp
@@ -307,6 +307,14 @@ done:
 
 static void add_bonus_message() {
 	const byte *quote_ids = REBEL_QUOTES[rebel_base - 1];
+	int count;
+
+	for (count = 0; count < EYE_MESSAGES; count++) {
+		if ((eye_message[count] >= 0) &&
+				(eye_message[count] != poke_count_message) &&
+				(eye_message[count] != rebel_second_message))
+			kernel_message_delete(eye_message[count]);
+	}
 
 	if (poke_count_message >= 0)
 		kernel_message_delete(poke_count_message);


Commit: ea217c3300e277becc16bc8d25f3b4390bd7a857
    https://github.com/scummvm/scummvm/commit/ea217c3300e277becc16bc8d25f3b4390bd7a857
Author: fusefib (fibofuse at gmail.com)
Date: 2026-09-12T11:44:52+10:00

Commit Message:
MADS: PHANTOM: Store main menu quotes in kernel state

This makes them visible to the MADS quotes debugger command.

Changed paths:
    engines/mads/phantom/main.cpp
    engines/mads/phantom/main_menu.cpp


diff --git a/engines/mads/phantom/main.cpp b/engines/mads/phantom/main.cpp
index 9ed303101fd..6247ccb74d9 100644
--- a/engines/mads/phantom/main.cpp
+++ b/engines/mads/phantom/main.cpp
@@ -31,6 +31,7 @@
 #include "mads/core/kernel.h"
 #include "mads/core/magic.h"
 #include "mads/core/matte.h"
+#include "mads/core/mem.h"
 #include "mads/core/mcga.h"
 #include "mads/core/mouse.h"
 #include "mads/core/pal.h"
@@ -48,8 +49,6 @@ namespace Phantom {
 constexpr bool SHOW_LINES = true;
 constexpr byte LINE_COLOR = 2;
 
-char *quotes;
-
 static void main_menu_main() {
 	auto &screen = *g_engine->getScreen();
 	Palette palette;
@@ -73,7 +72,7 @@ static void main_menu_main() {
 		picture_view_x = 0;
 		picture_view_y = 0;
 
-		quotes = quote_load(quote_mainmenu_phantom_1,
+		kernel.quotes = quote_load(quote_mainmenu_phantom_1,
 			67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
 			77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
 			87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
@@ -119,7 +118,8 @@ static void main_menu_main() {
 			}
 		}
 
-		free(quotes);
+		mem_free(kernel.quotes);
+		kernel.quotes = nullptr;
 		kernel_unload_sound_driver();
 		kernel_game_shutdown();
 	}
diff --git a/engines/mads/phantom/main_menu.cpp b/engines/mads/phantom/main_menu.cpp
index 21170d542f6..adcbb6cb76b 100644
--- a/engines/mads/phantom/main_menu.cpp
+++ b/engines/mads/phantom/main_menu.cpp
@@ -133,7 +133,6 @@ int  selected_item = -1;
 #define LEFT_EYE   0
 #define RIGHT_EYE  1
 
-extern char *quotes;
 int  eye_message[2];
 int  eye_pokes   = 0;
 int  recent_eye  = 0;
@@ -324,14 +323,14 @@ static void add_bonus_message() {
 
 	if (quote_ids[1] != 0) {
 		poke_count_message = kernel_message_add(
-			quote_string(quotes, quote_ids[0]), 160, 27,
+			quote_string(kernel.quotes, quote_ids[0]), 160, 27,
 			MESSAGE_COLOR, 180, 0, KERNEL_MESSAGE_CENTER);
 		rebel_second_message = kernel_message_add(
-			quote_string(quotes, quote_ids[1]), 160, 40,
+			quote_string(kernel.quotes, quote_ids[1]), 160, 40,
 			MESSAGE_COLOR, 180, 0, KERNEL_MESSAGE_CENTER);
 	} else {
 		poke_count_message = kernel_message_add(
-			quote_string(quotes, quote_ids[0]), 160, 40,
+			quote_string(kernel.quotes, quote_ids[0]), 160, 40,
 			MESSAGE_COLOR, 180, 0, KERNEL_MESSAGE_CENTER);
 	}
 
@@ -427,7 +426,7 @@ static void process_messages(int anim) {
 		y = 66;
 	}
 
-	eye_message[recent_eye] = kernel_message_add(quote_string(quotes, id), x, y,
+	eye_message[recent_eye] = kernel_message_add(quote_string(kernel.quotes, id), x, y,
 		MESSAGE_COLOR, 180, 0, flags);
 
 done:




More information about the Scummvm-git-logs mailing list