[Scummvm-git-logs] scummvm master -> 08fa990633f648f3ce03a0ad15ba29cf29cf4e73

moralrecordings code at moral.net.au
Tue May 5 15:12:13 UTC 2020


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

Summary:
180822b315 DIRECTOR: LINGO: Add cb_stackpeek and cb_stackdrop
91d1bf0ce3 DIRECTOR: Remove duplicate type field in Sprite
08fa990633 DIRECTOR: Movie cast should override shared cast for sprites


Commit: 180822b31546f52c33b05f8ef24b4dc2fc1300ce
    https://github.com/scummvm/scummvm/commit/180822b31546f52c33b05f8ef24b4dc2fc1300ce
Author: Scott Percival (code at moral.net.au)
Date: 2020-05-05T23:06:37+08:00

Commit Message:
DIRECTOR: LINGO: Add cb_stackpeek and cb_stackdrop

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


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 83ed32c81d..843534074f 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -82,6 +82,8 @@ static LingoV4Bytecode lingoV4[] = {
 	{ 0x59, LC::cb_v4assign,	"b" },
 	{ 0x5c, LC::cb_v4theentitypush, "b" },
 	{ 0x5d, LC::cb_v4theentityassign, "b" },
+	{ 0x64, LC::cb_stackpeek, 	"b" },
+	{ 0x65, LC::cb_stackdrop, 	"b" },
 	{ 0x66, LC::cb_v4theentitynamepush, "b" },
 	{ 0x81, LC::c_intpush,		"w" },
 	{ 0x82, LC::c_argcnoretpush,"w" },
@@ -342,6 +344,20 @@ void LC::cb_call() {
 }
 
 
+void LC::cb_stackpeek() {
+	int peekOffset = g_lingo->readInt();
+	g_lingo->push(g_lingo->peek(peekOffset));
+}
+
+
+void LC::cb_stackdrop() {
+	int dropCount = g_lingo->readInt();
+	for (int i = 0; i < dropCount; i++) {
+		g_lingo->pop();
+	}
+}
+
+
 void LC::cb_globalpush() {
 	int nameId = g_lingo->readInt();
 	Common::String name = g_lingo->getName(nameId);
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 1d391a9c01..e61fcb888a 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -188,6 +188,13 @@ Datum Lingo::pop(void) {
 	return ret;
 }
 
+Datum Lingo::peek(uint offset) {
+	assert (_stack.size() > offset);
+
+	Datum ret = _stack[_stack.size() - 1 - offset];
+	return ret;
+}
+
 void LC::c_xpop() {
 	g_lingo->pop();
 }
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index ac3d61fbb4..a87846d6b1 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -153,6 +153,8 @@ namespace LC {
 	void cb_localcall();
 	void cb_methodcall();
 	void cb_objectpush();
+	void cb_stackpeek();
+	void cb_stackdrop();
 	void cb_varassign();
 	void cb_varpush();
 	void cb_v4assign();
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 74bf83d7cd..733bacd373 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -358,6 +358,7 @@ public:
 public:
 	void push(Datum d);
 	Datum pop(void);
+	Datum peek(uint offset);
 
 public:
 	Common::HashMap<uint32, const char *> _eventHandlerTypes;


Commit: 91d1bf0ce3ae6d4c6396d153e0e1e4c4957d87ab
    https://github.com/scummvm/scummvm/commit/91d1bf0ce3ae6d4c6396d153e0e1e4c4957d87ab
Author: Scott Percival (code at moral.net.au)
Date: 2020-05-05T23:06:37+08:00

Commit Message:
DIRECTOR: Remove duplicate type field in Sprite

Changed paths:
    engines/director/frame.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/score.cpp
    engines/director/sprite.cpp
    engines/director/sprite.h


diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index a4f9d188a7..4cbd55071c 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -274,7 +274,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 
 		if (_vm->getVersion() <= 4) {
 			sprite._scriptId = stream->readByte();
-			sprite._spriteType = stream->readByte();
+			sprite._spriteType = (SpriteType)stream->readByte();
 			sprite._enabled = sprite._spriteType != kInactiveSprite;
 			if (_vm->getVersion() == 4) {
 				sprite._foreColor = _vm->transformColor((uint8)stream->readByte());
@@ -309,7 +309,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 				sprite._blendAmount = stream->readByte();
 			}
 		} else if (_vm->getVersion() == 5) {
-			sprite._spriteType = stream->readByte();
+			sprite._spriteType = (SpriteType)stream->readByte();
 			sprite._inkData = stream->readByte();
 
 			sprite._castIndex = stream->readUint16();
@@ -332,7 +332,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 			sprite._thickness = stream->readByte();
 			stream->readByte();	// unused
 		} else if (_vm->getVersion() == 6) {
-			sprite._spriteType = stream->readByte();
+			sprite._spriteType = (SpriteType)stream->readByte();
 			sprite._inkData = stream->readByte();
 
 			sprite._foreColor = _vm->transformColor((uint8)stream->readByte());
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 8d30a3c664..ebc292b842 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -596,7 +596,7 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
 		d.u.i = sprite->_trails;
 		break;
 	case kTheType:
-		d.u.i = sprite->_type;
+		d.u.i = sprite->_spriteType;
 		break;
 	case kTheVisibility:
 	case kTheVisible:
@@ -718,7 +718,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 		sprite->_trails = d.u.i;
 		break;
 	case kTheType:
-		sprite->_type = static_cast<SpriteType>(d.u.i);
+		sprite->_spriteType = static_cast<SpriteType>(d.u.i);
 		break;
 	case kTheVisibility:
 	case kTheVisible:
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index d526180522..d1d381abe3 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -605,7 +605,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
 
 	while (size != 0 && !stream.eos()) {
 		uint16 frameSize = stream.readUint16();
-		debugC(kDebugLoading, 8, "++++++++++ score frame %d (frameSize %d) size %d", _frames.size(), frameSize, size);
+		debugC(8, kDebugLoading, "++++++++++ score frame %d (frameSize %d) size %d", _frames.size(), frameSize, size);
 
 		if (frameSize > 0) {
 			Frame *frame = new Frame(_vm, _numChannelsDisplayed);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 3511a031cc..0e9408db09 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -27,25 +27,37 @@
 namespace Director {
 
 Sprite::Sprite() {
+	_scriptId = 0;
+	_scriptCastIndex = 0;
+	_colorcode = 0;
+	_blendAmount = 0;
+	_unk3 = 0;
+
 	_enabled = false;
+	_castId = 0;
+	_castIndex = 0;
+	_spriteType = kInactiveSprite;
+	_inkData = 0;
+	_ink = kInkTypeCopy;
 	_trails = 0;
+
+	_cast = nullptr;
+
+	_thickness = 0;
 	_width = 0;
-	_ink = kInkTypeCopy;
-	_inkData = 0;
 	_height = 0;
-	_castId = 0;
 	_constraint = 0;
 	_moveable = false;
-	_puppet = false;
 	_editable = false;
-	_castId = 0;
-	_castIndex = 0;
+	_puppet = false;
 	_backColor = 255;
 	_foreColor = 0;
+
 	_left = 0;
 	_right = 0;
 	_top = 0;
 	_bottom = 0;
+	_blend = 0;
 	_visible = false;
 	_movieRate = 0;
 	_movieTime = 0;
@@ -53,19 +65,6 @@ Sprite::Sprite() {
 	_stopTime = 0;
 	_volume = 0;
 	_stretch = 0;
-	_type = kInactiveSprite;
-
-	_cast = nullptr;
-
-	_blend = 0;
-	_thickness = 0;
-
-	_scriptId = 0;
-	_scriptCastIndex = 0;
-	_colorcode = 0;
-	_blendAmount = 0;
-	_unk3 = 0;
-	_spriteType = 0;
 }
 
 Sprite::~Sprite() {
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index 3f79973656..7009c63978 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -74,7 +74,7 @@ public:
 	bool _enabled;
 	uint16 _castId;
 	uint16 _castIndex;
-	byte _spriteType;
+	SpriteType _spriteType;
 	byte _inkData;
 	InkType _ink;
 	uint16 _trails;
@@ -101,7 +101,6 @@ public:
 	uint16 _bottom;
 	byte _blend;
 	bool _visible;
-	SpriteType _type;
 	// Using in digital movie sprites
 	byte _movieRate;
 	uint16 _movieTime;


Commit: 08fa990633f648f3ce03a0ad15ba29cf29cf4e73
    https://github.com/scummvm/scummvm/commit/08fa990633f648f3ce03a0ad15ba29cf29cf4e73
Author: Scott Percival (code at moral.net.au)
Date: 2020-05-05T23:06:37+08:00

Commit Message:
DIRECTOR: Movie cast should override shared cast for sprites

Changed paths:
    engines/director/score.cpp


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index d1d381abe3..9ec016f74b 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -761,10 +761,10 @@ void Score::setSpriteCasts() {
 			if (castId == 0)
 				continue;
 
-			if (_vm->getSharedScore() && _vm->getSharedScore()->_loadedCast && _vm->getSharedScore()->_loadedCast->contains(castId)) {
-				_frames[i]->_sprites[j]->_cast = _vm->getSharedScore()->_loadedCast->getVal(castId);
-			} else if (_loadedCast->contains(castId)) {
+			if (_loadedCast->contains(castId)) {
 				_frames[i]->_sprites[j]->_cast = _loadedCast->getVal(castId);
+			} else if (_vm->getSharedScore() && _vm->getSharedScore()->_loadedCast && _vm->getSharedScore()->_loadedCast->contains(castId)) {
+				_frames[i]->_sprites[j]->_cast = _vm->getSharedScore()->_loadedCast->getVal(castId);
 			}
 		}
 	}




More information about the Scummvm-git-logs mailing list