[Scummvm-git-logs] scummvm master -> 829e4782c8d9e115bf715249f5e56fa79eddeb1a

djsrv dservilla at gmail.com
Thu Jul 16 03:35:27 UTC 2020


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
f71670e8d9 DIRECTOR: LINGO: Implement allow outdated lingo
829e4782c8 DIRECTOR: LINGO: Ignore garbage in D3 cast scripts


Commit: f71670e8d92b8642efd05e93e2c3f76446098fe0
    https://github.com/scummvm/scummvm/commit/f71670e8d92b8642efd05e93e2c3f76446098fe0
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-15T23:30:12-04:00

Commit Message:
DIRECTOR: LINGO: Implement allow outdated lingo

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-preprocessor.cpp
    engines/director/movie.cpp
    engines/director/movie.h
    engines/director/types.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 7eefcf88a2..e94d2c5a9d 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -419,7 +419,7 @@ void LC::c_varpush() {
 	}
 
 	// Looking for the cast member constants
-	if (g_director->getVersion() < 4) { // TODO: There could be a flag 'Allow Outdated Lingo' in Movie Info in D4
+	if (g_director->getVersion() < 4 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
 		int val = castNumToNum(name.c_str());
 
 		if (val != -1) {
diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index 11e181de1d..5c73092fa6 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "director/director.h"
+#include "director/movie.h"
 #include "director/lingo/lingo.h"
 
 namespace Director {
@@ -224,7 +225,7 @@ Common::String Lingo::codePreprocessor(const char *s, ScriptType type, uint16 id
 		}
 		debugC(2, kDebugParse | kDebugPreprocess, "line: %d                         '%s'", iflevel, line.c_str());
 
-		if (type == kMovieScript && _vm->getVersion() <= 3 && !defFound) {
+		if (!defFound && type == kMovieScript && (_vm->getVersion() <= 3 || _vm->getCurrentMovie()->_allowOutdatedLingo)) {
 			tok = nexttok(line.c_str());
 			if (tok.equals("macro") || tok.equals("factory") || tok.equals("on")) {
 				defFound = true;
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index c5398cb7c4..a76a7ea01a 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -52,6 +52,8 @@ Movie::Movie(Stage *stage) {
 	_lastRollTime = _lastEventTime;
 	_lastTimerReset = _lastEventTime;
 
+	_allowOutdatedLingo = false;
+
 	_movieArchive = nullptr;
 
 	_cast = new Cast(this);
@@ -190,6 +192,9 @@ void Movie::loadFileInfo(Common::SeekableSubReadStreamEndian &stream) {
 	debugC(2, kDebugLoading, "****** Loading FileInfo VWFI");
 
 	InfoEntries fileInfo = Movie::loadInfoEntries(stream);
+
+	_allowOutdatedLingo = (fileInfo.flags & kMovieFlagAllowOutdatedLingo) != 0;
+
 	_script = fileInfo.strings[0].readString(false);
 
 	if (!_script.empty() && ConfMan.getBool("dump_scripts"))
@@ -212,6 +217,8 @@ void Movie::loadFileInfo(Common::SeekableSubReadStreamEndian &stream) {
 	}
 
 	if (debugChannelSet(3, kDebugLoading)) {
+		debug("VWFI: flags: %d", fileInfo.flags);
+		debug("VWFI: allow outdated lingo: %d", _allowOutdatedLingo);
 		debug("VWFI: script: '%s'", _script.c_str());
 		debug("VWFI: changed by: '%s'", _changedBy.c_str());
 		debug("VWFI: created by: '%s'", _createdBy.c_str());
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 049983c6bf..c0c1e36584 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -126,6 +126,7 @@ public:
 	uint32 _lastTimerReset;
 	uint16 _stageColor;
 	Cast *_sharedCast;
+	bool _allowOutdatedLingo;
 
 private:
 	Stage *_stage;
diff --git a/engines/director/types.h b/engines/director/types.h
index e3b2151216..aa49f48052 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -25,6 +25,10 @@
 
 namespace Director {
 
+enum MovieFlag {
+	kMovieFlagAllowOutdatedLingo	= (1 << 8)
+};
+
 enum CastType {
 	kCastTypeNull = 0,
 	kCastBitmap = 1,


Commit: 829e4782c8d9e115bf715249f5e56fa79eddeb1a
    https://github.com/scummvm/scummvm/commit/829e4782c8d9e115bf715249f5e56fa79eddeb1a
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-15T23:31:47-04:00

Commit Message:
DIRECTOR: LINGO: Ignore garbage in D3 cast scripts

Changed paths:
    engines/director/lingo/lingo-preprocessor.cpp


diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index 5c73092fa6..c9bf5fd01d 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -225,7 +225,7 @@ Common::String Lingo::codePreprocessor(const char *s, ScriptType type, uint16 id
 		}
 		debugC(2, kDebugParse | kDebugPreprocess, "line: %d                         '%s'", iflevel, line.c_str());
 
-		if (!defFound && type == kMovieScript && (_vm->getVersion() <= 3 || _vm->getCurrentMovie()->_allowOutdatedLingo)) {
+		if (!defFound && (type == kMovieScript || type == kCastScript) && (_vm->getVersion() <= 3 || _vm->getCurrentMovie()->_allowOutdatedLingo)) {
 			tok = nexttok(line.c_str());
 			if (tok.equals("macro") || tok.equals("factory") || tok.equals("on")) {
 				defFound = true;




More information about the Scummvm-git-logs mailing list