From 2df38d8b2c4615ab35cee9a2607255803c1bf573 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 5 Oct 2019 15:49:26 +0300 Subject: SCI32: Handle the special Bridge save/load screens in Hoyle 5 Fixes saving/loading the Bridge hands using the ScummVM save/load screens - bug #11174 --- engines/sci/engine/guest_additions.cpp | 11 +++++++++++ engines/sci/engine/guest_additions.h | 6 ++++++ 2 files changed, 17 insertions(+) (limited to 'engines') diff --git a/engines/sci/engine/guest_additions.cpp b/engines/sci/engine/guest_additions.cpp index 8cf8c0505a..cf70608acc 100644 --- a/engines/sci/engine/guest_additions.cpp +++ b/engines/sci/engine/guest_additions.cpp @@ -527,6 +527,10 @@ reg_t GuestAdditions::kScummVMSaveLoad(EngineState *s, int argc, reg_t *argv) co return promptSaveRestoreRama(s, argc, argv); } + if (g_sci->getGameId() == GID_HOYLE5) { + return promptSaveRestoreHoyle5(s, argc, argv); + } + return promptSaveRestoreDefault(s, argc, argv); } @@ -715,6 +719,13 @@ int GuestAdditions::runSaveRestore(const bool isSave, reg_t outDescription, cons return saveNo; } +reg_t GuestAdditions::promptSaveRestoreHoyle5(EngineState *s, int argc, reg_t *argv) const { + assert(argc == 2); + Common::String callerName = s->_segMan->getObjectName(s->r_acc); + const bool isSave = (callerName == "Save"); + return make_reg(0, runSaveRestore(isSave, argc > 0 ? argv[0] : NULL_REG, s->_delayedRestoreGameId)); +} + #endif #pragma mark - diff --git a/engines/sci/engine/guest_additions.h b/engines/sci/engine/guest_additions.h index b49fe9d283..b889c49ff1 100644 --- a/engines/sci/engine/guest_additions.h +++ b/engines/sci/engine/guest_additions.h @@ -256,6 +256,12 @@ private: */ reg_t promptSaveRestoreRama(EngineState *s, int argc, reg_t *argv) const; + /** + * Prompts for a save game and returns it to game scripts using Hoyle 5's + * custom SRDialog class semantics. + */ + reg_t promptSaveRestoreHoyle5(EngineState *s, int argc, reg_t *argv) const; + /** * Prompts the user to save or load a game. * -- cgit v1.2.3