mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
QDENGINE: Initial code for reading savegame thumbnails from ExtendedSave
This commit is contained in:
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_;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user