[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