diff options
Diffstat (limited to 'engines/sword25/kernel')
21 files changed, 28 insertions, 98 deletions
diff --git a/engines/sword25/kernel/common.h b/engines/sword25/kernel/common.h index 487bfc5c78..8cfc81e981 100644 --- a/engines/sword25/kernel/common.h +++ b/engines/sword25/kernel/common.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/filesystemutil.cpp b/engines/sword25/kernel/filesystemutil.cpp index e5ec6c15db..281e7986df 100644 --- a/engines/sword25/kernel/filesystemutil.cpp +++ b/engines/sword25/kernel/filesystemutil.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/filesystemutil.h b/engines/sword25/kernel/filesystemutil.h index b75454c1c8..bb100123d9 100644 --- a/engines/sword25/kernel/filesystemutil.h +++ b/engines/sword25/kernel/filesystemutil.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/inputpersistenceblock.cpp b/engines/sword25/kernel/inputpersistenceblock.cpp index 26c924dc82..c1cd771e39 100644 --- a/engines/sword25/kernel/inputpersistenceblock.cpp +++ b/engines/sword25/kernel/inputpersistenceblock.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/inputpersistenceblock.h b/engines/sword25/kernel/inputpersistenceblock.h index f6ab256460..f643b06bc1 100644 --- a/engines/sword25/kernel/inputpersistenceblock.h +++ b/engines/sword25/kernel/inputpersistenceblock.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/kernel.cpp b/engines/sword25/kernel/kernel.cpp index 99fec52040..d6388eee2b 100644 --- a/engines/sword25/kernel/kernel.cpp +++ b/engines/sword25/kernel/kernel.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* @@ -57,7 +54,8 @@ Kernel::Kernel() : _input(0), _package(0), _script(0), - _fmv(0) + _fmv(0), + _rnd("sword25") { _instance = this; @@ -65,7 +63,7 @@ Kernel::Kernel() : // Create the resource manager _resourceManager = new ResourceManager(this); - // Initialise the script engine + // Initialize the script engine _script = new LuaScriptEngine(this); if (!_script || !_script->init()) { _initSuccess = false; diff --git a/engines/sword25/kernel/kernel.h b/engines/sword25/kernel/kernel.h index 3abf43d239..adf69f92d6 100644 --- a/engines/sword25/kernel/kernel.h +++ b/engines/sword25/kernel/kernel.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* @@ -82,7 +79,7 @@ public: uint getMilliTicks(); /** - * Specifies whether the kernel was successfully initialised + * Specifies whether the kernel was successfully initialized */ bool getInitSuccess() const { return _initSuccess; diff --git a/engines/sword25/kernel/kernel_script.cpp b/engines/sword25/kernel/kernel_script.cpp index 43a144b2c6..27a221d45f 100644 --- a/engines/sword25/kernel/kernel_script.cpp +++ b/engines/sword25/kernel/kernel_script.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/objectregistry.h b/engines/sword25/kernel/objectregistry.h index 69d961ae91..d9a7c353f7 100644 --- a/engines/sword25/kernel/objectregistry.h +++ b/engines/sword25/kernel/objectregistry.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/outputpersistenceblock.cpp b/engines/sword25/kernel/outputpersistenceblock.cpp index a8a39cb822..cf28ea401f 100644 --- a/engines/sword25/kernel/outputpersistenceblock.cpp +++ b/engines/sword25/kernel/outputpersistenceblock.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/outputpersistenceblock.h b/engines/sword25/kernel/outputpersistenceblock.h index 71dbe68a52..12351d22e2 100644 --- a/engines/sword25/kernel/outputpersistenceblock.h +++ b/engines/sword25/kernel/outputpersistenceblock.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/persistable.h b/engines/sword25/kernel/persistable.h index 25cf70fda0..1807211847 100644 --- a/engines/sword25/kernel/persistable.h +++ b/engines/sword25/kernel/persistable.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/persistenceblock.h b/engines/sword25/kernel/persistenceblock.h index 4a64eff11b..d8440faa50 100644 --- a/engines/sword25/kernel/persistenceblock.h +++ b/engines/sword25/kernel/persistenceblock.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/persistenceservice.cpp b/engines/sword25/kernel/persistenceservice.cpp index 6bb2b1b102..17e9199b5c 100644 --- a/engines/sword25/kernel/persistenceservice.cpp +++ b/engines/sword25/kernel/persistenceservice.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* @@ -32,11 +29,9 @@ * */ -// Disable symbol overrides so that we can use zlib.h -#define FORBIDDEN_SYMBOL_ALLOW_ALL - #include "common/fs.h" #include "common/savefile.h" +#include "common/zlib.h" #include "sword25/kernel/kernel.h" #include "sword25/kernel/persistenceservice.h" #include "sword25/kernel/inputpersistenceblock.h" @@ -47,7 +42,6 @@ #include "sword25/input/inputengine.h" #include "sword25/math/regionregistry.h" #include "sword25/script/script.h" -#include <zlib.h> namespace Sword25 { @@ -291,34 +285,23 @@ bool PersistenceService::saveGame(uint slotID, const Common::String &screenshotF error("Unable to persist modules for savegame file \"%s\".", filename.c_str()); } - // Daten komprimieren. - uLongf compressedLength = writer.getDataSize() + (writer.getDataSize() + 500) / 1000 + 12; - Bytef *compressionBuffer = new Bytef[compressedLength]; - - if (compress2(&compressionBuffer[0], &compressedLength, reinterpret_cast<const Bytef *>(writer.getData()), writer.getDataSize(), 6) != Z_OK) { - error("Unable to compress savegame data in savegame file \"%s\".", filename.c_str()); - } - - // Länge der komprimierten Daten und der unkomprimierten Daten in die Datei schreiben. + // Write the save game data uncompressed, since the final saved game will be + // compressed anyway. char sBuffer[10]; - snprintf(sBuffer, 10, "%ld", compressedLength); + snprintf(sBuffer, 10, "%u", writer.getDataSize()); file->writeString(sBuffer); file->writeByte(0); snprintf(sBuffer, 10, "%u", writer.getDataSize()); file->writeString(sBuffer); file->writeByte(0); - - // Komprimierte Daten in die Datei schreiben. - file->write(reinterpret_cast<char *>(&compressionBuffer[0]), compressedLength); - if (file->err()) { - error("Unable to write game data to savegame file \"%s\".", filename.c_str()); - } + file->write(writer.getData(), writer.getDataSize()); // Get the screenshot Common::SeekableReadStream *thumbnail = Kernel::getInstance()->getGfx()->getThumbnail(); if (thumbnail) { - byte *buffer = new Byte[FILE_COPY_BUFFER_SIZE]; + byte *buffer = new byte[FILE_COPY_BUFFER_SIZE]; + thumbnail->seek(0, SEEK_SET); while (!thumbnail->eos()) { int bytesRead = thumbnail->read(&buffer[0], FILE_COPY_BUFFER_SIZE); file->write(&buffer[0], bytesRead); @@ -331,7 +314,6 @@ bool PersistenceService::saveGame(uint slotID, const Common::String &screenshotF file->finalize(); delete file; - delete[] compressionBuffer; // Savegameinformationen für diesen Slot aktualisieren. _impl->readSlotSavegameInformation(slotID); @@ -372,7 +354,7 @@ bool PersistenceService::loadGame(uint slotID) { #endif byte *compressedDataBuffer = new byte[curSavegameInfo.gamedataLength]; - byte *uncompressedDataBuffer = new Bytef[curSavegameInfo.gamedataUncompressedLength]; + byte *uncompressedDataBuffer = new byte[curSavegameInfo.gamedataUncompressedLength]; Common::String filename = generateSavegameFilename(slotID); file = sfm->openForLoading(filename); @@ -385,15 +367,22 @@ bool PersistenceService::loadGame(uint slotID) { return false; } - // Spieldaten dekomprimieren. - uLongf uncompressedBufferSize = curSavegameInfo.gamedataUncompressedLength; - if (uncompress(reinterpret_cast<Bytef *>(&uncompressedDataBuffer[0]), &uncompressedBufferSize, - reinterpret_cast<Bytef *>(&compressedDataBuffer[0]), curSavegameInfo.gamedataLength) != Z_OK) { - error("Unable to decompress the gamedata from savegame file \"%s\".", filename.c_str()); - delete[] uncompressedDataBuffer; - delete[] compressedDataBuffer; - delete file; - return false; + // Uncompress game data, if needed. + unsigned long uncompressedBufferSize = curSavegameInfo.gamedataUncompressedLength; + + if (uncompressedBufferSize > curSavegameInfo.gamedataLength) { + // Older saved game, where the game data was compressed again. + if (!Common::uncompress(reinterpret_cast<byte *>(&uncompressedDataBuffer[0]), &uncompressedBufferSize, + reinterpret_cast<byte *>(&compressedDataBuffer[0]), curSavegameInfo.gamedataLength)) { + error("Unable to decompress the gamedata from savegame file \"%s\".", filename.c_str()); + delete[] uncompressedDataBuffer; + delete[] compressedDataBuffer; + delete file; + return false; + } + } else { + // Newer saved game with uncompressed game data, copy it as-is. + memcpy(uncompressedDataBuffer, compressedDataBuffer, uncompressedBufferSize); } InputPersistenceBlock reader(&uncompressedDataBuffer[0], curSavegameInfo.gamedataUncompressedLength); diff --git a/engines/sword25/kernel/persistenceservice.h b/engines/sword25/kernel/persistenceservice.h index 0db109d1b0..f73962892c 100644 --- a/engines/sword25/kernel/persistenceservice.h +++ b/engines/sword25/kernel/persistenceservice.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/resmanager.cpp b/engines/sword25/kernel/resmanager.cpp index b77d79e8ea..cc3316250a 100644 --- a/engines/sword25/kernel/resmanager.cpp +++ b/engines/sword25/kernel/resmanager.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/resmanager.h b/engines/sword25/kernel/resmanager.h index f8006bd62d..6b95a45b6e 100644 --- a/engines/sword25/kernel/resmanager.h +++ b/engines/sword25/kernel/resmanager.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/resource.cpp b/engines/sword25/kernel/resource.cpp index f16cb3aaf2..656355cc17 100644 --- a/engines/sword25/kernel/resource.cpp +++ b/engines/sword25/kernel/resource.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/resource.h b/engines/sword25/kernel/resource.h index 5c6108a281..7c8175c9c9 100644 --- a/engines/sword25/kernel/resource.h +++ b/engines/sword25/kernel/resource.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/resservice.h b/engines/sword25/kernel/resservice.h index 65b2dc4b36..69b0688e32 100644 --- a/engines/sword25/kernel/resservice.h +++ b/engines/sword25/kernel/resservice.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* diff --git a/engines/sword25/kernel/service.h b/engines/sword25/kernel/service.h index ef8858bb7d..576776bb5f 100644 --- a/engines/sword25/kernel/service.h +++ b/engines/sword25/kernel/service.h @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ /* |