[Scummvm-git-logs] scummvm master -> 605eaa9a5753398a372a4a327a11dda718563fd8

sev- noreply at scummvm.org
Wed Aug 27 22:12:06 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:
3462e9e1bf DIRECTOR: Fix saving D4/D5 score data
605eaa9a57 DIRECTOR: Implement D6 main channel saving


Commit: 3462e9e1bf7d65d4971bd8ba082944bbd98ccf87
    https://github.com/scummvm/scummvm/commit/3462e9e1bf7d65d4971bd8ba082944bbd98ccf87
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-28T00:11:54+02:00

Commit Message:
DIRECTOR: Fix saving D4/D5 score data

We must always store the score data, not skipping it for the puppeted
sprites. Otherwise, score will beome empty and broken

Changed paths:
    engines/director/frame.cpp


diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 430d52cdc02..20b9da66d2b 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -782,34 +782,26 @@ void readSpriteDataD4(Common::SeekableReadStreamEndian &stream, Sprite &sprite,
 }
 
 void writeSpriteDataD4(Common::SeekableWriteStream *writeStream, Sprite &sprite) {
-	// Writing 20 bytes of sprite data
-	// The original data for a certain sprite might be less
 	writeStream->writeByte(sprite._scriptId.member);			// 0
-
-	if (sprite._puppet) {
-		for (int i = 1; i < kSprChannelSizeD4; i++)
-			writeStream->writeByte(0);
+	writeStream->writeByte((byte) sprite._spriteType);		// 1
+	writeStream->writeByte(sprite._foreColor);				// 2
+	writeStream->writeByte(sprite._backColor);				// 3
+	writeStream->writeByte(sprite._thickness);				// 4
+	writeStream->writeByte(sprite._inkData);				// 5
+
+	if (sprite.isQDShape()) {
+		writeStream->writeUint16BE(sprite._pattern);		// 6, 7
 	} else {
-		writeStream->writeByte((byte) sprite._spriteType);		// 1
-		writeStream->writeByte(sprite._foreColor);				// 2
-		writeStream->writeByte(sprite._backColor);				// 3
-		writeStream->writeByte(sprite._thickness);				// 4
-		writeStream->writeByte(sprite._inkData);				// 5
-
-		if (sprite.isQDShape()) {
-			writeStream->writeUint16BE(sprite._pattern);		// 6, 7
-		} else {
-			writeStream->writeUint16BE(sprite._castId.member);	// 6, 7
-		}
-
-		writeStream->writeUint16BE(sprite._startPoint.y);		// 8, 9
-		writeStream->writeUint16BE(sprite._startPoint.x);		// 10, 11
-		writeStream->writeUint16BE(sprite._height);				// 12, 13
-		writeStream->writeUint16BE(sprite._width);				// 14, 15
-		writeStream->writeUint16BE(sprite._scriptId.member);	// 16, 17
-		writeStream->writeByte(sprite._colorcode);				// 18
-		writeStream->writeByte(sprite._blendAmount);			// 19
+		writeStream->writeUint16BE(sprite._castId.member);	// 6, 7
 	}
+
+	writeStream->writeUint16BE(sprite._startPoint.y);		// 8, 9
+	writeStream->writeUint16BE(sprite._startPoint.x);		// 10, 11
+	writeStream->writeUint16BE(sprite._height);				// 12, 13
+	writeStream->writeUint16BE(sprite._width);				// 14, 15
+	writeStream->writeUint16BE(sprite._scriptId.member);	// 16, 17
+	writeStream->writeByte(sprite._colorcode);				// 18
+	writeStream->writeByte(sprite._blendAmount);			// 19
 }
 
 /**************************
@@ -987,22 +979,22 @@ void Frame::writeMainChannelsD5(Common::SeekableWriteStream *writeStream) {
 	writeStream->writeByte(_mainChannels.colorScript);				// 19
 	writeStream->writeByte(_mainChannels.colorTrans);				// 20
 
-	writeStream->writeByte(_mainChannels.tempo);			// 21
-	writeStream->writeUint16BE(0);		// Unknown	// 22, 23
+	writeStream->writeByte(_mainChannels.tempo);					// 21
+	writeStream->writeUint16BE(0);									// Unknown	// 22, 23
 
-	writeStream->writeSint16BE(_mainChannels.palette.paletteId.castLib);		// 24, 25
-	writeStream->writeSint16BE(_mainChannels.palette.paletteId.member);			// 26, 27
-	writeStream->writeByte(_mainChannels.palette.speed);					// 28
-	writeStream->writeByte(_mainChannels.palette.flags);					// 29
-	writeStream->writeByte(_mainChannels.palette.firstColor ^ 0x80);		// 30
-	writeStream->writeByte(_mainChannels.palette.lastColor ^ 0x80);				// 31
+	writeStream->writeSint16BE(_mainChannels.palette.paletteId.castLib);	// 24, 25
+	writeStream->writeSint16BE(_mainChannels.palette.paletteId.member);		// 26, 27
+	writeStream->writeByte(_mainChannels.palette.speed);				// 28
+	writeStream->writeByte(_mainChannels.palette.flags);				// 29
+	writeStream->writeByte(_mainChannels.palette.firstColor ^ 0x80);	// 30
+	writeStream->writeByte(_mainChannels.palette.lastColor ^ 0x80);		// 31
 
-	writeStream->writeUint16BE(_mainChannels.palette.frameCount);			// 32, 33
-	writeStream->writeUint16BE(_mainChannels.palette.cycleCount);			// 34, 35
+	writeStream->writeUint16BE(_mainChannels.palette.frameCount);		// 32, 33
+	writeStream->writeUint16BE(_mainChannels.palette.cycleCount);		// 34, 35
 	writeStream->writeByte(_mainChannels.palette.fade);					// 36
-	writeStream->writeByte(_mainChannels.palette.delay);					// 37
-	writeStream->writeByte(_mainChannels.palette.style);					// 38
-	writeStream->writeByte(_mainChannels.palette.colorCode);				// 39
+	writeStream->writeByte(_mainChannels.palette.delay);				// 37
+	writeStream->writeByte(_mainChannels.palette.style);				// 38
+	writeStream->writeByte(_mainChannels.palette.colorCode);			// 39
 
 	writeStream->writeUint64BE(0);		// Unknown 	// 40, 41, 42, 43, 44, 45, 46, 47
 }
@@ -1166,30 +1158,22 @@ void readSpriteDataD5(Common::SeekableReadStreamEndian &stream, Sprite &sprite,
 }
 
 void writeSpriteDataD5(Common::SeekableWriteStream *writeStream, Sprite &sprite) {
-	// Writing 24 bytes of sprite data
-	// The original data for a certain sprite might be less
-	writeStream->writeByte(sprite._spriteType);			// 0
-
-	if (sprite._puppet) {
-		for (int i = 1; i < kSprChannelSizeD5; i++)
-			writeStream->writeByte(0);
-	} else {
-		writeStream->writeByte(sprite._inkData);				// 1
-		writeStream->writeSint16BE(sprite._castId.castLib);		// 2, 3
-		writeStream->writeUint16BE(sprite._castId.member);		// 4, 5
-		writeStream->writeSint16BE(sprite._scriptId.castLib);	// 6, 7
-		writeStream->writeUint16BE(sprite._scriptId.member);	// 8, 9
-		writeStream->writeByte(sprite._foreColor);				// 10
-		writeStream->writeByte(sprite._backColor);				// 11
-		writeStream->writeUint16BE(sprite._startPoint.y);		// 12, 13
-		writeStream->writeUint16BE(sprite._startPoint.x);		// 14, 15
-		writeStream->writeUint16BE(sprite._height);				// 16, 17
-		writeStream->writeUint16BE(sprite._width);				// 18, 19
-		writeStream->writeByte(sprite._colorcode);				// 20
-		writeStream->writeByte(sprite._blendAmount);			// 21
-		writeStream->writeByte(sprite._thickness);				// 22
-		writeStream->writeByte(0);								// 23, unused
-	}
+	writeStream->writeByte(sprite._spriteType);				// 0
+	writeStream->writeByte(sprite._inkData);				// 1
+	writeStream->writeSint16BE(sprite._castId.castLib);		// 2, 3
+	writeStream->writeUint16BE(sprite._castId.member);		// 4, 5
+	writeStream->writeSint16BE(sprite._scriptId.castLib);	// 6, 7
+	writeStream->writeUint16BE(sprite._scriptId.member);	// 8, 9
+	writeStream->writeByte(sprite._foreColor);				// 10
+	writeStream->writeByte(sprite._backColor);				// 11
+	writeStream->writeUint16BE(sprite._startPoint.y);		// 12, 13
+	writeStream->writeUint16BE(sprite._startPoint.x);		// 14, 15
+	writeStream->writeUint16BE(sprite._height);				// 16, 17
+	writeStream->writeUint16BE(sprite._width);				// 18, 19
+	writeStream->writeByte(sprite._colorcode);				// 20
+	writeStream->writeByte(sprite._blendAmount);			// 21
+	writeStream->writeByte(sprite._thickness);				// 22
+	writeStream->writeByte(0);								// 23, unused
 }
 
 /**************************


Commit: 605eaa9a5753398a372a4a327a11dda718563fd8
    https://github.com/scummvm/scummvm/commit/605eaa9a5753398a372a4a327a11dda718563fd8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-28T00:11:55+02:00

Commit Message:
DIRECTOR: Implement D6 main channel saving

Changed paths:
    engines/director/frame.cpp


diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 20b9da66d2b..26f61146383 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -1380,7 +1380,75 @@ void Frame::readMainChannelsD6(Common::MemoryReadStreamEndian &stream, uint16 of
 }
 
 void Frame::writeMainChannelsD6(Common::SeekableWriteStream *writeStream) {
-	warning("STUB: Frame::writeMainChannelsD6()");
+	// Sound2
+	writeStream->writeUint16BE(_mainChannels.sound1.castLib);			// 0
+	writeStream->writeUint16BE(_mainChannels.sound1.member);			// 2
+	writeStream->writeUint32BE(_mainChannels.sound1SpriteListIdx);		// 4
+	writeStream->writeUint16BE(_mainChannels.sound1SpriteListIdx);		// 6
+	writeStream->writeByte(_mainChannels.colorSound1);					// 8
+	// 15 empty bytes
+	writeStream->writeByte(0);											// 9
+	writeStream->writeUint64BE(0);										// 10
+	writeStream->writeUint32BE(0);										// 18
+	writeStream->writeUint16BE(0);										// 22
+
+	// Sound2
+	writeStream->writeUint16BE(_mainChannels.sound2.castLib);			// 24+0
+	writeStream->writeUint16BE(_mainChannels.sound2.member);			// 24+2
+	writeStream->writeUint32BE(_mainChannels.sound2SpriteListIdx);		// 24+4
+	writeStream->writeUint16BE(_mainChannels.sound2SpriteListIdx);		// 24+6
+	writeStream->writeByte(_mainChannels.colorSound2);					// 24+8
+	// 15 empty bytes
+	writeStream->writeByte(0);											// 24+9
+	writeStream->writeUint64BE(0);										// 24+10
+	writeStream->writeUint32BE(0);										// 24+18
+	writeStream->writeUint16BE(0);										// 24+22
+
+	// Palette
+	writeStream->writeUint16BE(_mainChannels.palette.paletteId.castLib);	// 48+0
+	writeStream->writeUint16BE(_mainChannels.palette.paletteId.member);		// 48+2
+	writeStream->writeByte(_mainChannels.palette.speed);					// 48+4
+	writeStream->writeByte(_mainChannels.palette.flags);					// 48+5
+	writeStream->writeByte(_mainChannels.palette.firstColor);				// 48+6
+	writeStream->writeByte(_mainChannels.palette.lastColor);				// 48+7
+	writeStream->writeUint16BE(_mainChannels.palette.frameCount);			// 48+8
+	writeStream->writeUint16BE(_mainChannels.palette.cycleCount);			// 48+10
+	writeStream->writeByte(_mainChannels.palette.fade);						// 48+12
+	writeStream->writeByte(_mainChannels.palette.delay);					// 48+13
+	writeStream->writeByte(_mainChannels.palette.style);					// 48+14
+	writeStream->writeByte(_mainChannels.palette.colorCode);				// 48+15
+	writeStream->writeUint32BE(_mainChannels.palette.spriteListIdx);		// 48+16
+	writeStream->writeUint32BE(0);											// 48+20
+
+	// Transition
+	writeStream->writeUint16BE(_mainChannels.trans.castLib);				// 72+0
+	writeStream->writeUint16BE(_mainChannels.trans.member);					// 72+2
+	writeStream->writeUint32BE(_mainChannels.transSpriteListIdx);			// 72+4
+	writeStream->writeByte(_mainChannels.colorTrans);						// 72+8
+	// 15 empty bytes
+	writeStream->writeByte(0);												// 72+9
+	writeStream->writeUint64BE(0);											// 72+10
+	writeStream->writeUint32BE(0);											// 72+18
+	writeStream->writeUint16BE(0);											// 72+22
+
+	// Tempo
+	writeStream->writeUint32BE(_mainChannels.tempoSpriteListIdx);			// 96+0
+	writeStream->writeUint16BE(_mainChannels.tempoD6Flags);					// 96+4
+	writeStream->writeByte(_mainChannels.tempo);							// 96+6
+	writeStream->writeByte(_mainChannels.colorTempo);						// 96+7
+	writeStream->writeUint64BE(0);											// 96+8
+	writeStream->writeUint64BE(0);											// 96+16
+
+	// Script
+	writeStream->writeUint32BE(_mainChannels.actionId.castLib);				// 120+0
+	writeStream->writeUint16BE(_mainChannels.actionId.member);				// 120+2
+	writeStream->writeUint32BE(_mainChannels.scriptSpriteListIdx);			// 120+4
+	writeStream->writeByte(_mainChannels.colorScript);						// 120+8
+	// 15 empty bytes
+	writeStream->writeByte(0);												// 120+9
+	writeStream->writeUint64BE(0);											// 120+10
+	writeStream->writeUint32BE(0);											// 120+18
+	writeStream->writeUint16BE(0);											// 120+22
 }
 
 void Frame::readSpriteD6(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size) {




More information about the Scummvm-git-logs mailing list