From b23eb038eaeff19a97feb62d7ee14802501710ba Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Tue, 5 Jun 2007 00:46:58 +0000 Subject: Fix regression when listing saved game names, in Simon the Sorcerer 1/2. svn-id: r27096 --- engines/agos/saveload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 1267e27daa..ca67d4e215 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -359,7 +359,7 @@ void AGOSEngine_Simon1::listSaveGames(char *dst) { if (!(in = _saveFileMan->openForLoading(genSaveName(slot)))) break; - in->read(dst, 8); + in->read(dst, 18); delete in; lastSlot = slot; -- cgit v1.2.3 From 0eb630d9899e935f45a209c0f856fbd5acb52f72 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Wed, 6 Jun 2007 23:33:31 +0000 Subject: Fix glitches when highlighting saved game names in Elvira 2 and Waxworks, caused by incorrect position of characters. svn-id: r27146 --- engines/agos/saveload.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index ca67d4e215..c4cd370aed 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -166,7 +166,7 @@ void AGOSEngine::listSaveGames(char *dst) { slot = _saveLoadRowCurPos; for (y = 0; y < 8; y++) { window->textColumn = 0; - window->textColumnOffset = 4; + window->textColumnOffset = (getGameType() == GType_ELVIRA2) ? 4 : 0; window->textLength = 0; if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) { in->read(dst, 8); @@ -180,8 +180,13 @@ void AGOSEngine::listSaveGames(char *dst) { } dst+= 8; - window->textColumn = 7; - window->textColumnOffset = 4; + if (getGameType() == GType_WW) { + window->textColumn = 7; + window->textColumnOffset = 4; + } else if (getGameType() == GType_ELVIRA2) { + window->textColumn = 8; + window->textColumnOffset = 0; + } window->textLength = 0; if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) { in->read(dst, 8); @@ -196,7 +201,7 @@ void AGOSEngine::listSaveGames(char *dst) { dst+= 8; window->textColumn = 15; - window->textColumnOffset = 4; + window->textColumnOffset = (getGameType() == GType_ELVIRA2) ? 4 : 0; window->textLength = 0; if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) { in->read(dst, 8); -- cgit v1.2.3 From fff80bc489d6cd9c30705b54506aaef41c4f6780 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Fri, 8 Jun 2007 07:50:28 +0000 Subject: Fix load/save interface in Elvira 1. svn-id: r27191 --- engines/agos/saveload.cpp | 214 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 195 insertions(+), 19 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index c4cd370aed..dc6839c2a6 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -109,7 +109,7 @@ void AGOSEngine::quickLoadOrSave() { setBitFlag(7, false); sub = getSubroutineByID(19); startSubroutine(sub); - //oe2_printStats(); + printStats(); sub = getSubroutineByID(28); startSubroutine(sub); setBitFlag(17, false); @@ -146,7 +146,168 @@ void AGOSEngine::quickLoadOrSave() { _saveLoadType = 0; } -void AGOSEngine::listSaveGames(char *dst) { +bool AGOSEngine::confirmOverWrite(WindowBlock *window) { + if (getGameType() == GType_WW) { + Subroutine *sub = getSubroutineByID(80); + if (sub != NULL) + startSubroutineEx(sub); + + if (_variableArray[253] == 0) + return true; + } else if (getGameType() == GType_ELVIRA2) { + // Original verison never confirmed + return true; + } else if (getGameType() == GType_ELVIRA1) { + const char *message1, *message2, *message3; + + switch (_language) { + case Common::FR_FRA: + message1 = "\rFichier d/j; existant.\r\r"; + message2 = " Ecrire pardessus ?\r\r"; + message3 = " Oui Non"; + break; + case Common::DE_DEU: + message1 = "\rDatei existiert bereits.\r\r"; + message2 = " berschreiben ?\r\r"; + message3 = " Ja Nein"; + break; + default: + message1 = "\r File already exists.\r\r"; + message2 = " Overwrite it ?\r\r"; + message3 = " Yes No"; + break; + } + + printScroll(); + window->textColumn = 0; + window->textRow = 0; + window->textColumnOffset = 0; + window->textLength = 0; // Difference + + for (; *message1; message1++) + windowPutChar(window, *message1); + for (; *message2; message2++) + windowPutChar(window, *message2); + for (; *message3; message3++) + windowPutChar(window, *message3); + + if (confirmYesOrNo(120, 78) == 0x7FFF) + return true; + } + + return false; +} + +int16 AGOSEngine::matchSaveGame(const char *name, uint16 max) { + Common::InSaveFile *in; + char dst[8]; + uint16 slot; + + for (slot = 0; slot < max; slot++) { + if ((in = _saveFileMan->openForLoading(genSaveName(slot)))) { + in->read(dst, 8); + delete in; + + if (!scumm_stricmp(name, dst)) { + return slot; + } + } + } + + return -1; +} + +void AGOSEngine::userGame(bool load) { + WindowBlock *window = _windowArray[4]; + const char *message1; + int i, numSaveGames; + char *name; + char buf[8]; + + numSaveGames = countSaveGames(); + + time_t saveTime = time(NULL); + haltAnimation(); + +restart: + printScroll(); + window->textColumn = 0; + window->textRow = 0; + window->textColumnOffset = 0; + window->textLength = 0; // Difference + + switch (_language) { + case Common::FR_FRA: + message1 = "\rIns/rez disquette de\rsauvegarde de jeux &\rentrez nom de fichier:\r\r "; + break; + case Common::DE_DEU: + message1 = "\rLege Spielstandsdiskette ein. Dateinamen eingeben:\r\r "; + break; + default: + message1 = "\r Insert savegame data disk & enter filename:\r\r "; + break; + } + + for (; *message1; message1++) + windowPutChar(window, *message1); + + memset(buf, 0, 8); + name = buf; + _saveGameNameLen = 0; + + for (;;) { + windowPutChar(window, 128); + _keyPressed = 0; + + for (;;) { + delay(10); + if (_keyPressed && _keyPressed < 128) { + i = _keyPressed; + break; + } + } + + userGameBackSpace(_windowArray[4], 8); + if (i == 10 || i == 13) { + break; + } else if (i == 8) { + // do_backspace + if (_saveGameNameLen) { + _saveGameNameLen--; + name[_saveGameNameLen] = 0; + userGameBackSpace(_windowArray[4], 8); + } + } else if (i >= 32 && _saveGameNameLen != 8) { + name[_saveGameNameLen++] = i; + windowPutChar(_windowArray[4], i); + } + } + + int16 slot = matchSaveGame(name, numSaveGames); + if (!load) { + if (slot >= 0 && !confirmOverWrite(window)) + goto restart; + + if (slot < 0) + slot = numSaveGames; + + if (!saveGame(slot, name)) + fileError(_windowArray[4], true); + } else { + if (slot < 0) { + fileError(_windowArray[4], false); + } else { + if (!loadGame(genSaveName(slot))) + fileError(_windowArray[4], false); + } + } + + printStats(); + restartAnimation(); + _gameStoppedClock = time(NULL) - saveTime + _gameStoppedClock; +} + +void AGOSEngine_Elvira2::listSaveGames(char *dst) { Common::InSaveFile *in; uint y, slot; @@ -226,7 +387,7 @@ void AGOSEngine::listSaveGames(char *dst) { _saveGameNameLen = 0; } -void AGOSEngine::userGame(bool load) { +void AGOSEngine_Elvira2::userGame(bool load) { time_t saveTime; int i, numSaveGames; char *name; @@ -251,6 +412,8 @@ void AGOSEngine::userGame(bool load) { if (!load) { WindowBlock *window = _windowArray[num]; + int16 slot = -1; + name = buf + 192; for (;;) { @@ -261,15 +424,9 @@ void AGOSEngine::userGame(bool load) { i = userGameGetKey(&b, buf, 128); if (b) { if (i <= 223) { - if (getGameType() == GType_WW) { - Subroutine *sub = getSubroutineByID(80); - if (sub != NULL) - startSubroutineEx(sub); - - if (_variableArray[253] != 0) { - listSaveGames(buf); - continue; - } + if (!confirmOverWrite(window)) { + listSaveGames(buf); + continue; } if (!saveGame(_saveLoadRowCurPos + i, buf + i * 8)) @@ -280,9 +437,16 @@ void AGOSEngine::userGame(bool load) { } userGameBackSpace(_windowArray[num], 8); - if (i == 10 || i == 13) + if (i == 10 || i == 13) { + slot = matchSaveGame(name, numSaveGames); + if (slot >= 0) { + if (!confirmOverWrite(window)) { + listSaveGames(buf); + continue; + } + } break; - if (i == 8) { + } else if (i == 8) { // do_backspace if (_saveGameNameLen) { _saveGameNameLen--; @@ -295,7 +459,10 @@ void AGOSEngine::userGame(bool load) { } } - if (!saveGame(numSaveGames, buf + 192)) + if (slot < 0) + slot = numSaveGames; + + if (!saveGame(slot, buf + 192)) fileError(_windowArray[num], true); } else { i = userGameGetKey(&b, buf, 128); @@ -314,7 +481,7 @@ get_out:; restartAnimation(); } -int AGOSEngine::userGameGetKey(bool *b, char *buf, uint maxChar) { +int AGOSEngine_Elvira2::userGameGetKey(bool *b, char *buf, uint maxChar) { HitArea *ha; *b = true; @@ -537,9 +704,9 @@ restart:; } userGameBackSpace(_windowArray[5], 8); - if (i == 10 || i == 13) + if (i == 10 || i == 13) { break; - if (i == 8) { + } else if (i == 8) { // do_backspace if (_saveGameNameLen) { byte m, x; @@ -737,7 +904,16 @@ void AGOSEngine::fileError(WindowBlock *window, bool save_error) { } } - windowPutChar(window, 0xC); + if (getGameType() == GType_ELVIRA1) { + printScroll(); + window->textColumn = 0; + window->textRow = 0; + window->textColumnOffset = 0; + window->textLength = 0; // Difference + } else { + windowPutChar(window, 12); + } + for (; *message1; message1++) windowPutChar(window, *message1); for (; *message2; message2++) -- cgit v1.2.3 From 95fe36a8284f51855c3210695159965d283fc14c Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Fri, 8 Jun 2007 08:40:23 +0000 Subject: Don't save game, when no saved game name is given in earlier games. svn-id: r27195 --- engines/agos/saveload.cpp | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index dc6839c2a6..c90ffc223c 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -283,26 +283,29 @@ restart: } } - int16 slot = matchSaveGame(name, numSaveGames); - if (!load) { - if (slot >= 0 && !confirmOverWrite(window)) - goto restart; + if (_saveGameNameLen != 0) { + int16 slot = matchSaveGame(name, numSaveGames); + if (!load) { + if (slot >= 0 && !confirmOverWrite(window)) + goto restart; - if (slot < 0) - slot = numSaveGames; + if (slot < 0) + slot = numSaveGames; - if (!saveGame(slot, name)) - fileError(_windowArray[4], true); - } else { - if (slot < 0) { - fileError(_windowArray[4], false); + if (!saveGame(slot, name)) + fileError(_windowArray[4], true); } else { - if (!loadGame(genSaveName(slot))) + if (slot < 0) { fileError(_windowArray[4], false); + } else { + if (!loadGame(genSaveName(slot))) + fileError(_windowArray[4], false); + } } + + printStats(); } - printStats(); restartAnimation(); _gameStoppedClock = time(NULL) - saveTime + _gameStoppedClock; } @@ -459,11 +462,13 @@ void AGOSEngine_Elvira2::userGame(bool load) { } } - if (slot < 0) - slot = numSaveGames; + if (_saveGameNameLen != 0) { + if (slot < 0) + slot = numSaveGames; - if (!saveGame(slot, buf + 192)) - fileError(_windowArray[num], true); + if (!saveGame(slot, buf + 192)) + fileError(_windowArray[num], true); + } } else { i = userGameGetKey(&b, buf, 128); if (i != 225) { -- cgit v1.2.3 From 037e545dc1589504fc21f3fe5e5fc3c09feaa2ca Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Sat, 9 Jun 2007 07:48:27 +0000 Subject: Fix gltich when listing saved games in Hebrew versions. svn-id: r27229 --- engines/agos/saveload.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index c90ffc223c..1b68fefa7a 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -542,20 +542,23 @@ void AGOSEngine_Simon1::listSaveGames(char *dst) { lastSlot = slot; if (slot < 10) { showMessageFormat(" "); + } else if (_language == Common::HB_ISR) { + lastSlot = (slot % 10) * 10; + lastSlot += slot / 10; } + showMessageFormat("%d", lastSlot); if (_language == Common::HB_ISR && !(slot % 10)) showMessageFormat("0"); - showMessageFormat("%d", lastSlot); showMessageFormat(".%s\n", dst); dst += 18; slot++; } if (!_saveOrLoad) { - if (_saveLoadRowCurPos + 6 == slot) + if (_saveLoadRowCurPos + 6 == slot) { slot++; - else { + } else { if (slot < 10) showMessageFormat(" "); showMessageFormat("%d.\n", slot); -- cgit v1.2.3 From 55addca7ff2c3667dac140bd0cd3095e5e01b91a Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Sun, 10 Jun 2007 02:23:13 +0000 Subject: Fix load/save regression in Puzzle Pack. svn-id: r27272 --- engines/agos/saveload.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 1b68fefa7a..eb2266550a 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -1143,7 +1143,9 @@ bool AGOSEngine_Elvira2::loadGame(const char *filename, bool restartMode) { return false; } - if (getGameType() == GType_FF) { + if (getGameType() == GType_PP) { + // No caption + } else if (getGameType() == GType_FF) { f->read(ident, 100); } else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) { f->read(ident, 18); @@ -1293,7 +1295,9 @@ bool AGOSEngine_Elvira2::saveGame(uint slot, const char *caption) { return false; } - if (getGameType() == GType_FF) { + if (getGameType() == GType_PP) { + // No caption + } else if (getGameType() == GType_FF) { f->write(caption, 100); curTime = time(NULL); } else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) { -- cgit v1.2.3