[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