[Scummvm-git-logs] scummvm master -> fb14538f6f14713ea0aa07e73ee82a42a945742d
sev-
noreply at scummvm.org
Tue Aug 26 22:45:11 UTC 2025
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
e13ae3cee3 DIRECTOR: Implement score sprite data loading for D6
fb14538f6f iDIRECTOR: Fix incorrect puppeted sprite writing
Commit: e13ae3cee3292dd8b99cbbc572d65adcf7b2f2c2
https://github.com/scummvm/scummvm/commit/e13ae3cee3292dd8b99cbbc572d65adcf7b2f2c2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-27T00:39:52+02:00
Commit Message:
DIRECTOR: Implement score sprite data loading for D6
Changed paths:
engines/director/frame.cpp
engines/director/sprite.cpp
engines/director/sprite.h
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index bb547a33fe5..bda6f567263 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -1153,7 +1153,6 @@ void readSpriteDataD5(Common::SeekableReadStreamEndian &stream, Sprite &sprite,
error("readSpriteDataD5(): Miscomputed field position: %" PRId64, stream.pos() - startPosition);
}
}
-
}
void writeSpriteDataD5(Common::SeekableWriteStream *writeStream, Sprite &sprite) {
@@ -1264,35 +1263,29 @@ void readSpriteDataD6(Common::SeekableReadStreamEndian &stream, Sprite &sprite,
sprite._spriteType = (SpriteType)stream.readByte();
}
break;
- case 1: {
- byte inkData = stream.readByte();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPInk))
- continue;
-
- sprite._inkData = inkData;
+ case 1:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPInk)) {
+ stream.readByte();
+ } else {
+ sprite._inkData = stream.readByte();
- sprite._ink = static_cast<InkType>(sprite._inkData & 0x3f);
- sprite._trails = sprite._inkData & 0x40 ? true : false;
- sprite._stretch = sprite._inkData & 0x80 ? true : false;
+ sprite._ink = static_cast<InkType>(sprite._inkData & 0x3f);
+ sprite._trails = sprite._inkData & 0x40 ? true : false;
+ sprite._stretch = sprite._inkData & 0x80 ? true : false;
}
break;
- case 2: {
- uint8 foreColor = stream.readByte();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPForeColor))
- continue;
-
- sprite._foreColor = g_director->transformColor(foreColor);
+ case 2:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPForeColor)) {
+ stream.readByte();
+ } else {
+ sprite._foreColor = g_director->transformColor((uint8)stream.readByte());
}
break;
- case 3: {
- uint8 backColor = stream.readByte();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPBackColor))
- continue;
-
- sprite._backColor = g_director->transformColor(backColor);
+ case 3:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPBackColor)) {
+ stream.readByte();
+ } else {
+ sprite._backColor = g_director->transformColor((uint8)stream.readByte());
}
break;
case 4:
@@ -1311,73 +1304,62 @@ void readSpriteDataD6(Common::SeekableReadStreamEndian &stream, Sprite &sprite,
sprite._castId = CastMemberID(memberID, sprite._castId.castLib); // Inherit castLib from previous frame
}
break;
- case 8: {
- int scriptCastLib = stream.readSint16();
- sprite._scriptId = CastMemberID(sprite._scriptId.member, scriptCastLib);
+ case 8:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPCast)) {
+ stream.readUint32();
+ } else {
+ sprite._spriteListIdx = stream.readUint32();
}
break;
- case 10: {
- uint16 scriptMemberID = stream.readUint16();
- sprite._scriptId = CastMemberID(scriptMemberID, sprite._scriptId.castLib); // Inherit castLib from previous frame
+ case 12:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPLoc)) {
+ stream.readUint16();
+ } else {
+ sprite._startPoint.y = (int16)stream.readUint16();
}
break;
- case 12: {
- uint16 startPointY = stream.readUint16();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPLocV) || sprite.getAutoPuppet(kAPLoc))
- continue;
-
- sprite._startPoint.y = startPointY;
- break;
- }
- case 14: {
- uint16 startPointX = stream.readUint16();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPLocH) || sprite.getAutoPuppet(kAPLoc))
- continue;
-
- sprite._startPoint.x = startPointX;
+ case 14:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPLoc)) {
+ stream.readUint16();
+ } else {
+ sprite._startPoint.x = (int16)stream.readUint16();
}
break;
- case 16: {
- uint16 height = stream.readUint16();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPHeight))
- continue;
-
- sprite._height = height;
+ case 16:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPHeight)) {
+ stream.readUint16();
+ } else {
+ sprite._height = (int16)stream.readUint16();
}
break;
- case 18: {
- uint16 width = stream.readUint16();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPWidth))
- continue;
-
- sprite._width = width;
+ case 18:
+ if (sprite._puppet || sprite.getAutoPuppet(kAPWidth)) {
+ stream.readUint16();
+ } else {
+ sprite._width = (int16)stream.readUint16();
}
break;
case 20:
- // & 0x0f scorecolor
- // 0x10 forecolor is rgb
- // 0x20 bgcolor is rgb
- // 0x40 editable
- // 0x80 moveable
- sprite._colorcode = stream.readByte();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPMoveable))
- continue;
+ if (sprite._puppet || sprite.getAutoPuppet(kAPMoveable)) {
+ stream.readByte();
+ } else {
+ // & 0x0f scorecolor
+ // 0x10 forecolor is rgb
+ // 0x20 bgcolor is rgb
+ // 0x40 editable
+ // 0x80 moveable
+ sprite._colorcode = stream.readByte();
- sprite._editable = ((sprite._colorcode & 0x40) == 0x40);
- sprite._moveable = ((sprite._colorcode & 0x80) == 0x80);
+ sprite._editable = ((sprite._colorcode & 0x40) == 0x40);
+ sprite._moveable = ((sprite._colorcode & 0x80) == 0x80);
+ sprite._moveable = ((sprite._colorcode & 0x80) == 0x80);
+ }
break;
- case 21: {
- byte blendAmount = stream.readByte();
-
- if (sprite._puppet || sprite.getAutoPuppet(kAPBlend))
- continue;
-
- sprite._blendAmount = blendAmount;
+ case 21:
+ if (sprite._puppet) {
+ stream.readByte();
+ } else {
+ sprite._blendAmount = stream.readByte();
}
break;
case 22:
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 843af364693..3290f00d7d8 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -75,6 +75,8 @@ void Sprite::reset() {
_volume = 0;
_stretch = false;
+
+ _spriteListIdx = 0;
}
Sprite& Sprite::operator=(const Sprite &sprite) {
@@ -122,6 +124,8 @@ Sprite& Sprite::operator=(const Sprite &sprite) {
_volume = sprite._volume;
_stretch = sprite._stretch;
+ _spriteListIdx = sprite._spriteListIdx;
+
return *this;
}
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index 765fb70bfc2..66ca94b4310 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -138,6 +138,8 @@ public:
byte _volume;
bool _stretch;
+
+ uint32 _spriteListIdx;
};
} // End of namespace Director
Commit: fb14538f6f14713ea0aa07e73ee82a42a945742d
https://github.com/scummvm/scummvm/commit/fb14538f6f14713ea0aa07e73ee82a42a945742d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-27T00:44:50+02:00
Commit Message:
iDIRECTOR: Fix incorrect puppeted sprite writing
Changed paths:
engines/director/frame.cpp
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index bda6f567263..6ae71e145c5 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -783,10 +783,9 @@ void writeSpriteDataD4(Common::SeekableWriteStream *writeStream, Sprite &sprite)
// The original data for a certain sprite might be less
writeStream->writeByte(sprite._scriptId.member); // 0
- // If the sprite is a puppet (controlled by lingo scripting)
- // The rest of the data isn't read
if (sprite._puppet) {
- writeStream->write(0, 19); // 1-19
+ for (int i = 1; i < kSprChannelSizeD4; i++)
+ writeStream->writeByte(0);
} else {
writeStream->writeByte((byte) sprite._spriteType); // 1
writeStream->writeByte(sprite._foreColor); // 2
@@ -1160,10 +1159,9 @@ void writeSpriteDataD5(Common::SeekableWriteStream *writeStream, Sprite &sprite)
// The original data for a certain sprite might be less
writeStream->writeByte(sprite._spriteType); // 0
- // If the sprite is a puppet (controlled by lingo scripting)
- // The rest of the data isn't read
if (sprite._puppet) {
- writeStream->write(0, 19); // 1-19
+ for (int i = 1; i < kSprChannelSizeD5; i++)
+ writeStream->writeByte(0);
} else {
writeStream->writeByte(sprite._inkData); // 1
writeStream->writeSint16BE(sprite._castId.castLib); // 2, 3
More information about the Scummvm-git-logs
mailing list