[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