aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormd52011-05-05 22:03:15 +0300
committermd52011-05-05 22:03:15 +0300
commitd7334628bd59a8d4019be788d1a42b9171beae3b (patch)
tree5650a1c8ee5f18ab544283eaaa222e3308db2639
parent51136ac4aeed8733c10e0c148ea1a8dc30e824ca (diff)
downloadscummvm-rg350-d7334628bd59a8d4019be788d1a42b9171beae3b.tar.gz
scummvm-rg350-d7334628bd59a8d4019be788d1a42b9171beae3b.tar.bz2
scummvm-rg350-d7334628bd59a8d4019be788d1a42b9171beae3b.zip
SWORD25: Moved the thumbnail handling code to its appropriate place
PNGLoader is able to load images embedded in saved games already. This helps remove some duplicate code
-rw-r--r--engines/sword25/gfx/image/renderedimage.cpp24
-rw-r--r--engines/sword25/package/packagemanager.cpp57
2 files changed, 23 insertions, 58 deletions
diff --git a/engines/sword25/gfx/image/renderedimage.cpp b/engines/sword25/gfx/image/renderedimage.cpp
index 806d9b27ad..65ff1c703d 100644
--- a/engines/sword25/gfx/image/renderedimage.cpp
+++ b/engines/sword25/gfx/image/renderedimage.cpp
@@ -36,6 +36,7 @@
// INCLUDES
// -----------------------------------------------------------------------------
+#include "common/savefile.h"
#include "sword25/package/packagemanager.h"
#include "sword25/gfx/image/pngloader.h"
#include "sword25/gfx/image/renderedimage.h"
@@ -44,6 +45,14 @@
namespace Sword25 {
+// Duplicated from kernel/persistenceservice.cpp
+static Common::String generateSavegameFilename(uint slotID) {
+ char buffer[100];
+ // NOTE: This is hardcoded to sword25
+ snprintf(buffer, 100, "%s.%.3d", "sword25", slotID);
+ return Common::String(buffer);
+}
+
// -----------------------------------------------------------------------------
// CONSTRUCTION / DESTRUCTION
// -----------------------------------------------------------------------------
@@ -62,7 +71,20 @@ RenderedImage::RenderedImage(const Common::String &filename, bool &result) :
// Load file
byte *pFileData;
uint fileSize;
- pFileData = pPackage->getFile(filename, &fileSize);
+
+ if (filename.hasPrefix("/saves")) {
+ // A savegame thumbnail
+ Common::SaveFileManager *sfm = g_system->getSavefileManager();
+ int slotNum = atoi(filename.c_str() + filename.size() - 3);
+ Common::InSaveFile *file = sfm->openForLoading(generateSavegameFilename(slotNum));
+ fileSize = file->size();
+ pFileData = new byte[fileSize];
+ file->read(pFileData, fileSize);
+ delete file;
+ } else {
+ pFileData = pPackage->getFile(filename, &fileSize);
+ }
+
if (!pFileData) {
error("File \"%s\" could not be loaded.", filename.c_str());
return;
diff --git a/engines/sword25/package/packagemanager.cpp b/engines/sword25/package/packagemanager.cpp
index 7c6343a18f..7a64fe2e29 100644
--- a/engines/sword25/package/packagemanager.cpp
+++ b/engines/sword25/package/packagemanager.cpp
@@ -141,29 +141,6 @@ bool PackageManager::loadDirectoryAsPackage(const Common::String &directoryName,
}
}
-// Duplicated from kernel/persistenceservice.cpp
-static Common::String generateSavegameFilename(uint slotID) {
- char buffer[100];
- // NOTE: This is hardcoded to sword25
- snprintf(buffer, 100, "%s.%.3d", "sword25", slotID);
- return Common::String(buffer);
-}
-
-// Duplicated from kernel/persistenceservice.cpp
-static Common::String loadString(Common::InSaveFile *in, uint maxSize = 999) {
- Common::String result;
-
- char ch = (char)in->readByte();
- while (ch != '\0') {
- result += ch;
- if (result.size() >= maxSize)
- break;
- ch = (char)in->readByte();
- }
-
- return result;
-}
-
byte *PackageManager::getFile(const Common::String &fileName, uint *fileSizePtr) {
const Common::String B25S_EXTENSION(".b25s");
Common::SeekableReadStream *in;
@@ -188,40 +165,6 @@ byte *PackageManager::getFile(const Common::String &fileName, uint *fileSizePtr)
return buffer;
}
- if (fileName.hasPrefix("/saves")) {
- // A savegame thumbnail
- Common::SaveFileManager *sfm = g_system->getSavefileManager();
- int slotNum = atoi(fileName.c_str() + fileName.size() - 3);
- Common::InSaveFile *file = sfm->openForLoading(generateSavegameFilename(slotNum));
-
- if (file) {
- loadString(file); // storedMarker
- loadString(file); // storedVersionID
- loadString(file); // gameDescription
- int gameDataLength = atoi(loadString(file).c_str());
- loadString(file); // gamedataUncompressedLength
- // Skip the savegame data
- file->skip(gameDataLength);
-
- int thumbnailSize = file->size() - file->pos();
-
- if (thumbnailSize <= 0) {
- warning("Saved game at slot %d does not contain a thumbnail", slotNum);
- delete file;
- return 0;
- }
-
- if (fileSizePtr)
- *fileSizePtr = thumbnailSize;
-
- byte *thumbnail = new byte[thumbnailSize];
- file->read(thumbnail, thumbnailSize);
-
- delete file;
- return thumbnail;
- }
- }
-
Common::ArchiveMemberPtr fileNode = getArchiveMember(normalizePath(fileName, _currentDirectory));
if (!fileNode)
return 0;