[Scummvm-git-logs] scummvm master -> dabc82efdb5f6c6048ee00898b81b47f8198e853
djsrv
dservilla at gmail.com
Wed Aug 5 01:26:52 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
dabc82efdb DIRECTOR: LINGO: Don't add scripts w/o cast member
Commit: dabc82efdb5f6c6048ee00898b81b47f8198e853
https://github.com/scummvm/scummvm/commit/dabc82efdb5f6c6048ee00898b81b47f8198e853
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-04T21:25:58-04:00
Commit Message:
DIRECTOR: LINGO: Don't add scripts w/o cast member
Changed paths:
engines/director/cast.cpp
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo-object.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index d1b8a329b2..d27bd051c5 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -983,7 +983,7 @@ void Cast::loadLingoContext(Common::SeekableSubReadStreamEndian &stream) {
// actually define scripts
for (ScriptContextHash::iterator it = _lingoArchive->lctxContexts.begin(); it != _lingoArchive->lctxContexts.end(); ++it) {
ScriptContext *script = it->_value;
- if (!script->isFactory()) {
+ if (script->_id >= 0 && !script->isFactory()) {
if (_lingoArchive->getScriptContext(script->_scriptType, script->_id)) {
error("Cast::loadLingoContext: Script already defined for type %s, id %d", scriptType2str(script->_scriptType), script->_id);
}
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 21d07acb41..13e3010606 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -921,7 +921,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
ScriptType scriptType = kCastScript;
Common::String castName;
CastMember *member = g_director->getCurrentMovie()->getCastMemberByScriptId(scriptId);
- uint16 castId;
+ int castId;
if (member) {
if (member->_type == kCastLingoScript)
scriptType = ((ScriptCastMember *)member)->_scriptType;
@@ -931,8 +931,9 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
if (info)
castName = info->name;
} else {
+ warning("Script %d has no associated cast member", scriptId);
+ scriptType = kNoneScript;
castId = -1;
- warning("Script %d has invalid cast member %d", scriptId, castId);
}
_assemblyArchive = archive;
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 6cf28fb5d9..d3b89ac141 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -150,7 +150,7 @@ void LM::m_dispose(int nargs) {
/* ScriptContext */
-ScriptContext::ScriptContext(Common::String name, LingoArchive *archive, ScriptType type, uint16 id)
+ScriptContext::ScriptContext(Common::String name, LingoArchive *archive, ScriptType type, int id)
: Object<ScriptContext>(name), _archive(archive), _scriptType(type), _id(id) {
_objType = kScriptObj;
}
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index 3bf725fc03..d13ffe02a9 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -181,7 +181,7 @@ class ScriptContext : public Object<ScriptContext> {
public:
LingoArchive *_archive;
ScriptType _scriptType;
- uint16 _id;
+ int _id;
Common::Array<Common::String> _functionNames; // used by cb_localcall
SymbolHash _functionHandlers;
Common::HashMap<uint32, Symbol> _eventHandlers;
@@ -190,7 +190,7 @@ public:
Common::HashMap<uint32, Datum> _objArray;
public:
- ScriptContext(Common::String name, LingoArchive *archive = nullptr, ScriptType type = kNoneScript, uint16 id = 0);
+ ScriptContext(Common::String name, LingoArchive *archive = nullptr, ScriptType type = kNoneScript, int id = 0);
ScriptContext(const ScriptContext &sc);
virtual ~ScriptContext();
More information about the Scummvm-git-logs
mailing list