[Scummvm-git-logs] scummvm master -> 987f687cd1c7218fe9d0c11b46461ea19988ed24
aquadran
noreply at scummvm.org
Sat Sep 6 07:44:18 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:
987f687cd1 WINTERMUTE: Synced with original code
Commit: 987f687cd1c7218fe9d0c11b46461ea19988ed24
https://github.com/scummvm/scummvm/commit/987f687cd1c7218fe9d0c11b46461ea19988ed24
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2025-09-06T09:44:13+02:00
Commit Message:
WINTERMUTE: Synced with original code
Changed paths:
engines/wintermute/ad/ad_game.cpp
engines/wintermute/ad/ad_item.cpp
engines/wintermute/ad/ad_object.cpp
engines/wintermute/ad/ad_object_3d.cpp
engines/wintermute/ad/ad_object_3d.h
engines/wintermute/ad/ad_scene.cpp
engines/wintermute/ad/ad_scene.h
engines/wintermute/ad/ad_talk_node.cpp
engines/wintermute/base/base_game.cpp
engines/wintermute/base/base_string_table.cpp
engines/wintermute/base/gfx/3dloader_3ds.cpp
engines/wintermute/base/particles/part_force.cpp
engines/wintermute/base/scriptables/script_ext_string.cpp
engines/wintermute/ui/ui_window.cpp
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index ee40807f9ee..246302bf287 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -181,6 +181,7 @@ bool AdGame::cleanup() {
SAFE_DELETE_ARRAY(_prevSceneFilename);
SAFE_DELETE_ARRAY(_scheduledScene);
SAFE_DELETE_ARRAY(_debugStartupScene);
+ SAFE_DELETE_ARRAY(_startupScene);
SAFE_DELETE_ARRAY(_itemsFile);
SAFE_DELETE(_sceneViewport);
@@ -1367,6 +1368,7 @@ bool AdGame::loadBuffer(char *buffer, bool complete) {
TOKEN_TABLE(INVENTORY_BOX)
TOKEN_TABLE(ITEMS)
TOKEN_TABLE(TALK_SKIP_BUTTON)
+ TOKEN_TABLE(VIDEO_SKIP_BUTTON)
TOKEN_TABLE(SCENE_VIEWPORT)
TOKEN_TABLE(EDITOR_PROPERTY)
TOKEN_TABLE(STARTUP_SCENE)
@@ -2275,6 +2277,7 @@ CBObject *CAdGame::GetPrevAccessObject(CBObject *CurrObject) {
bool AdGame::validMouse() {
Common::Point32 pos;
BasePlatform::getCursorPos(&pos);
+ //CBPlatform::ScreenToClient(Game->m_Renderer->m_Window, &Pos);
return _renderer->pointInViewport(&pos);
}
diff --git a/engines/wintermute/ad/ad_item.cpp b/engines/wintermute/ad/ad_item.cpp
index df2764cc6c7..272eb54dc50 100644
--- a/engines/wintermute/ad/ad_item.cpp
+++ b/engines/wintermute/ad/ad_item.cpp
@@ -409,7 +409,7 @@ bool AdItem::display(int x, int y) {
if (_currentSprite) {
Common::Rect32 rc;
_currentSprite->getBoundingRect(&rc, 0, 0);
- width = rc.width();
+ width = rc.right - rc.left;
}
_posX = x + width / 2;
diff --git a/engines/wintermute/ad/ad_object.cpp b/engines/wintermute/ad/ad_object.cpp
index df67cce9d84..9b06e783d74 100644
--- a/engines/wintermute/ad/ad_object.cpp
+++ b/engines/wintermute/ad/ad_object.cpp
@@ -523,7 +523,7 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
bool res;
AdEntity *ent = new AdEntity(_game);
if (DID_FAIL(res = ent->loadFile(filename))) {
- delete ent;
+ SAFE_DELETE(ent);
script->runtimeError("AddAttachment() failed loading entity '%s'", filename);
stack->pushBool(false);
} else {
diff --git a/engines/wintermute/ad/ad_object_3d.cpp b/engines/wintermute/ad/ad_object_3d.cpp
index 90032518c9e..48d43eacc46 100644
--- a/engines/wintermute/ad/ad_object_3d.cpp
+++ b/engines/wintermute/ad/ad_object_3d.cpp
@@ -79,19 +79,21 @@ void AdObject3D::clearIgnoredLights() {
}
//////////////////////////////////////////////////////////////////////////
-bool AdObject3D::addIgnoredLight(char *lightName) {
+bool AdObject3D::addIgnoredLight(const char *lightName) {
for (int32 i = 0; i < _ignoredLights.getSize(); i++) {
if (scumm_stricmp(_ignoredLights[i], lightName) == 0) {
return true;
}
}
-
- _ignoredLights.add(lightName);
+ size_t tempSize = strlen(lightName) + 1;
+ char *temp = new char[tempSize];
+ Common::strcpy_s(temp, tempSize, lightName);
+ _ignoredLights.add(temp);
return true;
}
//////////////////////////////////////////////////////////////////////////
-bool AdObject3D::removeIgnoredLight(char *lightName) {
+bool AdObject3D::removeIgnoredLight(const char *lightName) {
for (int32 i = 0; i < _ignoredLights.getSize(); i++) {
if (scumm_stricmp(_ignoredLights[i], lightName) == 0) {
delete[] _ignoredLights[i];
@@ -228,8 +230,7 @@ bool AdObject3D::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "AddIgnoredLight") == 0) {
stack->correctParams(1);
- char *lightName = nullptr;
- BaseUtils::setString(&lightName, stack->pop()->getString());
+ const char *lightName = stack->pop()->getString();
stack->pushBool(addIgnoredLight(lightName));
return true;
}
@@ -238,8 +239,7 @@ bool AdObject3D::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "RemoveIgnoredLight") == 0) {
stack->correctParams(1);
- char *lightName = nullptr;
- BaseUtils::setString(&lightName, stack->pop()->getString());
+ const char *lightName = stack->pop()->getString();
stack->pushBool(removeIgnoredLight(lightName));
return true;
}
diff --git a/engines/wintermute/ad/ad_object_3d.h b/engines/wintermute/ad/ad_object_3d.h
index 8746b9f9347..e60bd5f0b36 100644
--- a/engines/wintermute/ad/ad_object_3d.h
+++ b/engines/wintermute/ad/ad_object_3d.h
@@ -68,8 +68,8 @@ private:
ShadowVolume *_shadowVolume;
BaseArray<char *> _ignoredLights;
void clearIgnoredLights();
- bool addIgnoredLight(char *lightName);
- bool removeIgnoredLight(char *lightName);
+ bool addIgnoredLight(const char *lightName);
+ bool removeIgnoredLight(const char *lightName);
};
} // namespace Wintermute
diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index 699a9fe6bb5..68595152f4b 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -589,6 +589,7 @@ bool AdScene::loadFile(const char *filename) {
bool ret;
+ SAFE_DELETE_ARRAY(_filename);
setFilename(filename);
if (DID_FAIL(ret = loadBuffer(buffer, true))) {
@@ -1630,7 +1631,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
addObject(act);
stack->pushNative(act, true);
} else {
- delete act;
+ SAFE_DELETE(act);
stack->pushNULL();
}
return STATUS_OK;
@@ -1663,7 +1664,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
addObject(ent);
stack->pushNative(ent, true);
} else {
- delete ent;
+ SAFE_DELETE(ent);
stack->pushNULL();
}
return STATUS_OK;
@@ -3590,8 +3591,18 @@ bool AdScene::getRegionsAt(int x, int y, AdRegion **regionList, int numRegions)
return STATUS_OK;
}
+//////////////////////////////////////////////////////////////////////////
+Light3D *AdScene::getActiveLight() {
+ if (_geom && _geom->_activeLight >= 0 && _geom->_activeLight < _geom->_lights.getSize())
+ return _geom->_lights[_geom->_activeLight];
+ else
+ return nullptr;
+}
+
//////////////////////////////////////////////////////////////////////////
bool AdScene::restoreDeviceObjects() {
+ if (_geom)
+ _geom->createLights();
return STATUS_OK;
}
diff --git a/engines/wintermute/ad/ad_scene.h b/engines/wintermute/ad/ad_scene.h
index c1b7709f4ca..13372c3d96e 100644
--- a/engines/wintermute/ad/ad_scene.h
+++ b/engines/wintermute/ad/ad_scene.h
@@ -38,6 +38,7 @@ class AdRegion;
class BaseViewport;
class AdLayer;
class BasePoint;
+class Light3D;
class AdWaypointGroup;
class AdPath;
class AdScaleLevel;
@@ -79,6 +80,7 @@ public:
float _fov;
int32 _editorResolutionWidth;
int32 _editorResolutionHeight;
+ Light3D *getActiveLight();
#endif
bool getRegionsAt(int x, int y, AdRegion **regionList, int numRegions);
bool handleItemAssociations(const char *itemName, bool show);
diff --git a/engines/wintermute/ad/ad_talk_node.cpp b/engines/wintermute/ad/ad_talk_node.cpp
index d1aa20340c9..cab7c3aa9ce 100644
--- a/engines/wintermute/ad/ad_talk_node.cpp
+++ b/engines/wintermute/ad/ad_talk_node.cpp
@@ -113,7 +113,7 @@ bool AdTalkNode::loadBuffer(char *buffer, bool complete) {
break;
case TOKEN_SPRITESET: {
- delete _spriteSet;
+ SAFE_DELETE(_spriteSet);
_spriteSet = new AdSpriteSet(_game);
if (!_spriteSet || DID_FAIL(_spriteSet->loadBuffer(params, false))) {
SAFE_DELETE(_spriteSet);
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 1c3741e9c01..125cbee859f 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -245,6 +245,7 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
_musicCrossfadeChannel1 = -1;
_musicCrossfadeChannel2 = -1;
_musicCrossfadeSwap = false;
+ // FoxTail:
_musicCrossfadeVolume1 = 0;
_musicCrossfadeVolume2 = 100;
@@ -332,7 +333,9 @@ BaseGame::~BaseGame() {
cleanup();
+ SAFE_DELETE_ARRAY(_localSaveDir);
SAFE_DELETE_ARRAY(_settingsGameFile);
+ SAFE_DELETE_ARRAY(_savedGameExt);
SAFE_DELETE(_cachedThumbnail);
SAFE_DELETE(_saveLoadImage);
@@ -1090,7 +1093,7 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
break;
case TOKEN_LOCAL_SAVE_DIR:
- _localSaveDir = params;
+ BaseUtils::setString(&_localSaveDir, (char *)params);
break;
case TOKEN_COMPAT_KILL_METHOD_THREADS:
@@ -4538,7 +4541,7 @@ bool BaseGame::loadSettings(const char *filename) {
break;
case TOKEN_SAVED_GAME_EXT:
- _savedGameExt = params;
+ BaseUtils::setString(&_savedGameExt, (char *)params);
break;
case TOKEN_GUID:
@@ -5259,95 +5262,6 @@ bool BaseGame::setWaitCursor(const char *filename) {
}
//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-/*HRESULT CBGame::BindDirectX() {
- memset(&m_DirectX, 0, sizeof(TDirectXBindings));
-
- // load libraries
- m_DirectX.hDDraw = CBPlatform::LoadLibrary("ddraw.dll");
-#ifdef WME_D3D9
- m_DirectX.hD3D = CBPlatform::LoadLibrary("d3d9.dll");
-#else
- m_DirectX.hD3D = CBPlatform::LoadLibrary("d3d8.dll");
- m_DirectX.hDXof = CBPlatform::LoadLibrary("d3dxof.dll");
-#endif
- m_DirectX.hDSound = CBPlatform::LoadLibrary("dsound.dll");
-
- // bind DirectDraw
- if (m_DirectX.hDDraw) {
- m_DirectX.DirectDrawCreateEx = (DLL_DirectDrawCreateEx)CBPlatform::GetProcAddress(m_DirectX.hDDraw, "DirectDrawCreateEx");
- m_DirectX.DirectDrawEnumerateEx = (DLL_DirectDrawEnumerateEx)CBPlatform::GetProcAddress(m_DirectX.hDDraw, "DirectDrawEnumerateExA");
- }
-
- // bind Direct3D
- if (m_DirectX.hD3D) {
-#ifdef WME_D3D9
- m_DirectX.Direct3DCreate = (DLL_Direct3DCreate)CBPlatform::GetProcAddress(m_DirectX.hD3D, "Direct3DCreate9");
-#else
- m_DirectX.Direct3DCreate = (DLL_Direct3DCreate)CBPlatform::GetProcAddress(m_DirectX.hD3D, "Direct3DCreate8");
-#endif
- }
-
- // bind DirectSound
- if (m_DirectX.hDSound) {
- m_DirectX.DirectSoundCreate8 = (DLL_DirectSoundCreate8)CBPlatform::GetProcAddress(m_DirectX.hDSound, "DirectSoundCreate8");
- m_DirectX.DirectSoundEnumerate = (DLL_DirectSoundEnumerate)CBPlatform::GetProcAddress(m_DirectX.hDSound, "DirectSoundEnumerateA");
- }
-
-#ifndef WME_D3D9
- // bind DirectXFile
- if (m_DirectX.hDXof) {
- m_DirectX.DirectXFileCreate = (DLL_DirectXFileCreate)CBPlatform::GetProcAddress(m_DirectX.hDXof, "DirectXFileCreate");
- }
-#endif
- return S_OK;
-}
-
-//////////////////////////////////////////////////////////////////////////
-HRESULT CBGame::UnBindDirectX() {
- if (m_DirectX.hDDraw)
- CBPlatform::FreeLibrary(m_DirectX.hDDraw);
- if (m_DirectX.hD3D)
- CBPlatform::FreeLibrary(m_DirectX.hD3D);
- if (m_DirectX.hDSound)
- CBPlatform::FreeLibrary(m_DirectX.hDSound);
-#ifndef WME_D3D9
- if (m_DirectX.hDXof)
- CBPlatform::FreeLibrary(m_DirectX.hDXof);
-#endif
- memset(&m_DirectX, 0, sizeof(TDirectXBindings));
- return S_OK;
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::IsDirectXBound() {
- if (!m_DirectX.hDDraw)
- return false;
- if (!m_DirectX.hD3D)
- return false;
- if (!m_DirectX.hDSound)
- return false;
-
- if (!m_DirectX.Direct3DCreate)
- return false;
- if (!m_DirectX.DirectDrawCreateEx)
- return false;
- if (!m_DirectX.DirectDrawEnumerateEx)
- return false;
- if (!m_DirectX.DirectSoundCreate8)
- return false;
- if (!m_DirectX.DirectSoundEnumerate)
- return false;
-
-#ifndef WME_D3D9
- if (!m_DirectX.hDXof)
- return false;
- if (!m_DirectX.DirectXFileCreate)
- return false;
-#endif
-
- return true;
-}*/
//////////////////////////////////////////////////////////////////////////
bool BaseGame::isVideoPlaying() {
@@ -5388,161 +5302,6 @@ bool BaseGame::renderShadowGeometry() {
return STATUS_OK;
}
-//////////////////////////////////////////////////////////////////////////
-// IWmeGame
-//////////////////////////////////////////////////////////////////////////
-/*IWmeValue *CBGame::CreateValue() {
- return new CScValue(this);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::DeleteValue(IWmeValue *Value) {
- if (Value)
- delete (CScValue *)Value;
- return true;
-}
-
-//////////////////////////////////////////////////////////////////////////
-IWmeParamSet *CBGame::CreateParamSet() {
- return new CBParamSet(this);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::DeleteParamSet(IWmeParamSet *ParamSet) {
- if (ParamSet)
- delete (CBParamSet *)ParamSet;
- return true;
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SubscribeEvent(IWmeObject *Object, EWmeEvent Event) {
- return m_PluginMgr->SubscribeEvent(Object, Event);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::UnsubscribeEvent(IWmeObject *Object, EWmeEvent Event) {
- return m_PluginMgr->UnsubscribeEvent(Object, Event);
-}
-
-//////////////////////////////////////////////////////////////////////////
-IWmeFile *CBGame::OpenFile(const char *Filename) {
- return (IWmeFile *)m_FileManager->OpenFile((char *)Filename);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::CloseFile(IWmeFile *File) {
- return SUCCEEDED(m_FileManager->CloseFile((CBFile *)File));
-}
-
-//////////////////////////////////////////////////////////////////////////
-IWmeObject *CBGame::CreateObject(const char *ClassName, IWmeParamSet *Params) {
- // CScValue* Ret = new CScValue(Game);
- IWmeObject *Ret = NULL;
-
- CScStack *Stack = new CScStack(Game);
- if (Params)
- ((CBParamSet *)Params)->PushToStack(Stack);
- else
- Stack->PushInt(0);
-
- CScStack *ThisStack = new CScStack(Game);
- ThisStack->PushNULL();
-
- CScScript *Script = new CScScript(Game, Game->m_ScEngine);
- CBUtils::SetString(&Script->m_Filename, "<temp script>");
-
- if (SUCCEEDED(ExternalCall(Script, Stack, ThisStack, (char *)ClassName))) {
- CBScriptable *Obj = ThisStack->Pop()->GetNative();
- if (Obj) {
- // Ret->SetNative(Obj);
- Obj->m_RefCount++;
- Ret = Obj;
- }
- }
-
- delete Stack;
- delete ThisStack;
- delete Script;
-
- if (Ret)
- ((CBScriptable *)Ret)->m_RefCount--;
- return Ret;
-}
-
-//////////////////////////////////////////////////////////////////////////
-// IWmeObject
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SendEvent(const char *EventName) {
- return CBScriptHolder::SendEvent(EventName);
-}
-
-//////////////////////////////////////////////////////////////////////////
-IWmeValue *CBGame::CallMethod(const char *MethodName, IWmeParamSet *Params) {
- return CBScriptHolder::CallMethod(MethodName, Params);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SetProperty(const char *PropName, IWmeValue *Value) {
- return CBScriptHolder::SetProperty(PropName, Value);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SetProperty(const char *PropName, int Value) {
- return CBScriptHolder::SetProperty(PropName, Value);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SetProperty(const char *PropName, const char *Value) {
- return CBScriptHolder::SetProperty(PropName, Value);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SetProperty(const char *PropName, double Value) {
- return CBScriptHolder::SetProperty(PropName, Value);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SetProperty(const char *PropName, bool Value) {
- return CBScriptHolder::SetProperty(PropName, Value);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SetProperty(const char *PropName, IWmeObject *Value) {
- return CBScriptHolder::SetProperty(PropName, Value);
-}
-
-//////////////////////////////////////////////////////////////////////////
-bool CBGame::SetProperty(const char *PropName) {
- return CBScriptHolder::SetProperty(PropName);
-}
-
-//////////////////////////////////////////////////////////////////////////
-IWmeValue *CBGame::GetProperty(const char *PropName) {
- return CBScriptHolder::GetProperty(PropName);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void *CBGame::GetInterface(const char *ClassName) {
- return CBScriptHolder::GetInterface(ClassName);
-}*/
-
-//////////////////////////////////////////////////////////////////////////
-/*CBObject *CBGame::GetNextAccessObject(CBObject *CurrObject) {
- if (m_FocusedWindow) {
- return m_FocusedWindow->GetNextAccessObject(CurrObject);
- } else
- return NULL;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-CBObject *CBGame::GetPrevAccessObject(CBObject *CurrObject) {
- if (m_FocusedWindow) {
- return m_FocusedWindow->GetPrevAccessObject(CurrObject);
- } else
- return NULL;
-}*/
-
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
bool BaseGame::onActivate(bool activate, bool refreshMouse) {
diff --git a/engines/wintermute/base/base_string_table.cpp b/engines/wintermute/base/base_string_table.cpp
index 2ae17f2350b..9e03cd1c61c 100644
--- a/engines/wintermute/base/base_string_table.cpp
+++ b/engines/wintermute/base/base_string_table.cpp
@@ -108,7 +108,7 @@ char *BaseStringTable::getKey(const char *str) const {
}
void BaseStringTable::replaceExpand(char *key, char *newStr, size_t newStrSize) const {
- // W/A: Remove accented chars as input text in Polish version of Alpha Polaris
+ // W/A: Remove accented chars like input text in Polish version of Alpha Polaris
if (BaseEngine::instance().getGameId() == "alphapolaris" &&
BaseEngine::instance().getLanguage() == Common::PL_POL) {
if (strcmp(key, "hotspot0360") == 0)
diff --git a/engines/wintermute/base/gfx/3dloader_3ds.cpp b/engines/wintermute/base/gfx/3dloader_3ds.cpp
index 71cc3790b8e..b897e0b66af 100644
--- a/engines/wintermute/base/gfx/3dloader_3ds.cpp
+++ b/engines/wintermute/base/gfx/3dloader_3ds.cpp
@@ -502,8 +502,8 @@ char *Loader3DS::getCameraName(int index) {
//////////////////////////////////////////////////////////////////////////
bool Loader3DS::loadCamera(int index, Camera3D *camera) {
- if (!camera) return
- false;
+ if (!camera)
+ return false;
int pos = -1;
for (int32 i = 0; i < _objects.getSize(); i++) {
diff --git a/engines/wintermute/base/particles/part_force.cpp b/engines/wintermute/base/particles/part_force.cpp
index bc1ea083302..ce3716fade3 100644
--- a/engines/wintermute/base/particles/part_force.cpp
+++ b/engines/wintermute/base/particles/part_force.cpp
@@ -46,14 +46,7 @@ PartForce::~PartForce() {
//////////////////////////////////////////////////////////////////////////
bool PartForce::persist(BasePersistenceManager *persistMgr) {
- if (persistMgr->getIsSaving()) {
- const char *name = _name;
- persistMgr->transferConstChar(TMEMBER(name));
- } else {
- const char *name;
- persistMgr->transferConstChar(TMEMBER(name));
- setName(name);
- }
+ persistMgr->transferCharPtr(TMEMBER(_name));
persistMgr->transferVector2(TMEMBER(_pos));
persistMgr->transferVector2(TMEMBER(_direction));
persistMgr->transferSint32(TMEMBER_INT(_type));
diff --git a/engines/wintermute/base/scriptables/script_ext_string.cpp b/engines/wintermute/base/scriptables/script_ext_string.cpp
index 709e1c509b8..ff09cb81610 100644
--- a/engines/wintermute/base/scriptables/script_ext_string.cpp
+++ b/engines/wintermute/base/scriptables/script_ext_string.cpp
@@ -57,6 +57,7 @@ SXString::SXString(BaseGame *inGame, ScStack *stack) : BaseScriptable(inGame) {
_capacity = MAX(0, val->getInt());
if (_capacity > 0) {
_string = new char[_capacity]();
+ memset(_string, 0, _capacity);
}
} else {
setStringVal(val->getString());
@@ -83,6 +84,7 @@ void SXString::setStringVal(const char *val) {
_capacity = len + 1;
SAFE_DELETE_ARRAY(_string);
_string = new char[_capacity]();
+ memset(_string, 0, _capacity);
}
Common::strcpy_s(_string, _capacity, val);
}
diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp
index 99bd4b1f2cb..e034ef8a3f5 100644
--- a/engines/wintermute/ui/ui_window.cpp
+++ b/engines/wintermute/ui/ui_window.cpp
@@ -136,12 +136,13 @@ bool UIWindow::display(int offsetX, int offsetY) {
_shieldButton->setListener(this, _shieldButton, 0);
_shieldButton->_parent = this;
}
+ if (_shieldButton) {
+ _shieldButton->_posX = _shieldButton->_posY = 0;
+ _shieldButton->_width = _game->_renderer->getWidth();
+ _shieldButton->_height = _game->_renderer->getHeight();
- _shieldButton->_posX = _shieldButton->_posY = 0;
- _shieldButton->_width = _game->_renderer->getWidth();
- _shieldButton->_height = _game->_renderer->getHeight();
-
- _shieldButton->display();
+ _shieldButton->display();
+ }
}
if (!_visible) {
More information about the Scummvm-git-logs
mailing list