[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