aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2018-04-29 21:45:16 -0400
committerPaul Gilbert2018-04-29 21:45:16 -0400
commitb099b5504d3d9c16af67463d250dd71163950bf9 (patch)
tree22d7230af224ac697ae3eba0c86500187d69c197
parent87e5f60ceaa51a91d1bc23583b58c4642a6bf87f (diff)
downloadscummvm-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--README79
-rw-r--r--engines/xeen/files.cpp4
-rw-r--r--engines/xeen/files.h5
-rw-r--r--engines/xeen/saves.cpp16
4 files changed, 68 insertions, 36 deletions
diff --git a/README b/README
index 9657bbe7ae..3c83277507 100644
--- a/README
+++ b/README
@@ -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();