[Scummvm-git-logs] scummvm master -> 1afa2eab91bcc8ddea9330162bb6c60a7e2287c0

mduggan mgithub at guarana.org
Sun Aug 1 02:04:20 UTC 2021


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

Summary:
1afa2eab91 ULTIMA8: Fix crash after watching Crusader credits and saving game


Commit: 1afa2eab91bcc8ddea9330162bb6c60a7e2287c0
    https://github.com/scummvm/scummvm/commit/1afa2eab91bcc8ddea9330162bb6c60a7e2287c0
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-08-01T11:03:49+09:00

Commit Message:
ULTIMA8: Fix crash after watching Crusader credits and saving game

Changed paths:
    engines/ultima/ultima8/games/cru_game.cpp
    engines/ultima/ultima8/games/cru_game.h
    engines/ultima/ultima8/gumps/cru_menu_gump.cpp


diff --git a/engines/ultima/ultima8/games/cru_game.cpp b/engines/ultima/ultima8/games/cru_game.cpp
index e725a2ef3d..177a31e41e 100644
--- a/engines/ultima/ultima8/games/cru_game.cpp
+++ b/engines/ultima/ultima8/games/cru_game.cpp
@@ -188,11 +188,7 @@ void CruGame::playDemoScreen() {
 	}
 }
 
-
-void CruGame::playCredits() {
-	Process *menuproc = new MainMenuProcess();
-	Kernel::get_instance()->addProcess(menuproc);
-
+ProcId CruGame::playCreditsNoMenu() {
 	static const Std::string txt_filename = "static/credits.dat";
 	static const Std::string bmp_filename = "static/cred.dat";
 	Common::SeekableReadStream *txtrs = FileSystem::get_instance()->ReadFile(txt_filename);
@@ -201,20 +197,29 @@ void CruGame::playCredits() {
 	if (!txtrs) {
 		perr << "RemorseGame::playCredits: error opening credits text: "
 			 << txt_filename << Std::endl;
-		return;
+		return 0;
 	}
 	if (!bmprs) {
 		perr << "RemorseGame::playCredits: error opening credits background: "
 			 << bmp_filename << Std::endl;
-		return;
+		return 0;
 	}
 	Gump *creditsgump = new CruCreditsGump(txtrs, bmprs);
 	creditsgump->InitGump(nullptr);
 	creditsgump->CreateNotifier();
 	Process *notifyproc = creditsgump->GetNotifyProcess();
+	return notifyproc->getPid();
+}
 
-	if (notifyproc) {
-		menuproc->waitFor(notifyproc);
+
+void CruGame::playCredits() {
+	Process *menuproc = new MainMenuProcess();
+	Kernel::get_instance()->addProcess(menuproc);
+
+	ProcId creditsnotify = playCreditsNoMenu();
+
+	if (creditsnotify) {
+		menuproc->waitFor(creditsnotify);
 	}
 }
 
diff --git a/engines/ultima/ultima8/games/cru_game.h b/engines/ultima/ultima8/games/cru_game.h
index 15bf3ea00a..bd8c8fcf36 100644
--- a/engines/ultima/ultima8/games/cru_game.h
+++ b/engines/ultima/ultima8/games/cru_game.h
@@ -51,6 +51,9 @@ public:
 	void playCredits() override;
 	void playQuotes() override { }; // no quotes for Crusader
 	void playDemoScreen() override;
+
+	/** Play credits but without showing a menu at the end - just finish. */
+	ProcId playCreditsNoMenu();
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/cru_menu_gump.cpp b/engines/ultima/ultima8/gumps/cru_menu_gump.cpp
index ba8634fb07..7c4ab66cf3 100644
--- a/engines/ultima/ultima8/gumps/cru_menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_menu_gump.cpp
@@ -30,6 +30,7 @@
 #include "ultima/ultima8/gumps/widgets/button_widget.h"
 #include "ultima/ultima8/gumps/quit_gump.h"
 #include "ultima/ultima8/gumps/difficulty_gump.h"
+#include "ultima/ultima8/games/cru_game.h"
 #include "ultima/ultima8/games/game.h"
 #include "ultima/ultima8/world/actors/main_actor.h"
 #include "ultima/ultima8/graphics/palette_manager.h"
@@ -218,9 +219,12 @@ void CruMenuGump::selectEntry(int entry) {
 		dlg.runModal();
 	}
 	break;
-	case 5: // Credits
-		Game::get_instance()->playCredits();
+	case 5: { // Credits
+		CruGame *game = dynamic_cast<CruGame *>(Game::get_instance());
+		assert(game);
+		game->playCreditsNoMenu();
 		break;
+	}
 	case 6: // Quit
 		QuitGump::verifyQuit();
 		break;




More information about the Scummvm-git-logs mailing list