[Scummvm-git-logs] scummvm master -> f6ec55a697eeb1d8e30247211db18fd9021ec852
sev-
noreply at scummvm.org
Thu Sep 11 22:48:54 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:
aabc251133 DIRECTOR: DT: Parse and display Sprite Behaviors in Channels window
f6ec55a697 DIRECTOR: DT: Display sprite name in Channels window
Commit: aabc25113317db744f74fb9d9f84955065c51ea8
https://github.com/scummvm/scummvm/commit/aabc25113317db744f74fb9d9f84955065c51ea8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-12T00:48:24+02:00
Commit Message:
DIRECTOR: DT: Parse and display Sprite Behaviors in Channels window
Changed paths:
engines/director/debugger/dt-score.cpp
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/debugger/dt-score.cpp b/engines/director/debugger/dt-score.cpp
index e3b576bb962..52678ab679a 100644
--- a/engines/director/debugger/dt-score.cpp
+++ b/engines/director/debugger/dt-score.cpp
@@ -19,6 +19,8 @@
*
*/
+#include "common/memstream.h"
+
#include "backends/imgui/IconsMaterialSymbols.h"
#include "director/director.h"
#include "director/debugger/dt-internal.h"
@@ -768,7 +770,11 @@ void showChannels() {
ImGui::TableSetupColumn("type", flags);
ImGui::TableSetupColumn("fg", flags);
ImGui::TableSetupColumn("bg", flags);
- ImGui::TableSetupColumn("script", flags);
+ if (score->_version >= kFileVer600) {
+ ImGui::TableSetupColumn("behaviors", flags);
+ } else {
+ ImGui::TableSetupColumn("script", flags);
+ }
ImGui::TableSetupColumn("colorcode", flags);
ImGui::TableSetupColumn("blendAmount", flags);
ImGui::TableSetupColumn("unk3", flags);
@@ -861,13 +867,38 @@ void showChannels() {
ImGui::ColorButton("backColor", convertColor(sprite._backColor));
ImGui::PopID();
ImGui::TableNextColumn();
- // Check early for non integer script ids
- if (sprite._scriptId.member) {
- displayScriptRef(sprite._scriptId);
+
+ if (score->_version >= kFileVer600) {
+ // Check early for non integer script ids
+ if (sprite._spriteListIdx) {
+ Common::MemoryReadStreamEndian *stream = score->getSpriteDetailsStream(sprite._spriteListIdx + 1);
+
+ if (stream) {
+ BehaviorElement behavior;
+ while (stream->pos() < stream->size()) {
+ behavior.read(*stream);
+ displayScriptRef(behavior.memberID);
+ ImGui::SameLine();
+ ImGui::Text(",%d", behavior.initOffset);
+ }
+ } else {
+ ImGui::Text(" ");
+ }
+ delete stream;
+ } else {
+ ImGui::PushID(i + 1);
+ ImGui::TextUnformatted(" ");
+ ImGui::PopID();
+ }
} else {
- ImGui::PushID(i + 1);
- ImGui::TextUnformatted(" ");
- ImGui::PopID();
+ // Check early for non integer script ids
+ if (sprite._scriptId.member) {
+ displayScriptRef(sprite._scriptId);
+ } else {
+ ImGui::PushID(i + 1);
+ ImGui::TextUnformatted(" ");
+ ImGui::PopID();
+ }
}
ImGui::TableNextColumn();
ImGui::Text("0x%x", sprite._colorcode);
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 06e526dc2fc..2bdccb2fda1 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1770,18 +1770,22 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
int32 listSize = (int32)_framesStream->readUint32();
int32 maxDataLen = (int32)_framesStream->readUint32();
- debugC(1, kDebugLoading, "Score::loadFrames(): numEntries: %d, maxVar: %d, maxDataLen: 0x%x",
+ debugC(1, kDebugLoading, "Score::loadFrames(): Sprite Details: numEntries: %d, maxVar: %d, maxDataLen: 0x%x",
numEntries, listSize, maxDataLen);
// 3 * 4 = 3 int32 from above
_indexStart = listStart + 3 * 4;
_frameDataOffset = _indexStart + listSize * 4;
+ _spriteDetailOffsets.resize(numEntries);
+
int prevOff = 0;
for (int i = 0; i < numEntries; i++) {
uint32 off = _framesStream->readUint32();
+ _spriteDetailOffsets[i] = _frameDataOffset + off;
+
if (i > 0) {
- debugC(2, kDebugLoading, " Score::loadFrames(): entry %d offset: 0x%x (%d) -> 0x%x, size: %d",
+ debugC(2, kDebugLoading, " Detail entry %d offset: 0x%x (%d) -> 0x%x, size: %d",
i - 1, prevOff, prevOff, _frameDataOffset + prevOff, off - prevOff);
}
prevOff = off;
@@ -2248,4 +2252,25 @@ uint32 Score::getVWSCResourceSize() {
return _firstFramePosition + framesSize;
}
+Common::MemoryReadStreamEndian *Score::getSpriteDetailsStream(int spriteIdx) {
+ Common::MemoryReadStreamEndian *stream = nullptr;
+
+ if (!_framesStream || _spriteDetailOffsets.size() == 0)
+ return nullptr;
+
+ if (spriteIdx >= 0 && spriteIdx < _spriteDetailOffsets.size() - 1) {
+ uint32 size = _spriteDetailOffsets[spriteIdx + 1] - _spriteDetailOffsets[spriteIdx];
+
+ if (!size)
+ return nullptr;
+
+ byte *data = new byte[size];
+ _framesStream->seek(_spriteDetailOffsets[spriteIdx], SEEK_SET);
+ _framesStream->read(data, size);
+ stream = new Common::MemoryReadStreamEndian(data, size, _framesStream->isBE(), DisposeAfterUse::YES);
+ }
+
+ return stream;
+}
+
} // End of namespace Director
diff --git a/engines/director/score.h b/engines/director/score.h
index 2011278b062..9a7b5bd6287 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -63,7 +63,13 @@ struct Label {
struct BehaviorElement {
CastMemberID memberID;
- int32 initOffset;
+ int32 initOffset = 0;
+
+ void read(Common::ReadStreamEndian &stream) {
+ memberID.member = (int16)stream.readUint16();
+ memberID.castLib = (int16)stream.readUint16();
+ initOffset = (int32)stream.readUint32();
+ }
};
class Score {
@@ -147,6 +153,8 @@ public:
Common::String formatChannelInfo();
bool processFrozenPlayScript();
+ Common::MemoryReadStreamEndian *getSpriteDetailsStream(int spriteIdx);
+
private:
bool isWaitingForNextFrame();
void updateCurrentFrame();
@@ -218,6 +226,8 @@ public:
CursorRef _currentCursor;
bool _skipTransition;
+ Common::Array<uint32> _spriteDetailOffsets;
+
private:
DirectorEngine *_vm;
Lingo *_lingo;
Commit: f6ec55a697eeb1d8e30247211db18fd9021ec852
https://github.com/scummvm/scummvm/commit/f6ec55a697eeb1d8e30247211db18fd9021ec852
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-12T00:48:24+02:00
Commit Message:
DIRECTOR: DT: Display sprite name in Channels window
Changed paths:
engines/director/debugger/dt-score.cpp
diff --git a/engines/director/debugger/dt-score.cpp b/engines/director/debugger/dt-score.cpp
index 52678ab679a..c48a279b352 100644
--- a/engines/director/debugger/dt-score.cpp
+++ b/engines/director/debugger/dt-score.cpp
@@ -755,7 +755,13 @@ void showChannels() {
ImGui::Text("SND: 2 sound2: %d, soundType2: %d", frame._mainChannels.sound2.member, frame._mainChannels.soundType2);
ImGui::Text("LSCR: actionId: %s", frame._mainChannels.actionId.asString().c_str());
- if (ImGui::BeginTable("Channels", 22, ImGuiTableFlags_Borders | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg)) {
+ int columns = 22;
+
+ if (score->_version >= kFileVer600) {
+ columns += 1; // sprite name
+ }
+
+ if (ImGui::BeginTable("Channels", columns, ImGuiTableFlags_Borders | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg)) {
ImGuiTableFlags flags = ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader;
ImGui::TableSetupColumn("##toggle", flags);
ImGui::TableSetupColumn("CH", flags);
@@ -775,6 +781,8 @@ void showChannels() {
} else {
ImGui::TableSetupColumn("script", flags);
}
+ if (score->_version >= kFileVer600)
+ ImGui::TableSetupColumn("name", flags);
ImGui::TableSetupColumn("colorcode", flags);
ImGui::TableSetupColumn("blendAmount", flags);
ImGui::TableSetupColumn("unk3", flags);
@@ -869,7 +877,6 @@ void showChannels() {
ImGui::TableNextColumn();
if (score->_version >= kFileVer600) {
- // Check early for non integer script ids
if (sprite._spriteListIdx) {
Common::MemoryReadStreamEndian *stream = score->getSpriteDetailsStream(sprite._spriteListIdx + 1);
@@ -900,6 +907,20 @@ void showChannels() {
ImGui::PopID();
}
}
+
+ if (score->_version >= kFileVer600) {
+ ImGui::TableNextColumn();
+ if (sprite._spriteListIdx) {
+ Common::MemoryReadStreamEndian *stream = score->getSpriteDetailsStream(sprite._spriteListIdx + 2);
+ Common::String name;
+ if (stream)
+ name = stream->readPascalString();
+ ImGui::Text("%s", name.c_str());
+ } else {
+ ImGui::Text(" ");
+ }
+ }
+
ImGui::TableNextColumn();
ImGui::Text("0x%x", sprite._colorcode);
ImGui::TableNextColumn();
More information about the Scummvm-git-logs
mailing list