[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