[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