From af21ec036ffc4f41bea1b8c4bf14ae716e8b545a Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Mon, 2 Oct 2006 22:33:38 +0000 Subject: Add basic single slot load/save support for dimp/swampy for now svn-id: r24086 --- engines/agos/agos.cpp | 34 ++++++++++++++++++--------- engines/agos/agos.h | 2 +- engines/agos/items.cpp | 18 +++++++++++++++ engines/agos/saveload.cpp | 58 ++++++++++++++++++++++++++++++----------------- 4 files changed, 79 insertions(+), 33 deletions(-) (limited to 'engines/agos') diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index bbbed04756..c83606629a 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -569,7 +569,7 @@ void AGOSEngine::setupGame() { #endif _tableMemSize = 200000; _vgaBaseDelay = 5; - _numVars = 256; + _numVars = 255; } else if (getGameType() == GType_SIMON2) { gss = PTR(simon2_settings); _tableIndexBase = 1580 / 4; @@ -589,23 +589,25 @@ void AGOSEngine::setupGame() { _musicIndexBase = 1128 / 4; _soundIndexBase = 1660 / 4; _vgaBaseDelay = 1; - _numVars = 256; - } else if (getGameType() == GType_ELVIRA) { + _numVars = 255; + } else if (getGameType() == GType_SIMON1) { gss = PTR(simon1_settings); + _tableIndexBase = 1576 / 4; + _textIndexBase = 1460 / 4; _numTextBoxes = 20; - _numVideoOpcodes = 56; + _numVideoOpcodes = 64; #ifndef PALMOS_68K _vgaMemSize = 1000000; #else _vgaMemSize = gVars->memory[kMemSimon1Games]; #endif _tableMemSize = 150000; + _musicIndexBase = 1316 / 4; + _soundIndexBase = 0; _vgaBaseDelay = 1; - _numVars = 512; - } else { + _numVars = 255; + } else if (getGameType() == GType_WW) { gss = PTR(simon1_settings); - _tableIndexBase = 1576 / 4; - _textIndexBase = 1460 / 4; _numTextBoxes = 20; _numVideoOpcodes = 64; #ifndef PALMOS_68K @@ -614,10 +616,20 @@ void AGOSEngine::setupGame() { _vgaMemSize = gVars->memory[kMemSimon1Games]; #endif _tableMemSize = 150000; - _musicIndexBase = 1316 / 4; - _soundIndexBase = 0; _vgaBaseDelay = 1; - _numVars = 256; + _numVars = 255; + } else if (getGameType() == GType_ELVIRA) { + gss = PTR(simon1_settings); + _numTextBoxes = 20; + _numVideoOpcodes = 56; +#ifndef PALMOS_68K + _vgaMemSize = 1000000; +#else + _vgaMemSize = gVars->memory[kMemSimon1Games]; +#endif + _tableMemSize = 150000; + _vgaBaseDelay = 1; + _numVars = 512; } allocItemHeap(); diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 4799c46a11..b60aea1cea 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1196,7 +1196,7 @@ protected: Item *getNextItemPtrStrange(); - bool saveGame(uint slot, char *caption); + bool saveGame(uint slot, const char *caption); bool loadGame(uint slot); void openTextWindow(); diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp index 23dd2ace13..abe484786b 100644 --- a/engines/agos/items.cpp +++ b/engines/agos/items.cpp @@ -2548,10 +2548,28 @@ void AGOSEngine::o4_saveUserGame() { if (_clockStopped != 0) _gameTime += time(NULL) - _clockStopped; _clockStopped = 0; + + if (getGameId() == GID_DIMP) { + saveGame(1, (const char *)"dimp"); + } else if (!getBitFlag(110)) { + // Swampy adventures + saveGame(1, (const char *)"swampy"); + } + + //saveHiScores() } void AGOSEngine::o4_loadUserGame() { // 133: load usergame + + // NoPatience or Jumble + if (getBitFlag(110)) { + //getHiScoreName(); + return; + } + + // XXX + loadGame(1); } void AGOSEngine::o4_saveOopsPosition() { diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 956d3aed32..dcaef46624 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -110,7 +110,11 @@ int AGOSEngine::displaySaveGameList(int curpos, bool load, char *dst) { char *AGOSEngine::genSaveName(int slot) { static char buf[15]; - if (getGameType() == GType_FF) { + if (getGameId() == GID_DIMP) { + sprintf(buf, "dimp.sav"); + } else if (getGameType() == GType_PP) { + sprintf(buf, "swampy.sav"); + } else if (getGameType() == GType_FF) { if (slot == 999) { // Restart state if (getPlatform() == Common::kPlatformWindows) @@ -576,7 +580,7 @@ loop:; undefineBox(0x7FFF); } -bool AGOSEngine::saveGame(uint slot, char *caption) { +bool AGOSEngine::saveGame(uint slot, const char *caption) { Common::WriteStream *f; uint item_index, num_item, i, j; TimeEvent *te; @@ -592,7 +596,7 @@ bool AGOSEngine::saveGame(uint slot, char *caption) { return false; } - if (getGameType() == GType_FF) { + if (getGameType() == GType_FF || getGameType() == GType_PP) { f->write(caption, 100); curTime = time(NULL); } else { @@ -609,7 +613,7 @@ bool AGOSEngine::saveGame(uint slot, char *caption) { i++; f->writeUint32BE(i); - if (_clockStopped) + if (getGameType() == GType_FF && _clockStopped) gsc += ((uint32)time(NULL) - _clockStopped); for (te = _firstTimeStruct; te; te = te->next) { f->writeUint32BE(te->time - curTime + gsc); @@ -650,8 +654,8 @@ bool AGOSEngine::saveGame(uint slot, char *caption) { } } - // write the 255 variables - for (i = 0; i != 255; i++) { + // write the variables + for (i = 0; i != _numVars; i++) { f->writeUint16BE(readVariable(i)); } @@ -660,13 +664,19 @@ bool AGOSEngine::saveGame(uint slot, char *caption) { f->writeUint16BE(itemPtrToID(_itemStore[i])); } - // Write the bits in array 1 - for (i = 0; i != 16; i++) - f->writeUint16BE(_bitArray[i]); + if (getGameType() == GType_PP) { + // Write the bits in array 1 + for (i = 0; i != 128; i++) + f->writeUint16BE(_bitArray[i]); + } else { + // Write the bits in array 1 + for (i = 0; i != 16; i++) + f->writeUint16BE(_bitArray[i]); - // Write the bits in array 2 - for (i = 0; i != 16; i++) - f->writeUint16BE(_bitArrayTwo[i]); + // Write the bits in array 2 + for (i = 0; i != 16; i++) + f->writeUint16BE(_bitArrayTwo[i]); + } // Write the bits in array 3 if (getGameType() == GType_FF) { @@ -709,7 +719,7 @@ bool AGOSEngine::loadGame(uint slot) { return false; } - if (getGameType() == GType_FF) { + if (getGameType() == GType_FF || getGameType() == GType_PP) { f->read(ident, 100); } else { f->read(ident, 18); @@ -781,8 +791,8 @@ bool AGOSEngine::loadGame(uint slot) { } - // read the 255 variables - for (i = 0; i != 255; i++) { + // read the variables + for (i = 0; i != _numVars; i++) { writeVariable(i, f->readUint16BE()); } @@ -791,13 +801,19 @@ bool AGOSEngine::loadGame(uint slot) { _itemStore[i] = derefItem(f->readUint16BE()); } - // Read the bits in array 1 - for (i = 0; i != 16; i++) - _bitArray[i] = f->readUint16BE(); + if (getGameType() == GType_PP) { + // Read the bits in array 1 + for (i = 0; i != 128; i++) + _bitArray[i] = f->readUint16BE(); + } else { + // Read the bits in array 1 + for (i = 0; i != 16; i++) + _bitArray[i] = f->readUint16BE(); - // Read the bits in array 2 - for (i = 0; i != 16; i++) - _bitArrayTwo[i] = f->readUint16BE(); + // Read the bits in array 2 + for (i = 0; i != 16; i++) + _bitArrayTwo[i] = f->readUint16BE(); + } // Read the bits in array 3 if (getGameType() == GType_FF) { -- cgit v1.2.3