diff options
Diffstat (limited to 'engines/sword25/kernel')
-rw-r--r-- | engines/sword25/kernel/filesystemutil.cpp | 3 | ||||
-rw-r--r-- | engines/sword25/kernel/inputpersistenceblock.cpp | 2 | ||||
-rw-r--r-- | engines/sword25/kernel/kernel.cpp | 4 | ||||
-rw-r--r-- | engines/sword25/kernel/kernel.h | 1 | ||||
-rw-r--r-- | engines/sword25/kernel/kernel_script.cpp | 117 | ||||
-rw-r--r-- | engines/sword25/kernel/objectregistry.h | 1 | ||||
-rw-r--r-- | engines/sword25/kernel/persistenceservice.cpp | 44 | ||||
-rw-r--r-- | engines/sword25/kernel/resmanager.cpp | 15 | ||||
-rw-r--r-- | engines/sword25/kernel/resmanager.h | 5 |
9 files changed, 64 insertions, 128 deletions
diff --git a/engines/sword25/kernel/filesystemutil.cpp b/engines/sword25/kernel/filesystemutil.cpp index b4d4b25f8d..e5ec6c15db 100644 --- a/engines/sword25/kernel/filesystemutil.cpp +++ b/engines/sword25/kernel/filesystemutil.cpp @@ -34,8 +34,7 @@ #include "common/config-manager.h" #include "common/fs.h" -#include "common/savefile.h" -#include "common/system.h" +#include "common/textconsole.h" #include "sword25/kernel/filesystemutil.h" #include "sword25/kernel/persistenceservice.h" diff --git a/engines/sword25/kernel/inputpersistenceblock.cpp b/engines/sword25/kernel/inputpersistenceblock.cpp index f3aebef203..26c924dc82 100644 --- a/engines/sword25/kernel/inputpersistenceblock.cpp +++ b/engines/sword25/kernel/inputpersistenceblock.cpp @@ -32,6 +32,8 @@ * */ +#include "common/textconsole.h" + #include "sword25/kernel/inputpersistenceblock.h" namespace Sword25 { diff --git a/engines/sword25/kernel/kernel.cpp b/engines/sword25/kernel/kernel.cpp index 6b99b0a115..99fec52040 100644 --- a/engines/sword25/kernel/kernel.cpp +++ b/engines/sword25/kernel/kernel.cpp @@ -95,10 +95,8 @@ Kernel::Kernel() : _geometry = new Geometry(this); assert(_geometry); -#ifdef USE_THEORADEC _fmv = new MoviePlayer(this); assert(_fmv); -#endif _initSuccess = true; } @@ -121,10 +119,8 @@ Kernel::~Kernel() { delete _geometry; _geometry = 0; -#ifdef USE_THEORADEC delete _fmv; _fmv = 0; -#endif delete _script; _script = 0; diff --git a/engines/sword25/kernel/kernel.h b/engines/sword25/kernel/kernel.h index 9e7ee0fdd9..3abf43d239 100644 --- a/engines/sword25/kernel/kernel.h +++ b/engines/sword25/kernel/kernel.h @@ -48,6 +48,7 @@ #include "common/scummsys.h" #include "common/random.h" #include "common/stack.h" +#include "common/textconsole.h" #include "common/util.h" #include "engines/engine.h" diff --git a/engines/sword25/kernel/kernel_script.cpp b/engines/sword25/kernel/kernel_script.cpp index 458f6b2deb..43a144b2c6 100644 --- a/engines/sword25/kernel/kernel_script.cpp +++ b/engines/sword25/kernel/kernel_script.cpp @@ -42,45 +42,9 @@ namespace Sword25 { -static int disconnectService(lua_State *L) { - // This function apparently is not used by the game scripts - lua_pushboolean(L, true); - - return 1; -} - -static int getActiveServiceIdentifier(lua_State *L) { - // This function apparently is not used by the game scripts - lua_pushstring(L, "QUUX"); - - return 1; -} - -static int getSuperclassCount(lua_State *L) { - // This function is only used by a single function in system/kernel.lua which is never called. - lua_pushnumber(L, 0); - - return 1; -} - -static int getSuperclassIdentifier(lua_State *L) { - // This function is only used by a single function in system/kernel.lua which is never called. - lua_pushstring(L, "FOO"); - - return 1; -} - -static int getServiceCount(lua_State *L) { - // This function is only used by a single function in system/kernel.lua which is never called. - lua_pushnumber(L, 0); - - return 1; -} - -static int getServiceIdentifier(lua_State *L) { - // This function is only used by a single function in system/kernel.lua which is never called. - lua_pushstring(L, "BAR"); - +// Marks a function that should never be used +static int dummyFuncError(lua_State *L) { + error("Dummy function invoked by LUA"); return 1; } @@ -177,12 +141,12 @@ static int getUsedMemory(lua_State *L) { static const char *KERNEL_LIBRARY_NAME = "Kernel"; static const luaL_reg KERNEL_FUNCTIONS[] = { - {"DisconnectService", disconnectService}, - {"GetActiveServiceIdentifier", getActiveServiceIdentifier}, - {"GetSuperclassCount", getSuperclassCount}, - {"GetSuperclassIdentifier", getSuperclassIdentifier}, - {"GetServiceCount", getServiceCount}, - {"GetServiceIdentifier", getServiceIdentifier}, + {"DisconnectService", dummyFuncError}, + {"GetActiveServiceIdentifier", dummyFuncError}, + {"GetSuperclassCount", dummyFuncError}, + {"GetSuperclassIdentifier", dummyFuncError}, + {"GetServiceCount", dummyFuncError}, + {"GetServiceIdentifier", dummyFuncError}, {"GetMilliTicks", getMilliTicks}, {"GetTimer", getTimer}, {"StartService", startService}, @@ -241,20 +205,6 @@ static int setY(lua_State *L) { return 0; } -static int getClientX(lua_State *L) { - // This function apparently is not used by the game scripts - lua_pushnumber(L, 0); - - return 1; -} - -static int getClientY(lua_State *L) { - // This function apparently is not used by the game scripts - lua_pushnumber(L, 0); - - return 1; -} - static int getWidth(lua_State *L) { // This function apparently is not used by the game scripts lua_pushnumber(L, 800); @@ -332,20 +282,6 @@ static int closeWanted(lua_State *L) { return 1; } -static int waitForFocus(lua_State *L) { - // This function apparently is not used by the game scripts - lua_pushbooleancpp(L, true); - - return 1; -} - -static int hasFocus(lua_State *L) { - // This function apparently is not used by the game scripts - lua_pushbooleancpp(L, true); - - return 1; -} - static const char *WINDOW_LIBRARY_NAME = "Window"; static const luaL_reg WINDOW_FUNCTIONS[] = { @@ -355,8 +291,8 @@ static const luaL_reg WINDOW_FUNCTIONS[] = { {"SetX", setX}, {"GetY", getY}, {"SetY", setY}, - {"GetClientX", getClientX}, - {"GetClientY", getClientY}, + {"GetClientX", dummyFuncError}, + {"GetClientY", dummyFuncError}, {"GetWidth", getWidth}, {"GetHeight", getHeight}, {"SetWidth", setWidth}, @@ -365,8 +301,8 @@ static const luaL_reg WINDOW_FUNCTIONS[] = { {"SetTitle", setTitle}, {"ProcessMessages", processMessages}, {"CloseWanted", closeWanted}, - {"WaitForFocus", waitForFocus}, - {"HasFocus", hasFocus}, + {"WaitForFocus", dummyFuncError}, + {"HasFocus", dummyFuncError}, {0, 0} }; @@ -436,29 +372,6 @@ static int emptyCache(lua_State *L) { return 0; } -static int isLogCacheMiss(lua_State *L) { - Kernel *pKernel = Kernel::getInstance(); - assert(pKernel); - ResourceManager *pResource = pKernel->getResourceManager(); - assert(pResource); - - // This isn't used in any script - lua_pushbooleancpp(L, false); - - return 1; -} - -static int setLogCacheMiss(lua_State *L) { - Kernel *pKernel = Kernel::getInstance(); - assert(pKernel); - ResourceManager *pResource = pKernel->getResourceManager(); - assert(pResource); - - // This isn't used in any script - - return 0; -} - static int dumpLockedResources(lua_State *L) { Kernel *pKernel = Kernel::getInstance(); assert(pKernel); @@ -478,8 +391,8 @@ static const luaL_reg RESOURCE_FUNCTIONS[] = { {"GetMaxMemoryUsage", getMaxMemoryUsage}, {"SetMaxMemoryUsage", setMaxMemoryUsage}, {"EmptyCache", emptyCache}, - {"IsLogCacheMiss", isLogCacheMiss}, - {"SetLogCacheMiss", setLogCacheMiss}, + {"IsLogCacheMiss", dummyFuncError}, + {"SetLogCacheMiss", dummyFuncError}, {"DumpLockedResources", dumpLockedResources}, {0, 0} }; diff --git a/engines/sword25/kernel/objectregistry.h b/engines/sword25/kernel/objectregistry.h index 8d0f4a314b..69d961ae91 100644 --- a/engines/sword25/kernel/objectregistry.h +++ b/engines/sword25/kernel/objectregistry.h @@ -37,6 +37,7 @@ #include "common/func.h" #include "common/hashmap.h" +#include "common/textconsole.h" #include "sword25/kernel/common.h" namespace Sword25 { diff --git a/engines/sword25/kernel/persistenceservice.cpp b/engines/sword25/kernel/persistenceservice.cpp index be66b6abf0..6bb2b1b102 100644 --- a/engines/sword25/kernel/persistenceservice.cpp +++ b/engines/sword25/kernel/persistenceservice.cpp @@ -32,6 +32,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 "sword25/kernel/kernel.h" @@ -102,7 +105,6 @@ struct SavegameInformation { bool isOccupied; bool isCompatible; Common::String description; - Common::String filename; uint gamedataLength; uint gamedataOffset; uint gamedataUncompressedLength; @@ -115,7 +117,6 @@ struct SavegameInformation { isOccupied = false; isCompatible = false; description = ""; - filename = ""; gamedataLength = 0; gamedataOffset = 0; gamedataUncompressedLength = 0; @@ -130,18 +131,18 @@ struct PersistenceService::Impl { } void reloadSlots() { - // Über alle Spielstanddateien iterieren und deren Infos einlesen. + // Iterate through all the saved games, and read their thumbnails. for (uint i = 0; i < SLOT_COUNT; ++i) { readSlotSavegameInformation(i); } } void readSlotSavegameInformation(uint slotID) { - // Aktuelle Slotinformationen in den Ausgangszustand versetzen, er wird im Folgenden neu gefüllt. + // Get the information corresponding to the requested save slot. SavegameInformation &curSavegameInfo = _savegameInformations[slotID]; curSavegameInfo.clear(); - // Den Dateinamen für den Spielstand des Slots generieren. + // Generate the save slot file name. Common::String filename = generateSavegameFilename(slotID); // Try to open the savegame for loading @@ -160,16 +161,15 @@ struct PersistenceService::Impl { // If the header can be read in and is detected to be valid, we will have a valid file if (storedMarker == FILE_MARKER) { - // Der Slot wird als belegt markiert. + // The slot is marked as occupied. curSavegameInfo.isOccupied = true; - // Speichern, ob der Spielstand kompatibel mit der aktuellen Engine-Version ist. + // Check if the saved game is compatible with the current engine version. curSavegameInfo.isCompatible = (storedVersionID == Common::String(VERSIONID)); - // Dateinamen des Spielstandes speichern. - curSavegameInfo.filename = generateSavegameFilename(slotID); - // Die Beschreibung des Spielstandes besteht aus einer textuellen Darstellung des Änderungsdatums der Spielstanddatei. + // Load the save game description. curSavegameInfo.description = gameDescription; - // Den Offset zu den gespeicherten Spieldaten innerhalb der Datei speichern. - // Dieses entspricht der aktuellen Position, da nach der letzten Headerinformation noch ein Leerzeichen als trenner folgt. + // The offset to the stored save game data within the file. + // This reflects the current position, as the header information + // is still followed by a space as separator. curSavegameInfo.gamedataOffset = static_cast<uint>(file->pos()); } @@ -241,10 +241,11 @@ Common::String &PersistenceService::getSavegameDescription(uint slotID) { } Common::String &PersistenceService::getSavegameFilename(uint slotID) { - static Common::String emptyString; + static Common::String result; if (!checkslotID(slotID)) - return emptyString; - return _impl->_savegameInformations[slotID].filename; + return result; + result = generateSavegameFilename(slotID); + return result; } bool PersistenceService::saveGame(uint slotID, const Common::String &screenshotFilename) { @@ -335,6 +336,9 @@ bool PersistenceService::saveGame(uint slotID, const Common::String &screenshotF // Savegameinformationen für diesen Slot aktualisieren. _impl->readSlotSavegameInformation(slotID); + // Empty the cache, to remove old thumbnails + Kernel::getInstance()->getResourceManager()->emptyThumbnailCache(); + // Erfolg signalisieren. return true; } @@ -369,13 +373,13 @@ bool PersistenceService::loadGame(uint slotID) { byte *compressedDataBuffer = new byte[curSavegameInfo.gamedataLength]; byte *uncompressedDataBuffer = new Bytef[curSavegameInfo.gamedataUncompressedLength]; - - file = sfm->openForLoading(generateSavegameFilename(slotID)); + Common::String filename = generateSavegameFilename(slotID); + file = sfm->openForLoading(filename); file->seek(curSavegameInfo.gamedataOffset); file->read(reinterpret_cast<char *>(&compressedDataBuffer[0]), curSavegameInfo.gamedataLength); if (file->err()) { - error("Unable to load the gamedata from the savegame file \"%s\".", curSavegameInfo.filename.c_str()); + error("Unable to load the gamedata from the savegame file \"%s\".", filename.c_str()); delete[] compressedDataBuffer; delete[] uncompressedDataBuffer; return false; @@ -385,7 +389,7 @@ bool PersistenceService::loadGame(uint slotID) { 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\".", curSavegameInfo.filename.c_str()); + error("Unable to decompress the gamedata from savegame file \"%s\".", filename.c_str()); delete[] uncompressedDataBuffer; delete[] compressedDataBuffer; delete file; @@ -408,7 +412,7 @@ bool PersistenceService::loadGame(uint slotID) { delete file; if (!success) { - error("Unable to unpersist the gamedata from savegame file \"%s\".", curSavegameInfo.filename.c_str()); + error("Unable to unpersist the gamedata from savegame file \"%s\".", filename.c_str()); return false; } diff --git a/engines/sword25/kernel/resmanager.cpp b/engines/sword25/kernel/resmanager.cpp index 8b446e69d1..b77d79e8ea 100644 --- a/engines/sword25/kernel/resmanager.cpp +++ b/engines/sword25/kernel/resmanager.cpp @@ -147,6 +147,21 @@ void ResourceManager::emptyCache() { } } +void ResourceManager::emptyThumbnailCache() { + // Scan through the resource list + Common::List<Resource *>::iterator iter = _resources.begin(); + while (iter != _resources.end()) { + if ((*iter)->getFileName().hasPrefix("/saves")) { + // Unlock the thumbnail + while ((*iter)->getLockCount() > 0) + (*iter)->release(); + // Delete the thumbnail + iter = deleteResource(*iter); + } else + ++iter; + } +} + /** * Returns a requested resource. If any error occurs, returns NULL * @param FileName Filename of resource diff --git a/engines/sword25/kernel/resmanager.h b/engines/sword25/kernel/resmanager.h index 5b2bfd395f..f8006bd62d 100644 --- a/engines/sword25/kernel/resmanager.h +++ b/engines/sword25/kernel/resmanager.h @@ -82,6 +82,11 @@ public: void emptyCache(); /** + * Removes all the savegame thumbnails from the cache + **/ + void emptyThumbnailCache(); + + /** * Writes the names of all currently locked resources to the log file */ void dumpLockedResources(); |