diff options
author | Paul Gilbert | 2018-04-29 21:45:16 -0400 |
---|---|---|
committer | Paul Gilbert | 2018-04-29 21:45:16 -0400 |
commit | b099b5504d3d9c16af67463d250dd71163950bf9 (patch) | |
tree | 22d7230af224ac697ae3eba0c86500187d69c197 | |
parent | 87e5f60ceaa51a91d1bc23583b58c4642a6bf87f (diff) | |
download | scummvm-rg350-b099b5504d3d9c16af67463d250dd71163950bf9.tar.gz scummvm-rg350-b099b5504d3d9c16af67463d250dd71163950bf9.tar.bz2 scummvm-rg350-b099b5504d3d9c16af67463d250dd71163950bf9.zip |
XEEN: Support importing Clouds/Darkside savegames to World of Xeen
-rw-r--r-- | README | 79 | ||||
-rw-r--r-- | engines/xeen/files.cpp | 4 | ||||
-rw-r--r-- | engines/xeen/files.h | 5 | ||||
-rw-r--r-- | engines/xeen/saves.cpp | 16 |
4 files changed, 68 insertions, 36 deletions
@@ -33,22 +33,23 @@ Table of Contents: * 3.12 Inherit the Earth: Quest for the Orb notes * 3.13 Maniac Mansion Apple II/NES notes * 3.14 Mickey's Space Adventure notes - * 3.15 Myst notes - * 3.16 Nippon Safes Inc. Amiga notes - * 3.17 Quest for Glory notes - * 3.18 Riven notes - * 3.19 Simon the Sorcerer notes - * 3.20 Starship Titanic notes - * 3.21 The Curse of Monkey Island notes - * 3.22 The Feeble Files notes - * 3.23 The Legend of Kyrandia notes - * 3.24 Troll's Tale notes - * 3.25 Winnie the Pooh notes - * 3.26 Sierra AGI games: Predictive Input Dialog notes - * 3.27 Sierra SCI games: Simultaneous speech and subtitles - * 3.28 Zork games notes - * 3.29 Commodore64 games notes - * 3.30 Macintosh games notes + * 3.15 Might and Magic Xeen games notes + * 3.16 Myst notes + * 3.17 Nippon Safes Inc. Amiga notes + * 3.18 Quest for Glory notes + * 3.19 Riven notes + * 3.20 Simon the Sorcerer notes + * 3.21 Starship Titanic notes + * 3.22 The Curse of Monkey Island notes + * 3.23 The Feeble Files notes + * 3.24 The Legend of Kyrandia notes + * 3.25 Troll's Tale notes + * 3.26 Winnie the Pooh notes + * 3.27 Sierra AGI games: Predictive Input Dialog notes + * 3.28 Sierra SCI games: Simultaneous speech and subtitles + * 3.29 Zork games notes + * 3.30 Commodore64 games notes + * 3.31 Macintosh games notes 4.0) Supported Platforms 5.0) Running ScummVM * 5.1 Command Line Options @@ -923,7 +924,21 @@ game's screen to change location, similar to many adventure games, which is simpler and more straightforward than moving around using the menu. -3.15) Myst game notes: +3.15 Might and Magic Xeen games notes: +-------------------------------------- +Savegames from either Clouds or Darkside of Xeen games can be transferred +across to World of Xeen (that combines both games) simply by setting up +and detecting World of Xeen (either by manually combining the two games +or using the GOG World of Xeen installer), and then renaming the savegames +to use the World of Xeen savegame format, by default 'worldofxeen.*' + +The Xeen engine also offers two custom options in the Engine tab for the +games in the ScummVM launcher. They are: +* To change the threshold armor breaks at for characters from -10HP to -80HP +* To show values for inventory items, even outside of the blacksmith, +allowing the relative strength/value of armor and weapons to be compared. + +3.16) Myst game notes: ----- ---------------- Left Click: Move/action Space: Pause the game @@ -931,7 +946,7 @@ Esc: Skip cutscene F5: Menu -3.16) Nippon Safes Inc. Amiga notes: +3.17) Nippon Safes Inc. Amiga notes: ----- ------------------------------ For this game, you will need disk0, , global.table, pointer and it (en, fr, ge for the international version). @@ -940,7 +955,7 @@ In addition, you will need to rename disk image 2 to disk1, disk image 3 to disk2, disk image 4 to disk3 and disk image 5 to disk4. -3.17) Quest for Glory notes: +3.18) Quest for Glory notes: ----- ---------------------- It is possible to import characters, beginning with Quest for Glory II, from past games to future games and continue from the stats earned @@ -964,7 +979,7 @@ file won't get listed on the import screen. Example: qfg2-thief.sav -3.18) Riven game notes: +3.19) Riven game notes: ----- ----------------- Left Click: Move/action Arrow Keys: Movement @@ -977,14 +992,14 @@ Ctrl-o: Load game Ctrl-s: Save game -3.19) Simon the Sorcerer games notes: +3.20) Simon the Sorcerer games notes: ----- ------------------------------- If you have the dual version of Simon the Sorcerer 1 or 2 on CD, you will find the Windows version in the main directory of the CD and the DOS version in the DOS directory of the CD. -3.20) Starship Titanic game notes: +3.21) Starship Titanic game notes: ---------------------------------- Basic Movements: Left Click: Move action @@ -1027,7 +1042,7 @@ Ctrl + C: Open up the developer's cheat room Ctrl + D: Open up the ScummVM Debugger -3.21) The Curse of Monkey Island notes: +3.22) The Curse of Monkey Island notes: ----- --------------------------------- For this game, you will need the comi.la0, comi.la1 and comi.la2 files. The comi.la0 file can be found on either CD, but since they are @@ -1039,7 +1054,7 @@ two CDs. Some of the files appear on both CDs, but again they're identical. -3.22) The Feeble Files notes: +3.23) The Feeble Files notes: ----- ----------------------- Amiga/Macintosh: You need to install a small pack of cutscenes that are missing in both @@ -1066,7 +1081,7 @@ Rename voices.wav on CD3 to voices3.wav Rename voices.wav on CD4 to voices4.wav -3.23) The Legend of Kyrandia notes: +3.24) The Legend of Kyrandia notes: ----- ----------------------------- To run The Legend of Kyrandia under ScummVM you need the 'kyra.dat' file. The file should always be included in official ScummVM packages. @@ -1077,14 +1092,14 @@ thus you only need to grab it in case ScummVM complains about the file being missing. -3.24) Troll's Tale notes: +3.25) Troll's Tale notes: ----- ------------------- The original game came in a PC booter disk, therefore it is necessary to dump the contents of that disk in an image file and name it "troll.img" to be able to play the game under ScummVM. -3.25) Winnie the Pooh notes: +3.26) Winnie the Pooh notes: ----- ---------------------- It is possible to import saved games from the original interpreter of the game into ScummVM. @@ -1099,7 +1114,7 @@ game's screen to change location, similar to many adventure games, which is simpler and more straightforward than moving around using the menu. -3.26) Sierra AGI games: Predictive Input Dialog: +3.27) Sierra AGI games: Predictive Input Dialog: ----- ------------------------------------------ The Predictive Input Dialog is a ScummVM aid for running AGI engine games (which notoriously require command line input) on devices with @@ -1153,7 +1168,7 @@ naturally mapping the functionality to the numeric keypad. Also, the dialog's buttons can be navigated with the arrow and the enter keys. -3.27) Sierra SCI games: Simultaneous speech and subtitles: +3.28) Sierra SCI games: Simultaneous speech and subtitles: ----- ---------------------------------------------------- Certain CD versions of Sierra SCI games had both speech and text resources. Some have an option to toggle between the two, but there are @@ -1243,7 +1258,7 @@ Torin's Passage CD: to zero. -3.28) Zork games notes: +3.29) Zork games notes: ----- ----------------- To run the supported Zork games (Zork Nemesis: The Forbidden Lands and Zork: Grand Inquisitor) you need to copy some (extra) data to its @@ -1340,7 +1355,7 @@ Copy the zassetsc directory into the game root directory Copy the zassetse directory into the game root directory -3.29) Commodore64 games notes: +3.30) Commodore64 games notes: ----- ------------------------ Both Maniac Mansion and Zak McKracken run but Maniac Mansion is not yet playable. Simply name the D64 disks "maniac1.d64" and "maniac2.d64" @@ -1354,7 +1369,7 @@ to Commodore64. We recommend using the much simpler approach described in the previous paragraph. -3.30) Macintosh games notes: +3.31) Macintosh games notes: ----- ---------------------- All LucasArts SCUMM based adventures, except COMI, also exist in versions for the Macintosh. ScummVM can use most (all?) of them, however, in some diff --git a/engines/xeen/files.cpp b/engines/xeen/files.cpp index 0fce5b3741..d18b5c4dd6 100644 --- a/engines/xeen/files.cpp +++ b/engines/xeen/files.cpp @@ -488,8 +488,10 @@ void SaveArchive::load(Common::SeekableReadStream &stream) { _data = new byte[_dataSize]; stream.seek(0); stream.read(_data, _dataSize); +} - // Load in the character stats and active party +void SaveArchive::loadParty() { + // Load in the character roster and active party Common::SeekableReadStream *chr = createReadStreamForMember("maze.chr"); Common::Serializer sChr(chr, nullptr); _party->_roster.synchronize(sChr); diff --git a/engines/xeen/files.h b/engines/xeen/files.h index 08aa3cd8d0..0d421547fb 100644 --- a/engines/xeen/files.h +++ b/engines/xeen/files.h @@ -352,6 +352,11 @@ public: void save(Common::WriteStream &s); /** + * Load the character roster and party + */ + void loadParty(); + + /** * Sets a new resource entry */ void replaceEntry(uint16 id, const byte *data, size_t size); diff --git a/engines/xeen/saves.cpp b/engines/xeen/saves.cpp index 60cac91b75..96490c8937 100644 --- a/engines/xeen/saves.cpp +++ b/engines/xeen/saves.cpp @@ -177,9 +177,13 @@ Common::Error SavesManager::loadGameState(int slot) { uint fileSize = saveFile->readUint32LE(); if (archives[idx]) { - Common::SeekableSubReadStream arcStream(saveFile, saveFile->pos(), - saveFile->pos() + fileSize); - archives[idx]->load(arcStream); + if (fileSize) { + Common::SeekableSubReadStream arcStream(saveFile, saveFile->pos(), + saveFile->pos() + fileSize); + archives[idx]->load(arcStream); + } else { + archives[idx]->reset((idx == 1) ? File::_darkCc : File::_xeenCc); + } } else { assert(!fileSize); } @@ -188,6 +192,9 @@ Common::Error SavesManager::loadGameState(int slot) { // Read in miscellaneous files.load(*saveFile); + // Load the character roster and party + File::_currentSave->loadParty(); + // Reset any combat information from the previous game combat.reset(); party._treasure.reset(); @@ -228,6 +235,9 @@ void SavesManager::newGame() { File::_darkSave : File::_xeenSave; assert(File::_currentSave); + // Load the character roster and party + File::_currentSave->loadParty(); + // Set any final initial values Party &party = *g_vm->_party; party.resetBlacksmithWares(); |