[Scummvm-git-logs] scummvm master -> 48e42f68ddb506e498743d5603ae00148c9ee764

aquadran noreply at scummvm.org
Fri Sep 5 18:42:50 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:
48e42f68dd WINTERMUTE: Synced with original code


Commit: 48e42f68ddb506e498743d5603ae00148c9ee764
    https://github.com/scummvm/scummvm/commit/48e42f68ddb506e498743d5603ae00148c9ee764
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-09-05T20:42:45+02:00

Commit Message:
WINTERMUTE: Synced with original code

Changed paths:
    engines/wintermute/ad/ad_entity.cpp
    engines/wintermute/ad/ad_entity.h
    engines/wintermute/base/base_frame.cpp
    engines/wintermute/base/base_game.cpp
    engines/wintermute/base/base_game.h
    engines/wintermute/base/base_object.cpp
    engines/wintermute/base/base_parser.cpp
    engines/wintermute/base/base_parser.h
    engines/wintermute/base/base_string_table.cpp
    engines/wintermute/base/base_sub_frame.cpp
    engines/wintermute/base/base_sub_frame.h
    engines/wintermute/base/base_surface_storage.cpp
    engines/wintermute/base/base_surface_storage.h
    engines/wintermute/base/font/base_font.cpp
    engines/wintermute/base/font/base_font.h
    engines/wintermute/base/font/base_font_bitmap.cpp
    engines/wintermute/base/font/base_font_bitmap.h
    engines/wintermute/base/font/base_font_truetype.cpp
    engines/wintermute/base/font/base_font_truetype.h
    engines/wintermute/base/scriptables/script_ext_array.cpp
    engines/wintermute/base/scriptables/script_ext_array.h
    engines/wintermute/base/scriptables/script_ext_date.h
    engines/wintermute/base/sound/base_sound.cpp
    engines/wintermute/base/sound/base_sound.h


diff --git a/engines/wintermute/ad/ad_entity.cpp b/engines/wintermute/ad/ad_entity.cpp
index 3a0891094ed..fb23abf2793 100644
--- a/engines/wintermute/ad/ad_entity.cpp
+++ b/engines/wintermute/ad/ad_entity.cpp
@@ -1159,8 +1159,8 @@ bool AdEntity::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		buffer->putTextIndent(indent + 2, "SPRITE=\"%s\"\n", _sprite->_filename);
 	}
 
-	if (_subtype == ENTITY_SOUND && _sFX && !_sFX->_soundFilename.empty()) {
-		buffer->putTextIndent(indent + 2, "SOUND=\"%s\"\n", _sFX->_soundFilename.c_str());
+	if (_subtype == ENTITY_SOUND && _sFX && _sFX->_soundFilename) {
+		buffer->putTextIndent(indent + 2, "SOUND=\"%s\"\n", _sFX->_soundFilename);
 		buffer->putTextIndent(indent + 2, "SOUND_START_TIME=%d\n", _sFXStart);
 		buffer->putTextIndent(indent + 2, "SOUND_VOLUME=%d\n", _sFXVolume);
 	}
diff --git a/engines/wintermute/ad/ad_entity.h b/engines/wintermute/ad/ad_entity.h
index 431370e5065..0052057e393 100644
--- a/engines/wintermute/ad/ad_entity.h
+++ b/engines/wintermute/ad/ad_entity.h
@@ -64,6 +64,7 @@ public:
 	bool scSetProperty(const char *name, ScValue *value) override;
 	bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
 	const char *scToString() override;
+
 	Common::String debuggerToString() const override;
 private:
 
diff --git a/engines/wintermute/base/base_frame.cpp b/engines/wintermute/base/base_frame.cpp
index 4724e787f93..ce1ef6550b0 100644
--- a/engines/wintermute/base/base_frame.cpp
+++ b/engines/wintermute/base/base_frame.cpp
@@ -374,8 +374,8 @@ bool BaseFrame::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		buffer->putTextIndent(indent + 2, "MOVE {%d, %d}\n", _moveX, _moveY);
 	}
 
