From 20bf83a2ce1c19e81cd486b4af3b7b73bd25e510 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Wed, 9 May 2007 15:36:05 +0000 Subject: Imrproved support for Elvira 1/2 and Waxworks. svn-id: r26792 --- engines/agos/saveload.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 0e82033ea2..40960c0cbe 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -118,15 +118,21 @@ char *AGOSEngine::genSaveName(int slot) { sprintf(buf, "feeble.%.3d", slot); } else if (getGameType() == GType_SIMON2) { sprintf(buf, "simon2.%.3d", slot); - } else { + } else if (getGameType() == GType_SIMON1) { sprintf(buf, "simon1.%.3d", slot); + } else if (getGameType() == GType_WW) { + sprintf(buf, "waxworks.%.3d", slot); + } else if (getGameType() == GType_ELVIRA2) { + sprintf(buf, "elvira2.%.3d", slot); + } else if (getGameType() == GType_ELVIRA1) { + sprintf(buf, "elvira1.%.3d", slot); } return buf; } void AGOSEngine::quickLoadOrSave() { // Quick load & save is only supported complete version of Simon the Sorcerer 1/2 - if (getGameType() != GType_SIMON1 && getGameType() != GType_SIMON2 || + if (getGameType() == GType_PP || getGameType() == GType_FF || (getFeatures() & GF_DEMO)) { return; } -- cgit v1.2.3 From b6672f37a97f30298e51b1d4574eeb75a31da1a6 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Sun, 13 May 2007 08:46:48 +0000 Subject: Fix bugs #941074 and #828860, by switching to graphics renderer code used by earlier (non-Windows) versions of Simon the Sorcerer 1/2. svn-id: r26825 --- engines/agos/saveload.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 40960c0cbe..5ec62ac01a 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -224,8 +224,6 @@ void AGOSEngine::userGame(bool load) { save_time = time(NULL); - _copyPartialMode = 1; - number_of_savegames = countSaveGames(); if (!load) number_of_savegames++; @@ -375,9 +373,6 @@ get_out:; disableFileBoxes(); _gameStoppedClock = time(NULL) - save_time + _gameStoppedClock; - _copyPartialMode = 0; - - restoreBlock(94, 208, 46, 80); i = _timer4; do { -- cgit v1.2.3 From 27b56c23f6a6b374cde4a06bfd4f60c4a6a78d1f Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Wed, 16 May 2007 08:27:15 +0000 Subject: Add caption to saved games for Elvira 1/2 and Waxworks. svn-id: r26850 --- engines/agos/saveload.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 5ec62ac01a..f63cca3e92 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -557,7 +557,8 @@ void writeItemID(Common::WriteStream *f, uint16 val) { f->writeUint32BE(val - 1); } -bool AGOSEngine::loadGame_e1(const char *filename, bool restartMode) { +bool AGOSEngine_Elvira1::loadGame(const char *filename, bool restartMode) { + char ident[100]; Common::SeekableReadStream *f = NULL; uint num, item_index, i; @@ -577,6 +578,10 @@ bool AGOSEngine::loadGame_e1(const char *filename, bool restartMode) { return false; } + if (!restartMode) { + f->read(ident, 8); + } + num = f->readUint32BE(); if (f->readUint32BE() != 0xFFFFFFFF || num != _itemArrayInited - 1) { @@ -649,7 +654,7 @@ bool AGOSEngine::loadGame_e1(const char *filename, bool restartMode) { return true; } -bool AGOSEngine::saveGame_e1(const char *filename) { +bool AGOSEngine_Elvira1::saveGame(uint slot, const char *caption) { Common::OutSaveFile *f; uint item_index, num_item, i; TimeEvent *te; @@ -658,13 +663,15 @@ bool AGOSEngine::saveGame_e1(const char *filename) { _lockWord |= 0x100; - f = _saveFileMan->openForSaving(filename); + f = _saveFileMan->openForSaving(genSaveName(slot)); if (f == NULL) { - warning("saveGame: Failed to save %s", filename); + warning("saveGame: Failed to save slot %d", slot); _lockWord &= ~0x100; return false; } + f->write(caption, 8); + f->writeUint32BE(_itemArrayInited - 1); f->writeUint32BE(0xFFFFFFFF); f->writeUint32BE(0); @@ -753,6 +760,8 @@ bool AGOSEngine::loadGame(const char *filename, bool restartMode) { f->read(ident, 100); } else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) { f->read(ident, 18); + } else if (!restartMode) { + f->read(ident, 8); } num = f->readUint32BE(); @@ -894,6 +903,8 @@ bool AGOSEngine::saveGame(uint slot, const char *caption) { curTime = time(NULL); } else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) { f->write(caption, 18); + } else { + f->write(caption, 8); } f->writeUint32BE(_itemArrayInited - 1); -- cgit v1.2.3 From 22e3afc4090144cd792e66df09b0c3790d5875e4 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Wed, 16 May 2007 09:39:36 +0000 Subject: Ooops, correct inheritance of load/save functions. svn-id: r26851 --- engines/agos/saveload.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index f63cca3e92..40205ea53a 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -557,7 +557,7 @@ void writeItemID(Common::WriteStream *f, uint16 val) { f->writeUint32BE(val - 1); } -bool AGOSEngine_Elvira1::loadGame(const char *filename, bool restartMode) { +bool AGOSEngine::loadGame(const char *filename, bool restartMode) { char ident[100]; Common::SeekableReadStream *f = NULL; uint num, item_index, i; @@ -654,7 +654,7 @@ bool AGOSEngine_Elvira1::loadGame(const char *filename, bool restartMode) { return true; } -bool AGOSEngine_Elvira1::saveGame(uint slot, const char *caption) { +bool AGOSEngine::saveGame(uint slot, const char *caption) { Common::OutSaveFile *f; uint item_index, num_item, i; TimeEvent *te; @@ -734,7 +734,7 @@ bool AGOSEngine_Elvira1::saveGame(uint slot, const char *caption) { return result; } -bool AGOSEngine::loadGame(const char *filename, bool restartMode) { +bool AGOSEngine_Elvira2::loadGame(const char *filename, bool restartMode) { char ident[100]; Common::SeekableReadStream *f = NULL; uint num, item_index, i, j; @@ -882,7 +882,7 @@ bool AGOSEngine::loadGame(const char *filename, bool restartMode) { return true; } -bool AGOSEngine::saveGame(uint slot, const char *caption) { +bool AGOSEngine_Elvira2::saveGame(uint slot, const char *caption) { Common::OutSaveFile *f; uint item_index, num_item, i, j; TimeEvent *te; -- cgit v1.2.3 From 11f2d4052a9cfca3414fbaec514930123b434928 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Sun, 20 May 2007 08:30:43 +0000 Subject: Update quick load code for Elvira 1/2 and Waxworks, based on original scripts. svn-id: r26884 --- engines/agos/saveload.cpp | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 40205ea53a..fca7fe2c01 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -146,15 +146,36 @@ void AGOSEngine::quickLoadOrSave() { success = loadGame(genSaveName(_saveLoadSlot)); if (!success) { sprintf(buf, "Failed to load game state to file:\n\n%s", filename); - } else { - // Redraw Inventory - mouseOff(); + } else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) { drawIconArray(2, me(), 0, 0); - mouseOn(); - // Reset engine? setBitFlag(97, true); sub = getSubroutineByID(100); startSubroutine(sub); + } else if (getGameType() == GType_WW) { + sub = getSubroutineByID(66); + startSubroutine(sub); + } else if (getGameType() == GType_ELVIRA2) { + sub = getSubroutineByID(87); + startSubroutine(sub); + setBitFlag(7, false); + sub = getSubroutineByID(19); + startSubroutine(sub); + //oe2_printStats(); + sub = getSubroutineByID(28); + startSubroutine(sub); + setBitFlag(17, false); + sub = getSubroutineByID(207); + startSubroutine(sub); + sub = getSubroutineByID(71); + startSubroutine(sub); + } else if (getGameType() == GType_ELVIRA1) { + drawIconArray(2, me(), 0, 0); + sub = getSubroutineByID(265); + startSubroutine(sub); + sub = getSubroutineByID(129); + startSubroutine(sub); + sub = getSubroutineByID(131); + startSubroutine(sub); } } else { success = saveGame(_saveLoadSlot, _saveLoadName); -- cgit v1.2.3 From 5e1af6f479588212a2e9d1407f80586659f5a9d4 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Tue, 22 May 2007 10:31:51 +0000 Subject: Add load/save interface support for Elvira 2 and Waxworks. svn-id: r26909 --- engines/agos/saveload.cpp | 409 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 286 insertions(+), 123 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index fca7fe2c01..9d8737f23e 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -54,59 +54,6 @@ int AGOSEngine::countSaveGames() { return i; } -int AGOSEngine::displaySaveGameList(int curpos, bool load, char *dst) { - int slot, last_slot; - Common::InSaveFile *in; - - showMessageFormat("\xC"); - - memset(dst, 0, 108); - - slot = curpos; - - while (curpos + 6 > slot) { - if (!(in = _saveFileMan->openForLoading(genSaveName(slot)))) - break; - - in->read(dst, 18); - delete in; - - last_slot = slot; - if (slot < 10) { - showMessageFormat(" "); - } else if (_language == Common::HB_ISR) { - last_slot = (slot % 10) * 10; - last_slot += slot / 10; - } - - if (_language == Common::HB_ISR && !(slot % 10)) - showMessageFormat("0"); - showMessageFormat("%d", last_slot); - showMessageFormat(".%s\n", dst); - dst += 18; - slot++; - } - // while_break - if (!load) { - if (curpos + 6 == slot) - slot++; - else { - if (slot < 10) - showMessageFormat(" "); - showMessageFormat("%d.\n", slot); - } - } else { - if (curpos + 6 == slot) { - if ((in = _saveFileMan->openForLoading(genSaveName(slot)))) { - slot++; - delete in; - } - } - } - - return slot - curpos; -} - char *AGOSEngine::genSaveName(int slot) { static char buf[15]; @@ -197,15 +144,243 @@ void AGOSEngine::quickLoadOrSave() { _saveLoadType = 0; } -void AGOSEngine::listSaveGames(char *buf) { - int i; +void AGOSEngine::listSaveGames(char *dst) { + Common::InSaveFile *in; + uint y, slot; + + const uint8 num = (getGameType() == GType_WW) ? 3 : 4; disableFileBoxes(); - i = displaySaveGameList(_saveLoadRowCurPos, _saveOrLoad, buf); + WindowBlock *window = _windowArray[num]; + window->textRow = 0; + window->textColumn = 0; + window->textColumnOffset = 4; + + windowPutChar(window, 12); + + memset(dst, 0, 200); + + slot = _saveLoadRowCurPos; + for (y = 0; y < 8; y++) { + window->textColumn = 0; + window->textColumnOffset = 4; + window->textLength = 0; + if (in = _saveFileMan->openForLoading(genSaveName(slot++))) { + in->read(dst, 8); + delete in; + + const char *name = dst; + for (; *name; name++) + windowPutChar(window, *name); + + enableBox(200 + y * 3 + 0); + } + dst+= 8; + + window->textColumn = 7; + window->textColumnOffset = 4; + window->textLength = 0; + if (in = _saveFileMan->openForLoading(genSaveName(slot++))) { + in->read(dst, 8); + delete in; + + const char *name = dst; + for (; *name; name++) + windowPutChar(window, *name); + + enableBox(200 + y * 3 + 1); + } + dst+= 8; + + window->textColumn = 15; + window->textColumnOffset = 4; + window->textLength = 0; + if (in = _saveFileMan->openForLoading(genSaveName(slot++))) { + in->read(dst, 8); + delete in; + + const char *name = dst; + for (; *name; name++) + windowPutChar(window, *name); + + enableBox(200 + y * 3 + 2); + } + dst+= 8; + + windowPutChar(window, 13); + } + + window->textRow = 9; + window->textColumn = 0; + window->textColumnOffset = 4; + window->textLength = 0; +} + +void AGOSEngine::userGame(bool load) { + time_t saveTime; + int i, numSaveGames; + WindowBlock *window; + char *name; + bool b; + char buf[200]; + + _saveOrLoad = load; + + saveTime = time(NULL); + + haltAnimation(); + + numSaveGames = countSaveGames(); + _numSaveGameRows = numSaveGames; + _saveLoadRowCurPos = 1; + _saveLoadEdit = false; + + const uint8 num = (getGameType() == GType_WW) ? 3 : 4; + + listSaveGames(buf); + + name = buf + 192; + _saveGameNameLen = 0; + + if (!load) { + for (;;) { + window = _windowArray[num]; + windowPutChar(window, 127); + + _saveLoadEdit = true; + + i = userGameGetKey(&b, buf, 128); + if (b) { + if (i <= 223) { + // TODO; Run the overwrite check script in Waxworks + if (!saveGame(_saveLoadRowCurPos + i, buf + i * 8)) + fileError(_windowArray[num], true); + } + + goto get_out; + } + + userGameBackSpace(_windowArray[num], 8); + if (i == 10 || i == 13) + break; + if (i == 8) { + // do_backspace + if (_saveGameNameLen) { + _saveGameNameLen--; + name[_saveGameNameLen] = 0; + userGameBackSpace(_windowArray[num], 8); + } + } else if (i >= 32 && _saveGameNameLen != 8) { + name[_saveGameNameLen++] = i; + windowPutChar(_windowArray[num], i); + } + } + + if (!saveGame(numSaveGames, buf + 192)) + fileError(_windowArray[num], true); + } else { + i = userGameGetKey(&b, buf, 128); + if (i != 225) { + if (!loadGame(genSaveName(_saveLoadRowCurPos + i))) + fileError(_windowArray[num], false); + } + } + +get_out:; + disableFileBoxes(); + + _gameStoppedClock = time(NULL) - saveTime + _gameStoppedClock; + + restartAnimation(); +} + +int AGOSEngine::userGameGetKey(bool *b, char *buf, uint maxChar) { + HitArea *ha; + *b = true; + + _keyPressed = 0; + + for (;;) { + _lastHitArea = NULL; + _lastHitArea3 = NULL; + + do { + if (_saveLoadEdit && _keyPressed && _keyPressed < maxChar) { + *b = false; + return _keyPressed; + } + delay(10); + } while (_lastHitArea3 == 0); + + ha = _lastHitArea; + if (ha == NULL || ha->id < 200) { + } else if (ha->id == 225) { + return ha->id; + } else if (ha->id == 224) { + _saveGameNameLen = 0; + _saveLoadRowCurPos += 24; + if (_saveLoadRowCurPos >= _numSaveGameRows) + _saveLoadRowCurPos = 1; + + listSaveGames(buf); + } else if (ha->id < 224) { + return ha->id - 200; + } + } +} + +void AGOSEngine_Simon1::listSaveGames(char *dst) { + Common::InSaveFile *in; + uint i, slot, lastSlot; + + disableFileBoxes(); + + showMessageFormat("\xC"); + + memset(dst, 0, 108); + + slot = _saveLoadRowCurPos; + while (_saveLoadRowCurPos + 6 > slot) { + if (!(in = _saveFileMan->openForLoading(genSaveName(slot)))) + break; + + in->read(dst, 8); + delete in; + + lastSlot = slot; + if (slot < 10) { + showMessageFormat(" "); + } + + 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) + slot++; + else { + if (slot < 10) + showMessageFormat(" "); + showMessageFormat("%d.\n", slot); + } + } else { + if (_saveLoadRowCurPos + 6 == slot) { + if ((in = _saveFileMan->openForLoading(genSaveName(slot)))) { + slot++; + delete in; + } + } + } _saveDialogFlag = true; + i = slot - _saveLoadRowCurPos; if (i != 7) { i++; if (!_saveOrLoad) @@ -221,7 +396,6 @@ void AGOSEngine::listSaveGames(char *buf) { } while (--i); } - const byte hebrewKeyTable[96] = { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 90, 45, 85, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 83, 83, 90, 61, 85, 63, 35, 89, 80, 65, 66, 87, @@ -231,10 +405,9 @@ const byte hebrewKeyTable[96] = { 123, 124, 125, 126, 127, }; -void AGOSEngine::userGame(bool load) { - time_t save_time; - int number_of_savegames; - int i, name_len, result; +void AGOSEngine_Simon1::userGame(bool load) { + time_t saveTime; + int i, numSaveGames, result; WindowBlock *window; char *name; bool b; @@ -243,27 +416,25 @@ void AGOSEngine::userGame(bool load) { _saveOrLoad = load; - save_time = time(NULL); + saveTime = time(NULL); - number_of_savegames = countSaveGames(); + numSaveGames = countSaveGames(); if (!load) - number_of_savegames++; - number_of_savegames -= 6; - if (number_of_savegames < 0) - number_of_savegames = 0; - number_of_savegames++; - _numSaveGameRows = number_of_savegames; + numSaveGames++; + numSaveGames -= 6; + if (numSaveGames < 0) + numSaveGames = 0; + numSaveGames++; + _numSaveGameRows = numSaveGames; _saveLoadRowCurPos = 1; if (!load) - _saveLoadRowCurPos = number_of_savegames; + _saveLoadRowCurPos = numSaveGames; _saveLoadEdit = false; restart:; - do { - i = userGameGetKey(&b, buf); - } while (!b); + i = userGameGetKey(&b, buf, maxChar); if (i == 205) goto get_out; @@ -283,22 +454,21 @@ restart:; if (_language == Common::HB_ISR) { window->textColumn = 3; window->textColumnOffset = 6; - window->textLength = 3; } else { window->textColumn = 2; window->textColumnOffset = 2; - window->textLength = 3; } + window->textLength = 3; name = buf + i * 18; // now process entire savegame name to get correct x offset for cursor - name_len = 0; - while (name[name_len]) { + _saveGameNameLen = 0; + while (name[_saveGameNameLen]) { if (_language == Common::HB_ISR) { byte width = 6; - if (name[name_len] >= 64 && name[name_len] < 91) - width = _hebrewCharWidths [name[name_len] - 64]; + if (name[_saveGameNameLen] >= 64 && name[_saveGameNameLen] < 91) + width = _hebrewCharWidths [name[_saveGameNameLen] - 64]; window->textLength++; window->textColumnOffset -= width; if (window->textColumnOffset < width) { @@ -308,43 +478,37 @@ restart:; } else { window->textLength++; window->textColumnOffset += 6; - if (name[name_len] == 'i' || name[name_len] == 'l') + if (name[_saveGameNameLen] == 'i' || name[_saveGameNameLen] == 'l') window->textColumnOffset -= 2; if (window->textColumnOffset >= 8) { window->textColumnOffset -= 8; window->textColumn++; } } - name_len++; + _saveGameNameLen++; } - // while_1_end - // do_3_start for (;;) { - windowPutChar(window, 0x7f); + windowPutChar(window, 127); _saveLoadEdit = true; - // do_2 - do { - i = userGameGetKey(&b, buf); - - if (b) { - if (i == 205) - goto get_out; - enableBox(208 + result); - if (_saveLoadEdit) { - userGameBackSpace(_windowArray[5], 8); - } - goto if_1; - } + i = userGameGetKey(&b, buf, maxChar); - // is_not_b - if (!_saveLoadEdit) { - enableBox(208 + result); - goto restart; + if (b) { + if (i == 205) + goto get_out; + enableBox(208 + result); + if (_saveLoadEdit) { + userGameBackSpace(_windowArray[5], 8); } - } while (i >= maxChar || i == 0); + goto if_1; + } + + if (!_saveLoadEdit) { + enableBox(208 + result); + goto restart; + } if (_language == Common::HB_ISR) { if (i >= 128) @@ -353,36 +517,33 @@ restart:; i = hebrewKeyTable[i - 32]; } - // after_do_2 userGameBackSpace(_windowArray[5], 8); if (i == 10 || i == 13) break; if (i == 8) { // do_backspace - if (name_len != 0) { - int x; - byte m; + if (_saveGameNameLen) { + byte m, x; - name_len--; - m = name[name_len]; + _saveGameNameLen--; + m = name[_saveGameNameLen]; if (_language == Common::HB_ISR) x = 8; else - x = (name[name_len] == 'i' || name[name_len] == 'l') ? 1 : 8; + x = (name[_saveGameNameLen] == 'i' || name[_saveGameNameLen] == 'l') ? 1 : 8; - name[name_len] = 0; + name[_saveGameNameLen] = 0; userGameBackSpace(_windowArray[5], x, m); } - } else if (i >= 32 && name_len != 17) { - name[name_len++] = i; + } else if (i >= 32 && _saveGameNameLen != 17) { + name[_saveGameNameLen++] = i; windowPutChar(_windowArray[5], i); } } - // do_save if (!saveGame(_saveLoadRowCurPos + result, buf + result * 18)) fileError(_windowArray[5], true); } else { @@ -393,15 +554,10 @@ restart:; get_out:; disableFileBoxes(); - _gameStoppedClock = time(NULL) - save_time + _gameStoppedClock; - - i = _timer4; - do { - delay(10); - } while (i == _timer4); + _gameStoppedClock = time(NULL) - saveTime + _gameStoppedClock; } -int AGOSEngine::userGameGetKey(bool *b, char *buf) { +int AGOSEngine_Simon1::userGameGetKey(bool *b, char *buf, uint maxChar) { HitArea *ha; *b = true; @@ -416,7 +572,7 @@ int AGOSEngine::userGameGetKey(bool *b, char *buf) { _lastHitArea3 = NULL; do { - if (_saveLoadEdit && _keyPressed != 0) { + if (_saveLoadEdit && _keyPressed && _keyPressed < maxChar) { *b = false; return _keyPressed; } @@ -453,8 +609,15 @@ int AGOSEngine::userGameGetKey(bool *b, char *buf) { } void AGOSEngine::disableFileBoxes() { - for (int i = 208; i != 214; i++) - disableBox(i); + int i; + + if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) { + for (i = 208; i != 214; i++) + disableBox(i); + } else { + for (i = 200; i != 224; i++) + disableBox(i); + } } void AGOSEngine::userGameBackSpace(WindowBlock *window, int x, byte b) { -- cgit v1.2.3 From ca0a75a9d0f205c93b0510218a7713ea997dccc0 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Tue, 22 May 2007 11:22:59 +0000 Subject: Add support for the saved game overwrite check script in Waxworks. svn-id: r26911 --- engines/agos/saveload.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 9d8737f23e..bd9efcc81c 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -215,12 +215,13 @@ void AGOSEngine::listSaveGames(char *dst) { window->textColumn = 0; window->textColumnOffset = 4; window->textLength = 0; + + _saveGameNameLen = 0; } void AGOSEngine::userGame(bool load) { time_t saveTime; int i, numSaveGames; - WindowBlock *window; char *name; bool b; char buf[200]; @@ -229,7 +230,8 @@ void AGOSEngine::userGame(bool load) { saveTime = time(NULL); - haltAnimation(); + if (getGameType() == GType_ELVIRA2) + haltAnimation(); numSaveGames = countSaveGames(); _numSaveGameRows = numSaveGames; @@ -240,12 +242,11 @@ void AGOSEngine::userGame(bool load) { listSaveGames(buf); - name = buf + 192; - _saveGameNameLen = 0; - if (!load) { + WindowBlock *window = _windowArray[num]; + name = buf + 192; + for (;;) { - window = _windowArray[num]; windowPutChar(window, 127); _saveLoadEdit = true; @@ -253,7 +254,17 @@ void AGOSEngine::userGame(bool load) { i = userGameGetKey(&b, buf, 128); if (b) { if (i <= 223) { - // TODO; Run the overwrite check script in Waxworks + if (getGameType() == GType_WW) { + Subroutine *sub = getSubroutineByID(80); + if (sub != NULL) + startSubroutineEx(sub); + + if (_variableArray[253] != 0) { + listSaveGames(buf); + continue; + } + } + if (!saveGame(_saveLoadRowCurPos + i, buf + i * 8)) fileError(_windowArray[num], true); } @@ -292,7 +303,8 @@ get_out:; _gameStoppedClock = time(NULL) - saveTime + _gameStoppedClock; - restartAnimation(); + if (getGameType() == GType_ELVIRA2) + restartAnimation(); } int AGOSEngine::userGameGetKey(bool *b, char *buf, uint maxChar) { -- cgit v1.2.3 From b17e8f569ff6942494d3d55ff908a2a7ca837fac Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Tue, 22 May 2007 16:11:30 +0000 Subject: Silenced a rather paranoid GCC warning. svn-id: r26924 --- engines/agos/saveload.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/agos/saveload.cpp') diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index bd9efcc81c..de3a0f416a 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -166,7 +166,7 @@ void AGOSEngine::listSaveGames(char *dst) { window->textColumn = 0; window->textColumnOffset = 4; window->textLength = 0; - if (in = _saveFileMan->openForLoading(genSaveName(slot++))) { + if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) { in->read(dst, 8); delete in; @@ -181,7 +181,7 @@ void AGOSEngine::listSaveGames(char *dst) { window->textColumn = 7; window->textColumnOffset = 4; window->textLength = 0; - if (in = _saveFileMan->openForLoading(genSaveName(slot++))) { + if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) { in->read(dst, 8); delete in; @@ -196,7 +196,7 @@ void AGOSEngine::listSaveGames(char *dst) { window->textColumn = 15; window->textColumnOffset = 4; window->textLength = 0; - if (in = _saveFileMan->openForLoading(genSaveName(slot++))) { + if ((in = _saveFileMan->openForLoading(genSaveName(slot++)))) { in->read(dst, 8); delete in; -- cgit v1.2.3