[Scummvm-git-logs] scummvm master -> 6a3663bd72ef64fbd3a0a3c79d11d5fccee11516
aquadran
noreply at scummvm.org
Thu Sep 4 16:15:33 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
6a3663bd72 WINTERMUTE: Move back code to original place
Commit: 6a3663bd72ef64fbd3a0a3c79d11d5fccee11516
https://github.com/scummvm/scummvm/commit/6a3663bd72ef64fbd3a0a3c79d11d5fccee11516
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2025-09-04T18:15:27+02:00
Commit Message:
WINTERMUTE: Move back code to original place
Changed paths:
R engines/wintermute/base/base_game_settings.cpp
R engines/wintermute/base/base_game_settings.h
R engines/wintermute/base/saveload.cpp
R engines/wintermute/base/saveload.h
engines/wintermute/ad/ad_game.cpp
engines/wintermute/ad/ad_node_state.cpp
engines/wintermute/ad/ad_object.cpp
engines/wintermute/base/base_game.cpp
engines/wintermute/base/base_game.h
engines/wintermute/base/base_object.cpp
engines/wintermute/base/base_persistence_manager.cpp
engines/wintermute/base/base_string_table.h
engines/wintermute/base/gfx/base_renderer.cpp
engines/wintermute/base/gfx/base_renderer.h
engines/wintermute/base/gfx/base_renderer3d.cpp
engines/wintermute/base/gfx/base_renderer3d.h
engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
engines/wintermute/base/gfx/osystem/base_render_osystem.h
engines/wintermute/base/save_thumb_helper.cpp
engines/wintermute/module.mk
engines/wintermute/system/sys_class_registry.cpp
engines/wintermute/ui/ui_button.cpp
engines/wintermute/ui/ui_edit.cpp
engines/wintermute/ui/ui_text.cpp
engines/wintermute/ui/ui_window.cpp
engines/wintermute/video/subtitle_card.cpp
engines/wintermute/wintermute.cpp
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index baa5c5ae9aa..225aced9864 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -54,7 +54,7 @@
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_viewport.h"
#include "engines/wintermute/base/particles/part_emitter.h"
-#include "engines/wintermute/base/saveload.h"
+#include "engines/wintermute/base/save_thumb_helper.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/scriptables/script_engine.h"
#include "engines/wintermute/base/scriptables/script.h"
@@ -459,7 +459,7 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
const char *mm = "interface\\system\\mainmenu.window";
const char *fn = obj->getFilename();
if (fn && strcmp(fn, mm) == 0) {
- deleteSaveThumbnail();
+ SAFE_DELETE(_cachedThumbnail);
}
}
@@ -570,7 +570,7 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
if (res) {
res->_iD = id;
res->setText(text);
- expandStringByStringTable(&res->_text);
+ _stringTable->expand(&res->_text);
if (!val1->isNULL()) {
res->setIcon(val1->getString());
@@ -2107,7 +2107,12 @@ bool AdGame::displayContent(bool doUpdate, bool displayAll) {
_inventoryBox->display();
if (_stateEx == GAME_WAITING_RESPONSE)
_responseBox->display();
- _renderer->displayIndicator();
+#ifdef ENABLE_FOXTAIL
+ if (BaseEngine::instance().isFoxTail())
+ displayIndicatorFoxTail();
+ else
+#endif
+ displayIndicator();
if (doUpdate || displayAll) {
diff --git a/engines/wintermute/ad/ad_node_state.cpp b/engines/wintermute/ad/ad_node_state.cpp
index 6ca8212bad8..dbbb6e14a9a 100644
--- a/engines/wintermute/ad/ad_node_state.cpp
+++ b/engines/wintermute/ad/ad_node_state.cpp
@@ -113,7 +113,7 @@ void AdNodeState::setCaption(const char *caption, int caseVal) {
size_t captionSize = strlen(caption) + 1;
_caption[caseVal - 1] = new char[captionSize];
Common::strcpy_s(_caption[caseVal - 1], captionSize, caption);
- _game->expandStringByStringTable(&_caption[caseVal - 1]);
+ _game->_stringTable->expand(&_caption[caseVal - 1]);
}
diff --git a/engines/wintermute/ad/ad_object.cpp b/engines/wintermute/ad/ad_object.cpp
index db2afd5c4cf..a7fbc3f5ec6 100644
--- a/engines/wintermute/ad/ad_object.cpp
+++ b/engines/wintermute/ad/ad_object.cpp
@@ -886,7 +886,7 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
SAFE_DELETE(_sentence->_sound);
_sentence->setText(text);
- _game->expandStringByStringTable(&_sentence->_text);
+ _game->_stringTable->expand(&_sentence->_text);
_sentence->setStances(stances);
_sentence->_duration = duration;
_sentence->_align = align;
@@ -898,7 +898,7 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
// try to locate speech file automatically
bool deleteSound = false;
if (!sound) {
- char *key = _game->getKeyFromStringTable(text);
+ char *key = _game->_stringTable->getKey(text);
if (key) {
sound = ((AdGame *)_game)->findSpeechFile(key);
delete[] key;
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index c5ffb4266db..73fee43af34 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -28,7 +28,6 @@
#include "engines/wintermute/dcgf.h"
#include "engines/wintermute/base/base_engine.h"
#include "engines/wintermute/base/base_game.h"
-#include "engines/wintermute/base/base_game_settings.h"
#include "engines/wintermute/base/base_fader.h"
#include "engines/wintermute/base/base_file_manager.h"
#include "engines/wintermute/base/font/base_font.h"
@@ -38,6 +37,7 @@
#include "engines/wintermute/base/gfx/base_renderer3d.h"
#endif
#include "engines/wintermute/base/gfx/base_image.h"
+#include "engines/wintermute/base/gfx/base_surface.h"
#include "engines/wintermute/base/base_keyboard_state.h"
#include "engines/wintermute/base/base_parser.h"
#include "engines/wintermute/base/base_quick_msg.h"
@@ -48,7 +48,6 @@
#include "engines/wintermute/base/base_viewport.h"
#include "engines/wintermute/base/base_region.h"
#include "engines/wintermute/base/base_surface_storage.h"
-#include "engines/wintermute/base/saveload.h"
#include "engines/wintermute/base/save_thumb_helper.h"
#include "engines/wintermute/base/scriptables/script_ext_array.h"
#include "engines/wintermute/base/scriptables/script_value.h"
@@ -67,6 +66,8 @@
#include "engines/wintermute/ui/ui_window.h"
#include "engines/wintermute/wintermute.h"
#include "engines/wintermute/platform_osystem.h"
+#include "engines/wintermute/ad/ad_scene.h"
+
#include "base/version.h"
#include "common/config-manager.h"
#include "common/savefile.h"
@@ -84,6 +85,7 @@
#ifdef ENABLE_WME3D
#include "graphics/renderer.h"
#include "engines/util.h"
+#include "engines/wintermute/base/gfx/xmodel.h"
#if defined(USE_OPENGL_GAME) || defined(USE_OPENGL_SHADERS)
#include "graphics/opengl/context.h"
#endif
@@ -170,11 +172,24 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
_useD3D = false;
#endif
+ _stringTable = new BaseStringTable(this);
+
for (int i = 0; i < NUM_MUSIC_CHANNELS; i++) {
_music[i] = nullptr;
_musicStartTime[i] = 0;
}
+ _settingsResWidth = 800;
+ _settingsResHeight = 600;
+ _settingsRequireAcceleration = false;
+ _settingsRequireSound = false;
+ _settingsTLMode = 0;
+ _settingsAllowWindowed = true;
+ _settingsGameFile = nullptr;
+ _settingsAllowAdvanced = false;
+ _settingsAllowAccessTab = true;
+ _settingsAllowAboutTab = true;
+ _settingsAllowDesktopRes = false;
_editorForceScripts = false;
_editorAlwaysRegister = false;
@@ -188,6 +203,7 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
_scheduledLoadSlot = -1;
_personalizedSave = false;
+ _compressedSavegames = true;
_editorMode = false;
@@ -212,6 +228,17 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
_thumbnailWidth = kThumbnailWidth;
_thumbnailHeight = kThumbnailHeight2;
+ _indicatorDisplay = false;
+ _indicatorColor = BYTETORGBA(255, 0, 0, 128);
+ _indicatorProgress = 0;
+ _indicatorX = -1;
+ _indicatorY = -1;
+ _indicatorWidth = -1;
+ _indicatorHeight = 8;
+ _richSavedGames = false;
+ _savedGameExt = "dsv";
+
+
_musicCrossfadeRunning = false;
_musicCrossfadeStartTime = 0;
_musicCrossfadeLength = 0;
@@ -221,6 +248,15 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
_musicCrossfadeVolume1 = 0;
_musicCrossfadeVolume2 = 100;
+ _loadImageName = "";
+ _saveImageName = "";
+ _saveLoadImage = nullptr;
+
+ _saveImageX = _saveImageY = 0;
+ _loadImageX = _loadImageY = 0;
+
+ _hasDrawnSaveLoadImage = false;
+
#ifdef ENABLE_WME3D
_maxShadowType = SHADOW_STENCIL;
_supportsRealTimeShadows = false;
@@ -277,8 +313,6 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
_autoSaveSlot = 999;
_cursorHidden = false;
- _settings = new BaseGameSettings(this);
-
#ifdef ENABLE_HEROCRAFT
_rndHc = new Common::RandomSource("HeroCraft");
#endif
@@ -297,6 +331,10 @@ BaseGame::~BaseGame() {
cleanup();
+ SAFE_DELETE_ARRAY(_settingsGameFile);
+ SAFE_DELETE(_cachedThumbnail);
+
+ SAFE_DELETE(_saveLoadImage);
SAFE_DELETE(_mathClass);
SAFE_DELETE(_directoryClass);
@@ -311,7 +349,8 @@ BaseGame::~BaseGame() {
SAFE_DELETE(_renderer);
//SAFE_DELETE(m_AccessMgr);
- SAFE_DELETE(_settings);
+
+ SAFE_DELETE(_stringTable);
#ifdef ENABLE_HEROCRAFT
SAFE_DELETE(_rndHc);
@@ -326,8 +365,6 @@ BaseGame::~BaseGame() {
bool BaseGame::cleanup() {
SAFE_DELETE(_loadingIcon);
- deleteSaveThumbnail();
-
_engineLogCallback = nullptr;
_engineLogCallbackData = nullptr;
@@ -440,13 +477,9 @@ bool BaseGame::initConfManSettings() {
//////////////////////////////////////////////////////////////////////
bool BaseGame::initRenderer() {
bool windowedMode = !ConfMan.getBool("fullscreen");
- return _renderer->initRenderer(_settings->getResWidth(), _settings->getResHeight(), windowedMode);
+ return _renderer->initRenderer(_settingsResWidth, _settingsResHeight, windowedMode);
}
-//////////////////////////////////////////////////////////////////////
-bool BaseGame::loadGameSettingsFile() {
- return loadFile(_settings->getGameFile());
-}
//////////////////////////////////////////////////////////////////////
bool BaseGame::initialize1() {
@@ -564,13 +597,13 @@ bool BaseGame::initialize2() { // we know whether we are going to be accelerated
bool force2dRenderer = _force2dRenderer && !_playing3DGame;
#if defined(USE_OPENGL_SHADERS)
if (!force2dRenderer && matchingRendererType == Graphics::kRendererTypeOpenGLShaders) {
- initGraphics3d(_settings->getResWidth(), _settings->getResHeight());
+ initGraphics3d(_settingsResWidth, _settingsResHeight);
_renderer3D = makeOpenGL3DShaderRenderer(this);
}
#endif // defined(USE_OPENGL_SHADERS)
#if defined(USE_OPENGL_GAME)
if (!force2dRenderer && matchingRendererType == Graphics::kRendererTypeOpenGL) {
- initGraphics3d(_settings->getResWidth(), _settings->getResHeight());
+ initGraphics3d(_settingsResWidth, _settingsResHeight);
_renderer3D = makeOpenGL3DRenderer(this);
}
#endif // defined(USE_OPENGL)
@@ -602,9 +635,13 @@ bool BaseGame::initialize2() { // we know whether we are going to be accelerated
bool BaseGame::initialize3() { // renderer is initialized
_posX = _renderer->getWidth() / 2;
_posY = _renderer->getHeight() / 2;
- _renderer->initIndicator();
- //if(m_AccessMgr) Game->m_AccessMgr->Initialize();
+ if (_indicatorY == -1)
+ _indicatorY = _renderer->getHeight() - _indicatorHeight;
+ if (_indicatorX == -1)
+ _indicatorX = 0;
+ if (_indicatorWidth == -1)
+ _indicatorWidth = _renderer->getWidth();
return STATUS_OK;
}
@@ -886,17 +923,6 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
TOKEN_TABLE(COMPAT_KILL_METHOD_THREADS)
TOKEN_TABLE_END
- // Declare a few variables necessary for moving data from these settings over to the renderer:
- // The values are the same as the defaults set in BaseRenderer.
- int loadImageX = 0;
- int loadImageY = 0;
- int saveImageX = 0;
- int saveImageY = 0;
- int indicatorX = -1;
- int indicatorY = -1;
- int indicatorWidth = -1;
- int indicatorHeight = 8;
- uint32 indicatorColor = BYTETORGBA(255, 0, 0, 128);
Common::String loadImageName = "";
Common::String saveImageName = "";
@@ -1022,26 +1048,26 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
break;
case TOKEN_INDICATOR_X:
- parser.scanStr(params, "%d", &indicatorX);
+ parser.scanStr(params, "%d", &_indicatorX);
break;
case TOKEN_INDICATOR_Y:
- parser.scanStr(params, "%d", &indicatorY);
+ parser.scanStr(params, "%d", &_indicatorY);
break;
case TOKEN_INDICATOR_COLOR: {
int r, g, b, a;
parser.scanStr(params, "%d,%d,%d,%d", &r, &g, &b, &a);
- indicatorColor = BYTETORGBA(r, g, b, a);
+ _indicatorColor = BYTETORGBA(r, g, b, a);
}
break;
case TOKEN_INDICATOR_WIDTH:
- parser.scanStr(params, "%d", &indicatorWidth);
+ parser.scanStr(params, "%d", &_indicatorWidth);
break;
case TOKEN_INDICATOR_HEIGHT:
- parser.scanStr(params, "%d", &indicatorHeight);
+ parser.scanStr(params, "%d", &_indicatorHeight);
break;
case TOKEN_SAVE_IMAGE:
@@ -1049,11 +1075,11 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
break;
case TOKEN_SAVE_IMAGE_X:
- parser.scanStr(params, "%d", &saveImageX);
+ parser.scanStr(params, "%d", &_saveImageX);
break;
case TOKEN_SAVE_IMAGE_Y:
- parser.scanStr(params, "%d", &saveImageY);
+ parser.scanStr(params, "%d", &_saveImageY);
break;
case TOKEN_LOAD_IMAGE:
@@ -1061,11 +1087,11 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
break;
case TOKEN_LOAD_IMAGE_X:
- parser.scanStr(params, "%d", &loadImageX);
+ parser.scanStr(params, "%d", &_loadImageX);
break;
case TOKEN_LOAD_IMAGE_Y:
- parser.scanStr(params, "%d", &loadImageY);
+ parser.scanStr(params, "%d", &_loadImageY);
break;
case TOKEN_LOCAL_SAVE_DIR:
@@ -1081,11 +1107,6 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
}
}
- _renderer->setIndicator(indicatorWidth, indicatorHeight, indicatorX, indicatorY, indicatorColor);
- _renderer->initIndicator(); // In case we just reset the values.
- _renderer->setSaveImage(saveImageName.c_str(), saveImageX, saveImageY);
- _renderer->setLoadingScreen(loadImageName.c_str(), loadImageX, loadImageY);
-
if (!_systemFont) {
_systemFont = _game->_fontStorage->addFont("system_font.fnt");
}
@@ -1171,7 +1192,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
clearOld = val->getBool();
}
- if (DID_FAIL(_settings->loadStringTable(filename, clearOld))) {
+ if (DID_FAIL(_stringTable->loadFile(filename, clearOld))) {
stack->pushBool(false);
} else {
stack->pushBool(true);
@@ -1249,7 +1270,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
size_t strSize = strlen(val->getString()) + 1;
char *str = new char[strSize];
Common::strcpy_s(str, strSize, val->getString());
- expandStringByStringTable(&str);
+ _stringTable->expand(&str);
stack->pushString(str);
delete[] str;
return STATUS_OK;
@@ -1495,7 +1516,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
return STATUS_OK;
}
- _musicCrossfadeStartTime = _game->_liveTimer;
+ _musicCrossfadeStartTime = _liveTimer;
_musicCrossfadeChannel1 = channel1;
_musicCrossfadeChannel2 = channel2;
_musicCrossfadeLength = fadeLength;
@@ -1808,7 +1829,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
else if (strcmp(name, "IsSaveSlotUsed") == 0) {
stack->correctParams(1);
int slot = stack->pop()->getInt();
- stack->pushBool(SaveLoad::isSaveSlotUsed(slot));
+ stack->pushBool(isSaveSlotUsed(slot));
return STATUS_OK;
}
@@ -1818,7 +1839,8 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
else if (strcmp(name, "GetSaveSlotDescription") == 0) {
stack->correctParams(1);
int slot = stack->pop()->getInt();
- Common::String desc = SaveLoad::getSaveSlotDescription(slot);
+ Common::String desc;
+ getSaveSlotDescription(slot, desc);
stack->pushString(desc.c_str());
return STATUS_OK;
}
@@ -1836,7 +1858,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
int slot = stack->pop()->getInt();
TimeDate time;
- SaveLoad::getSaveSlotTimestamp(slot, &time);
+ getSaveSlotTimestamp(slot, &time);
stack->pushInt(time.tm_sec);
stack->pushInt(time.tm_min);
stack->pushInt(time.tm_hour);
@@ -1847,7 +1869,8 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
BaseScriptable *date = makeSXDate(_game, stack);
stack->pushNative(date, false);
- Common::String desc = SaveLoad::getSaveSlotDescription(slot);
+ Common::String desc;
+ getSaveSlotDescription(slot, desc);
stack->pushString(desc.c_str());
BaseScriptable *obj;
@@ -1885,7 +1908,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
else if (strcmp(name, "EmptySaveSlot") == 0) {
stack->correctParams(1);
int slot = stack->pop()->getInt();
- SaveLoad::emptySaveSlot(slot);
+ emptySaveSlot(slot);
stack->pushNULL();
return STATUS_OK;
}
@@ -2066,7 +2089,11 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
// Thus, we get black screenshots when saving game from in-game menus
// Let's take & keep screenshot before entering main menu
if (duration == 750 && BaseEngine::instance().getGameId() == "corrosion") {
- storeSaveThumbnail();
+ SAFE_DELETE(_cachedThumbnail);
+ _cachedThumbnail = new SaveThumbHelper(this);
+ if (DID_FAIL(_cachedThumbnail->storeThumbnail())) {
+ SAFE_DELETE(_cachedThumbnail);
+ }
}
bool system = (strcmp(name, "SystemFadeOut") == 0 || strcmp(name, "SystemFadeOutAsync") == 0);
@@ -2226,13 +2253,13 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
else if (strcmp(name, "SetLoadingScreen") == 0) {
stack->correctParams(3);
ScValue *val = stack->pop();
- int loadImageX = stack->pop()->getInt();
- int loadImageY = stack->pop()->getInt();
+ _loadImageX = stack->pop()->getInt();
+ _loadImageY = stack->pop()->getInt();
if (val->isNULL()) {
- _renderer->setLoadingScreen(NULL, loadImageX, loadImageY);
+ _saveImageName = "";
} else {
- _renderer->setLoadingScreen(val->getString(), loadImageX, loadImageY);
+ _loadImageName = val->getString();
}
stack->pushNULL();
return STATUS_OK;
@@ -2244,13 +2271,13 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
else if (strcmp(name, "SetSavingScreen") == 0) {
stack->correctParams(3);
ScValue *val = stack->pop();
- int saveImageX = stack->pop()->getInt();
- int saveImageY = stack->pop()->getInt();
+ _saveImageX = stack->pop()->getInt();
+ _saveImageY = stack->pop()->getInt();
if (val->isNULL()) {
- _renderer->setSaveImage(NULL, saveImageX, saveImageY);
+ _saveImageName = "";
} else {
- _renderer->setSaveImage(val->getString(), saveImageX, saveImageY);
+ _loadImageName = val->getString();
}
stack->pushNULL();
return STATUS_OK;
@@ -2415,7 +2442,14 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "StoreSaveThumbnail") == 0) {
stack->correctParams(0);
- stack->pushBool(storeSaveThumbnail());
+ SAFE_DELETE(_cachedThumbnail);
+ _cachedThumbnail = new SaveThumbHelper(this);
+ if (DID_FAIL(_cachedThumbnail->storeThumbnail())) {
+ SAFE_DELETE(_cachedThumbnail);
+ stack->pushBool(false);
+ } else
+ stack->pushBool(true);
+
return STATUS_OK;
}
@@ -2424,8 +2458,9 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "DeleteSaveThumbnail") == 0) {
stack->correctParams(0);
- deleteSaveThumbnail();
+ SAFE_DELETE(_cachedThumbnail);
stack->pushNULL();
+
return STATUS_OK;
}
@@ -4129,12 +4164,52 @@ bool BaseGame::showCursor() {
return STATUS_FAILED;
}
-
//////////////////////////////////////////////////////////////////////////
bool BaseGame::saveGame(int32 slot, const char *desc, bool quickSave) {
- return SaveLoad::saveGame(slot, desc, quickSave, _game);
-}
+ Common::String filename;
+ getSaveSlotFilename(slot, filename);
+
+ _game->LOG(0, "Saving game '%s'...", filename.c_str());
+ pluginEvents().applyEvent(WME_EVENT_GAME_BEFORE_SAVE, nullptr);
+ applyEvent("BeforeSave", true);
+
+ bool ret;
+
+ _indicatorDisplay = true;
+ _indicatorProgress = 0;
+ _hasDrawnSaveLoadImage = false;
+
+ BasePersistenceManager *pm = new BasePersistenceManager();
+ if (DID_SUCCEED(ret = pm->initSave(desc))) {
+ if (!quickSave) {
+ SAFE_DELETE(_saveLoadImage);
+ if (_saveImageName.size())
+ _saveLoadImage = _game->_renderer->createSurface();
+ if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_saveImageName, true, 0, 0, 0))) {
+ SAFE_DELETE(_saveLoadImage);
+ }
+ }
+ if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->saveTable(_game, pm, quickSave))) {
+ if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->saveInstances(_game, pm, quickSave))) {
+ pm->putDWORD(BaseEngine::instance().getRandomSource()->getSeed());
+ if (DID_SUCCEED(ret = pm->saveFile(filename))) {
+ ConfMan.setInt("most_recent_saveslot", slot);
+ ConfMan.flushToDisk();
+ }
+ }
+ }
+ }
+
+ delete pm;
+ _indicatorDisplay = false;
+
+ _renderer->endSaveLoad();
+
+ SAFE_DELETE(_saveLoadImage);
+
+ return ret;
+}
//////////////////////////////////////////////////////////////////////////
bool BaseGame::loadGame(uint32 slot) {
@@ -4143,15 +4218,124 @@ bool BaseGame::loadGame(uint32 slot) {
_loading = false;
_scheduledLoadSlot = -1;
- Common::String filename = SaveLoad::getSaveSlotFilename(slot);
+ Common::String filename;
+ getSaveSlotFilename(slot, filename);
return loadGame(filename.c_str());
}
-
//////////////////////////////////////////////////////////////////////////
bool BaseGame::loadGame(const char *filename) {
- return SaveLoad::loadGame(filename, _game);
+ LOG(0, "Loading game '%s'...", filename);
+
+ bool ret;
+
+ stopVideo();
+ SAFE_DELETE(_saveLoadImage);
+ if (_loadImageName.size()) {
+ _saveLoadImage = _game->_renderer->createSurface();
+
+ if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_loadImageName, true, 0, 0, 0))) {
+ SAFE_DELETE(_saveLoadImage);
+ }
+ }
+
+ _loadInProgress = true;
+ _indicatorDisplay = true;
+ _indicatorProgress = 0;
+ _hasDrawnSaveLoadImage = false;
+
+ pluginEvents().clearEvents();
+
+ BasePersistenceManager *pm = new BasePersistenceManager();
+ if (DID_SUCCEED(ret = pm->initLoad(filename))) {
+ //if (DID_SUCCEED(ret = cleanup())) {
+ if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->loadTable(_game, pm))) {
+ if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->loadInstances(_game, pm))) {
+ // Restore random-seed:
+ BaseEngine::instance().getRandomSource()->setSeed(pm->getDWORD());
+
+ // data initialization after load
+ initAfterLoad();
+
+ pluginEvents().applyEvent(WME_EVENT_GAME_AFTER_LOAD, nullptr);
+ applyEvent("AfterLoad", true);
+
+ displayContent(true, false);
+ //_renderer->flip();
+
+ //accessUnpause();
+ }
+ }
+ }
+
+ _indicatorDisplay = false;
+ delete pm;
+ _loadInProgress = false;
+
+ _renderer->endSaveLoad();
+
+ SAFE_DELETE(_saveLoadImage);
+
+ //BaseEngine::LOG(0, "Load end %d", BaseUtils::GetUsedMemMB());
+
+ // AdGame:
+ if (DID_SUCCEED(ret)) {
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadRegion, "AdRegion", nullptr);
+ }
+ return ret;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::initAfterLoad() {
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadRegion, "BaseRegion", nullptr);
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadSubFrame, "BaseSubFrame", nullptr);
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadSound, "BaseSound", nullptr);
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadFont, "BaseFontTT", nullptr);
+#ifdef ENABLE_WME3D
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadXModel, "XModel", nullptr);
+#endif
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadScript, "ScScript", nullptr);
+ // AdGame:
+ SystemClassRegistry::getInstance()->enumInstances(afterLoadScene, "AdScene", nullptr);
+ return STATUS_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::afterLoadScene(void *scene, void *data) {
+ ((AdScene *)scene)->afterLoad();
+}
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::afterLoadRegion(void *region, void *data) {
+ ((BaseRegion *)region)->createRegion();
+}
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::afterLoadSubFrame(void *subframe, void *data) {
+ ((BaseSubFrame *)subframe)->setSurfaceSimple();
+}
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::afterLoadSound(void *sound, void *data) {
+ ((BaseSound *)sound)->setSoundSimple();
+}
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::afterLoadFont(void *font, void *data) {
+ ((BaseFont *)font)->afterLoad();
+}
+
+#ifdef ENABLE_WME3D
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::afterLoadXModel(void *model, void *data) {
+ ((XModel *)model)->initializeSimple();
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::afterLoadScript(void *script, void *data) {
+ ((ScScript *)script)->afterLoad();
}
//////////////////////////////////////////////////////////////////////////
@@ -4190,8 +4374,7 @@ bool BaseGame::playMusic(int channel, const char *filename, bool looping, uint32
return STATUS_FAILED;
}
- delete _music[channel];
- _music[channel] = nullptr;
+ SAFE_DELETE(_music[channel]);
_music[channel] = new BaseSound(_game);
if (_music[channel] && DID_SUCCEED(_music[channel]->setSound(filename, Audio::Mixer::kMusicSoundType, true))) {
@@ -4277,7 +4460,7 @@ bool BaseGame::updateMusicCrossfade() {
if (!_musicCrossfadeRunning) {
return STATUS_OK;
}
- if (_game->_state == GAME_FROZEN) {
+ if (_state == GAME_FROZEN) {
return STATUS_OK;
}
@@ -4344,6 +4527,133 @@ bool BaseGame::updateMusicCrossfade() {
return STATUS_OK;
}
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::loadSettings(const char *filename) {
+ TOKEN_TABLE_START(commands)
+ TOKEN_TABLE(SETTINGS)
+ TOKEN_TABLE(GAME)
+ TOKEN_TABLE(STRING_TABLE)
+ TOKEN_TABLE(RESOLUTION)
+ TOKEN_TABLE(REQUIRE_3D_ACCELERATION)
+ TOKEN_TABLE(REQUIRE_SOUND)
+ TOKEN_TABLE(HWTL_MODE)
+ TOKEN_TABLE(ALLOW_WINDOWED_MODE)
+ TOKEN_TABLE(ALLOW_ACCESSIBILITY_TAB)
+ TOKEN_TABLE(ALLOW_ABOUT_TAB)
+ TOKEN_TABLE(ALLOW_ADVANCED)
+ TOKEN_TABLE(ALLOW_DESKTOP_RES)
+ TOKEN_TABLE(REGISTRY_PATH)
+ TOKEN_TABLE(RICH_SAVED_GAMES)
+ TOKEN_TABLE(SAVED_GAME_EXT)
+ TOKEN_TABLE(GUID)
+ TOKEN_TABLE_END
+
+ char *origBuffer = (char *)BaseFileManager::getEngineInstance()->readWholeFile(filename);
+ if (origBuffer == nullptr) {
+ BaseEngine::LOG(0, "BaseGame::LoadSettings failed for file '%s'", filename);
+ return STATUS_FAILED;
+ }
+
+ bool ret = STATUS_OK;
+
+ char *buffer = origBuffer;
+ char *params;
+ int cmd;
+ BaseParser parser;
+
+ if (parser.getCommand(&buffer, commands, ¶ms) != TOKEN_SETTINGS) {
+ BaseEngine::LOG(0, "'SETTINGS' keyword expected in game settings file.");
+ return STATUS_FAILED;
+ }
+ buffer = params;
+ while ((cmd = parser.getCommand(&buffer, commands, ¶ms)) > 0) {
+ switch (cmd) {
+ case TOKEN_GAME: {
+ SAFE_DELETE_ARRAY(_settingsGameFile);
+ size_t gameFileSize = strlen(params) + 1;
+ _settingsGameFile = new char[gameFileSize];
+ Common::strcpy_s(_settingsGameFile, gameFileSize, params);
+ break;
+ }
+
+ case TOKEN_STRING_TABLE:
+ if (DID_FAIL(_stringTable->loadFile(params))) {
+ cmd = PARSERR_GENERIC;
+ }
+ break;
+
+ case TOKEN_RESOLUTION:
+ parser.scanStr(params, "%d,%d", &_settingsResWidth, &_settingsResHeight);
+ break;
+
+ case TOKEN_REQUIRE_3D_ACCELERATION:
+ parser.scanStr(params, "%b", &_settingsRequireAcceleration);
+ break;
+
+ case TOKEN_REQUIRE_SOUND:
+ parser.scanStr(params, "%b", &_settingsRequireSound);
+ break;
+
+ case TOKEN_HWTL_MODE:
+ parser.scanStr(params, "%d", &_settingsTLMode);
+ break;
+
+ case TOKEN_ALLOW_WINDOWED_MODE:
+ parser.scanStr(params, "%b", &_settingsAllowWindowed);
+ break;
+
+ case TOKEN_ALLOW_DESKTOP_RES:
+ parser.scanStr(params, "%b", &_settingsAllowDesktopRes);
+ break;
+
+ case TOKEN_ALLOW_ADVANCED:
+ parser.scanStr(params, "%b", &_settingsAllowAdvanced);
+ break;
+
+ case TOKEN_ALLOW_ACCESSIBILITY_TAB:
+ parser.scanStr(params, "%b", &_settingsAllowAccessTab);
+ break;
+
+ case TOKEN_ALLOW_ABOUT_TAB:
+ parser.scanStr(params, "%b", &_settingsAllowAboutTab);
+ break;
+
+ case TOKEN_REGISTRY_PATH:
+ //BaseEngine::instance().getRegistry()->setBasePath(params);
+ break;
+
+ case TOKEN_RICH_SAVED_GAMES:
+ parser.scanStr(params, "%b", &_richSavedGames);
+ break;
+
+ case TOKEN_SAVED_GAME_EXT:
+ _savedGameExt = params;
+ break;
+
+ case TOKEN_GUID:
+ break;
+
+ default:
+ break;
+ }
+ }
+ if (cmd == PARSERR_TOKENNOTFOUND) {
+ BaseEngine::LOG(0, "Syntax error in game settings '%s'", filename);
+ ret = STATUS_FAILED;
+ }
+ if (cmd == PARSERR_GENERIC) {
+ BaseEngine::LOG(0, "Error loading game settings '%s'", filename);
+ ret = STATUS_FAILED;
+ }
+
+ _settingsAllowWindowed = true;
+ _compressedSavegames = true;
+
+ delete[] origBuffer;
+
+ return ret;
+}
+
//////////////////////////////////////////////////////////////////////////
bool BaseGame::persist(BasePersistenceManager *persistMgr) {
if (!persistMgr->getIsSaving()) {
@@ -4410,7 +4720,12 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) {
persistMgr->transferUint32(TMEMBER(_liveTimerDelta));
persistMgr->transferUint32(TMEMBER(_liveTimerLast));
- _renderer->persistSaveLoadImages(persistMgr);
+ persistMgr->transferString(TMEMBER(_loadImageName));
+ persistMgr->transferString(TMEMBER(_saveImageName));
+ persistMgr->transferSint32(TMEMBER(_saveImageX));
+ persistMgr->transferSint32(TMEMBER(_saveImageY));
+ persistMgr->transferSint32(TMEMBER(_loadImageX));
+ persistMgr->transferSint32(TMEMBER(_loadImageY));
#ifdef ENABLE_WME3D
if (BaseEngine::instance().getFlags() & GF_3D) {
@@ -4440,8 +4755,9 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) {
persistMgr->transferBool(TMEMBER(_cursorHidden));
if (persistMgr->checkVersion(1, 3, 1)) {
- _settings->persist(persistMgr);
+ _stringTable->persist(persistMgr);
}
+
//PersistMgr->Transfer(TMEMBER(m_AccessShieldWin));
if (!persistMgr->getIsSaving()) {
@@ -4635,6 +4951,59 @@ void BaseGame::setWindowTitle() {
}
}
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::getSaveSlotFilename(int slot, Common::String &filename) {
+ BasePersistenceManager *pm = new BasePersistenceManager();
+ if (pm) {
+ filename = pm->getFilenameForSlot(slot);
+ delete pm;
+ debugC(kWintermuteDebugSaveGame, "getSaveSlotFileName(%d) = %s", slot, filename.c_str());
+ }
+
+ return STATUS_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::getSaveSlotDescription(int slot, Common::String &description) {
+ Common::String filename;
+ getSaveSlotFilename(slot, filename);
+ BasePersistenceManager *pm = new BasePersistenceManager();
+ if (!pm)
+ return STATUS_FAILED;
+
+ if (DID_FAIL(pm->initLoad(filename))) {
+ delete pm;
+ return STATUS_FAILED;
+ }
+
+ description = pm->_savedDescription;
+ delete pm;
+
+ return STATUS_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::isSaveSlotUsed(int slot) {
+ Common::String filename;
+ getSaveSlotFilename(slot, filename);
+ BasePersistenceManager *pm = new BasePersistenceManager();
+ bool ret = pm->getSaveExists(slot);
+ delete pm;
+
+ return ret;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::emptySaveSlot(int slot) {
+ Common::String filename;
+ getSaveSlotFilename(slot, filename);
+ BasePersistenceManager *pm = new BasePersistenceManager();
+
+ ((WintermuteEngine *)g_engine)->getSaveFileMan()->removeSavefile(pm->getFilenameForSlot(slot));
+ delete pm;
+
+ return STATUS_OK;
+}
//////////////////////////////////////////////////////////////////////////
bool BaseGame::setActiveObject(BaseObject *obj) {
@@ -4783,7 +5152,39 @@ bool BaseGame::displayContent(bool doUpdate, bool displayAll) {
bool BaseGame::displayContentSimple() {
// clear screen
_renderer->clear();
- _renderer->displayIndicator();
+
+ if (_indicatorDisplay) {
+#ifdef ENABLE_FOXTAIL
+ if (BaseEngine::instance().isFoxTail())
+ displayIndicatorFoxTail();
+ else
+#endif
+ displayIndicator();
+ }
+
+ return STATUS_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::displayIndicator() {
+ if (_saveLoadImage && !_hasDrawnSaveLoadImage) {
+ Common::Rect32 rc;
+ BasePlatform::setRect(&rc, 0, 0, _saveLoadImage->getWidth(), _saveLoadImage->getHeight());
+ if (_loadInProgress)
+ _saveLoadImage->displayTrans(_loadImageX, _loadImageY, rc);
+ else
+ _saveLoadImage->displayTrans(_saveImageX, _saveImageY, rc);
+ _renderer->flip();
+ _hasDrawnSaveLoadImage = true;
+ }
+
+ // Original whole condition seems has typo with '&&' instead '||' for first part.
+ // Added _indicatorProgress to avoid draw on 0 progress
+ if (!_indicatorDisplay || !_indicatorProgress || _indicatorWidth <= 0 || _indicatorHeight <= 0)
+ return STATUS_OK;
+ int curWidth = (int)(_indicatorWidth * (float)((float)_indicatorProgress / 100.0f));
+ _renderer->fillRect(_indicatorX, _indicatorY, curWidth, _indicatorHeight, _indicatorColor);
+ _renderer->indicatorFlip(_indicatorX, _indicatorY, curWidth, _indicatorHeight);
return STATUS_OK;
}
@@ -4830,8 +5231,7 @@ bool BaseGame::restoreDeviceObjects() {
//////////////////////////////////////////////////////////////////////////
bool BaseGame::setWaitCursor(const char *filename) {
- delete _cursorNoninteractive;
- _cursorNoninteractive = nullptr;
+ SAFE_DELETE(_cursorNoninteractive);
_cursorNoninteractive = new BaseSprite(_game);
if (!_cursorNoninteractive || DID_FAIL(_cursorNoninteractive->loadFile(filename))) {
@@ -4883,23 +5283,6 @@ bool BaseGame::renderShadowGeometry() {
return STATUS_OK;
}
-//////////////////////////////////////////////////////////////////////////
-bool BaseGame::storeSaveThumbnail() {
- delete _cachedThumbnail;
- _cachedThumbnail = new SaveThumbHelper(this);
- if (DID_FAIL(_cachedThumbnail->storeThumbnail())) {
- deleteSaveThumbnail();
- return false;
- }
- return true;
-}
-
-//////////////////////////////////////////////////////////////////////////
-void BaseGame::deleteSaveThumbnail() {
- SAFE_DELETE(_cachedThumbnail);
-}
-
-
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
bool BaseGame::onActivate(bool activate, bool refreshMouse) {
@@ -5229,14 +5612,15 @@ bool BaseGame::getFogParams(bool *fogEnabled, uint32 *, float *, float *) {
#endif
//////////////////////////////////////////////////////////////////////////
-void BaseGame::miniUpdate() { // TODO: Is this really necessary, it used to update sound, but the mixer does that now.
+bool BaseGame::miniUpdate() {
if (!_miniUpdateEnabled) {
- return;
+ return true;
}
if (g_system->getMillis() - _lastMiniUpdate > 200) {
_lastMiniUpdate = g_system->getMillis();
}
+ return true;
}
//////////////////////////////////////////////////////////////////////////
@@ -5244,6 +5628,14 @@ bool BaseGame::onScriptShutdown(ScScript *script) {
return STATUS_OK;
}
+//////////////////////////////////////////////////////////////////////////
+void BaseGame::setIndicatorVal(int value) {
+ bool redisplay = (_indicatorProgress != value);
+ _indicatorProgress = value;
+ if (redisplay)
+ displayIndicator();
+}
+
//////////////////////////////////////////////////////////////////////////
bool BaseGame::isLeftDoubleClick() {
return isDoubleClick(0);
@@ -5302,25 +5694,6 @@ AnsiString BaseGame::getDeviceType() const {
return "computer";
}
-//////////////////////////////////////////////////////////////////////////
-bool BaseGame::loadSettings(const char *filename) {
- return _settings->loadSettings(filename);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void BaseGame::expandStringByStringTable(char **str) const {
- _settings->expandStringByStringTable(str);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void BaseGame::expandStringByStringTable(Common::String &str) const {
- _settings->expandStringByStringTable(str);
-}
-
-char *BaseGame::getKeyFromStringTable(const char *str) const {
- return _settings->getKeyFromStringTable(str);
-}
-
#ifdef ENABLE_HEROCRAFT
uint8 BaseGame::getFilePartChecksumHc(const char *filename, uint32 begin, uint32 end) {
if (begin >= end) {
@@ -5355,6 +5728,44 @@ uint8 BaseGame::getFilePartChecksumHc(const char *filename, uint32 begin, uint32
}
#endif
+#ifdef ENABLE_FOXTAIL
+//////////////////////////////////////////////////////////////////////////
+bool BaseGame::displayIndicatorFoxTail() {
+ _renderer->clear();
+
+ // Original whole condition seems has typo with '&&' instead '||' for first part.
+ // Added _indicatorProgress to avoid draw on 0 progress
+ if (!_indicatorDisplay || !_indicatorProgress || _indicatorWidth <= 0 || _indicatorHeight <= 0)
+ return STATUS_OK;
+ int curWidth = (int)(_indicatorWidth * (float)((float)_indicatorProgress / 100.0f));
+ _renderer->fillRect(_indicatorX, _indicatorY, curWidth, _indicatorHeight, _indicatorColor);
+
+ if (_saveLoadImage) {
+ Common::Rect32 rc;
+ BasePlatform::setRect(&rc, 0, 0, _saveLoadImage->getWidth(), _saveLoadImage->getHeight());
+ if (_loadInProgress)
+ _saveLoadImage->displayTrans(_loadImageX, _loadImageY, rc);
+ else
+ _saveLoadImage->displayTrans(_saveImageX, _saveImageY, rc);
+ _renderer->flip();
+ }
+ _renderer->forcedFlip();
+
+ return STATUS_OK;
+}
+#endif
+
+void BaseGame::getSaveSlotTimestamp(int slot, TimeDate *time) {
+ memset(time, 0, sizeof(TimeDate));
+ Common::String filename;
+ getSaveSlotFilename(slot, filename);
+ BasePersistenceManager *pm = new BasePersistenceManager();
+ if ((pm->initLoad(filename))) {
+ *time = pm->getSavedTimestamp();
+ }
+ delete pm;
+}
+
Common::String BaseGame::readRegistryString(const Common::String &key, const Common::String &initValue) const {
// Game specific hacks:
Common::String result = initValue;
diff --git a/engines/wintermute/base/base_game.h b/engines/wintermute/base/base_game.h
index 2bcb928ff45..7c0f71d507b 100644
--- a/engines/wintermute/base/base_game.h
+++ b/engines/wintermute/base/base_game.h
@@ -30,6 +30,7 @@
#include "engines/wintermute/base/base_object.h"
#include "engines/wintermute/base/base_game_custom_actions.h"
+#include "engines/wintermute/base/base_string_table.h"
#include "engines/wintermute/ext/plugin_event.h"
#include "engines/wintermute/persistent.h"
#include "engines/wintermute/coll_templ.h"
@@ -107,7 +108,7 @@ public:
bool _autorunDisabled;
uint32 _lastMiniUpdate;
bool _miniUpdateEnabled;
- virtual void miniUpdate();
+ virtual bool miniUpdate();
void getMousePos(Common::Point32 *Pos);
Common::Rect32 _mouseLockRect;
@@ -143,10 +144,34 @@ public:
bool setMaxShadowType(TShadowType maxShadowType);
virtual TShadowType getMaxShadowType(BaseObject *object = nullptr);
+ bool _indicatorDisplay;
+ uint32 _indicatorColor;
+ int32 _indicatorProgress;
+ int32 _indicatorX;
+ int32 _indicatorY;
+ int32 _indicatorWidth;
+ int32 _indicatorHeight;
+
+ Common::String _savedGameExt;
+ bool _richSavedGames;
+
int32 _editorResolutionWidth;
int32 _editorResolutionHeight;
#endif
+ Common::String _loadImageName;
+ Common::String _saveImageName;
+ int32 _saveImageX;
+ int32 _saveImageY;
+ int32 _loadImageX;
+ int32 _loadImageY;
+ BaseSurface *_saveLoadImage;
+ bool _hasDrawnSaveLoadImage;
+
+ bool displayIndicator();
+#ifdef ENABLE_FOXTAIL
+ bool displayIndicatorFoxTail();
+#endif
uint32 _thumbnailWidth;
uint32 _thumbnailHeight;
@@ -171,11 +196,8 @@ public:
uint32 _deltaTime;
BaseFont *_systemFont;
BaseFont *_videoFont;
-
- // Init-functions:
bool initConfManSettings();
bool initRenderer();
- bool loadGameSettingsFile();
bool initialize1();
bool initialize2();
bool initialize3();
@@ -214,13 +236,19 @@ public:
bool _mouseLeftDown;
bool _mouseRightDown;
bool _mouseMidlleDown;
- // String Table
- void expandStringByStringTable(char **str) const;
- void expandStringByStringTable(Common::String &str) const;
- char *getKeyFromStringTable(const char *str) const;
-
- BaseGameSettings *_settings;
-
+ BaseStringTable *_stringTable;
+
+ int _settingsResWidth;
+ int _settingsResHeight;
+ bool _settingsRequireAcceleration;
+ bool _settingsAllowWindowed;
+ bool _settingsAllowAdvanced;
+ bool _settingsAllowAccessTab;
+ bool _settingsAllowAboutTab;
+ bool _settingsRequireSound;
+ bool _settingsAllowDesktopRes;
+ int32 _settingsTLMode;
+ char *_settingsGameFile;
BaseFader *_fader;
bool _suppressScriptErrors;
@@ -250,10 +278,15 @@ public:
bool _videoSubtitles;
bool _subtitles; // RO
uint32 _musicStartTime[NUM_MUSIC_CHANNELS];
+ bool _compressedSavegames;
int32 _scheduledLoadSlot;
bool _loading;
bool _personalizedSave;
-
+ static bool emptySaveSlot(int slot);
+ static bool isSaveSlotUsed(int slot);
+ static bool getSaveSlotDescription(int slot, Common::String &desc);
+ static void getSaveSlotTimestamp(int slot, TimeDate *time);
+ static bool getSaveSlotFilename(int slot, Common::String &desc);
void setWindowTitle();
bool handleMouseWheel(int32 delta) override;
bool _quitting;
@@ -272,8 +305,16 @@ public:
bool _loadInProgress;
UIWindow *_focusedWindow;
bool _editorForceScripts;
-
+ static void afterLoadScene(void *scene, void *data);
+ static void afterLoadRegion(void *region, void *data);
+ static void afterLoadSubFrame(void *subframe, void *data);
+ static void afterLoadSound(void *sound, void *data);
+#ifdef ENABLE_WME3D
+ static void afterLoadXModel(void *model, void *data);
+#endif
+ static void afterLoadScript(void *script, void *data);
static void invalidateValues(void *value, void *data);
+ static void afterLoadFont(void *font, void *data);
bool loadSettings(const char *filename);
bool resumeMusic(int channel);
bool setMusicStartTime(int channel, uint32 time);
@@ -360,8 +401,8 @@ public:
BaseSprite *_lastCursor;
bool drawCursor(BaseSprite *Cursor);
- bool storeSaveThumbnail();
- void deleteSaveThumbnail();
+
+ virtual bool initAfterLoad();
SaveThumbHelper *_cachedThumbnail;
@@ -400,6 +441,7 @@ public:
BaseGameMusic *_musicSystem;
Common::String _targetName;
+ void setIndicatorVal(int value);
bool getBilinearFiltering() { return _bilinearFiltering; }
void addMem(int32 bytes);
diff --git a/engines/wintermute/base/base_game_settings.cpp b/engines/wintermute/base/base_game_settings.cpp
deleted file mode 100644
index 5643c56ad04..00000000000
--- a/engines/wintermute/base/base_game_settings.cpp
+++ /dev/null
@@ -1,232 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/*
- * This file is based on WME Lite.
- * http://dead-code.org/redir.php?target=wmelite
- * Copyright (c) 2011 Jan Nedoma
- */
-
-#include "engines/wintermute/base/base_game_settings.h"
-#include "engines/wintermute/base/base_engine.h"
-#include "engines/wintermute/base/base_file_manager.h"
-#include "engines/wintermute/base/base_string_table.h"
-#include "engines/wintermute/base/base_parser.h"
-#include "engines/wintermute/wintypes.h"
-
-namespace Wintermute {
-
-BaseGameSettings::BaseGameSettings(BaseGame *gameRef) {
- _resWidth = 800;
- _resHeight = 600;
- _requireAcceleration = false;
- _requireSound = false;
- _TLMode = 0;
- _allowWindowed = true;
- _gameFile = nullptr;
- _allowAdvanced = false;
- _allowAccessTab = true;
- _allowAboutTab = true;
- _allowDesktopRes = false;
-
- _compressedSavegames = true;
- _richSavedGames = false;
- _savedGameExt = "dsv";
-
- _stringTable = new BaseStringTable(gameRef);
-}
-
-BaseGameSettings::~BaseGameSettings() {
- delete[] _gameFile;
- _gameFile = nullptr;
- delete _stringTable;
- _stringTable = nullptr;
-}
-
-TOKEN_DEF_START
-TOKEN_DEF(GAME)
-TOKEN_DEF(STRING_TABLE)
-TOKEN_DEF(RESOLUTION)
-TOKEN_DEF(SETTINGS)
-TOKEN_DEF(REQUIRE_3D_ACCELERATION)
-TOKEN_DEF(REQUIRE_SOUND)
-TOKEN_DEF(HWTL_MODE)
-TOKEN_DEF(ALLOW_WINDOWED_MODE)
-TOKEN_DEF(ALLOW_ACCESSIBILITY_TAB)
-TOKEN_DEF(ALLOW_ABOUT_TAB)
-TOKEN_DEF(ALLOW_ADVANCED)
-TOKEN_DEF(ALLOW_DESKTOP_RES)
-TOKEN_DEF(REGISTRY_PATH)
-TOKEN_DEF(RICH_SAVED_GAMES)
-TOKEN_DEF(SAVED_GAME_EXT)
-TOKEN_DEF(GUID)
-TOKEN_DEF_END
-
-//////////////////////////////////////////////////////////////////////////
-bool BaseGameSettings::loadSettings(const char *filename) {
- TOKEN_TABLE_START(commands)
- TOKEN_TABLE(SETTINGS)
- TOKEN_TABLE(GAME)
- TOKEN_TABLE(STRING_TABLE)
- TOKEN_TABLE(RESOLUTION)
- TOKEN_TABLE(REQUIRE_3D_ACCELERATION)
- TOKEN_TABLE(REQUIRE_SOUND)
- TOKEN_TABLE(HWTL_MODE)
- TOKEN_TABLE(ALLOW_WINDOWED_MODE)
- TOKEN_TABLE(ALLOW_ACCESSIBILITY_TAB)
- TOKEN_TABLE(ALLOW_ABOUT_TAB)
- TOKEN_TABLE(ALLOW_ADVANCED)
- TOKEN_TABLE(ALLOW_DESKTOP_RES)
- TOKEN_TABLE(REGISTRY_PATH)
- TOKEN_TABLE(RICH_SAVED_GAMES)
- TOKEN_TABLE(SAVED_GAME_EXT)
- TOKEN_TABLE(GUID)
- TOKEN_TABLE_END
-
-
- char *origBuffer = (char *)BaseFileManager::getEngineInstance()->readWholeFile(filename);
- if (origBuffer == nullptr) {
- BaseEngine::LOG(0, "BaseGame::LoadSettings failed for file '%s'", filename);
- return STATUS_FAILED;
- }
-
- bool ret = STATUS_OK;
-
- char *buffer = origBuffer;
- char *params;
- int cmd;
- BaseParser parser;
-
- if (parser.getCommand(&buffer, commands, ¶ms) != TOKEN_SETTINGS) {
- BaseEngine::LOG(0, "'SETTINGS' keyword expected in game settings file.");
- return STATUS_FAILED;
- }
- buffer = params;
- while ((cmd = parser.getCommand(&buffer, commands, ¶ms)) > 0) {
- switch (cmd) {
- case TOKEN_GAME: {
- delete[] _gameFile;
- size_t gameFileSize = strlen(params) + 1;
- _gameFile = new char[gameFileSize];
- Common::strcpy_s(_gameFile, gameFileSize, params);
- break;
- }
- case TOKEN_STRING_TABLE:
- if (DID_FAIL(_stringTable->loadFile(params))) {
- cmd = PARSERR_GENERIC;
- }
- break;
-
- case TOKEN_RESOLUTION:
- parser.scanStr(params, "%d,%d", &_resWidth, &_resHeight);
- break;
-
- case TOKEN_REQUIRE_3D_ACCELERATION:
- parser.scanStr(params, "%b", &_requireAcceleration);
- break;
-
- case TOKEN_REQUIRE_SOUND:
- parser.scanStr(params, "%b", &_requireSound);
- break;
-
- case TOKEN_HWTL_MODE:
- parser.scanStr(params, "%d", &_TLMode);
- break;
-
- case TOKEN_ALLOW_WINDOWED_MODE:
- parser.scanStr(params, "%b", &_allowWindowed);
- break;
-
- case TOKEN_ALLOW_DESKTOP_RES:
- parser.scanStr(params, "%b", &_allowDesktopRes);
- break;
-
- case TOKEN_ALLOW_ADVANCED:
- parser.scanStr(params, "%b", &_allowAdvanced);
- break;
-
- case TOKEN_ALLOW_ACCESSIBILITY_TAB:
- parser.scanStr(params, "%b", &_allowAccessTab);
- break;
-
- case TOKEN_ALLOW_ABOUT_TAB:
- parser.scanStr(params, "%b", &_allowAboutTab);
- break;
-
- case TOKEN_REGISTRY_PATH:
- //BaseEngine::instance().getRegistry()->setBasePath(params);
- break;
-
- case TOKEN_RICH_SAVED_GAMES:
- parser.scanStr(params, "%b", &_richSavedGames);
- break;
-
- case TOKEN_SAVED_GAME_EXT:
- _savedGameExt = params;
- break;
-
- case TOKEN_GUID:
- break;
-
- default:
- break;
- }
- }
- if (cmd == PARSERR_TOKENNOTFOUND) {
- BaseEngine::LOG(0, "Syntax error in game settings '%s'", filename);
- ret = STATUS_FAILED;
- }
- if (cmd == PARSERR_GENERIC) {
- BaseEngine::LOG(0, "Error loading game settings '%s'", filename);
- ret = STATUS_FAILED;
- }
-
- _allowWindowed = true; // TODO: These two settings should probably be cleaned out altogether.
- _compressedSavegames = true;
-
- delete[] origBuffer;
-
- return ret;
-}
-
-bool BaseGameSettings::loadStringTable(const char *filename, bool clearOld) {
- return _stringTable->loadFile(filename, clearOld);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void BaseGameSettings::expandStringByStringTable(char **str) const {
- _stringTable->expand(str);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void BaseGameSettings::expandStringByStringTable(Common::String &str) const {
- _stringTable->expand(str);
-}
-
-char *BaseGameSettings::getKeyFromStringTable(const char *str) const {
- return _stringTable->getKey(str);
-}
-
-bool BaseGameSettings::persist(BasePersistenceManager *persistMgr) {
- return _stringTable->persist(persistMgr);
-}
-
-} // End of namespace Wintermute
diff --git a/engines/wintermute/base/base_game_settings.h b/engines/wintermute/base/base_game_settings.h
deleted file mode 100644
index aa0b9ef4a2f..00000000000
--- a/engines/wintermute/base/base_game_settings.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/*
- * This file is based on WME Lite.
- * http://dead-code.org/redir.php?target=wmelite
- * Copyright (c) 2011 Jan Nedoma
- */
-
-#ifndef WINTERMUTE_BASE_GAME_SETTINGS_H
-#define WINTERMUTE_BASE_GAME_SETTINGS_H
-
-#include "common/str.h"
-
-namespace Wintermute {
-class BaseStringTable;
-class BaseGame;
-class BasePersistenceManager;
-class BaseGameSettings {
-public:
- const char *getGameFile() const { return (_gameFile ? _gameFile : "default.game"); }
- int getResWidth() const { return _resWidth; }
- int getResHeight() const { return _resHeight; }
-
- BaseGameSettings(BaseGame *gameRef);
- ~BaseGameSettings();
- bool loadSettings(const char *filename);
- bool loadStringTable(const char *filename, bool clearOld);
- void expandStringByStringTable(char **str) const;
- void expandStringByStringTable(Common::String &str) const;
- char *getKeyFromStringTable(const char *str) const;
-
- bool persist(BasePersistenceManager *persistMgr);
-private:
- char *_gameFile;
- int _resWidth;
- int _resHeight;
- BaseStringTable *_stringTable;
-// Not ever used:
- int _TLMode;
- bool _compressedSavegames;
- Common::String _savedGameExt;
- bool _requireAcceleration;
- bool _allowWindowed;
- bool _allowAdvanced;
- bool _allowAccessTab;
- bool _allowAboutTab;
- bool _requireSound;
- bool _allowDesktopRes;
-// TODO: This can probably be removed completely:
- bool _richSavedGames;
-};
-
-} // End of namespace Wintermute
-
-#endif
diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp
index 656db26245d..b99231dae95 100644
--- a/engines/wintermute/base/base_object.cpp
+++ b/engines/wintermute/base/base_object.cpp
@@ -182,7 +182,7 @@ void BaseObject::setCaption(const char *caption, int caseVal) {
size_t captionSize = strlen(caption) + 1;
_caption[caseVal - 1] = new char[captionSize];
Common::strcpy_s(_caption[caseVal - 1], captionSize, caption);
- _game->expandStringByStringTable(&_caption[caseVal - 1]);
+ _game->_stringTable->expand(&_caption[caseVal - 1]);
}
diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp
index 188b98a576f..62eba017b78 100644
--- a/engines/wintermute/base/base_persistence_manager.cpp
+++ b/engines/wintermute/base/base_persistence_manager.cpp
@@ -232,8 +232,7 @@ bool BasePersistenceManager::initSave(const Common::String &desc) {
if (!_game->_cachedThumbnail) {
_game->_cachedThumbnail = new SaveThumbHelper(_game);
if (DID_FAIL(_game->_cachedThumbnail->storeThumbnail(true))) {
- delete _game->_cachedThumbnail;
- _game->_cachedThumbnail = nullptr;
+ SAFE_DELETE(_game->_cachedThumbnail);
}
}
diff --git a/engines/wintermute/base/base_string_table.h b/engines/wintermute/base/base_string_table.h
index adab3210f61..ffe1c3b600a 100644
--- a/engines/wintermute/base/base_string_table.h
+++ b/engines/wintermute/base/base_string_table.h
@@ -38,10 +38,10 @@ class BasePersistenceManager;
class BaseStringTable : public BaseClass {
public:
+ const char *expandStatic(const char *string) const;
bool loadFile(const char *filename, bool deleteAll = true);
void expand(char **str) const;
void expand(Common::String &str) const;
- const char *expandStatic(const char *string) const;
bool addString(const char *key, const char *val, bool reportDuplicities = true);
BaseStringTable(BaseGame *inGame);
~BaseStringTable() override;
@@ -51,6 +51,7 @@ public:
private:
Common::Array<Common::String> _filenames;
typedef Common::HashMap<Common::String, Common::String>::const_iterator StringsIter;
+
void replaceExpand(char *key, char *newStr, size_t newStrSize) const;
};
diff --git a/engines/wintermute/base/gfx/base_renderer.cpp b/engines/wintermute/base/gfx/base_renderer.cpp
index 8cbf52f7f2f..399007638b0 100644
--- a/engines/wintermute/base/gfx/base_renderer.cpp
+++ b/engines/wintermute/base/gfx/base_renderer.cpp
@@ -51,24 +51,6 @@ BaseRenderer::BaseRenderer(BaseGame *inGame) : BaseClass(inGame) {
_windowed = true;
_forceAlphaColor = 0x00;
- _indicatorDisplay = false;
- _indicatorColor = BYTETORGBA(255, 0, 0, 128);
- _indicatorProgress = 0;
- _indicatorX = -1;
- _indicatorY = -1;
- _indicatorWidth = -1;
- _indicatorHeight = 8;
- _indicatorWidthDrawn = 0;
-
- _loadImageName = "";
- _saveImageName = "";
- _saveLoadImage = nullptr;
- _loadInProgress = false;
- _hasDrawnSaveLoadImage = false;
-
- _saveImageX = _saveImageY = 0;
- _loadImageX = _loadImageY = 0;
-
_width = _height = _bPP = 0;
BasePlatform::setRectEmpty(&_monitorRect);
@@ -80,7 +62,6 @@ BaseRenderer::BaseRenderer(BaseGame *inGame) : BaseClass(inGame) {
BaseRenderer::~BaseRenderer() {
deleteRectList();
unclipCursor();
- SAFE_DELETE(_saveLoadImage);
}
//////////////////////////////////////////////////////////////////////
@@ -147,7 +128,6 @@ void BaseRenderer::deleteRectList() {
_rectList.removeAll();
}
-//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
bool BaseRenderer::initRenderer(int width, int height, bool windowed) {
return STATUS_FAILED;
@@ -179,99 +159,6 @@ bool BaseRenderer::fillRect(int x, int y, int w, int h, uint32 color) {
return STATUS_FAILED;
}
-//////////////////////////////////////////////////////////////////////////
-void BaseRenderer::initIndicator() {
- if (_indicatorY == -1) {
- _indicatorY = _height - _indicatorHeight;
- }
- if (_indicatorX == -1) {
- _indicatorX = 0;
- }
- if (_indicatorWidth == -1) {
- _indicatorWidth = _width;
- }
-}
-
-void BaseRenderer::setIndicator(int width, int height, int x, int y, uint32 color) {
- _indicatorWidth = width;
- _indicatorHeight = height;
- _indicatorX = x;
- _indicatorY = y;
- _indicatorColor = color;
-}
-
-void BaseRenderer::setIndicatorVal(int value) {
- bool redisplay = (_indicatorProgress != value);
- _indicatorProgress = value;
- if (redisplay)
- displayIndicator();
-}
-
-void BaseRenderer::setLoadingScreen(const char *filename, int x, int y) {
- if (filename == nullptr) {
- _saveImageName = "";
- } else {
- _loadImageName = filename;
- }
- _loadImageX = x;
- _loadImageY = y;
-}
-
-void BaseRenderer::setSaveImage(const char *filename, int x, int y) {
- if (filename == nullptr) {
- _saveImageName = "";
- } else {
- _saveImageName = filename;
- }
- _saveImageX = x;
- _saveImageY = y;
-}
-
-void BaseRenderer::initSaveLoad(bool isSaving, bool quickSave) {
- _indicatorDisplay = true;
- _indicatorProgress = 0;
- _hasDrawnSaveLoadImage = false;
-
- if (isSaving && !quickSave) {
- SAFE_DELETE(_saveLoadImage);
- if (_saveImageName.size()) {
- _saveLoadImage = createSurface();
-
- if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_saveImageName, true, 0, 0, 0))) {
- SAFE_DELETE(_saveLoadImage);
- }
- }
- } else {
- SAFE_DELETE(_saveLoadImage);
- if (_loadImageName.size()) {
- _saveLoadImage = createSurface();
-
- if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_loadImageName, true, 0, 0, 0))) {
- SAFE_DELETE(_saveLoadImage);
- }
- }
- _loadInProgress = true;
- }
-}
-
-void BaseRenderer::endSaveLoad() {
- _loadInProgress = false;
- _indicatorDisplay = false;
- _indicatorWidthDrawn = 0;
-
- SAFE_DELETE(_saveLoadImage);
-}
-
-void BaseRenderer::persistSaveLoadImages(BasePersistenceManager *persistMgr) {
- persistMgr->transferString(TMEMBER(_loadImageName));
- persistMgr->transferString(TMEMBER(_saveImageName));
- persistMgr->transferSint32(TMEMBER(_saveImageX));
- persistMgr->transferSint32(TMEMBER(_saveImageY));
- persistMgr->transferSint32(TMEMBER(_loadImageX));
- persistMgr->transferSint32(TMEMBER(_loadImageY));
-}
-
-//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
bool BaseRenderer::setViewport(int left, int top, int right, int bottom) {
return STATUS_FAILED;
@@ -336,55 +223,4 @@ bool BaseRenderer::pointInViewport(Common::Point32 *p) {
return true;
}
-//////////////////////////////////////////////////////////////////////////
-bool BaseRenderer::displayIndicator() {
- if (!_indicatorDisplay || !_indicatorProgress) {
- return STATUS_OK;
- }
-
-#ifdef ENABLE_FOXTAIL
- if (BaseEngine::instance().isFoxTail()) {
- _hasDrawnSaveLoadImage = false;
- clear();
- displaySaveloadRect();
- displaySaveloadImage();
- forcedFlip();
- return STATUS_OK;
- }
-#endif
-
- displaySaveloadImage();
- displaySaveloadRect();
- indicatorFlip();
- return STATUS_OK;
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool BaseRenderer::displaySaveloadImage() {
- if (_saveLoadImage && !_hasDrawnSaveLoadImage) {
- Common::Rect32 rc;
- BasePlatform::setRect(&rc, 0, 0, _saveLoadImage->getWidth(), _saveLoadImage->getHeight());
- if (_loadInProgress) {
- _saveLoadImage->displayTrans(_loadImageX, _loadImageY, rc);
- } else {
- _saveLoadImage->displayTrans(_saveImageX, _saveImageY, rc);
- }
- flip();
- _hasDrawnSaveLoadImage = true;
- }
-
- return STATUS_OK;
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool BaseRenderer::displaySaveloadRect() {
- if ((!_indicatorDisplay && _indicatorWidth <= 0) || _indicatorHeight <= 0) {
- return STATUS_OK;
- }
- int curWidth = (int)(_indicatorWidth * (float)((float)_indicatorProgress / 100.0f));
- fillRect(_indicatorX, _indicatorY, curWidth, _indicatorHeight, _indicatorColor);
- _indicatorWidthDrawn = curWidth;
- return STATUS_OK;
-}
-
} // End of namespace Wintermute
diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h
index 8e75c6be5f9..68d6a995b1e 100644
--- a/engines/wintermute/base/gfx/base_renderer.h
+++ b/engines/wintermute/base/gfx/base_renderer.h
@@ -110,9 +110,9 @@ public:
virtual bool flip() = 0;
/**
* Special flip for the indicator drawn during save/load
- * essentially, just copies the region defined by the _indicator-variables.
+ * essentially, just copies the region defined by the indicator rectangle.
*/
- virtual bool indicatorFlip() = 0;
+ virtual bool indicatorFlip(int32 x, int32 y, int32 width, int32 height) = 0;
virtual bool forcedFlip() = 0;
virtual void initLoop();
virtual bool setup2D(bool force = false);
@@ -172,41 +172,12 @@ public:
bool isReady() const { return _ready; }
bool isWindowed() const { return _windowed; }
int32 getBPP() const { return _bPP; }
-
-
- // Indicator & Save/Load-related functions
- void initIndicator();
- void setIndicatorVal(int value);
- void setIndicator(int width, int height, int x, int y, uint32 color);
- void persistSaveLoadImages(BasePersistenceManager *persistMgr);
- void initSaveLoad(bool isSaving, bool quickSave = false);
- virtual void endSaveLoad();
- void setLoadingScreen(const char *filename, int x, int y);
- void setSaveImage(const char *filename, int x, int y);
-
- bool displayIndicator();
-
int32 getWidth() const { return _width; }
int32 getHeight() const { return _height; }
+
+ virtual void endSaveLoad() {};
+
bool _windowed;
- Common::String _loadImageName;
- Common::String _saveImageName;
- int32 _saveImageX;
- int32 _saveImageY;
- int32 _loadImageX;
- int32 _loadImageY;
- BaseSurface *_saveLoadImage;
- bool _hasDrawnSaveLoadImage;
-
- int32 _indicatorWidthDrawn;
- uint32 _indicatorColor;
- int32 _indicatorX;
- int32 _indicatorY;
- int32 _indicatorWidth;
- int32 _indicatorHeight;
- bool _loadInProgress;
- bool _indicatorDisplay;
- int32 _indicatorProgress;
Common::Rect32 _windowRect;
Common::Rect32 _viewportRect;
@@ -217,8 +188,6 @@ public:
int32 _width;
BaseArray<BaseActiveRect *> _rectList;
- bool displaySaveloadImage();
- bool displaySaveloadRect();
};
BaseRenderer *makeOSystemRenderer(BaseGame *inGame); // Implemented in BRenderSDL.cpp
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index d326acab684..72febbda6a8 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -141,7 +141,7 @@ bool BaseRenderer3D::flip() {
return true;
}
-bool BaseRenderer3D::indicatorFlip() {
+bool BaseRenderer3D::indicatorFlip(int32 x, int32 y, int32 width, int32 height) {
flip();
return true;
}
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 90030abf659..4e4ae5b5883 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -146,7 +146,7 @@ public:
virtual void postfilter() = 0;
virtual void setPostfilter(PostFilter postFilter) = 0;
bool flip() override;
- bool indicatorFlip() override;
+ bool indicatorFlip(int32 x, int32 y, int32 width, int32 height) override;
bool forcedFlip() override;
virtual bool setViewport3D(DXViewport *viewport) = 0;
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index 3becf6e6861..143717ff615 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -131,9 +131,9 @@ bool BaseRenderOSystem::initRenderer(int width, int height, bool windowed) {
return STATUS_OK;
}
-bool BaseRenderOSystem::indicatorFlip() {
- if (_indicatorWidthDrawn > 0 && _indicatorHeight > 0) {
- g_system->copyRectToScreen(_renderSurface->getBasePtr(_indicatorX, _indicatorY), _renderSurface->pitch, _indicatorX, _indicatorY, _indicatorWidthDrawn, _indicatorHeight);
+bool BaseRenderOSystem::indicatorFlip(int32 x, int32 y, int32 width, int32 height) {
+ if (width > 0 && height > 0) {
+ g_system->copyRectToScreen(_renderSurface->getBasePtr(x, y), _renderSurface->pitch, x, y, width, height);
g_system->updateScreen();
}
return STATUS_OK;
@@ -450,7 +450,7 @@ void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *dstR
bool BaseRenderOSystem::fillRect(int x, int y, int w, int h, uint32 color) {
// This function isn't used outside of indicator-displaying, and thus quite unused in
// BaseRenderOSystem when dirty-rects are enabled.
- if (!_disableDirtyRects && !_indicatorDisplay) {
+ if (!_disableDirtyRects && !_game->_indicatorDisplay) {
error("BaseRenderOSystem::fillRect - doesn't work for dirty rects yet");
}
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.h b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
index 971fac9f481..168db6a2458 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
@@ -69,7 +69,7 @@ public:
bool initRenderer(int width, int height, bool windowed) override;
bool flip() override;
- bool indicatorFlip() override;
+ bool indicatorFlip(int32 x, int32 y, int32 width, int32 height) override;
bool forcedFlip() override;
bool clear() override;
Graphics::PixelFormat getPixelFormat() const override;
diff --git a/engines/wintermute/base/save_thumb_helper.cpp b/engines/wintermute/base/save_thumb_helper.cpp
index aa5919cbb07..d8e80aacda9 100644
--- a/engines/wintermute/base/save_thumb_helper.cpp
+++ b/engines/wintermute/base/save_thumb_helper.cpp
@@ -29,6 +29,8 @@
#include "engines/wintermute/base/gfx/base_image.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/dcgf.h"
+
#include "graphics/scaler.h"
namespace Wintermute {
@@ -41,10 +43,8 @@ SaveThumbHelper::SaveThumbHelper(BaseGame *inGame) : _game(inGame) {
//////////////////////////////////////////////////////////////////////////
SaveThumbHelper::~SaveThumbHelper() {
- delete _thumbnail;
- _thumbnail = nullptr;
- delete _scummVMThumb;
- _scummVMThumb = nullptr;
+ SAFE_DELETE(_thumbnail);
+ SAFE_DELETE(_scummVMThumb);
}
BaseImage *SaveThumbHelper::storeThumb(bool doFlip, int width, int height) {
@@ -67,11 +67,9 @@ BaseImage *SaveThumbHelper::storeThumb(bool doFlip, int width, int height) {
//////////////////////////////////////////////////////////////////////////
bool SaveThumbHelper::storeThumbnail(bool doFlip) {
- delete _thumbnail;
- _thumbnail = nullptr;
+ SAFE_DELETE(_thumbnail);
if (_game->_thumbnailWidth > 0 && _game->_thumbnailHeight > 0) {
-
_thumbnail = storeThumb(doFlip, _game->_thumbnailWidth, _game->_thumbnailHeight);
if (!_thumbnail) {
return STATUS_FAILED;
@@ -83,8 +81,7 @@ bool SaveThumbHelper::storeThumbnail(bool doFlip) {
//////////////////////////////////////////////////////////////////////////
bool SaveThumbHelper::storeScummVMThumbNail(bool doFlip) {
- delete _scummVMThumb;
- _scummVMThumb = nullptr;
+ SAFE_DELETE(_scummVMThumb);
_scummVMThumb = storeThumb(doFlip, kThumbnailWidth, kThumbnailHeight2);
if (!_scummVMThumb) {
diff --git a/engines/wintermute/base/saveload.cpp b/engines/wintermute/base/saveload.cpp
deleted file mode 100644
index e0504deb5cc..00000000000
--- a/engines/wintermute/base/saveload.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/*
- * This file is based on WME Lite.
- * http://dead-code.org/redir.php?target=wmelite
- * Copyright (c) 2011 Jan Nedoma
- */
-
-#include "engines/wintermute/base/base_persistence_manager.h"
-#include "engines/wintermute/wintermute.h"
-#include "engines/wintermute/base/saveload.h"
-#include "engines/wintermute/ad/ad_scene.h"
-#include "engines/wintermute/base/base_engine.h"
-#include "engines/wintermute/base/base_game.h" // Temporary
-#include "engines/wintermute/base/base_region.h"
-#include "engines/wintermute/base/base_sub_frame.h"
-#include "engines/wintermute/base/font/base_font.h"
-#include "engines/wintermute/base/gfx/base_renderer.h"
-#include "engines/wintermute/base/sound/base_sound.h"
-#include "engines/wintermute/base/scriptables/script.h"
-#ifdef ENABLE_WME3D
-#include "engines/wintermute/base/gfx/xmodel.h"
-#endif
-
-#include "common/savefile.h"
-#include "common/config-manager.h"
-
-namespace Wintermute {
-
-bool SaveLoad::loadGame(const Common::String &filename, BaseGame *gameRef) {
- gameRef->LOG(0, "Loading game '%s'...", filename.c_str());
-
- bool ret;
-
- gameRef->stopVideo();
- gameRef->_renderer->initSaveLoad(false);
-
- gameRef->_loadInProgress = true;
- gameRef->pluginEvents().clearEvents();
- BasePersistenceManager *pm = new BasePersistenceManager();
- if (DID_SUCCEED(ret = pm->initLoad(filename))) {
- //if (DID_SUCCEED(ret = cleanup())) {
- if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->loadTable(gameRef, pm))) {
- if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->loadInstances(gameRef, pm))) {
- // Restore random-seed:
- BaseEngine::instance().getRandomSource()->setSeed(pm->getDWORD());
-
- // data initialization after load
- SaveLoad::initAfterLoad();
-
- gameRef->pluginEvents().applyEvent(WME_EVENT_GAME_AFTER_LOAD, nullptr);
- gameRef->applyEvent("AfterLoad", true);
-
- gameRef->displayContent(true, false);
- //_renderer->flip();
- }
- }
- }
-
- delete pm;
- gameRef->_loadInProgress = false;
-
- gameRef->_renderer->endSaveLoad();
-
- //BaseEngine::LOG(0, "Load end %d", BaseUtils::GetUsedMemMB());
- // AdGame:
- if (DID_SUCCEED(ret)) {
- SystemClassRegistry::getInstance()->enumInstances(SaveLoad::afterLoadRegion, "AdRegion", nullptr);
- }
- return ret;
-}
-
-bool SaveLoad::saveGame(int slot, const char *desc, bool quickSave, BaseGame *gameRef) {
- Common::String filename = SaveLoad::getSaveSlotFilename(slot);
-
- gameRef->LOG(0, "Saving game '%s'...", filename.c_str());
-
- gameRef->pluginEvents().applyEvent(WME_EVENT_GAME_BEFORE_SAVE, nullptr);
- gameRef->applyEvent("BeforeSave", true);
-
- bool ret;
-
- BasePersistenceManager *pm = new BasePersistenceManager();
- if (DID_SUCCEED(ret = pm->initSave(desc))) {
- gameRef->_renderer->initSaveLoad(true, quickSave); // TODO: The original code inited the indicator before the conditionals
- if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->saveTable(gameRef, pm, quickSave))) {
- if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->saveInstances(gameRef, pm, quickSave))) {
- pm->putDWORD(BaseEngine::instance().getRandomSource()->getSeed());
- if (DID_SUCCEED(ret = pm->saveFile(filename))) {
- ConfMan.setInt("most_recent_saveslot", slot);
- ConfMan.flushToDisk();
- }
- }
- }
- }
-
- delete pm;
-
- gameRef->_renderer->endSaveLoad();
-
- return ret;
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool SaveLoad::initAfterLoad() {
- SystemClassRegistry::getInstance()->enumInstances(afterLoadRegion, "BaseRegion", nullptr);
- SystemClassRegistry::getInstance()->enumInstances(afterLoadSubFrame, "BaseSubFrame", nullptr);
- SystemClassRegistry::getInstance()->enumInstances(afterLoadSound, "BaseSound", nullptr);
- SystemClassRegistry::getInstance()->enumInstances(afterLoadFont, "BaseFontTT", nullptr);
-#ifdef ENABLE_WME3D
- SystemClassRegistry::getInstance()->enumInstances(afterLoadXModel, "XModel", nullptr);
-#endif
- SystemClassRegistry::getInstance()->enumInstances(afterLoadScript, "ScScript", nullptr);
- // AdGame:
- SystemClassRegistry::getInstance()->enumInstances(afterLoadScene, "AdScene", nullptr);
- return STATUS_OK;
-}
-
-//////////////////////////////////////////////////////////////////////////
-void SaveLoad::afterLoadScene(void *scene, void *data) {
- ((AdScene *)scene)->afterLoad();
-}
-
-//////////////////////////////////////////////////////////////////////////
-void SaveLoad::afterLoadRegion(void *region, void *data) {
- ((BaseRegion *)region)->createRegion();
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-void SaveLoad::afterLoadSubFrame(void *subframe, void *data) {
- ((BaseSubFrame *)subframe)->setSurfaceSimple();
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-void SaveLoad::afterLoadSound(void *sound, void *data) {
- ((BaseSound *)sound)->setSoundSimple();
-}
-
-//////////////////////////////////////////////////////////////////////////
-void SaveLoad::afterLoadFont(void *font, void *data) {
- ((BaseFont *)font)->afterLoad();
-}
-
-#ifdef ENABLE_WME3D
-//////////////////////////////////////////////////////////////////////////
-void SaveLoad::afterLoadXModel(void *model, void *data) {
- ((XModel *)model)->initializeSimple();
-}
-#endif
-
-//////////////////////////////////////////////////////////////////////////
-void SaveLoad::afterLoadScript(void *script, void *data) {
- ((ScScript *)script)->afterLoad();
-}
-
-Common::String SaveLoad::getSaveSlotFilename(int slot) {
- Common::String filename;
- BasePersistenceManager *pm = new BasePersistenceManager();
- if (pm) {
- filename = pm->getFilenameForSlot(slot);
- delete pm;
- }
- debugC(kWintermuteDebugSaveGame, "getSaveSlotFileName(%d) = %s", slot, filename.c_str());
- return filename;
-}
-
-Common::String SaveLoad::getSaveSlotDescription(int slot) {
- Common::String description;
- Common::String filename = getSaveSlotFilename(slot);
- BasePersistenceManager *pm = new BasePersistenceManager();
- if ((pm->initLoad(filename))) {
- description = pm->_savedDescription;
- }
- delete pm;
- return description;
-}
-
-void SaveLoad::getSaveSlotTimestamp(int slot, TimeDate *time) {
- memset(time, 0, sizeof(TimeDate));
- Common::String filename = getSaveSlotFilename(slot);
- BasePersistenceManager *pm = new BasePersistenceManager();
- if ((pm->initLoad(filename))) {
- *time = pm->getSavedTimestamp();
- }
- delete pm;
-}
-
-bool SaveLoad::isSaveSlotUsed(int slot) {
- Common::String filename = getSaveSlotFilename(slot);
- BasePersistenceManager *pm = new BasePersistenceManager();
- bool ret = pm->getSaveExists(slot);
- delete pm;
- return ret;
-}
-
-bool SaveLoad::emptySaveSlot(int slot) {
- Common::String filename = getSaveSlotFilename(slot);
- BasePersistenceManager *pm = new BasePersistenceManager();
- ((WintermuteEngine *)g_engine)->getSaveFileMan()->removeSavefile(pm->getFilenameForSlot(slot));
- delete pm;
- return true;
-}
-
-
-} // End of namespace Wintermute
diff --git a/engines/wintermute/base/saveload.h b/engines/wintermute/base/saveload.h
deleted file mode 100644
index 228ebffa0bc..00000000000
--- a/engines/wintermute/base/saveload.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/*
- * This file is based on WME Lite.
- * http://dead-code.org/redir.php?target=wmelite
- * Copyright (c) 2011 Jan Nedoma
- */
-
-#ifndef WINTERMUTE_SAVEGAME_H
-#define WINTERMUTE_SAVEGAME_H
-
-#include "common/str.h"
-
-namespace Wintermute {
-class BaseGame;
-class SaveLoad {
-public:
- static bool emptySaveSlot(int slot);
- static bool isSaveSlotUsed(int slot);
- static Common::String getSaveSlotDescription(int slot);
- static void getSaveSlotTimestamp(int slot, TimeDate *time);
- static Common::String getSaveSlotFilename(int slot);
-
- static bool loadGame(const Common::String &filename, BaseGame *gameRef);
- static bool saveGame(int slot, const char *desc, bool quickSave, BaseGame *gameRef);
- static bool initAfterLoad();
- static void afterLoadScene(void *scene, void *data);
- static void afterLoadRegion(void *region, void *data);
-private:
- static void afterLoadSubFrame(void *subframe, void *data);
- static void afterLoadSound(void *sound, void *data);
- static void afterLoadFont(void *font, void *data);
-#ifdef ENABLE_WME3D
- static void afterLoadXModel(void *model, void *data);
-#endif
- static void afterLoadScript(void *script, void *data);
-};
-
-} // End of namespace Wintermute
-
-#endif
diff --git a/engines/wintermute/module.mk b/engines/wintermute/module.mk
index 5b082a9e0be..22f51ef08b3 100644
--- a/engines/wintermute/module.mk
+++ b/engines/wintermute/module.mk
@@ -71,7 +71,6 @@ MODULE_OBJS := \
base/base_file_manager.o \
base/base_frame.o \
base/base_game.o \
- base/base_game_settings.o \
base/base_keyboard_state.o \
base/base_named_object.o \
base/base_object.o \
@@ -88,7 +87,6 @@ MODULE_OBJS := \
base/base_surface_storage.o \
base/base_transition_manager.o \
base/base_viewport.o \
- base/saveload.o \
base/save_thumb_helper.o \
ext/dll_dlltest.o \
ext/dll_geturl.o \
diff --git a/engines/wintermute/system/sys_class_registry.cpp b/engines/wintermute/system/sys_class_registry.cpp
index 2adf94d6f36..cc6b49713db 100644
--- a/engines/wintermute/system/sys_class_registry.cpp
+++ b/engines/wintermute/system/sys_class_registry.cpp
@@ -201,7 +201,7 @@ bool SystemClassRegistry::saveTable(BaseGame *gameRef, BasePersistenceManager *p
counter++;
if (!quickSave) {
- gameRef->_renderer->setIndicatorVal((int)(50.0f / (float)((float)_classes.size() / (float)counter)));
+ gameRef->setIndicatorVal((int)(50.0f / (float)((float)_classes.size() / (float)counter)));
}
(it->_value)->saveTable(gameRef, persistMgr);
@@ -233,7 +233,7 @@ bool SystemClassRegistry::loadTable(BaseGame *gameRef, BasePersistenceManager *p
uint32 numClasses = persistMgr->getDWORD();
for (uint32 i = 0; i < numClasses; i++) {
- gameRef->_renderer->setIndicatorVal((int)(50.0f / (float)((float)numClasses / (float)(i + 1))));
+ gameRef->setIndicatorVal((int)(50.0f / (float)((float)numClasses / (float)(i + 1))));
Common::String className = persistMgr->getStringObj();
@@ -276,7 +276,7 @@ bool SystemClassRegistry::saveInstances(BaseGame *gameRef, BasePersistenceManage
if (!quickSave) {
if (counter % 20 == 0) {
- gameRef->_renderer->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)_classes.size() / (float)counter)));
+ gameRef->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)_classes.size() / (float)counter)));
}
}
gameRef->miniUpdate();
@@ -294,7 +294,7 @@ bool SystemClassRegistry::loadInstances(BaseGame *gameRef, BasePersistenceManage
for (int i = 0; i < numInstances; i++) {
if (i % 20 == 0) {
- gameRef->_renderer->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)numInstances / (float)(i + 1))));
+ gameRef->setIndicatorVal((int)(50.0f + 50.0f / (float)((float)numInstances / (float)(i + 1))));
}
checkHeader("<INSTANCE_HEAD>", persistMgr);
diff --git a/engines/wintermute/ui/ui_button.cpp b/engines/wintermute/ui/ui_button.cpp
index 6e39e5ec2df..b7a32a79ac5 100644
--- a/engines/wintermute/ui/ui_button.cpp
+++ b/engines/wintermute/ui/ui_button.cpp
@@ -372,7 +372,7 @@ bool UIButton::loadBuffer(char *buffer, bool complete) {
case TOKEN_TEXT:
setText(params);
- _game->expandStringByStringTable(&_text);
+ _game->_stringTable->expand(&_text);
break;
case TOKEN_TEXT_ALIGN:
diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp
index d1abb4e4b81..b4cc72b5f96 100644
--- a/engines/wintermute/ui/ui_edit.cpp
+++ b/engines/wintermute/ui/ui_edit.cpp
@@ -229,7 +229,7 @@ bool UIEdit::loadBuffer(char *buffer, bool complete) {
case TOKEN_TEXT:
setText(params);
- _game->expandStringByStringTable(&_text);
+ _game->_stringTable->expand(&_text);
break;
case TOKEN_X:
diff --git a/engines/wintermute/ui/ui_text.cpp b/engines/wintermute/ui/ui_text.cpp
index 1a6e94cb8c3..6001dff26a9 100644
--- a/engines/wintermute/ui/ui_text.cpp
+++ b/engines/wintermute/ui/ui_text.cpp
@@ -228,7 +228,7 @@ bool UIText::loadBuffer(char *buffer, bool complete) {
case TOKEN_TEXT:
setText(params);
- _game->expandStringByStringTable(&_text);
+ _game->_stringTable->expand(&_text);
break;
case TOKEN_TEXT_ALIGN:
diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp
index e69c1688f10..5dbebeb42a5 100644
--- a/engines/wintermute/ui/ui_window.cpp
+++ b/engines/wintermute/ui/ui_window.cpp
@@ -421,7 +421,7 @@ bool UIWindow::loadBuffer(char *buffer, bool complete) {
case TOKEN_TITLE:
setText(params);
- _game->expandStringByStringTable(&_text);
+ _game->_stringTable->expand(&_text);
break;
case TOKEN_TITLE_ALIGN:
diff --git a/engines/wintermute/video/subtitle_card.cpp b/engines/wintermute/video/subtitle_card.cpp
index 47ffefe4d0c..b49f8b486ad 100644
--- a/engines/wintermute/video/subtitle_card.cpp
+++ b/engines/wintermute/video/subtitle_card.cpp
@@ -38,7 +38,7 @@ SubtitleCard::SubtitleCard(BaseGame *inGame,
_startFrame(startFrame),
_endFrame(endFrame) {
_text = text;
- _game->expandStringByStringTable(_text);
+ _game->_stringTable->expand(_text);
}
uint32 SubtitleCard::getStartFrame() const {
diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp
index b77f4ed845f..7d56752fc7d 100644
--- a/engines/wintermute/wintermute.cpp
+++ b/engines/wintermute/wintermute.cpp
@@ -243,7 +243,7 @@ int WintermuteEngine::init() {
// load game
uint32 dataInitStart = g_system->getMillis();
- if (DID_FAIL(_game->loadGameSettingsFile())) {
+ if (DID_FAIL(_game->loadFile(_game->_settingsGameFile ? _game->_settingsGameFile : "default.game"))) {
_game->LOG(ret, "Error loading game file. Exiting.");
delete _game;
_game = nullptr;
More information about the Scummvm-git-logs
mailing list