The code that loads saved game from the launcher

can now load SCI2 saved games. Added an explanation
why the injected call is necessary

svn-id: r49349
This commit is contained in:
Filippos Karapetis 2010-05-31 12:13:50 +00:00
parent a963917e89
commit cc025ace18

View File

@ -593,11 +593,17 @@ static void callKernelFunc(EngineState *s, int kernelFuncNum, int argc) {
//warning("callk %s", kernelFunc.orig_name.c_str());
// TODO: SCI2/SCI2.1+ equivalent, once saving/loading works in SCI2/SCI2.1+
if (g_loadFromLauncher >= 0 && kernelFuncNum == 0x8) {
// A game is being loaded from the launcher, and kDisplay is called, all initialization has taken
// place (i.e. menus have been constructed etc). Therefore, inject a kRestoreGame call
// here, instead of the requested function.
// TODO: SCI2.1 equivalent
if (g_loadFromLauncher >= 0 &&
(kernelFuncNum == 0x8 && getSciVersion() <= SCI_VERSION_1_1) || // DrawPic
(kernelFuncNum == 0x3d && getSciVersion() == SCI_VERSION_2)) { // GetSaveDir
//(kernelFuncNum == 0x28 && getSciVersion() == SCI_VERSION_2_1)) { // AddPlane
// A game is being loaded from the launcher, and the game is about to draw something on
// screen, hence all initialization has taken place (i.e. menus have been constructed etc).
// Therefore, inject a kRestoreGame call here, instead of the requested function.
// The restore call is injected here mainly for games which have a menu, as the menu is
// constructed when the game starts and is not reconstructed when a saved game is loaded.
int saveSlot = g_loadFromLauncher;
g_loadFromLauncher = -1; // invalidate slot, so that we don't load again