[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