[Scummvm-git-logs] scummvm master -> b049396ef627d85c0dc53ef6a28d26d53fd3a31c
dreammaster
noreply at scummvm.org
Thu Aug 6 10:50:02 UTC 2026
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
4cabb86722 MADS: NEBULAR: Add missing GAMEOPTION_ORIGINAL_SAVELOAD from detection entries
5f75a0bb1e MADS: Grab a savegame thumbnail before opening original game dialogs
b049396ef6 MADS: NEBULAR: Fix background when saving using ScummVM GMM
Commit: 4cabb867224c9776c63e691aebf72c29c44e5024
https://github.com/scummvm/scummvm/commit/4cabb867224c9776c63e691aebf72c29c44e5024
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-08-06T20:49:53+10:00
Commit Message:
MADS: NEBULAR: Add missing GAMEOPTION_ORIGINAL_SAVELOAD from detection entries
Changed paths:
engines/mads/detection_tables.h
diff --git a/engines/mads/detection_tables.h b/engines/mads/detection_tables.h
index cf19467145e..f801b6cb1f5 100644
--- a/engines/mads/detection_tables.h
+++ b/engines/mads/detection_tables.h
@@ -32,9 +32,9 @@ static const MADSGameDescription gameDescriptions[] = {
Common::kPlatformDOS,
ADGF_UNSTABLE | GF_INSTALLER,
#ifdef USE_TTS
- GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION)
+ GUIO8(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#else
- GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION)
+ GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#endif
},
GType_RexNebular,
@@ -51,9 +51,9 @@ static const MADSGameDescription gameDescriptions[] = {
Common::kPlatformDOS,
ADGF_UNSTABLE | GF_INSTALLER,
#ifdef USE_TTS
- GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION)
+ GUIO8(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#else
- GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION)
+ GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#endif
},
GType_RexNebular,
@@ -70,9 +70,9 @@ static const MADSGameDescription gameDescriptions[] = {
Common::kPlatformDOS,
ADGF_UNSTABLE | GF_INSTALLER,
#ifdef USE_TTS
- GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION)
+ GUIO8(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#else
- GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION)
+ GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#endif
},
GType_RexNebular,
@@ -89,9 +89,9 @@ static const MADSGameDescription gameDescriptions[] = {
Common::kPlatformDOS,
ADGF_UNSTABLE,
#ifdef USE_TTS
- GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION)
+ GUIO8(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#else
- GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION)
+ GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#endif
},
GType_RexNebular,
@@ -108,9 +108,9 @@ static const MADSGameDescription gameDescriptions[] = {
Common::kPlatformDOS,
ADGF_UNSTABLE,
#ifdef USE_TTS
- GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION)
+ GUIO8(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#else
- GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION)
+ GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#endif
},
GType_RexNebular,
@@ -126,7 +126,7 @@ static const MADSGameDescription gameDescriptions[] = {
Common::RU_RUS,
Common::kPlatformDOS,
ADGF_UNSTABLE,
- GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION)
+ GUIO7(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
},
GType_RexNebular,
0
@@ -141,7 +141,7 @@ static const MADSGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_UNSTABLE | ADGF_DEMO,
- GUIO5(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE)
+ GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_ORIGINAL_SAVELOAD)
},
GType_RexNebular,
0
@@ -160,9 +160,9 @@ static const MADSGameDescription gameDescriptions[] = {
Common::kPlatformMacintosh,
ADGF_UNSTABLE,
#ifdef USE_TTS
- GUIO9(GUIO_NOMIDI, GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION)
+ GUIO10(GUIO_NOMIDI, GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#else
- GUIO8(GUIO_NOMIDI, GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION)
+ GUIO9(GUIO_NOMIDI, GUIO_NOSPEECH, GUIO_NOASPECT, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_ORIGINAL_SAVELOAD)
#endif
},
GType_RexNebular,
Commit: 5f75a0bb1e6bdf9309ec49c7408082567a158918
https://github.com/scummvm/scummvm/commit/5f75a0bb1e6bdf9309ec49c7408082567a158918
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-08-06T20:49:53+10:00
Commit Message:
MADS: Grab a savegame thumbnail before opening original game dialogs
Changed paths:
engines/mads/core/game.cpp
engines/mads/mads.cpp
engines/mads/mads.h
engines/mads/metaengine.cpp
engines/mads/nebular/menus.cpp
diff --git a/engines/mads/core/game.cpp b/engines/mads/core/game.cpp
index 8d4d4481a5e..824b0c110e1 100644
--- a/engines/mads/core/game.cpp
+++ b/engines/mads/core/game.cpp
@@ -1497,7 +1497,10 @@ void game_control() {
if (g_engine->getGameID() == GType_RexNebular && kernel.activate_menu != GAME_NO_MENU &&
player.commands_allowed && !global[RexNebular::kCopyProtectFailed]) {
player_dump_walker();
+
+ g_engine->setSavegameThumbnail();
game_exec_function(game_menu_routine);
+ g_engine->clearSavegameThumbnail();
kernel.activate_menu = GAME_NO_MENU;
}
@@ -1927,7 +1930,6 @@ static void game_control_loop() {
if (debugger) game_exec_function(debugger_reset);
while ((new_room == room_id) && game.going && !kernel.force_restart) {
-
game_main_loop();
if (kernel.activate_menu) {
@@ -1939,7 +1941,9 @@ static void game_control_loop() {
kernel.force_restart = true;
} else {
+ g_engine->setSavegameThumbnail();
game_exec_function(game_menu_routine);
+ g_engine->clearSavegameThumbnail();
if (game_menu_routine == NULL)
game.going = false;
diff --git a/engines/mads/mads.cpp b/engines/mads/mads.cpp
index 2681a38d499..559ec692450 100644
--- a/engines/mads/mads.cpp
+++ b/engines/mads/mads.cpp
@@ -23,6 +23,7 @@
#include "common/config-manager.h"
#include "common/memstream.h"
#include "engines/util.h"
+#include "graphics/scaler.h"
#include "mads/mads.h"
#include "mads/mads.h"
#include "mads/core/anim.h"
@@ -548,4 +549,12 @@ int MADSEngine::getRandomNumber(int minNumber, int maxNumber) {
return minNumber + _randomSource.getRandomNumber(range);
}
+void MADSEngine::setSavegameThumbnail() {
+ ::createThumbnailFromScreen(&_savegameThumbnail);
+}
+
+void MADSEngine::clearSavegameThumbnail() {
+ _savegameThumbnail.free();
+}
+
} // namespace MADS
diff --git a/engines/mads/mads.h b/engines/mads/mads.h
index 18eb8a05905..19526e5f4b4 100644
--- a/engines/mads/mads.h
+++ b/engines/mads/mads.h
@@ -86,6 +86,7 @@ protected:
Audio::SoundHandle _speechHandle;
TimerFunction _timerFunction = nullptr;
uint32 _nextTimerTime = 0;
+ Graphics::Surface _savegameThumbnail;
virtual Common::Point screenToGame(const Common::Point &point) const;
virtual Common::Point gameToScreen(const Common::Point &point) const;
@@ -132,6 +133,12 @@ public:
void warpMouse(int x, int y);
void updateDisplay();
+ const Graphics::Surface &getSavegameThumbnail() const {
+ return _savegameThumbnail;
+ }
+ void setSavegameThumbnail();
+ void clearSavegameThumbnail();
+
/**
* Get the elapsed time in milliseconds
*/
diff --git a/engines/mads/metaengine.cpp b/engines/mads/metaengine.cpp
index 76127226a36..f9427f7bc3b 100644
--- a/engines/mads/metaengine.cpp
+++ b/engines/mads/metaengine.cpp
@@ -22,18 +22,16 @@
#include "base/plugins.h"
#include "engines/advancedDetector.h"
-
#include "backends/keymapper/action.h"
#include "backends/keymapper/keymapper.h"
#include "backends/keymapper/standard-actions.h"
-
#include "common/savefile.h"
#include "common/str-array.h"
#include "common/memstream.h"
#include "common/system.h"
#include "common/translation.h"
+#include "graphics/scaler.h"
#include "graphics/surface.h"
-
#include "mads/detection.h"
#include "mads/nebular/nebular.h"
#include "mads/phantom/phantom.h"
@@ -178,6 +176,7 @@ public:
Common::Error createInstance(OSystem *syst, Engine **engine, const MADS::MADSGameDescription *desc) const override;
int getMaximumSaveSlot() const override;
Common::KeymapArray initKeymaps(const char *target) const override;
+ void getSavegameThumbnail(Graphics::Surface &thumb) override;
};
bool MADSMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -332,6 +331,18 @@ Common::KeymapArray MADSMetaEngine::initKeymaps(const char *target) const {
return keymaps;
}
+void MADSMetaEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
+ const Graphics::Surface &newThumb = MADS::g_engine->getSavegameThumbnail();
+ thumb.free();
+
+ if (newThumb.h == 0)
+ // No provided thumbnail, so just get it from the screen
+ ::createThumbnailFromScreen(&thumb);
+ else
+ // Use provided thumbnail
+ thumb.copyFrom(newThumb);
+}
+
#if PLUGIN_ENABLED_DYNAMIC(MADS)
REGISTER_PLUGIN_DYNAMIC(MADS, PLUGIN_TYPE_ENGINE, MADSMetaEngine);
#else
diff --git a/engines/mads/nebular/menus.cpp b/engines/mads/nebular/menus.cpp
index bb56da9b251..a2bd6e380ca 100644
--- a/engines/mads/nebular/menus.cpp
+++ b/engines/mads/nebular/menus.cpp
@@ -1745,11 +1745,22 @@ void global_game_menu() {
break;
case GAME_SAVE_MENU:
- game_menu_save();
+ if (config_file.original_save_load) {
+ game_menu_save();
+ } else {
+ kernel.activate_menu = GAME_NO_MENU;
+ g_engine->saveGameDialog();
+ }
break;
-
case GAME_RESTORE_MENU:
- game_menu_restore();
+ if (config_file.original_save_load) {
+ game_menu_restore();
+ } else {
+ kernel.activate_menu = GAME_NO_MENU;
+ if (g_engine->loadGameDialog())
+ // Dummy name to flag that load was successful
+ Common::strcpy_s(save_game_buf, "OK");
+ }
break;
case GAME_OPTIONS_MENU:
Commit: b049396ef627d85c0dc53ef6a28d26d53fd3a31c
https://github.com/scummvm/scummvm/commit/b049396ef627d85c0dc53ef6a28d26d53fd3a31c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-08-06T20:49:53+10:00
Commit Message:
MADS: NEBULAR: Fix background when saving using ScummVM GMM
Changed paths:
engines/mads/nebular/menus.cpp
diff --git a/engines/mads/nebular/menus.cpp b/engines/mads/nebular/menus.cpp
index a2bd6e380ca..4ea7e154fd9 100644
--- a/engines/mads/nebular/menus.cpp
+++ b/engines/mads/nebular/menus.cpp
@@ -1733,6 +1733,25 @@ void global_menu_system_shutdown() {
void global_game_menu() {
g_engine->flushKeys();
+ // Special handling for direct save/load dialogs when not using the original dialogs. We do it here
+ // before the original code screws up the active screen
+ if (!config_file.original_save_load) {
+ switch (kernel.activate_menu) {
+ case GAME_SAVE_MENU:
+ kernel.activate_menu = GAME_NO_MENU;
+ g_engine->saveGameDialog();
+ return;
+ case GAME_RESTORE_MENU:
+ kernel.activate_menu = GAME_NO_MENU;
+ if (g_engine->loadGameDialog())
+ // Dummy name to flag that load was successful
+ Common::strcpy_s(save_game_buf, "OK");
+ return;
+ default:
+ break;
+ }
+ }
+
game_menu_setup();
game_menu_direct_jump = (kernel.activate_menu != GAME_MAIN_MENU);
More information about the Scummvm-git-logs
mailing list