[Scummvm-git-logs] scummvm master -> 606a1d0eb65a2540cd0c7d717a7921ed16bc2563
elasota
noreply at scummvm.org
Wed Dec 28 13:25:42 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
606a1d0eb6 MTROPOLIS: Add support for setting mToon range to a label. Fixes MTI Benbow moose head.
Commit: 606a1d0eb65a2540cd0c7d717a7921ed16bc2563
https://github.com/scummvm/scummvm/commit/606a1d0eb65a2540cd0c7d717a7921ed16bc2563
Author: elasota (ejlasota at gmail.com)
Date: 2022-12-28T08:15:44-05:00
Commit Message:
MTROPOLIS: Add support for setting mToon range to a label. Fixes MTI Benbow moose head.
Changed paths:
engines/mtropolis/elements.cpp
engines/mtropolis/runtime.cpp
engines/mtropolis/runtime.h
diff --git a/engines/mtropolis/elements.cpp b/engines/mtropolis/elements.cpp
index fda3b109121..4c51d2741f8 100644
--- a/engines/mtropolis/elements.cpp
+++ b/engines/mtropolis/elements.cpp
@@ -1553,6 +1553,26 @@ MiniscriptInstructionOutcome MToonElement::scriptSetRange(MiniscriptThread *thre
return scriptSetRangeTyped(thread, value.getIntRange());
if (value.getType() == DynamicValueTypes::kPoint)
return scriptSetRangeTyped(thread, value.getPoint());
+ if (value.getType() == DynamicValueTypes::kLabel) {
+ const Common::String *nameStrPtr = thread->getRuntime()->getProject()->findNameOfLabel(value.getLabel());
+ if (!nameStrPtr) {
+ thread->error("mToon range label wasn't found");
+ return kMiniscriptInstructionOutcomeFailed;
+ }
+
+ if (!_metadata) {
+ thread->error("mToon range couldn't be resolved because the metadata wasn't loaded yet");
+ return kMiniscriptInstructionOutcomeFailed;
+ }
+
+ for (const MToonMetadata::FrameRangeDef &frameRange : _metadata->frameRanges) {
+ if (caseInsensitiveEqual(frameRange.name, *nameStrPtr))
+ return scriptSetRangeTyped(thread, IntRange(frameRange.startFrame, frameRange.endFrame));
+ }
+
+ thread->error("mToon range was assigned to a label but the label doesn't exist in the mToon data");
+ return kMiniscriptInstructionOutcomeFailed;
+ }
thread->error("Invalid type for mToon range");
return kMiniscriptInstructionOutcomeFailed;
diff --git a/engines/mtropolis/runtime.cpp b/engines/mtropolis/runtime.cpp
index 454e5f62fe0..cb1014cd734 100644
--- a/engines/mtropolis/runtime.cpp
+++ b/engines/mtropolis/runtime.cpp
@@ -7104,6 +7104,23 @@ Common::SeekableReadStream* Project::getStreamForSegment(int segmentIndex) {
return _segments[segmentIndex].weakStream;
}
+const Common::String *Project::findNameOfLabel(const Label &label) const {
+ for (const LabelSuperGroup &superGroup : _labelSuperGroups) {
+ if (superGroup.superGroupID == label.superGroupID) {
+ size_t firstRootIndex = superGroup.firstRootNodeIndex;
+ size_t totalNodes = superGroup.numTotalNodes;
+
+ for (size_t i = 0; i < totalNodes; i++) {
+ const LabelTree &tree = _labelTree[i + firstRootIndex];
+ if (tree.id == label.id)
+ return &tree.name;
+ }
+ }
+ }
+
+ return nullptr;
+}
+
Common::SharedPtr<SegmentUnloadSignaller> Project::notifyOnSegmentUnload(int segmentIndex, ISegmentUnloadSignalReceiver *receiver) {
Common::SharedPtr<SegmentUnloadSignaller> signaller = _segments[segmentIndex].unloadSignaller;
if (signaller)
@@ -7372,6 +7389,7 @@ void Project::loadLabelMap(const Data::ProjectLabelMap &projectLabelMap) {
sg.superGroupID = dataSG.id;
sg.firstRootNodeIndex = insertionOffset;
+ sg.numRootNodes = dataSG.numChildren;
for (size_t j = 0; j < dataSG.numChildren; j++)
treeQueue[insertionOffset++] = &dataSG.tree[j];
diff --git a/engines/mtropolis/runtime.h b/engines/mtropolis/runtime.h
index 4bd33306828..235108b8592 100644
--- a/engines/mtropolis/runtime.h
+++ b/engines/mtropolis/runtime.h
@@ -2385,6 +2385,8 @@ public:
void closeSegmentStream(int segmentIndex);
Common::SeekableReadStream *getStreamForSegment(int segmentIndex);
+ const Common::String *findNameOfLabel(const Label &label) const;
+
void onPostRender();
void onKeyboardEvent(Runtime *runtime, const Common::EventType evtType, bool repeat, const Common::KeyState &keyEvt);
More information about the Scummvm-git-logs
mailing list