[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