[Scummvm-git-logs] scummvm master -> e84abb553158ac99dde9cc20632c82a575a3abbe

aquadran noreply at scummvm.org
Fri Sep 5 15:51:52 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:
e84abb5531 WINTERMUTE: Synced with original code


Commit: e84abb553158ac99dde9cc20632c82a575a3abbe
    https://github.com/scummvm/scummvm/commit/e84abb553158ac99dde9cc20632c82a575a3abbe
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-09-05T17:51:46+02:00

Commit Message:
WINTERMUTE: Synced with original code

Changed paths:
    engines/wintermute/ad/ad_scene_geometry.cpp
    engines/wintermute/base/gfx/3deffect.cpp
    engines/wintermute/base/gfx/3deffect.h
    engines/wintermute/base/gfx/3deffect_params.cpp
    engines/wintermute/base/gfx/3deffect_params.h
    engines/wintermute/base/gfx/3dloader_3ds.cpp
    engines/wintermute/base/gfx/3dloader_3ds.h
    engines/wintermute/base/scriptables/script.cpp
    engines/wintermute/base/scriptables/script.h
    engines/wintermute/base/scriptables/script_engine.cpp
    engines/wintermute/base/scriptables/script_engine.h


diff --git a/engines/wintermute/ad/ad_scene_geometry.cpp b/engines/wintermute/ad/ad_scene_geometry.cpp
index f05ebd5e72f..2d4ee717960 100644
--- a/engines/wintermute/ad/ad_scene_geometry.cpp
+++ b/engines/wintermute/ad/ad_scene_geometry.cpp
@@ -199,7 +199,7 @@ bool AdSceneGeometry::loadFile(const char *filename) {
 
 	// load meshes
 	for (i = 0; i < loader->getNumMeshes(); i++) {
-		AdGeomExtNode *extNode = geomExt->matchName(loader->getMeshName(i).c_str());
+		AdGeomExtNode *extNode = geomExt->matchName(loader->getMeshName(i));
 		if (!extNode) {
 			continue;
 		}
@@ -207,7 +207,7 @@ bool AdSceneGeometry::loadFile(const char *filename) {
 		switch (extNode->_type) {
 		case GEOM_WALKPLANE: {
 				AdWalkplane *plane = new AdWalkplane(_game);
-				plane->setName(loader->getMeshName(i).c_str());
+				plane->setName(loader->getMeshName(i));
 				plane->_mesh = _game->_renderer3D->createMesh3DS();
 				if (!loader->loadMesh(i, plane->_mesh)) {
 					delete plane->_mesh;
@@ -226,7 +226,7 @@ bool AdSceneGeometry::loadFile(const char *filename) {
 
 		case GEOM_BLOCKED: {
 				AdBlock *block = new AdBlock(_game);
-				block->setName(loader->getMeshName(i).c_str());
+				block->setName(loader->getMeshName(i));
 				block->_mesh = _game->_renderer3D->createMesh3DS();
 				if (!loader->loadMesh(i, block->_mesh)) {
 					delete block->_mesh;
@@ -262,7 +262,7 @@ bool AdSceneGeometry::loadFile(const char *filename) {
 
 		case GEOM_GENERIC: {
 				AdGeneric *generic = new AdGeneric(_game);
-				generic->setName(loader->getMeshName(i).c_str());
+				generic->setName(loader->getMeshName(i));
 				generic->_mesh = _game->_renderer3D->createMesh3DS();
 				if (!loader->loadMesh(i, generic->_mesh)) {
 					delete generic->_mesh;
diff --git a/engines/wintermute/base/gfx/3deffect.cpp b/engines/wintermute/base/gfx/3deffect.cpp
index 6d1e303230e..f65965126d3 100644
--- a/engines/wintermute/base/gfx/3deffect.cpp
+++ b/engines/wintermute/base/gfx/3deffect.cpp
@@ -31,16 +31,19 @@
 #include "engines/wintermute/base/base_file_manager.h"
 #include "engines/wintermute/base/gfx/3deffect.h"
 #include "engines/wintermute/utils/utils.h"
+#include "engines/wintermute/dcgf.h"
 
 namespace Wintermute {
 
 //////////////////////////////////////////////////////////////////////////
 Effect3D::Effect3D(BaseGame *inGame) : BaseClass(inGame) {
+	_filename = nullptr;
 	_effectHash = 0xFFFFFFFF;
 }
 
 //////////////////////////////////////////////////////////////////////////
 Effect3D::~Effect3D() {
+	SAFE_DELETE_ARRAY(_filename);
 	_effectHash = 0xFFFFFFFF;
 }
 
@@ -55,14 +58,14 @@ bool Effect3D::restoreDeviceObjects() {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool Effect3D::createFromFile(const Common::String &filename) {
+bool Effect3D::createFromFile(const char *filename) {
 	uint32 size;
 	byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename, &size);
 	if (!buffer) {
 		return false;
 	}
 
-	_filename = filename;
+	BaseUtils::setString(&_filename, filename);
 
 	Common::CRC32 crc;
 	_effectHash = crc.crcFast(buffer, size);
diff --git a/engines/wintermute/base/gfx/3deffect.h b/engines/wintermute/base/gfx/3deffect.h
index abb68c44b08..1904b6340e7 100644
--- a/engines/wintermute/base/gfx/3deffect.h
+++ b/engines/wintermute/base/gfx/3deffect.h
@@ -38,14 +38,14 @@ public:
 	Effect3D(BaseGame *inGame);
 	~Effect3D();
 
-	bool createFromFile(const Common::String &filename);
+	bool createFromFile(const char *filename);
 	uint32 getEffectHash() { return _effectHash; }
 	bool invalidateDeviceObjects();
 	bool restoreDeviceObjects();
-	const char *getFileName() { return _filename.c_str(); }
+	const char *getFileName() { return _filename; }
 
 private:
-	Common::String _filename;
+	char *_filename;
 	uint32 _effectHash;
 };
 
diff --git a/engines/wintermute/base/gfx/3deffect_params.cpp b/engines/wintermute/base/gfx/3deffect_params.cpp
index fe633886568..df637e3c834 100644
--- a/engines/wintermute/base/gfx/3deffect_params.cpp
+++ b/engines/wintermute/base/gfx/3deffect_params.cpp
@@ -30,6 +30,7 @@
 #include "engines/wintermute/base/base_file_manager.h"
 #include "engines/wintermute/base/scriptables/script_value.h"
 #include "engines/wintermute/base/gfx/3deffect_params.h"
+#include "engines/wintermute/utils/utils.h"
 #include "engines/wintermute/dcgf.h"
 
 namespace Wintermute {
@@ -42,17 +43,19 @@ Effect3DParams::Effect3DParam::Effect3DParam() {
 //////////////////////////////////////////////////////////////////////////
 Effect3DParams::Effect3DParam::Effect3DParam(const char *paramName) {
 	setDefaultValues();
-	_paramName = paramName;
+	BaseUtils::setString(&_paramName, paramName);
 }
 
 //////////////////////////////////////////////////////////////////////////
 Effect3DParams::Effect3DParam::~Effect3DParam() {
+	SAFE_DELETE_ARRAY(_paramName);
+	SAFE_DELETE_ARRAY(_valString);
 }
 
 //////////////////////////////////////////////////////////////////////////
 void Effect3DParams::Effect3DParam::setValue(char *val) {
 	_type = EP_STRING;
-	_valString = val;
+	BaseUtils::setString(&_valString, val);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -81,8 +84,8 @@ void Effect3DParams::Effect3DParam::setValue(DXVector4 val) {
 
 //////////////////////////////////////////////////////////////////////////
 void Effect3DParams::Effect3DParam::setDefaultValues() {
-	_paramName = "";
-	_valString = "";
+	_paramName = nullptr;
+	_valString = nullptr;
 	_valInt = 0;
 	_valFloat = 0;
 	_valBool = 0;
@@ -95,9 +98,9 @@ void Effect3DParams::Effect3DParam::setDefaultValues() {
 
 //////////////////////////////////////////////////////////////////////////
 bool Effect3DParams::Effect3DParam::persist(BasePersistenceManager *persistMgr) {
-	persistMgr->transferString(TMEMBER(_paramName));
+	persistMgr->transferCharPtr(TMEMBER(_paramName));
 	persistMgr->transferSint32(TMEMBER_INT(_type));
-	persistMgr->transferString(TMEMBER(_valString));
+	persistMgr->transferCharPtr(TMEMBER(_valString));
 	persistMgr->transferSint32(TMEMBER(_valInt));
 	persistMgr->transferFloat(TMEMBER(_valFloat));
 	persistMgr->transferVector4d(TMEMBER(_valVector));
diff --git a/engines/wintermute/base/gfx/3deffect_params.h b/engines/wintermute/base/gfx/3deffect_params.h
index 46b4673e09e..33a2fc852de 100644
--- a/engines/wintermute/base/gfx/3deffect_params.h
+++ b/engines/wintermute/base/gfx/3deffect_params.h
@@ -59,17 +59,17 @@ public:
 		void setValue(bool val);
 		void setValue(DXVector4 val);
 
-		const char *getParamName() const { return _paramName.c_str(); }
+		const char *getParamName() const { return _paramName; }
 
 		bool persist(BasePersistenceManager *persistMgr);
 
 	private:
 		void setDefaultValues();
 		ParamType _type;
-		Common::String _paramName;
+		char * _paramName;
 		bool _initialized;
 
-		Common::String _valString;
+		char *_valString;
 		int32 _valInt;
 		float _valFloat;
 		DXVector4 _valVector;
diff --git a/engines/wintermute/base/gfx/3dloader_3ds.cpp b/engines/wintermute/base/gfx/3dloader_3ds.cpp
index 03a34218b03..71cc3790b8e 100644
--- a/engines/wintermute/base/gfx/3dloader_3ds.cpp
+++ b/engines/wintermute/base/gfx/3dloader_3ds.cpp
@@ -55,6 +55,7 @@ namespace Wintermute {
 
 //////////////////////////////////////////////////////////////////////////
 Loader3DS::Loader3DS(BaseGame *inGame) : BaseNamedObject(inGame) {
+	_filename = nullptr;
 }
 
 
@@ -63,6 +64,8 @@ Loader3DS::~Loader3DS() {
 	for (int32 i = 0; i < _objects.getSize(); i++)
 		delete _objects[i];
 	_objects.removeAll();
+
+	SAFE_DELETE_ARRAY(_filename);
 }
 
 
@@ -71,6 +74,7 @@ Loader3DS::~Loader3DS() {
 //////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////
 Loader3DS::FileObject3DS::FileObject3DS() {
+	_name = nullptr;
 	_type = OBJ_3DS_NONE;
 
 	_numVertices = 0;
@@ -98,16 +102,21 @@ Loader3DS::FileObject3DS::FileObject3DS() {
 
 //////////////////////////////////////////////////////////////////////
 Loader3DS::FileObject3DS::~FileObject3DS() {
-	if (_vertices != NULL)
+	if (_name != nullptr)
+		delete[] _name;
+	if (_vertices != nullptr)
 		delete[] _vertices;
-	if (_faces != NULL)
+	if (_faces != nullptr)
 		delete[] _faces;
 }
 
 
 //////////////////////////////////////////////////////////////////////////
-bool Loader3DS::parseFile(const Common::String &filename) {
-	_filename = filename;
+bool Loader3DS::parseFile(const char *filename) {
+	SAFE_DELETE_ARRAY(_filename);
+	size_t filenameSize = strlen(filename) + 1;
+	_filename = new char[filenameSize];
+	Common::strcpy_s(_filename, filenameSize, filename);
 
 	uint32 fileSize;
 	byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename, &fileSize);
@@ -115,7 +124,7 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 		return false;
 
 	uint16 keyframerSection = 0;
-	Common::String keyframerObject;
+	char *keyframerObject = nullptr;
 	FileObject3DS *obj = nullptr;
 	uint16 i;
 
@@ -138,9 +147,10 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 			// object ////////////////////////////////////////////////////////////
 			case NAMED_OBJECT: {
 				obj = new FileObject3DS;
-				for (int8 current = fileStream.readByte(); current != 0; current = fileStream.readByte()) {
-					obj->_name.insertChar(current, obj->_name.size());
-				}
+				auto name = fileStream.readString();
+				size_t nameSize = name.size() + 1;
+				obj->_name = new char[nameSize];
+				Common::strcpy_s(obj->_name, nameSize, name.c_str());
 				_objects.add(obj);
 			}
 			break;
@@ -278,22 +288,24 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 				keyframerSection = chunkId;
 			break;
 
-			case NODE_HDR:
+			case NODE_HDR: {
 				// object name
-				keyframerObject.clear();
-				for (int8 current = fileStream.readByte(); current != 0; current = fileStream.readByte()) {
-					keyframerObject.insertChar(current, keyframerObject.size());
-				}
+				SAFE_DELETE_ARRAY(keyframerObject);
+				auto keyname = fileStream.readString();
+				size_t keynameSize = keyname.size() + 1;
+				keyframerObject = new char[keynameSize];
+				Common::strcpy_s(keyframerObject, keynameSize, keyname.c_str());
 				// flags1
 				fileStream.readUint16LE();
 				// flags2
 				fileStream.readUint16LE();
 				// hierarchy
 				fileStream.readUint16LE();
+			}
 			break;
 
 			case ROLL_TRACK_TAG:
-				if (keyframerSection == KEYFRAMER_CAMERA_INFO && !keyframerObject.empty()) {
+				if (keyframerSection == KEYFRAMER_CAMERA_INFO && keyframerObject != nullptr) {
 					// flags
 					fileStream.readUint16LE();
 					// unknown
@@ -317,7 +329,7 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 						// inject this roll value to the camera
 						if (key == 0) {
 							for (int32 index = 0; index < _objects.getSize(); index++) {
-								if (_objects[index]->_type == OBJ_3DS_CAMERA && _objects[index]->_name.compareToIgnoreCase(keyframerObject) == 0) {
+								if (_objects[index]->_type == OBJ_3DS_CAMERA && scumm_stricmp(_objects[index]->_name, keyframerObject) == 0) {
 									_objects[index]->_cameraBank = cameraRoll;
 									break;
 								}
@@ -356,7 +368,7 @@ int32 Loader3DS::getNumMeshes() {
 
 
 //////////////////////////////////////////////////////////////////////////
-Common::String Loader3DS::getMeshName(int index) {
+char *Loader3DS::getMeshName(int index) {
 	int32 pos = -1;
 
 	for (int32 i = 0; i < _objects.getSize(); i++) {
@@ -365,7 +377,7 @@ Common::String Loader3DS::getMeshName(int index) {
 		if (pos == index)
 			return _objects[i]->_name;
 	}
-	return Common::String();
+	return nullptr;
 }
 
 
@@ -401,7 +413,7 @@ bool Loader3DS::loadMesh(int index, Mesh3DS *mesh) {
 				mesh->_faces[j]._vertices[2] = obj->_faces[j]._c;
 			}
 
-			mesh->setName(obj->_name.c_str());
+			mesh->setName(obj->_name);
 
 			return true;
 		}
@@ -424,7 +436,7 @@ int32 Loader3DS::getNumLights() {
 
 
 //////////////////////////////////////////////////////////////////////////
-Common::String Loader3DS::getLightName(int index) {
+char *Loader3DS::getLightName(int index) {
 	int pos = -1;
 
 	for (int32 i = 0; i < _objects.getSize(); i++) {
@@ -433,7 +445,7 @@ Common::String Loader3DS::getLightName(int index) {
 		if (pos == index)
 			return _objects[i]->_name;
 	}
-	return NULL;
+	return nullptr;
 }
 
 
@@ -447,7 +459,7 @@ bool Loader3DS::loadLight(int index, Light3D *light) {
 		if (_objects[i]->_type == OBJ_3DS_LIGHT) {
 			pos++;
 			if (pos == index) {
-				light->setName(_objects[i]->_name.c_str());
+				light->setName(_objects[i]->_name);
 				light->_pos = _objects[i]->_lightPos;
 				light->_target = _objects[i]->_lightTarget;
 				light->_isSpotlight = _objects[i]->_lightSpotlight;
@@ -476,7 +488,7 @@ int32 Loader3DS::getNumCameras() {
 
 
 //////////////////////////////////////////////////////////////////////////
-Common::String Loader3DS::getCameraName(int index) {
+char *Loader3DS::getCameraName(int index) {
 	int32 pos = -1;
 	for (int32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->_type == OBJ_3DS_CAMERA)
@@ -484,7 +496,7 @@ Common::String Loader3DS::getCameraName(int index) {
 		if (pos == index)
 			return _objects[i]->_name;
 	}
-	return Common::String();
+	return nullptr;
 }
 
 
@@ -499,7 +511,7 @@ bool Loader3DS::loadCamera(int index, Camera3D *camera) {
 			pos++;
 		if (pos == index) {
 			camera->setupPos(_objects[i]->_cameraPos, _objects[i]->_cameraTarget, _objects[i]->_cameraBank);
-			camera->setName(_objects[i]->_name.c_str());
+			camera->setName(_objects[i]->_name);
 			camera->_fov = camera->_origFov = degToRad(_objects[i]->_cameraFOV);
 
 			return true;
diff --git a/engines/wintermute/base/gfx/3dloader_3ds.h b/engines/wintermute/base/gfx/3dloader_3ds.h
index 3cb2d745f8e..759b14e75c3 100644
--- a/engines/wintermute/base/gfx/3dloader_3ds.h
+++ b/engines/wintermute/base/gfx/3dloader_3ds.h
@@ -35,7 +35,10 @@ namespace Wintermute {
 class Loader3DS : public BaseNamedObject {
 public:
 	enum E3DSFileObjectType{
-		OBJ_3DS_NONE, OBJ_3DS_MESH, OBJ_3DS_CAMERA, OBJ_3DS_LIGHT
+		OBJ_3DS_NONE,
+		OBJ_3DS_MESH,
+		OBJ_3DS_CAMERA,
+		OBJ_3DS_LIGHT
 	};
 
 	struct SFace{
@@ -63,24 +66,24 @@ public:
 		SFace *_faces;
 		DXVector3 *_vertices;
 		uint16 _numVertices;
-		Common::String _name;
+		char *_name;
 		E3DSFileObjectType _type;
 		virtual ~FileObject3DS();
 		FileObject3DS();
 	};
 
 public:
-	Common::String getCameraName(int index);
-	Common::String getLightName(int index);
-	Common::String getMeshName(int index);
+	char * getCameraName(int index);
+	char * getLightName(int index);
+	char * getMeshName(int index);
 	bool loadCamera(int index, Camera3D *camera);
 	int32 getNumCameras();
 	bool loadLight(int index, Light3D *light);
 	int32 getNumLights();
 	bool loadMesh(int index, Mesh3DS *mesh);
 	int32 getNumMeshes();
-	bool parseFile(const Common::String &filename);
-	Common::String _filename;
+	bool parseFile(const char *filename);
+	char *_filename;
 	Loader3DS(BaseGame *inGame);
 	virtual ~Loader3DS();
 	BaseArray<FileObject3DS *> _objects;
diff --git a/engines/wintermute/base/scriptables/script.cpp b/engines/wintermute/base/scriptables/script.cpp
index 2b22184d7f1..7d32c7aa5c9 100644
--- a/engines/wintermute/base/scriptables/script.cpp
+++ b/engines/wintermute/base/scriptables/script.cpp
@@ -266,7 +266,7 @@ bool ScScript::create(const char *filename, byte *buffer, uint32 size, BaseScrip
 	_filename = new char[filenameSize];
 	Common::strcpy_s(_filename, filenameSize, filename);
 
-	_buffer = new byte [size];
+	_buffer = new byte[size];
 	if (!_buffer) {
 		return STATUS_FAILED;
 	}
@@ -290,13 +290,14 @@ bool ScScript::create(const char *filename, byte *buffer, uint32 size, BaseScrip
 
 
 //////////////////////////////////////////////////////////////////////////
-bool ScScript::createThread(ScScript *original, uint32 initIP, const Common::String &eventName) {
+bool ScScript::createThread(ScScript *original, uint32 initIP, const char *eventName) {
 	cleanup();
 
 	_thread = true;
 	_methodThread = false;
-	_threadEvent = new char[eventName.size() + 1];
-	Common::strcpy_s(_threadEvent, eventName.size() + 1, eventName.c_str());
+	size_t eventNameSize = strlen(eventName) + 1;
+	_threadEvent = new char[eventNameSize];
+	Common::strcpy_s(_threadEvent, eventNameSize, eventName);
 
 	// copy filename
 	size_t filenameSize = strlen(original->_filename) + 1;
@@ -333,7 +334,7 @@ bool ScScript::createThread(ScScript *original, uint32 initIP, const Common::Str
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool ScScript::createMethodThread(ScScript *original, const Common::String &methodName) {
+bool ScScript::createMethodThread(ScScript *original, const char *methodName) {
 	uint32 ip = original->getMethodPos(methodName);
 	if (ip == 0) {
 		return STATUS_FAILED;
@@ -343,8 +344,9 @@ bool ScScript::createMethodThread(ScScript *original, const Common::String &meth
 
 	_thread = true;
 	_methodThread = true;
-	_threadEvent = new char[methodName.size() + 1];
-	Common::strcpy_s(_threadEvent, methodName.size() + 1, methodName.c_str());
+	size_t eventNameSize = strlen(methodName) + 1;
+	_threadEvent = new char[eventNameSize];
+	Common::strcpy_s(_threadEvent, eventNameSize, methodName);
 
 	// copy filename
 	size_t filenameSize = strlen(original->_filename) + 1;
@@ -881,7 +883,7 @@ bool ScScript::executeInstruction() {
 			_operand->setNULL();
 		} else if (op1->getType() == VAL_STRING || op2->getType() == VAL_STRING) {
 			size_t tempStrSize = strlen(op1->getString()) + strlen(op2->getString()) + 1;
-			char *tempStr = new char [tempStrSize];
+			char *tempStr = new char[tempStrSize];
 			Common::strcpy_s(tempStr, tempStrSize, op1->getString());
 			Common::strcat_s(tempStr, tempStrSize, op2->getString());
 			_operand->setString(tempStr);
@@ -1149,9 +1151,9 @@ bool ScScript::executeInstruction() {
 
 
 //////////////////////////////////////////////////////////////////////////
-uint32 ScScript::getFuncPos(const Common::String &name) {
+uint32 ScScript::getFuncPos(const char *name) {
 	for (uint32 i = 0; i < _numFunctions; i++) {
-		if (name == _functions[i].name) {
+		if (strcmp(name, _functions[i].name) == 0) {
 			return _functions[i].pos;
 		}
 	}
@@ -1160,9 +1162,9 @@ uint32 ScScript::getFuncPos(const Common::String &name) {
 
 
 //////////////////////////////////////////////////////////////////////////
-uint32 ScScript::getMethodPos(const Common::String &name) const {
+uint32 ScScript::getMethodPos(const char *name) const {
 	for (uint32 i = 0; i < _numMethods; i++) {
-		if (name == _methods[i].name) {
+		if (strcmp(name, _methods[i].name) == 0) {
 			return _methods[i].pos;
 		}
 	}
@@ -1375,7 +1377,7 @@ void ScScript::afterLoad() {
 			return;
 		}
 
-		_buffer = new byte [_bufferSize];
+		_buffer = new byte[_bufferSize];
 		memcpy(_buffer, buffer, _bufferSize);
 
 		delete _scriptStream;
@@ -1387,7 +1389,7 @@ void ScScript::afterLoad() {
 
 
 //////////////////////////////////////////////////////////////////////////
-ScScript *ScScript::invokeEventHandler(const Common::String &eventName, bool unbreakable) {
+ScScript *ScScript::invokeEventHandler(const char *eventName, bool unbreakable) {
 	//if (_state!=SCRIPT_PERSISTENT) return nullptr;
 
 	uint32 pos = getEventPos(eventName);
@@ -1421,9 +1423,9 @@ ScScript *ScScript::invokeEventHandler(const Common::String &eventName, bool unb
 
 
 //////////////////////////////////////////////////////////////////////////
-uint32 ScScript::getEventPos(const Common::String &name) const {
+uint32 ScScript::getEventPos(const char *name) const {
 	for (int i = _numEvents - 1; i >= 0; i--) {
-		if (scumm_stricmp(name.c_str(), _events[i].name) == 0) {
+		if (scumm_stricmp(name, _events[i].name) == 0) {
 			return _events[i].pos;
 		}
 	}
@@ -1432,13 +1434,13 @@ uint32 ScScript::getEventPos(const Common::String &name) const {
 
 
 //////////////////////////////////////////////////////////////////////////
-bool ScScript::canHandleEvent(const Common::String &eventName) const {
+bool ScScript::canHandleEvent(const char *eventName) const {
 	return getEventPos(eventName) != 0;
 }
 
 
 //////////////////////////////////////////////////////////////////////////
-bool ScScript::canHandleMethod(const Common::String &methodName) const {
+bool ScScript::canHandleMethod(const char *methodName) const {
 	return getMethodPos(methodName) != 0;
 }
 
diff --git a/engines/wintermute/base/scriptables/script.h b/engines/wintermute/base/scriptables/script.h
index c686f6fd9ba..b4a4c9927cf 100644
--- a/engines/wintermute/base/scriptables/script.h
+++ b/engines/wintermute/base/scriptables/script.h
@@ -56,11 +56,11 @@ public:
 	bool _freezable;
 	bool resume();
 	bool pause();
-	bool canHandleEvent(const Common::String &eventName) const;
-	bool canHandleMethod(const Common::String &methodName) const;
-	bool createThread(ScScript *original, uint32 initIP, const Common::String &eventName);
-	bool createMethodThread(ScScript *original, const Common::String &methodName);
-	ScScript *invokeEventHandler(const Common::String &eventName, bool unbreakable = false);
+	bool canHandleEvent(const char *eventName) const;
+	bool canHandleMethod(const char *methodName) const;
+	bool createThread(ScScript *original, uint32 initIP, const char *eventName);
+	bool createMethodThread(ScScript *original, const char *methodName);
+	ScScript *invokeEventHandler(const char *eventName, bool unbreakable = false);
 	uint32 _timeSlice;
 	DECLARE_PERSISTENT(ScScript, BaseClass)
 	void afterLoad();
@@ -77,9 +77,9 @@ public:
 	TScriptState _state;
 	TScriptState _origState;
 	ScValue *getVar(char *name);
-	uint32 getFuncPos(const Common::String &name);
-	uint32 getEventPos(const Common::String &name) const;
-	uint32 getMethodPos(const Common::String &name) const;
+	uint32 getFuncPos(const char *name);
+	uint32 getEventPos(const char *name) const;
+	uint32 getMethodPos(const char *name) const;
 	typedef struct {
 		uint32 magic;
 		uint32 version;
diff --git a/engines/wintermute/base/scriptables/script_engine.cpp b/engines/wintermute/base/scriptables/script_engine.cpp
index 43522ef0b33..89a85984587 100644
--- a/engines/wintermute/base/scriptables/script_engine.cpp
+++ b/engines/wintermute/base/scriptables/script_engine.cpp
@@ -199,7 +199,7 @@ byte *ScEngine::getCompiledScript(const char *filename, uint32 *outSize, bool ig
 	// is script in cache?
 	if (!ignoreCache) {
 		for (int i = 0; i < MAX_CACHED_SCRIPTS; i++) {
-			if (_cachedScripts[i] && scumm_stricmp(_cachedScripts[i]->_filename.c_str(), filename) == 0) {
+			if (_cachedScripts[i] && scumm_stricmp(_cachedScripts[i]->_filename, filename) == 0) {
 				_cachedScripts[i]->_timestamp = g_system->getMillis();
 				*outSize = _cachedScripts[i]->_size;
 				return _cachedScripts[i]->_buffer;
diff --git a/engines/wintermute/base/scriptables/script_engine.h b/engines/wintermute/base/scriptables/script_engine.h
index fd5d5bfbcb2..3f12f993643 100644
--- a/engines/wintermute/base/scriptables/script_engine.h
+++ b/engines/wintermute/base/scriptables/script_engine.h
@@ -50,19 +50,23 @@ public:
 				memcpy(_buffer, buffer, size);
 			}
 			_size = size;
-			_filename = filename;
+			size_t filenameSize = strlen(filename) + 1;
+			_filename = new char[filenameSize];
+			Common::strcpy_s(_filename, filenameSize, filename);
 		};
 
 		~CScCachedScript() {
 			if (_buffer) {
 				delete[] _buffer;
 			}
+			if (_filename)
+				delete[] _filename;
 		};
 
 		uint32 _timestamp;
 		byte *_buffer;
 		uint32 _size;
-		Common::String _filename;
+		char *_filename;
 	};
 
 public:




More information about the Scummvm-git-logs mailing list