[Scummvm-git-logs] scummvm master -> 77dc1a81ddbebedaaf9605410dfb4c4a4f8cdc09
sev-
noreply at scummvm.org
Tue Aug 26 17:11:25 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:
bbf4800514 DIRECTOR: Tidy up VWSC resource header reading
77dc1a81dd DIRECTOR: Initial code for D6 VWSC reading
Commit: bbf4800514ff5e7eda038c3fb8560a8ff34605f7
https://github.com/scummvm/scummvm/commit/bbf4800514ff5e7eda038c3fb8560a8ff34605f7
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-26T11:10:39+02:00
Commit Message:
DIRECTOR: Tidy up VWSC resource header reading
Changed paths:
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 5f9716598ff..d844f2736f6 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1751,9 +1751,9 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
if (version < kFileVer400) {
_numChannelsDisplayed = 30;
- } else if (version >= kFileVer400 && version < kFileVer600) {
- uint32 frame1Offset = _framesStream->readUint32();
- /* uint32 numOfFrames = */ _framesStream->readUint32();
+ } else if (version >= kFileVer400 && version < kFileVer1100) {
+ _frame1Offset = _framesStream->readUint32();
+ _numOfFrames = _framesStream->readUint32();
_framesVersion = _framesStream->readUint16();
_spriteRecordSize = _framesStream->readUint16();
_numChannels = _framesStream->readUint16();
@@ -1769,8 +1769,8 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
_framesStream->readUint16(); // Skip
}
- debugC(1, kDebugLoading, "Score::loadFrames(): frame1Offset: 0x%x, version: %d, spriteRecordSize: 0x%x, numChannels: %d, numChannelsDisplayed: %d",
- frame1Offset, _framesVersion, _spriteRecordSize, _numChannels, _numChannelsDisplayed);
+ debugC(1, kDebugLoading, "Score::loadFrames(): size: %d, frame1Offset: %d, numOfFrames: %d, version: %d, spriteRecordSize: %d, numChannels: %d, numChannelsDisplayed: %d",
+ _framesStreamSize, _frame1Offset, _numOfFrames, _framesVersion, _spriteRecordSize, _numChannels, _numChannelsDisplayed);
// Unknown, some bytes - constant (refer to contuinity).
} else {
error("STUB: Score::loadFrames(): score not yet supported for version v%d (%d)", humanVersion(version), version);
@@ -1788,8 +1788,8 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
_firstFramePosition = _framesStream->pos();
// Pre-computing number of frames, as sometimes the frameNumber in stream mismatches
- debugC(1, kDebugLoading, "Score::loadFrames(): Precomputing total number of frames! First frame pos: %d, framesstreamsizeL %d",
- _firstFramePosition, _framesStreamSize);
+ debugC(1, kDebugLoading, "Score::loadFrames(): Precomputing total number of frames! First frame pos: %d",
+ _firstFramePosition);
// Calculate number of frames and their positions
// numOfFrames in the header is often incorrect
diff --git a/engines/director/score.h b/engines/director/score.h
index 12a0796e666..1b05aeaa47a 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -170,13 +170,20 @@ public:
Frame *_currentFrame;
uint32 _curFrameNumber;
uint32 _numFrames;
- uint32 _framesVersion;
- uint32 _numChannels;
uint8 _currentTempo;
CastMemberID _currentPaletteId;
+ // header D4+
+ uint32 _framesStreamSize;
+ int32 _frame1Offset;
+ int32 _numOfFrames;
+ uint16 _framesVersion;
+ uint16 _spriteRecordSize;
+ uint16 _numChannels;
+ int16 _numChannelsDisplayed; // D7+, no-op in earlier versions
+ // 20 bytes in total
+
uint _firstFramePosition;
- uint _framesStreamSize;
Common::MemoryReadStreamEndian *_framesStream;
byte _currentFrameRate;
@@ -202,11 +209,6 @@ public:
CursorRef _currentCursor;
bool _skipTransition;
- int _numChannelsDisplayed;
-
- /* Data to be saved */
- uint16 _spriteRecordSize;
-
private:
DirectorEngine *_vm;
Lingo *_lingo;
Commit: 77dc1a81ddbebedaaf9605410dfb4c4a4f8cdc09
https://github.com/scummvm/scummvm/commit/77dc1a81ddbebedaaf9605410dfb4c4a4f8cdc09
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-26T18:35:40+02:00
Commit Message:
DIRECTOR: Initial code for D6 VWSC reading
Changed paths:
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index d844f2736f6..902acf65e48 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1747,11 +1747,13 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
_framesStream->hexdump(_framesStream->size());
}
- _framesStreamSize = _framesStream->readUint32();
-
if (version < kFileVer400) {
+ _framesStreamSize = _framesStream->readUint32();
_numChannelsDisplayed = 30;
- } else if (version >= kFileVer400 && version < kFileVer1100) {
+
+ _firstFramePosition = _framesStream->pos();
+ } else if (version >= kFileVer400 && version < kFileVer600) {
+ _framesStreamSize = _framesStream->readUint32();
_frame1Offset = _framesStream->readUint32();
_numOfFrames = _framesStream->readUint32();
_framesVersion = _framesStream->readUint16();
@@ -1769,9 +1771,40 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
_framesStream->readUint16(); // Skip
}
+ _firstFramePosition = _framesStream->pos();
+
debugC(1, kDebugLoading, "Score::loadFrames(): size: %d, frame1Offset: %d, numOfFrames: %d, version: %d, spriteRecordSize: %d, numChannels: %d, numChannelsDisplayed: %d",
_framesStreamSize, _frame1Offset, _numOfFrames, _framesVersion, _spriteRecordSize, _numChannels, _numChannelsDisplayed);
- // Unknown, some bytes - constant (refer to contuinity).
+ } else if (version >= kFileVer600 && version < kFileVer1100) {
+ _framesStreamSize = _framesStream->readUint32();
+ int32 ver = (int32)_framesStream->readUint32();
+ uint32 listStart = _framesStream->readUint32();
+
+ debugC(1, kDebugLoading, "Score::loadFrames(): len: %d, version: %d, listStart: 0x%x",
+ _framesStreamSize, ver, listStart);
+
+ _framesStream->seek(listStart);
+ int32 numEntries = (int32)_framesStream->readUint32();
+ int32 listSize = (int32)_framesStream->readUint32();
+ int32 maxDataLen = (int32)_framesStream->readUint32();
+
+ debugC(1, kDebugLoading, "Score::loadFrames(): numEntries: %d, maxVar: %d, maxDataLen: 0x%x",
+ numEntries, listSize, maxDataLen);
+
+ _frame1Offset = listStart + 6 * 3 + listSize * 4;
+ _indexStart = listStart + 6 + 3;
+
+ _firstFramePosition = _frame1Offset;
+
+ int prevOff = 0;
+ for (int i = 0; i < numEntries; i++) {
+ uint32 off = _framesStream->readUint32();
+ if (i > 0) {
+ debugC(2, kDebugLoading, " Score::loadFrames(): entry %d offset: 0x%x (%d), size: %d",
+ i - 1, prevOff, prevOff, off - prevOff);
+ }
+ prevOff = off;
+ }
} else {
error("STUB: Score::loadFrames(): score not yet supported for version v%d (%d)", humanVersion(version), version);
}
@@ -1785,10 +1818,9 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
// Prepare frameOffsets
_version = version;
- _firstFramePosition = _framesStream->pos();
// Pre-computing number of frames, as sometimes the frameNumber in stream mismatches
- debugC(1, kDebugLoading, "Score::loadFrames(): Precomputing total number of frames! First frame pos: %d",
+ debugC(1, kDebugLoading, "Score::loadFrames(): Precomputing total number of frames! First frame pos: 0x%x",
_firstFramePosition);
// Calculate number of frames and their positions
@@ -1826,9 +1858,17 @@ bool Score::loadFrame(int frameNum, bool loadCast) {
it->reset();
}
- debugC(7, kDebugLoading, "****** Source frame %d to Destination frame %d, current offset %" PRId64, sourceFrame, targetFrame, _framesStream->pos());
+ debugC(7, kDebugLoading, "****** Source frame %d to Destination frame %d, current offset 0x%x", sourceFrame, targetFrame, (uint32)_framesStream->pos());
while (sourceFrame < targetFrame - 1 && readOneFrame()) {
+ if (_version >= kFileVer600 && _version < kFileVer1100) {
+ _framesStream->seek(_indexStart + sourceFrame * 4);
+ uint32 off = _framesStream->readUint32();
+ //uint32 size = _framesStream->readUint32() - off;
+
+ _framesStream->seek(_frame1Offset + off);
+ }
+
sourceFrame++;
}
diff --git a/engines/director/score.h b/engines/director/score.h
index 1b05aeaa47a..02cc2401a29 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -184,6 +184,7 @@ public:
// 20 bytes in total
uint _firstFramePosition;
+ uint _indexStart = 0;
Common::MemoryReadStreamEndian *_framesStream;
byte _currentFrameRate;
More information about the Scummvm-git-logs
mailing list