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

djsrv dservilla at gmail.com
Thu Jul 16 02:25:10 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:
a892bb58d1 DIRECTOR: LINGO: Fix D4 script loading


Commit: a892bb58d12f25be24032b58efa0330258ebc8b0
    https://github.com/scummvm/scummvm/commit/a892bb58d12f25be24032b58efa0330258ebc8b0
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-15T22:19:33-04:00

Commit Message:
DIRECTOR: LINGO: Fix D4 script loading

Script IDs are in cast info now.

Changed paths:
    engines/director/cast.cpp
    engines/director/castmember.cpp
    engines/director/castmember.h


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 701e31efbf..b3dca8c1a8 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -915,19 +915,25 @@ void Cast::loadLingoContext(Common::SeekableSubReadStreamEndian &stream) {
 		}
 
 		// repair script type + cast ID
-		for (Common::HashMap<int, CastMember *>::iterator it = _loadedCast->begin(); it != _loadedCast->end(); ++it) {
-			if (it->_value->_type == kCastLingoScript) {
-				ScriptCastMember *member = static_cast<ScriptCastMember *>(it->_value);
-				if (!_lingoArchive->lctxContexts.contains(member->_id)) {
-					warning("Cast::loadLingoContext: %s %d has invalid script ID %d", scriptType2str(member->_scriptType), it->_key, member->_id);
-					continue;
-				}
+		for (Common::HashMap<uint16, CastMemberInfo *>::iterator it = _castsInfo.begin(); it != _castsInfo.end(); ++it) {
+			if (it->_value->scriptId == 0)
+				continue;
+			
+			ScriptType type = kCastScript;
+			CastMember *member = _loadedCast->getVal(it->_key);
+			if (member->_type == kCastLingoScript) {
+				type = static_cast<ScriptCastMember *>(member)->_scriptType;
+			}
 
-				ScriptContext *script = _lingoArchive->lctxContexts[member->_id];
-				debugC(1, kDebugCompile, "Cast::loadLingoContext: Repairing script %d: %s %d -> %s %d", member->_id, scriptType2str(script->_scriptType), script->_id, scriptType2str(member->_scriptType), it->_key);
-				script->_scriptType = member->_scriptType;
-				script->_id = it->_key;
+			if (!_lingoArchive->lctxContexts.contains(it->_value->scriptId)) {
+				warning("Cast::loadLingoContext: %s %d has invalid script ID %d", scriptType2str(type), it->_key, it->_value->scriptId);
+				continue;
 			}
+
+			ScriptContext *script = _lingoArchive->lctxContexts[it->_value->scriptId];
+			debugC(1, kDebugCompile, "Cast::loadLingoContext: Repairing script %d: %s %d -> %s %d", it->_value->scriptId, scriptType2str(script->_scriptType), script->_id, scriptType2str(type), it->_key);
+			script->_scriptType = type;
+			script->_id = it->_key;
 		}
 
 		// actually define scripts
@@ -1081,6 +1087,8 @@ void Cast::loadCastInfo(Common::SeekableSubReadStreamEndian &stream, uint16 id)
 		}
 	}
 
+	ci->scriptId = castInfo.scriptId;
+
 	_castsInfo[id] = ci;
 }
 
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 376fc28bbb..a582e6d011 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -624,12 +624,7 @@ ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::ReadStream
 			error("ScriptCastMember: Unprocessed script type: %d", type);
 		}
 
-		_initialRect = Movie::readRect(stream);
-		_boundingRect = Movie::readRect(stream);
-
-		_id = stream.readUint32();
-
-		debugC(3, kDebugLoading, "CASt: Script id: %d type: %s (%d), flags: (%x), unk1: %d", _id, scriptType2str(_scriptType), type, flags, unk1);
+		debugC(3, kDebugLoading, "CASt: Script type: %s (%d), flags: (%x), unk1: %d", scriptType2str(_scriptType), type, flags, unk1);
 
 		stream.readByte(); // There should be no more data
 		assert(stream.eos());
@@ -637,12 +632,7 @@ ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::ReadStream
 		stream.readByte();
 		stream.readByte();
 
-		_initialRect = Movie::readRect(stream);
-		_boundingRect = Movie::readRect(stream);
-
-		_id = stream.readUint32();
-
-		debugC(4, kDebugLoading, "CASt: Script id: %d", _id);
+		debugC(4, kDebugLoading, "CASt: Script");
 
 		// WIP need to complete this!
 	}
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index f379721b48..3d970c24ca 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -203,7 +203,6 @@ class ScriptCastMember : public CastMember {
 public:
 	ScriptCastMember(Cast *cast, uint16 castId, Common::ReadStreamEndian &stream, uint16 version);
 
-	uint32 _id;
 	ScriptType _scriptType;
 };
 
@@ -223,6 +222,7 @@ struct EditInfo {
 };
 
 struct CastMemberInfo {
+	uint32 scriptId;
 	Common::String script;
 	Common::String name;
 	Common::String directory;




More information about the Scummvm-git-logs mailing list