[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