-	if (_sound && !_sound->_soundFilename.empty()) {
-		buffer->putTextIndent(indent + 2, "SOUND=\"%s\"\n", _sound->_soundFilename.c_str());
+	if (_sound && _sound->_soundFilename) {
+		buffer->putTextIndent(indent + 2, "SOUND=\"%s\"\n", _sound->_soundFilename);
 	}
 
 	buffer->putTextIndent(indent + 2, "KEYFRAME=%s\n", _keyframe ? "TRUE" : "FALSE");
@@ -438,8 +438,8 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 	if (strcmp(name, "GetSound") == 0) {
 		stack->correctParams(0);
 
-		if (_sound && !_sound->_soundFilename.empty()) {
-			stack->pushString(_sound->_soundFilename.c_str());
+		if (_sound && _sound->_soundFilename) {
+			stack->pushString(_sound->_soundFilename);
 		} else {
 			stack->pushNULL();
 		}
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 3dddd21222b..1c3741e9c01 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -236,8 +236,8 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
 	_indicatorWidth = -1;
 	_indicatorHeight = 8;
 	_richSavedGames = false;
-	_savedGameExt = "dsv";
-
+	_savedGameExt = nullptr;
+	BaseUtils::setString(&_savedGameExt, "dsv");
 
 	_musicCrossfadeRunning = false;
 	_musicCrossfadeStartTime = 0;
@@ -248,8 +248,8 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
 	_musicCrossfadeVolume1 = 0;
 	_musicCrossfadeVolume2 = 100;
 
-	_loadImageName = "";
-	_saveImageName = "";
+	_loadImageName = nullptr;
+	_saveImageName = nullptr;
 	_saveLoadImage = nullptr;
 
 	_saveImageX = _saveImageY = 0;
@@ -386,6 +386,9 @@ bool BaseGame::cleanup() {
 	_focusedWindow = nullptr; // ref only
 	//m_AccessShieldWin = nullptr;
 
+	SAFE_DELETE_ARRAY(_saveImageName);
+	SAFE_DELETE_ARRAY(_loadImageName);
+
 	SAFE_DELETE(_cursorNoninteractive);
 	SAFE_DELETE(_cursor);
 	SAFE_DELETE(_activeCursor);
@@ -420,8 +423,8 @@ bool BaseGame::cleanup() {
 	_viewportStack.removeAll();
 	_viewportSP = -1;
 
-	setName(nullptr);
-	setFilename(nullptr);
+	SAFE_DELETE_ARRAY(_name);
+	SAFE_DELETE_ARRAY(_filename);
 	for (int i = 0; i < 7; i++) {
 		SAFE_DELETE_ARRAY(_caption[i]);
 	}
@@ -1063,7 +1066,7 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
 			break;
 
 		case TOKEN_SAVE_IMAGE:
-			_saveImageName = params;
+			BaseUtils::setString(&_saveImageName, (char *)params);
 			break;
 
 		case TOKEN_SAVE_IMAGE_X:
@@ -1075,7 +1078,7 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
 			break;
 
 		case TOKEN_LOAD_IMAGE:
-			_loadImageName = params;
+			BaseUtils::setString(&_loadImageName, (char *)params);
 			break;
 
 		case TOKEN_LOAD_IMAGE_X:
@@ -1372,10 +1375,10 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		if (channel < 0 || channel >= NUM_MUSIC_CHANNELS) {
 			stack->pushNULL();
 		} else {
-			if (!_music[channel] || _music[channel]->_soundFilename.empty()) {
+			if (!_music[channel] || !_music[channel]->_soundFilename) {
 				stack->pushNULL();
 			} else {
-				stack->pushString(_music[channel]->_soundFilename.c_str());
+				stack->pushString(_music[channel]->_soundFilename);
 			}
 		}
 		return STATUS_OK;
@@ -1567,8 +1570,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		BaseSound *sound = new BaseSound(_game);
 		if (sound && DID_SUCCEED(sound->setSound(filename, Audio::Mixer::kMusicSoundType, true))) {
 			length = sound->getLength();
-			delete sound;
-			sound = nullptr;
+			SAFE_DELETE(sound);
 		}
 		stack->pushInt(length);
 		return STATUS_OK;
@@ -2449,9 +2451,9 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		_loadImageY = stack->pop()->getInt();
 
 		if (val->isNULL()) {
-			_saveImageName = "";
+			SAFE_DELETE_ARRAY(_loadImageName);
 		} else {
-			_loadImageName = val->getString();
+			BaseUtils::setString(&_loadImageName, val->getString());
 		}
 		stack->pushNULL();
 		return STATUS_OK;
@@ -2467,9 +2469,9 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		_saveImageY = stack->pop()->getInt();
 
 		if (val->isNULL()) {
-			_saveImageName = "";
+			SAFE_DELETE_ARRAY(_saveImageName);
 		} else {
-			_loadImageName = val->getString();
+			BaseUtils::setString(&_saveImageName, val->getString());
 		}
 		stack->pushNULL();
 		return STATUS_OK;
@@ -4165,7 +4167,7 @@ bool BaseGame::saveGame(int32 slot, const char *desc, bool quickSave) {
 	if (DID_SUCCEED(ret = pm->initSave(desc))) {
 		if (!quickSave) {
 			SAFE_DELETE(_saveLoadImage);
-			if (_saveImageName.size())
+			if (_saveImageName)
 				_saveLoadImage = _game->_renderer->createSurface();
 			if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_saveImageName, true, 0, 0, 0))) {
 				SAFE_DELETE(_saveLoadImage);
@@ -4216,7 +4218,7 @@ bool BaseGame::loadGame(const char *filename) {
 	stopVideo();
 
 	SAFE_DELETE(_saveLoadImage);
-	if (_loadImageName.size()) {
+	if (_loadImageName) {
 		_saveLoadImage = _game->_renderer->createSurface();
 
 		if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_loadImageName, true, 0, 0, 0))) {
@@ -4629,8 +4631,8 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) {
 	persistMgr->transferUint32(TMEMBER(_liveTimerDelta));
 	persistMgr->transferUint32(TMEMBER(_liveTimerLast));
 
-	persistMgr->transferString(TMEMBER(_loadImageName));
-	persistMgr->transferString(TMEMBER(_saveImageName));
+	persistMgr->transferCharPtr(TMEMBER(_loadImageName));
+	persistMgr->transferCharPtr(TMEMBER(_saveImageName));
 	persistMgr->transferSint32(TMEMBER(_saveImageX));
 	persistMgr->transferSint32(TMEMBER(_saveImageY));
 	persistMgr->transferSint32(TMEMBER(_loadImageX));
diff --git a/engines/wintermute/base/base_game.h b/engines/wintermute/base/base_game.h
index 49eb5f19812..3c0a7e8d121 100644
--- a/engines/wintermute/base/base_game.h
+++ b/engines/wintermute/base/base_game.h
@@ -150,7 +150,7 @@ public:
 	int32 _indicatorWidth;
 	int32 _indicatorHeight;
 
-	Common::String _savedGameExt;
+	char *_savedGameExt;
 	bool _richSavedGames;
 
 #ifdef ENABLE_WME3D
@@ -158,8 +158,8 @@ public:
 	int32 _editorResolutionHeight;
 #endif
 
-	Common::String _loadImageName;
-	Common::String _saveImageName;
+	char *_loadImageName;
+	char *_saveImageName;
 	int32 _saveImageX;
 	int32 _saveImageY;
 	int32 _loadImageX;
diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp
index 36554e54742..cc046d1106b 100644
--- a/engines/wintermute/base/base_object.cpp
+++ b/engines/wintermute/base/base_object.cpp
@@ -574,7 +574,7 @@ bool BaseObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		if (!_sFX) {
 			stack->pushNULL();
 		} else {
-			stack->pushString(_sFX->_soundFilename.c_str());
+			stack->pushString(_sFX->_soundFilename);
 		}
 		return STATUS_OK;
 	}
@@ -1130,7 +1130,7 @@ bool BaseObject::persist(BasePersistenceManager *persistMgr) {
 			if (persistMgr->checkVersion(1, 6, 1)) {
 				persistMgr->transferString(TMEMBER(tempString));
 				if (!tempString.empty()) {
-					_shadowImage = _game->_surfaceStorage->addSurface(tempString);
+					_shadowImage = _game->_surfaceStorage->addSurface(tempString.c_str());
 				}
 			}
 		}
diff --git a/engines/wintermute/base/base_parser.cpp b/engines/wintermute/base/base_parser.cpp
index 60c81b5b8c6..9acb8e9ee87 100644
--- a/engines/wintermute/base/base_parser.cpp
+++ b/engines/wintermute/base/base_parser.cpp
@@ -126,7 +126,7 @@ int32 BaseParser::getCommand(char **buf, const TokenDesc *tokens, char **params)
 	if (!*buf) {
 		return PARSERR_TOKENNOTFOUND;
 	}
-	BaseEngine::instance().getGameRef()->miniUpdate();
+	_game->miniUpdate();
 	char *name;
 	return getObject(buf, tokens, &name, params);
 }
@@ -209,8 +209,8 @@ char *BaseParser::getAssignmentText(char **buf) {
 }
 
 //////////////////////////////////////////////////////////////////////
-Common::String BaseParser::getToken(char **buf) {
-	char token[100]; // TODO: Remove static
+char *BaseParser::getToken(char **buf) {
+	static char token[100];
 	char *b = *buf, *t = token;
 	while (true) {
 		while (*b && (*b == ' ' || *b == '\n' || *b == 13 || *b == 10 || *b == '\t')) {
@@ -253,10 +253,10 @@ Common::String BaseParser::getToken(char **buf) {
 		*t++ = 0;
 	} else if (*b == 0) {
 		*buf = b;
-		return Common::String();
+		return nullptr;
 	} else {
 		// Error.
-		return Common::String();
+		return nullptr;
 	}
 
 	*buf = b;
@@ -266,8 +266,7 @@ Common::String BaseParser::getToken(char **buf) {
 
 //////////////////////////////////////////////////////////////////////
 float BaseParser::getTokenFloat(char **buf) {
-	Common::String token = getToken(buf);
-	const char *t = token.c_str();
+	const char *t = getToken(buf);
 	if (!((*t >= '0' && *t <= '9') || *t == '-' || *t == '.')) {
 		// Error situation. We handle this by return 0.
 		return 0.;
@@ -279,8 +278,7 @@ float BaseParser::getTokenFloat(char **buf) {
 
 //////////////////////////////////////////////////////////////////////
 int32 BaseParser::getTokenInt(char **buf) {
-	Common::String token = getToken(buf);
-	const char *t = token.c_str();
+	const char *t = getToken(buf);
 	if (!((*t >= '0' && *t <= '9') || *t == '-')) {
 		// Error situation. We handle this by return 0.
 		return 0;
@@ -292,8 +290,7 @@ int32 BaseParser::getTokenInt(char **buf) {
 
 //////////////////////////////////////////////////////////////////////
 void BaseParser::skipToken(char **buf, char *tok, char * /*msg*/) {
-	Common::String token = getToken(buf);
-	const char *t = token.c_str();
+	const char *t = getToken(buf);
 	if (strcmp(t, tok)) {
 		return;    // Error
 	}
diff --git a/engines/wintermute/base/base_parser.h b/engines/wintermute/base/base_parser.h
index d5abad62c2f..df2a60bab62 100644
--- a/engines/wintermute/base/base_parser.h
+++ b/engines/wintermute/base/base_parser.h
@@ -69,7 +69,7 @@ public:
 	void skipToken(char **buf, char *tok, char *msg = nullptr);
 	int32 getTokenInt(char **buf);
 	float getTokenFloat(char **buf);
-	Common::String getToken(char **buf);
+	char *getToken(char **buf);
 	char *getAssignmentText(char **buf);
 	char *getSubText(char **buf, char open, char close);
 	void skipCharacters(char **buf, const char *toSkip);
diff --git a/engines/wintermute/base/base_string_table.cpp b/engines/wintermute/base/base_string_table.cpp
index 03a2c3c2684..2ae17f2350b 100644
--- a/engines/wintermute/base/base_string_table.cpp
+++ b/engines/wintermute/base/base_string_table.cpp
@@ -175,8 +175,9 @@ void BaseStringTable::expand(char **str) const {
 
 //////////////////////////////////////////////////////////////////////////
 void BaseStringTable::expand(Common::String &str) const {
-	char *tmp = new char[str.size() + 1];
-	Common::strcpy_s(tmp, str.size() + 1, str.c_str());
+	size_t tmpSize = str.size() + 1;
+	char *tmp = new char[tmpSize];
+	Common::strcpy_s(tmp, tmpSize, str.c_str());
 	expand(&tmp);
 	str = tmp;
 	delete[] tmp;
diff --git a/engines/wintermute/base/base_sub_frame.cpp b/engines/wintermute/base/base_sub_frame.cpp
index 639b3f5679e..fa83580e250 100644
--- a/engines/wintermute/base/base_sub_frame.cpp
+++ b/engines/wintermute/base/base_sub_frame.cpp
@@ -679,7 +679,7 @@ const char *BaseSubFrame::scToString() {
 
 
 //////////////////////////////////////////////////////////////////////////
-bool BaseSubFrame::setSurface(const Common::String &filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
+bool BaseSubFrame::setSurface(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
 	if (_surface) {
 		_game->_surfaceStorage->removeSurface(_surface);
 		_surface = nullptr;
@@ -689,8 +689,9 @@ bool BaseSubFrame::setSurface(const Common::String &filename, bool defaultCK, by
 
 	_surface = _game->_surfaceStorage->addSurface(filename, defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
 	if (_surface) {
-		_surfaceFilename = new char[filename.size() + 1];
-		Common::strcpy_s(_surfaceFilename, filename.size() + 1, filename.c_str());
+		size_t filenameSize = strlen(filename) + 1;
+		_surfaceFilename = new char[filenameSize];
+		Common::strcpy_s(_surfaceFilename, filenameSize, filename);
 
 		_cKDefault = defaultCK;
 		_cKRed = ckRed;
diff --git a/engines/wintermute/base/base_sub_frame.h b/engines/wintermute/base/base_sub_frame.h
index a5d3fcd9d81..b35a358b18d 100644
--- a/engines/wintermute/base/base_sub_frame.h
+++ b/engines/wintermute/base/base_sub_frame.h
@@ -41,7 +41,7 @@ public:
 	bool _mirrorX;
 	bool _mirrorY;
 	bool _decoration;
-	bool setSurface(const Common::String &filename, bool defaultCK = true, byte ckRed = 0, byte ckGreen = 0, byte ckBlue = 0, int lifeTime = -1, bool keepLoaded = false);
+	bool setSurface(const char *filename, bool defaultCK = true, byte ckRed = 0, byte ckGreen = 0, byte ckBlue = 0, int lifeTime = -1, bool keepLoaded = false);
 	bool setSurfaceSimple();
 	DECLARE_PERSISTENT(BaseSubFrame, BaseScriptable)
 	void setDefaultRect();
diff --git a/engines/wintermute/base/base_surface_storage.cpp b/engines/wintermute/base/base_surface_storage.cpp
index 12b1d5f0b54..e16033ad9bf 100644
--- a/engines/wintermute/base/base_surface_storage.cpp
+++ b/engines/wintermute/base/base_surface_storage.cpp
@@ -102,17 +102,17 @@ bool BaseSurfaceStorage::removeSurface(BaseSurface *surface) {
 
 
 //////////////////////////////////////////////////////////////////////
-BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
+BaseSurface *BaseSurfaceStorage::addSurface(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
 	for (int32 i = 0; i < _surfaces.getSize(); i++) {
-		if (scumm_stricmp(_surfaces[i]->getFileName(), filename.c_str()) == 0) {
+		if (scumm_stricmp(_surfaces[i]->getFileName(), filename) == 0) {
 			_surfaces[i]->_referenceCount++;
 			return _surfaces[i];
 		}
 	}
 
 	if (!BaseFileManager::getEngineInstance()->hasFile(filename)) {
-		if (filename.size()) {
-			BaseEngine::LOG(0, "Missing image: '%s'", filename.c_str());
+		if (!filename) {
+			BaseEngine::LOG(0, "Missing image: '%s'", filename);
 		}
 		if (_game->_debugDebugMode) {
 			return addSurface("invalid_debug.bmp", defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
diff --git a/engines/wintermute/base/base_surface_storage.h b/engines/wintermute/base/base_surface_storage.h
index edc708bfd03..63f04d49b8a 100644
--- a/engines/wintermute/base/base_surface_storage.h
+++ b/engines/wintermute/base/base_surface_storage.h
@@ -43,7 +43,7 @@ public:
 	//DECLARE_PERSISTENT(BaseSurfaceStorage, BaseClass);
 
 	bool restoreAll();
-	BaseSurface *addSurface(const Common::String &filename, bool defaultCK = true, byte ckRed = 0, byte ckGreen = 0, byte ckBlue = 0, int lifeTime = -1, bool keepLoaded = false);
+	BaseSurface *addSurface(const char *filename, bool defaultCK = true, byte ckRed = 0, byte ckGreen = 0, byte ckBlue = 0, int lifeTime = -1, bool keepLoaded = false);
 	bool removeSurface(BaseSurface *surface);
 	BaseSurfaceStorage(BaseGame *inGame);
 	~BaseSurfaceStorage() override;
diff --git a/engines/wintermute/base/font/base_font.cpp b/engines/wintermute/base/font/base_font.cpp
index fceb0f4a671..2f6925f5395 100644
--- a/engines/wintermute/base/font/base_font.cpp
+++ b/engines/wintermute/base/font/base_font.cpp
@@ -82,7 +82,7 @@ bool BaseFont::persist(BasePersistenceManager *persistMgr) {
 
 
 //////////////////////////////////////////////////////////////////////////
-BaseFont *BaseFont::createFromFile(BaseGame *gameRef, const Common::String &filename) {
+BaseFont *BaseFont::createFromFile(BaseGame *gameRef, const char *filename) {
 	if (isTrueType(gameRef,  filename)) {
 		BaseFontTT *font = new BaseFontTT(gameRef);
 		if (font) {
@@ -110,7 +110,7 @@ TOKEN_DEF(FONT)
 TOKEN_DEF(TTFONT)
 TOKEN_DEF_END
 //////////////////////////////////////////////////////////////////////////
-bool BaseFont::isTrueType(BaseGame *gameRef, const Common::String &filename) {
+bool BaseFont::isTrueType(BaseGame *gameRef, const char *filename) {
 	TOKEN_TABLE_START(commands)
 	TOKEN_TABLE(FONT)
 	TOKEN_TABLE(TTFONT)
diff --git a/engines/wintermute/base/font/base_font.h b/engines/wintermute/base/font/base_font.h
index e9c859b0e38..92cb4938e36 100644
--- a/engines/wintermute/base/font/base_font.h
+++ b/engines/wintermute/base/font/base_font.h
@@ -47,12 +47,12 @@ public:
 	BaseFont(BaseGame *inGame);
 	~BaseFont() override;
 
-	static BaseFont *createFromFile(BaseGame *game, const Common::String &filename);
+	static BaseFont *createFromFile(BaseGame *game, const char *filename);
 
 private:
 	//bool loadBuffer(byte * Buffer);
 	//bool loadFile(const char* Filename);
-	static bool isTrueType(BaseGame *game, const Common::String &filename);
+	static bool isTrueType(BaseGame *game, const char *filename);
 };
 
 } // End of namespace Wintermute
diff --git a/engines/wintermute/base/font/base_font_bitmap.cpp b/engines/wintermute/base/font/base_font_bitmap.cpp
index 146cd2e195f..f38f1ebcf9c 100644
--- a/engines/wintermute/base/font/base_font_bitmap.cpp
+++ b/engines/wintermute/base/font/base_font_bitmap.cpp
@@ -278,19 +278,19 @@ void BaseFontBitmap::drawChar(byte c, int x, int y) {
 
 
 //////////////////////////////////////////////////////////////////////
-bool BaseFontBitmap::loadFile(const Common::String &filename) {
+bool BaseFontBitmap::loadFile(const char *filename) {
 	char *buffer = (char *)BaseFileManager::getEngineInstance()->readWholeFile(filename);
 	if (buffer == nullptr) {
-		_game->LOG(0, "BaseFontBitmap::LoadFile failed for file '%s'", filename.c_str());
+		_game->LOG(0, "BaseFontBitmap::LoadFile failed for file '%s'", filename);
 		return STATUS_FAILED;
 	}
 
 	bool ret;
 
-	setFilename(filename.c_str());
+	setFilename(filename);
 
 	if (DID_FAIL(ret = loadBuffer(buffer))) {
-		_game->LOG(0, "Error parsing FONT file '%s'", filename.c_str());
+		_game->LOG(0, "Error parsing FONT file '%s'", filename);
 	}
 
 	delete[] buffer;
diff --git a/engines/wintermute/base/font/base_font_bitmap.h b/engines/wintermute/base/font/base_font_bitmap.h
index 5e9bce6ef19..a7ab65562ef 100644
--- a/engines/wintermute/base/font/base_font_bitmap.h
+++ b/engines/wintermute/base/font/base_font_bitmap.h
@@ -37,7 +37,7 @@ class BaseFontBitmap : public BaseFont {
 public:
 	DECLARE_PERSISTENT(BaseFontBitmap, BaseFont)
 	bool loadBuffer(char *buffer);
-	bool loadFile(const Common::String &filename);
+	bool loadFile(const char *filename);
 	int getTextWidth(const byte *text, int maxLength = -1) override;
 	int getTextHeight(const byte *text, int width) override;
 	void drawText(const byte *text, int x, int y, int width, TTextAlign align = TAL_LEFT, int max_height = -1, int maxLength = -1) override;
diff --git a/engines/wintermute/base/font/base_font_truetype.cpp b/engines/wintermute/base/font/base_font_truetype.cpp
index a46bc0b8ec2..cf4acd699a9 100644
--- a/engines/wintermute/base/font/base_font_truetype.cpp
+++ b/engines/wintermute/base/font/base_font_truetype.cpp
@@ -290,19 +290,19 @@ int BaseFontTT::getLetterHeight() {
 
 
 //////////////////////////////////////////////////////////////////////
-bool BaseFontTT::loadFile(const Common::String &filename) {
+bool BaseFontTT::loadFile(const char *filename) {
 	char *buffer = (char *)BaseFileManager::getEngineInstance()->readWholeFile(filename);
 	if (buffer == nullptr) {
-		_game->LOG(0, "BaseFontTT::LoadFile failed for file '%s'", filename.c_str());
+		_game->LOG(0, "BaseFontTT::LoadFile failed for file '%s'", filename);
 		return STATUS_FAILED;
 	}
 
 	bool ret;
 
-	setFilename(filename.c_str());
+	setFilename(filename);
 
 	if (DID_FAIL(ret = loadBuffer(buffer))) {
-		_game->LOG(0, "Error parsing TTFONT file '%s'", filename.c_str());
+		_game->LOG(0, "Error parsing TTFONT file '%s'", filename);
 	}
 
 	delete[] buffer;
diff --git a/engines/wintermute/base/font/base_font_truetype.h b/engines/wintermute/base/font/base_font_truetype.h
index 215ab46b596..4d05a0e65e7 100644
--- a/engines/wintermute/base/font/base_font_truetype.h
+++ b/engines/wintermute/base/font/base_font_truetype.h
@@ -105,7 +105,7 @@ public:
 	int getLetterHeight() override;
 
 	bool loadBuffer(char *buffer);
-	bool loadFile(const Common::String &filename);
+	bool loadFile(const char *filename);
 
 	void afterLoad() override;
 	void initLoop() override;
diff --git a/engines/wintermute/base/scriptables/script_ext_array.cpp b/engines/wintermute/base/scriptables/script_ext_array.cpp
index 1075a23843e..bbf1b089849 100644
--- a/engines/wintermute/base/scriptables/script_ext_array.cpp
+++ b/engines/wintermute/base/scriptables/script_ext_array.cpp
@@ -74,7 +74,7 @@ SXArray::~SXArray() {
 
 //////////////////////////////////////////////////////////////////////////
 const char *SXArray::scToString() {
-	char dummy[32768];
+	static char dummy[32768];
 	dummy[0] = '\0';
 	char propName[20];
 	for (int i = 0; i < _length; i++) {
@@ -90,8 +90,7 @@ const char *SXArray::scToString() {
 			Common::strcat_s(dummy, ",");
 		}
 	}
-	_strRep = dummy;
-	return _strRep.c_str();
+	return dummy;
 }
 
 
diff --git a/engines/wintermute/base/scriptables/script_ext_array.h b/engines/wintermute/base/scriptables/script_ext_array.h
index 8c7f917cd03..83fa12c3519 100644
--- a/engines/wintermute/base/scriptables/script_ext_array.h
+++ b/engines/wintermute/base/scriptables/script_ext_array.h
@@ -46,8 +46,6 @@ public:
 	const char *scToString() override;
 	int32 _length;
 	ScValue *_values;
-
-	Common::String _strRep;
 };
 
 } // End of namespace Wintermute
diff --git a/engines/wintermute/base/scriptables/script_ext_date.h b/engines/wintermute/base/scriptables/script_ext_date.h
index bfed55aaf25..7731ca007f2 100644
--- a/engines/wintermute/base/scriptables/script_ext_date.h
+++ b/engines/wintermute/base/scriptables/script_ext_date.h
@@ -43,8 +43,9 @@ public:
 	bool scSetProperty(const char *name, ScValue *value) override;
 	bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
 	const char *scToString() override;
-	Common::String _strRep;
 	TimeDate _tm;
+
+	Common::String _strRep;
 };
 
 } // End of namespace Wintermute
diff --git a/engines/wintermute/base/sound/base_sound.cpp b/engines/wintermute/base/sound/base_sound.cpp
index 9d39f26ca99..356a26cd51c 100644
--- a/engines/wintermute/base/sound/base_sound.cpp
+++ b/engines/wintermute/base/sound/base_sound.cpp
@@ -29,6 +29,7 @@
 #include "engines/wintermute/base/base_game.h"
 #include "engines/wintermute/base/sound/base_sound_manager.h"
 #include "engines/wintermute/base/sound/base_sound_buffer.h"
+#include "engines/wintermute/dcgf.h"
 
 namespace Wintermute {
 
@@ -37,7 +38,7 @@ IMPLEMENT_PERSISTENT(BaseSound, false)
 //////////////////////////////////////////////////////////////////////////
 BaseSound::BaseSound(BaseGame *inGame) : BaseClass(inGame) {
 	_sound = nullptr;
-	_soundFilename = "";
+	_soundFilename = nullptr;
 
 	_soundType = Audio::Mixer::kSFXSoundType;
 	_soundStreamed = false;
@@ -59,19 +60,23 @@ BaseSound::~BaseSound() {
 		_game->_soundMgr->removeSound(_sound);
 	}
 	_sound = nullptr;
+
+	SAFE_DELETE_ARRAY(_soundFilename);
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool BaseSound::setSound(const Common::String &filename, Audio::Mixer::SoundType type, bool streamed) {
+bool BaseSound::setSound(const char *filename, Audio::Mixer::SoundType type, bool streamed) {
 	if (_sound) {
 		_game->_soundMgr->removeSound(_sound);
 		_sound = nullptr;
 	}
-	_soundFilename = Common::String(); // Set empty
+	SAFE_DELETE_ARRAY(_soundFilename);
 
 	_sound = _game->_soundMgr->addSound(filename, type, streamed);
 	if (_sound) {
-		_soundFilename = filename;
+		size_t nameSize = strlen(filename) + 1;
+		_soundFilename = new char[nameSize];
+		Common::strcpy_s(_soundFilename, nameSize, filename);
 
 		_soundType = type;
 		_soundStreamed = streamed;
@@ -175,7 +180,7 @@ bool BaseSound::persist(BasePersistenceManager *persistMgr) {
 
 	persistMgr->transferPtr(TMEMBER_PTR(_game));
 
-	persistMgr->transferString(TMEMBER(_soundFilename));
+	persistMgr->transferCharPtr(TMEMBER(_soundFilename));
 	persistMgr->transferBool(TMEMBER(_soundLooping));
 	persistMgr->transferBool(TMEMBER(_soundPaused));
 	persistMgr->transferBool(TMEMBER(_soundFreezePaused));
diff --git a/engines/wintermute/base/sound/base_sound.h b/engines/wintermute/base/sound/base_sound.h
index 4745085c339..cc60e190ea7 100644
--- a/engines/wintermute/base/sound/base_sound.h
+++ b/engines/wintermute/base/sound/base_sound.h
@@ -64,9 +64,9 @@ public:
 	uint32 getLength();
 	bool _soundStreamed;
 	Audio::Mixer::SoundType _soundType;
-	Common::String _soundFilename;
+	char *_soundFilename;
 	bool setSoundSimple();
-	bool setSound(const Common::String &filename, Audio::Mixer::SoundType type = Audio::Mixer::kSFXSoundType, bool streamed = false);
+	bool setSound(const char *filename, Audio::Mixer::SoundType type = Audio::Mixer::kSFXSoundType, bool streamed = false);
 	BaseSound(BaseGame *inGame);
 	~BaseSound() override;
 




More information about the Scummvm-git-logs mailing list