QDENGINE: Initial code for reading savegame thumbnails from ExtendedSave

This commit is contained in:
Eugene Sandulenko committed 2024-08-22 22:09:48 +02:00
1 parent 7b351e855c
commit 4ad485032c
3 files changed
+43 -4

No files matched your search

@@ -165,15 +165,16 @@ bool qdInterfaceSave::init(bool is_game_active) {
ExtendedSavegameHeader header;
if (MetaEngine::readSavegameHeader(saveFile, &header, false))
if (MetaEngine::readSavegameHeader(saveFile, &header, true))
save_title_ = header.description.c_str();
delete saveFile;
thumbnail_.set_animation_file(Common::String::format("save:%s", saveFileName.c_str()).c_str());
} else {
save_title_ = "";
}
if (app_io::is_file_exist(thumbnail_file()))
thumbnail_.set_animation_file(thumbnail_file().c_str());
set_state(&frame_);
if (!save_mode_ && !fileExists) {
@@ -338,6 +339,9 @@ bool qdInterfaceSave::load_script_body(const xml::tag *p) {
break;
case QDSCR_INTERFACE_THUMBNAIL_SIZE:
xml::tag_buffer(*it) > thumbnail_size_x_ > thumbnail_size_y_;
g_engine->_thumbSizeX = thumbnail_size_x_;
g_engine->_thumbSizeY = thumbnail_size_y_;
break;
case QDSCR_INTERFACE_TEXT_SHIFT:
xml::tag_buffer(*it) > text_dx_ > text_dy_;
+33
View File
@@ -22,6 +22,10 @@
#define FORBIDDEN_SYMBOL_ALLOW_ALL
#include "common/debug.h"
#include "common/file.h"
#include "common/savefile.h"
#include "engines/metaengine.h"
#include "graphics/surface.h"
#include "qdengine/qdengine.h"
#include "qdengine/qd_precomp.h"
@@ -202,6 +206,35 @@ bool qdSprite::load(const char *fname) {
Common::SeekableReadStream *fh;
Common::Path fpath(_file.c_str(), '\\');
if (!strncmp(_file.c_str(), "save:", 5)) {
Common::InSaveFile *saveFile = g_engine->getSaveFileManager()->openForLoading(&_file.c_str()[5]);
ExtendedSavegameHeader saveHeader;
if (MetaEngine::readSavegameHeader(saveFile, &saveHeader, true)) {
_size = _picture_size = Vect2i(qdGameConfig::get_config().screen_sx(), qdGameConfig::get_config().screen_sy());
_picture_offset = Vect2i(0, 0);
_format = GR_RGB565;
_data = new unsigned char[_size.x * _size.y * 2];
for (int i = 0; i < _size.y; i++) {
uint16 *src = (uint16 *)saveHeader.thumbnail->getBasePtr(0, i);
uint16 *dst = (uint16 *)&_data[2 * _size.x * i];
for (int j = 0; j < _size.x; j++) {
*dst++ = *src++;
}
}
scale(static_cast<float>(g_engine->_thumbSizeX) / _size.x,
static_cast<float>(g_engine->_thumbSizeY) / _size.y);
}
delete saveFile;
return true;
}
if (!qdFileManager::instance().open_file(&fh, fpath.toString().c_str())) {
return false;
}
+2
View File
@@ -101,6 +101,8 @@ public:
Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
int _thumbSizeX = 0, _thumbSizeY = 0;
};
extern QDEngineEngine *g_engine;