[Scummvm-git-logs] scummvm master -> 005618bf2524bcf05cbef9e5d10a4c7541b08be9

djsrv dservilla at gmail.com
Wed Jul 1 17:29:21 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:
fb39572fd5 DIRECTOR: Move _sharedCast to Movie
005618bf25 Revert "DIRECTOR: LINGO: Fix bytecode loading for global scripts"


Commit: fb39572fd5e1c78d91215b19219b727c2d1e211a
    https://github.com/scummvm/scummvm/commit/fb39572fd5e1c78d91215b19219b727c2d1e211a
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-01T13:24:37-04:00

Commit Message:
DIRECTOR: Move _sharedCast to Movie

Changed paths:
    engines/director/cast.cpp
    engines/director/director.cpp
    engines/director/director.h
    engines/director/events.cpp
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-funcs.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.cpp
    engines/director/movie.cpp
    engines/director/movie.h
    engines/director/resource.cpp
    engines/director/sound.cpp
    engines/director/sprite.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 83c9740975..3101a76593 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -426,7 +426,7 @@ void Cast::createCastWidgets() {
 void Cast::loadSpriteImages() {
 	debugC(1, kDebugLoading, "****** Preloading sprite images");
 
-	Cast *sharedCast = _vm->getSharedCast();
+	Cast *sharedCast = _movie ? _movie->getSharedCast() : nullptr;
 
 	for (Common::HashMap<int, CastMember *>::iterator c = _loadedCast->begin(); c != _loadedCast->end(); ++c) {
 		if (!c->_value)
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index e69cb34253..a7835501fb 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -84,8 +84,6 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
 	_currentPaletteLength = 0;
 	_lingo = nullptr;
 
-	_sharedCast = nullptr;
-
 	_mainArchive = nullptr;
 	_macBinary = nullptr;
 
@@ -118,7 +116,6 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
 }
 
 DirectorEngine::~DirectorEngine() {
-	delete _sharedCast;
 	delete _currentMovie;
 
 	_wm->removeWindow(_currentStage);
@@ -187,7 +184,7 @@ Common::Error DirectorEngine::run() {
 		_sharedCastFile = "Shared.dir";
 	}
 
-	loadSharedCastsFrom(_currentPath + _sharedCastFile);
+	_currentMovie->loadSharedCastsFrom(_currentPath + _sharedCastFile);
 
 	debug(0, "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nObtaining score name\n");
 
@@ -284,18 +281,13 @@ Common::Error DirectorEngine::run() {
 		if (!_nextMovie.movie.empty()) {
 			_newMovieStarted = true;
 
-			delete _currentMovie;
-			_currentMovie = nullptr;
-
 			_currentPath = getPath(_nextMovie.movie, _currentPath);
 
-			if (_sharedCast && _sharedCast->_castArchive
-					&& _sharedCast->_castArchive->getFileName().equalsIgnoreCase(_currentPath + _sharedCastFile)) {
-				_lingo->resetLingo(true);
-			} else {
-				_lingo->resetLingo(false);
-				loadSharedCastsFrom(_currentPath + _sharedCastFile);
-			}
+			Cast *sharedCast = _currentMovie->getSharedCast();
+			_currentMovie->_sharedCast = nullptr;
+
+			delete _currentMovie;
+			_currentMovie = nullptr;
 
 			Archive *mov = openMainArchive(_currentPath + Common::lastPathComponent(_nextMovie.movie, '/'));
 
@@ -314,6 +306,16 @@ Common::Error DirectorEngine::run() {
 			_currentMovie->setArchive(mov);
 			debug(0, "Switching to movie '%s'", _currentMovie->getMacName().c_str());
 
+			if (sharedCast && sharedCast->_castArchive
+					&& sharedCast->_castArchive->getFileName().equalsIgnoreCase(_currentPath + _sharedCastFile)) {
+				_lingo->resetLingo(true);
+				_currentMovie->_sharedCast = sharedCast;
+			} else {
+				delete sharedCast;
+				_lingo->resetLingo(false);
+				_currentMovie->loadSharedCastsFrom(_currentPath + _sharedCastFile);
+			}
+
 			_nextMovie.movie.clear();
 			loop = true;
 		}
diff --git a/engines/director/director.h b/engines/director/director.h
index 3d13f55eb0..08f70edfbd 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -138,7 +138,6 @@ public:
 	Lingo *getLingo() const { return _lingo; }
 	Stage *getStage() const { return _currentStage; }
 	Movie *getCurrentMovie() const { return _currentMovie; }
-	Cast *getSharedCast() const { return _sharedCast; }
 	Common::String getCurrentPath() const { return _currentPath; }
 	void setPalette(int id);
 	void setPalette(byte *palette, uint16 count);
@@ -146,10 +145,6 @@ public:
 	void loadPalettes();
 	const byte *getPalette() const { return _currentPalette; }
 	uint16 getPaletteColorCount() const { return _currentPaletteLength; }
-	void loadSharedCastsFrom(Common::String filename);
-	void clearSharedCast();
-	CastMember *getCastMember(int castId);
-	const Stxt *getStxt(int castId);
 	void loadPatterns();
 	uint32 transformColor(uint32 color);
 	Graphics::MacPatterns &getPatterns();
@@ -203,8 +198,6 @@ private:
 	void loadEXERIFX(Common::SeekableReadStream *stream, uint32 offset);
 	void loadMac(const Common::String movie);
 
-	Cast *_sharedCast;
-
 	Archive *_mainArchive;
 	Common::MacResManager *_macBinary;
 	DirectorSound *_soundManager;
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index fc6b280c4d..22bbed7be5 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -131,7 +131,7 @@ void DirectorEngine::processEvents(bool bufferLingoEvents) {
 				releaseDraggedSprite();
 
 				{
-					CastMember *cast = g_director->getCastMember(sc->getSpriteById(spriteId)->_castId);
+					CastMember *cast = g_director->getCurrentMovie()->getCastMember(sc->getSpriteById(spriteId)->_castId);
 					if (cast && cast->_type == kCastButton)
 						cast->_hilite = !cast->_hilite;
 				}
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index d412469034..428d043deb 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1531,7 +1531,7 @@ void LB::b_installMenu(int nargs) {
 
 	int castId = d.asInt();
 
-	const Stxt *stxt = g_director->getStxt(castId);
+	const Stxt *stxt = g_director->getCurrentMovie()->getStxt(castId);
 
 	if (!stxt) {
 		warning("installMenu: Unknown cast number #%d", castId);
@@ -2184,7 +2184,7 @@ void LB::b_field(int nargs) {
 void LB::b_script(int nargs) {
 	Datum d = g_lingo->pop();
 	int castId = g_lingo->castIdFetch(d);
-	CastMember *cast = g_director->getCastMember(castId);
+	CastMember *cast = g_director->getCurrentMovie()->getCastMember(castId);
 
 	if (cast) {
 		ScriptContext *script = nullptr;
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 4c8eef38a1..726fbaeeab 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -27,6 +27,7 @@
 #include "director/director.h"
 #include "director/cast.h"
 #include "director/castmember.h"
+#include "director/movie.h"
 #include "director/util.h"
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-code.h"
@@ -883,7 +884,7 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, int archiveIn
 	// initialise the script
 	ScriptType scriptType = kCastScript;
 	Common::String castName;
-	CastMember *member = g_director->getCastMember(castId);
+	CastMember *member = g_director->getCurrentMovie()->getCastMember(castId);
 	if (member) {
 		if (member->_type == kCastLingoScript)
 			scriptType = ((ScriptCastMember *)member)->_scriptType;
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 0318b3eb76..4fa622cd42 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -339,8 +339,8 @@ void Lingo::func_cursor(int cursorId, int maskId) {
 	}
 
 	if (maskId != -1) {
-		CastMember *cursorCast = _vm->getCastMember(cursorId);
-		CastMember *maskCast = _vm->getCastMember(maskId);
+		CastMember *cursorCast = _vm->getCurrentMovie()->getCastMember(cursorId);
+		CastMember *maskCast = _vm->getCurrentMovie()->getCastMember(maskId);
 		if (!cursorCast || !maskCast) {
 			warning("func_cursor(): non-existent cast reference");
 			return;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index e6b5024095..7c036d223c 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -944,16 +944,18 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
 	Datum d;
 	int id = g_lingo->castIdFetch(id1);
 
-	Cast *cast = _vm->getCurrentMovie()->getCast();
+	Movie *movie = _vm->getCurrentMovie();
 	// Setting default type
 	d.type = INT;
 
-	if (!cast) {
-		warning("Lingo::getTheCast(): No cast loaded");
+	if (!movie) {
+		warning("Lingo::getTheCast(): No movie loaded");
 		return d;
 	}
 
-	CastMember *member = _vm->getCastMember(id);
+	Cast *cast = movie->getCast();
+
+	CastMember *member = _vm->getCurrentMovie()->getCastMember(id);
 	if (!member) {
 		if (field == kTheLoaded) {
 			d.u.i = 0;
@@ -973,7 +975,7 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
 	if (cast->_castsInfo.contains(id)) {
 		castInfo = cast->_castsInfo.getVal(id);
 	} else {
-		Cast *shared = _vm->getSharedCast();
+		Cast *shared = movie->getSharedCast();
 		if (shared && shared->_castsInfo.contains(id)) {
 			castInfo = shared->_castsInfo.getVal(id);
 		} else {
@@ -1055,7 +1057,7 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
 		return;
 	}
 
-	CastMember *member = _vm->getCastMember(id);
+	CastMember *member = _vm->getCurrentMovie()->getCastMember(id);
 	if (!member) {
 		warning("Lingo::setTheCast(): CastMember id %d doesn't exist", id);
 		return;
@@ -1147,7 +1149,7 @@ Datum Lingo::getTheField(Datum &id1, int field) {
 	Datum d;
 	int id = g_lingo->castIdFetch(id1);
 
-	CastMember *member = _vm->getCastMember(id);
+	CastMember *member = _vm->getCurrentMovie()->getCastMember(id);
 	if (!member) {
 		warning("Lingo::getTheField(): CastMember id %d doesn't exist", id);
 		return d;
@@ -1192,7 +1194,7 @@ void Lingo::setTheField(Datum &id1, int field, Datum &d) {
 		return;
 	}
 
-	CastMember *member = _vm->getCastMember(id);
+	CastMember *member = _vm->getCurrentMovie()->getCastMember(id);
 	if (!member) {
 		warning("Lingo::setTheField(): CastMember id %d doesn't exist", id);
 		return;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 842e6ff603..0cb8a8870f 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -921,7 +921,7 @@ Common::String Datum::asString(bool printonly) {
 	case FIELDREF:
 		{
 			int idx = u.i;
-			CastMember *member = g_director->getCastMember(idx);
+			CastMember *member = g_director->getCurrentMovie()->getCastMember(idx);
 			if (!member) {
 				warning("asString(): Unknown cast id %d", idx);
 				s = "";
@@ -1200,7 +1200,7 @@ int Lingo::castIdFetch(Datum &var) {
 			warning("castIdFetch: reference to non-existent cast member: %s", var.u.s->c_str());
 	} else if (var.type == INT || var.type == FLOAT) {
 		int castId = var.asInt();
-		if (!_vm->getCastMember(castId))
+		if (!_vm->getCurrentMovie()->getCastMember(castId))
 			warning("castIdFetch: reference to non-existent cast ID: %d", castId);
 		else
 			id = castId;
@@ -1255,7 +1255,7 @@ void Lingo::varAssign(Datum &var, Datum &value, bool global, DatumHash *localvar
 			return;
 		}
 		int referenceId = var.u.i;
-		CastMember *member = g_director->getCastMember(referenceId);
+		CastMember *member = g_director->getCurrentMovie()->getCastMember(referenceId);
 		if (!member) {
 			warning("varAssign: Unknown cast id %d", referenceId);
 			return;
@@ -1314,7 +1314,7 @@ Datum Lingo::varFetch(Datum &var, bool global, DatumHash *localvars) {
 
 		return *d;
 	} else if (var.type == FIELDREF) {
-		CastMember *cast = _vm->getCastMember(var.u.i);
+		CastMember *cast = _vm->getCurrentMovie()->getCastMember(var.u.i);
 		if (cast) {
 			switch (cast->_type) {
 			case kCastText:
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index b765d60628..9c7e29cfd8 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -50,12 +50,14 @@ Movie::Movie(DirectorEngine *vm) {
 	_movieArchive = nullptr;
 
 	_cast = new Cast(_vm, this);
+	_sharedCast = nullptr;
 	_score = new Score(_vm, this);
 }
 
 Movie::~Movie() {
 	// _movieArchive is shared with the cast, so the cast will free it
 	delete _cast;
+	delete _sharedCast;
 	delete _score;
 }
 
@@ -195,4 +197,52 @@ void Movie::loadFileInfo(Common::SeekableSubReadStreamEndian &stream) {
 	_directory = fileInfoStrings[3];
 }
 
+void Movie::clearSharedCast() {
+	if (!_sharedCast)
+		return;
+
+	delete _sharedCast;
+
+	_sharedCast = nullptr;
+}
+
+void Movie::loadSharedCastsFrom(Common::String filename) {
+	clearSharedCast();
+
+	Archive *sharedCast = _vm->createArchive();
+
+	if (!sharedCast->openFile(filename)) {
+		warning("loadSharedCastsFrom(): No shared cast %s", filename.c_str());
+
+		delete sharedCast;
+
+		return;
+	}
+	sharedCast->setFileName(filename);
+
+	debug(0, "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
+	debug(0, "@@@@ Loading Shared cast '%s'", filename.c_str());
+	debug(0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
+
+	_sharedCast = new Cast(_vm);
+	_sharedCast->setArchive(sharedCast);
+	_sharedCast->loadArchive();
+}
+
+CastMember *Movie::getCastMember(int castId) {
+	CastMember *result = _cast->getCastMember(castId);
+	if (result == nullptr && _sharedCast) {
+		result = _sharedCast->getCastMember(castId);
+	}
+	return result;
+}
+
+const Stxt *Movie::getStxt(int castId) {
+	const Stxt *result = _cast->getStxt(castId);
+	if (result == nullptr && _sharedCast) {
+		result = _sharedCast->getStxt(castId);
+	}
+	return result;
+}
+
 } // End of namespace Director
diff --git a/engines/director/movie.h b/engines/director/movie.h
index dc315f96e2..3bd11705d5 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -50,8 +50,15 @@ public:
 	Archive *getArchive() const { return _movieArchive; };
 	Common::String getMacName() const { return _macName; }
 	Cast *getCast() { return _cast; }
+	Cast *getSharedCast() { return _sharedCast; }
 	Score *getScore() { return _score; }
 
+	void clearSharedCast();
+	void loadSharedCastsFrom(Common::String filename);
+
+	CastMember *getCastMember(int castId);
+	const Stxt *getStxt(int castId);
+
 private:
 	void loadFileInfo(Common::SeekableSubReadStreamEndian &stream);
 
@@ -66,6 +73,7 @@ public:
 	uint32 _lastKeyTime;
 	uint32 _lastTimerReset;
 	uint16 _stageColor;
+	Cast *_sharedCast;
 
 private:
 	DirectorEngine *_vm;
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 6948a743a7..9b13aeb4c9 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -271,58 +271,4 @@ void DirectorEngine::loadMac(const Common::String movie) {
 	}
 }
 
-void DirectorEngine::clearSharedCast() {
-	if (!_sharedCast)
-		return;
-
-	delete _sharedCast;
-
-	_sharedCast = nullptr;
-}
-
-void DirectorEngine::loadSharedCastsFrom(Common::String filename) {
-	clearSharedCast();
-
-	Archive *sharedCast = createArchive();
-
-	if (!sharedCast->openFile(filename)) {
-		warning("loadSharedCastsFrom(): No shared cast %s", filename.c_str());
-
-		delete sharedCast;
-
-		return;
-	}
-	sharedCast->setFileName(filename);
-
-	debug(0, "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
-	debug(0, "@@@@ Loading Shared cast '%s'", filename.c_str());
-	debug(0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
-
-	_sharedCast = new Cast(this);
-	_sharedCast->setArchive(sharedCast);
-	_sharedCast->loadArchive();
-}
-
-CastMember *DirectorEngine::getCastMember(int castId) {
-	CastMember *result = nullptr;
-	if (_currentMovie) {
-		result = _currentMovie->getCast()->getCastMember(castId);
-	}
-	if (result == nullptr && _sharedCast) {
-		result = _sharedCast->getCastMember(castId);
-	}
-	return result;
-}
-
-const Stxt *DirectorEngine::getStxt(int castId) {
-	const Stxt *result = nullptr;
-	if (_currentMovie) {
-		result = _currentMovie->getCast()->getStxt(castId);
-	}
-	if (result == nullptr && _sharedCast) {
-		result = _sharedCast->getStxt(castId);
-	}
-	return result;
-}
-
 } // End of namespace Director
diff --git a/engines/director/sound.cpp b/engines/director/sound.cpp
index b3d7b25d12..14f1c3a11e 100644
--- a/engines/director/sound.cpp
+++ b/engines/director/sound.cpp
@@ -33,6 +33,7 @@
 #include "audio/decoders/aiff.h"
 
 #include "director/director.h"
+#include "director/movie.h"
 #include "director/castmember.h"
 #include "director/sound.h"
 
@@ -101,7 +102,7 @@ void DirectorSound::playCastMember(int castId, uint8 soundChannel, bool allowRep
 	if (castId == 0) {
 		stopSound(soundChannel);
 	} else {
-		CastMember *soundCast = _vm->getCastMember(castId);
+		CastMember *soundCast = _vm->getCurrentMovie()->getCastMember(castId);
 		if (soundCast) {
 			if (soundCast->_type != kCastSound) {
 				warning("DirectorSound::playCastMember: attempted to play a non-SoundCastMember cast member %d", castId);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index aff4fb243f..f99826b201 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -24,6 +24,7 @@
 
 #include "director/director.h"
 #include "director/castmember.h"
+#include "director/movie.h"
 #include "director/sprite.h"
 #include "director/lingo/lingo.h"
 
@@ -139,7 +140,7 @@ void Sprite::setPattern(uint16 pattern) {
 }
 
 void Sprite::setCast(uint16 castId) {
-	CastMember *member = g_director->getCastMember(castId);
+	CastMember *member = g_director->getCurrentMovie()->getCastMember(castId);
 	_castType = kCastTypeNull;
 	_castId = castId;
 


Commit: 005618bf2524bcf05cbef9e5d10a4c7541b08be9
    https://github.com/scummvm/scummvm/commit/005618bf2524bcf05cbef9e5d10a4c7541b08be9
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-01T13:27:48-04:00

Commit Message:
Revert "DIRECTOR: LINGO: Fix bytecode loading for global scripts"

This reverts commit 45e72aa449cfc2c4bd657f632b90ee6aada41073.

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


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 726fbaeeab..4154701291 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -893,9 +893,6 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, int archiveIn
 		if (info)
 			castName = info->name;
 	}
-	if (scriptFlags & kScriptFlagGlobal) {
-		scriptType = kGlobalScript;
-	}
 
 	_assemblyArchive = archiveIndex;
 




More information about the Scummvm-git-logs mailing list