[Scummvm-git-logs] scummvm master -> 91efac699c4306e6c27f54921ccfe8bf524db26d

dreammaster noreply at scummvm.org
Sat Apr 25 08:54:19 UTC 2026


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

Summary:
91efac699c MADS: PHANTOM: Properly implement original save/restore dialogs


Commit: 91efac699c4306e6c27f54921ccfe8bf524db26d
    https://github.com/scummvm/scummvm/commit/91efac699c4306e6c27f54921ccfe8bf524db26d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-04-25T18:54:11+10:00

Commit Message:
MADS: PHANTOM: Properly implement original save/restore dialogs

Changed paths:
    engines/mads/madsv2/core/game.cpp
    engines/mads/madsv2/core/popup.cpp
    engines/mads/madsv2/engine.cpp
    engines/mads/madsv2/phantom/menus.cpp


diff --git a/engines/mads/madsv2/core/game.cpp b/engines/mads/madsv2/core/game.cpp
index a946aa0a545..5843138316d 100644
--- a/engines/mads/madsv2/core/game.cpp
+++ b/engines/mads/madsv2/core/game.cpp
@@ -2352,8 +2352,10 @@ static void game_read_save_directory() {
 	memset(game_save_directory, 0, GAME_MAX_SAVE_SLOTS * (GAME_MAX_SAVE_LENGTH + 1));
 
 	for (auto it = list.begin(); it != list.end(); ++it) {
-		char *slot = game_save_directory + it->getSaveSlot() * (GAME_MAX_SAVE_LENGTH + 1);
-		Common::strcpy_s(slot, GAME_MAX_SAVE_LENGTH + 1, it->getDescription().c_str());
+		if (it->getSaveSlot() > 0) {
+			char *slot = game_save_directory + (it->getSaveSlot() - 1) * (GAME_MAX_SAVE_LENGTH + 1);
+			Common::strcpy_s(slot, GAME_MAX_SAVE_LENGTH + 1, it->getDescription().c_str());
+		}
 	}
 }
 
diff --git a/engines/mads/madsv2/core/popup.cpp b/engines/mads/madsv2/core/popup.cpp
index 7eeb7c43dd5..aa01fa3816f 100644
--- a/engines/mads/madsv2/core/popup.cpp
+++ b/engines/mads/madsv2/core/popup.cpp
@@ -2427,7 +2427,7 @@ static void popup_savelist_element_draw(PopupItem *item, int element) {
 		Common::strcpy_s(temp_buf, item->buffer->data);
 	} else {
 		text_locator = popup_savelist_string(item, element);
-		Common::strcpy_s(temp_buf, text_locator);
+		Common::strcpy_s(temp_buf, text_locator ? text_locator : "");
 		if (!strlen(temp_buf) && (item->prompt != NULL) && (element != list->picked_element)) {
 			Common::strcpy_s(temp_buf, item->prompt);
 		}
diff --git a/engines/mads/madsv2/engine.cpp b/engines/mads/madsv2/engine.cpp
index b2aafec582a..f90faeb8055 100644
--- a/engines/mads/madsv2/engine.cpp
+++ b/engines/mads/madsv2/engine.cpp
@@ -233,7 +233,7 @@ int MADSV2Engine::getKey() {
 
 	if (!_keyEvents.empty()) {
 		Common::KeyState ks = _keyEvents.pop();
-		return (ks.ascii && !ks.flags) ? ks.ascii : (ks.flags << 16) | ks.keycode;
+		return ks.ascii ? ks.ascii : (ks.flags << 16) | ks.keycode;
 	}
 
 	return 0;
diff --git a/engines/mads/madsv2/phantom/menus.cpp b/engines/mads/madsv2/phantom/menus.cpp
index 2ca61f762bc..6b7e9c40d3a 100644
--- a/engines/mads/madsv2/phantom/menus.cpp
+++ b/engines/mads/madsv2/phantom/menus.cpp
@@ -65,12 +65,12 @@ int global_menu_force_restart;
 char *menu_quotes = NULL;
 
 
-static int global_save(int id) {
+static int global_save(int id, const char *save_game_name) {
 	int status;
 
 	game_save_name(id + 1);
 
-	if (g_engine->saveGameState(id, save_game_buf).getCode() == Common::kNoError)
+	if (g_engine->saveGameState(id + 1, save_game_name).getCode() == Common::kNoError)
 		status = SAVE_SUCCESSFUL;
 	else
 		status = SAVE_FAILED;
@@ -81,7 +81,7 @@ static int global_save(int id) {
 static int global_restore(int id) {
 	int status;
 
-	if (g_engine->loadGameState(id).getCode() == Common::kNoError)
+	if (g_engine->loadGameState(id + 1).getCode() == Common::kNoError)
 		status = RESTORE_SUCCESSFUL;
 	else
 		status = RESTORE_FAILED;
@@ -250,7 +250,7 @@ static void global_menu_save_restore(int save) {
 	}
 	popup_blank(4);
 
-	save_list = popup_savelist(nullptr, menu_quote(quote_menu_empty),
+	save_list = popup_savelist(game_save_directory, menu_quote(quote_menu_empty),
 		GAME_MAX_SAVE_SLOTS,
 		GAME_MAX_SAVE_LENGTH + 1,
 		GAME_MAX_SAVE_LENGTH,
@@ -325,7 +325,7 @@ static void global_menu_save_restore(int save) {
 			if (!strlen(save_game_name)) {
 				Common::strcpy_s(save_game_name, GAME_MAX_SAVE_LENGTH, menu_quote(quote_menu_unnamed));
 			}
-			status = global_save(selection);
+			status = global_save(selection, save_game_name);
 
 		} else {
 			status = global_restore(selection);




More information about the Scummvm-git-logs mailing list