[Scummvm-git-logs] scummvm master -> 8a01a57c4c431036a8e259fc2d53df4b27ed8d31

elasota noreply at scummvm.org
Sat Jan 7 03:22:22 UTC 2023


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
112c2979ca MTROPOLIS: Stub out simple motion modifier.
8a01a57c4c MTROPOLIS: Fix no-debug config.


Commit: 112c2979ca8287b783c26c5be8f2cf5c88c67200
    https://github.com/scummvm/scummvm/commit/112c2979ca8287b783c26c5be8f2cf5c88c67200
Author: elasota (ejlasota at gmail.com)
Date: 2023-01-06T22:21:45-05:00

Commit Message:
MTROPOLIS: Stub out simple motion modifier.

Changed paths:
    engines/mtropolis/data.cpp
    engines/mtropolis/data.h
    engines/mtropolis/modifier_factory.cpp
    engines/mtropolis/modifiers.cpp
    engines/mtropolis/modifiers.h
    engines/mtropolis/runtime.cpp


diff --git a/engines/mtropolis/data.cpp b/engines/mtropolis/data.cpp
index bac226b91fd..60816e2ace2 100644
--- a/engines/mtropolis/data.cpp
+++ b/engines/mtropolis/data.cpp
@@ -95,6 +95,7 @@ bool isModifier(DataObjectType type) {
 	case kChangeSceneModifier:
 	case kReturnModifier:
 	case kSoundEffectModifier:
+	case kSimpleMotionModifier:
 	case kDragMotionModifier:
 	case kPathMotionModifierV1:
 	case kPathMotionModifierV2:
@@ -1427,6 +1428,24 @@ DataReadErrorCode PathMotionModifier::load(DataReader &reader) {
 	return kDataReadErrorNone;
 }
 
+SimpleMotionModifier::SimpleMotionModifier()
+	: motionType(0), directionFlags(0), steps(0), delayMSecTimes4800(0), unknown1{0, 0, 0, 0} {
+}
+
+DataReadErrorCode SimpleMotionModifier::load(DataReader &reader) {
+	if (_revision != 1001)
+		return kDataReadErrorUnsupportedRevision;
+
+	if (!modHeader.load(reader))
+		return kDataReadErrorReadFailed;
+
+	if (!executeWhen.load(reader) || !terminateWhen.load(reader) || !reader.readU16(motionType) || !reader.readU16(directionFlags)
+		|| !reader.readU16(steps) || !reader.readU32(delayMSecTimes4800) || !reader.readBytes(unknown1))
+		return kDataReadErrorReadFailed;
+
+	return kDataReadErrorNone;
+}
+
 DragMotionModifier::DragMotionModifier()
 	: haveMacPart(false), haveWinPart(false), unknown1(0) {
 	memset(&this->platform, 0, sizeof(this->platform));
@@ -2443,6 +2462,9 @@ DataReadErrorCode loadDataObject(const PlugInModifierRegistry &registry, DataRea
 	case DataObjectTypes::kSoundEffectModifier:
 		dataObject = new SoundEffectModifier();
 		break;
+	case DataObjectTypes::kSimpleMotionModifier:
+		dataObject = new SimpleMotionModifier();
+		break;
 	case DataObjectTypes::kDragMotionModifier:
 		dataObject = new DragMotionModifier();
 		break;
diff --git a/engines/mtropolis/data.h b/engines/mtropolis/data.h
index a5f43e08c59..71be2bccefc 100644
--- a/engines/mtropolis/data.h
+++ b/engines/mtropolis/data.h
@@ -104,6 +104,7 @@ enum DataObjectType : uint {
 	kChangeSceneModifier					= 0x136,
 	kReturnModifier							= 0x140,
 	kSoundEffectModifier					= 0x1a4,
+	kSimpleMotionModifier					= 0x1fe,
 	kDragMotionModifier						= 0x208,
 	kPathMotionModifierV1					= 0x21c,
 	kPathMotionModifierV2					= 0x21b,
@@ -1190,6 +1191,23 @@ protected:
 	DataReadErrorCode load(DataReader &reader) override;
 };
 
+struct SimpleMotionModifier : public DataObject {
+	SimpleMotionModifier();
+
+	TypicalModifierHeader modHeader;
+
+	Event executeWhen;
+	Event terminateWhen;
+	uint16 motionType;
+	uint16 directionFlags;
+	uint16 steps;
+	uint32 delayMSecTimes4800;
+	uint8 unknown1[4];
+
+protected:
+	DataReadErrorCode load(DataReader &reader) override;
+};
+
 struct DragMotionModifier : public DataObject {
 	DragMotionModifier();
 
diff --git a/engines/mtropolis/modifier_factory.cpp b/engines/mtropolis/modifier_factory.cpp
index 63abe4bf6da..483cf980091 100644
--- a/engines/mtropolis/modifier_factory.cpp
+++ b/engines/mtropolis/modifier_factory.cpp
@@ -85,11 +85,13 @@ SIModifierFactory *getModifierFactoryForDataObjectType(const Data::DataObjectTyp
 		return ModifierFactory<ChangeSceneModifier, Data::ChangeSceneModifier>::getInstance();
 	case Data::DataObjectTypes::kSoundEffectModifier:
 		return ModifierFactory<SoundEffectModifier, Data::SoundEffectModifier>::getInstance();
+	case Data::DataObjectTypes::kDragMotionModifier:
+		return ModifierFactory<DragMotionModifier, Data::DragMotionModifier>::getInstance();
+	case Data::DataObjectTypes::kSimpleMotionModifier:
+		return ModifierFactory<SimpleMotionModifier, Data::SimpleMotionModifier>::getInstance();
 	case Data::DataObjectTypes::kPathMotionModifierV1:
 	case Data::DataObjectTypes::kPathMotionModifierV2:
 		return ModifierFactory<PathMotionModifier, Data::PathMotionModifier>::getInstance();
-	case Data::DataObjectTypes::kDragMotionModifier:
-		return ModifierFactory<DragMotionModifier, Data::DragMotionModifier>::getInstance();
 	case Data::DataObjectTypes::kVectorMotionModifier:
 		return ModifierFactory<VectorMotionModifier, Data::VectorMotionModifier>::getInstance();
 	case Data::DataObjectTypes::kSceneTransitionModifier:
diff --git a/engines/mtropolis/modifiers.cpp b/engines/mtropolis/modifiers.cpp
index 496754a9c2c..a48bd86a97e 100644
--- a/engines/mtropolis/modifiers.cpp
+++ b/engines/mtropolis/modifiers.cpp
@@ -904,6 +904,57 @@ const char *PathMotionModifier::getDefaultName() const {
 	return "Path Motion Modifier";
 }
 
+
+SimpleMotionModifier::SimpleMotionModifier() : _motionType(kMotionTypeIntoScene), _directionFlags(0), _steps(0), _delayMSecTimes4800(0) {
+}
+
+bool SimpleMotionModifier::load(ModifierLoaderContext &context, const Data::SimpleMotionModifier &data) {
+	if (!loadTypicalHeader(data.modHeader))
+		return false;
+
+	if (!_executeWhen.load(data.executeWhen) || !_terminateWhen.load(data.terminateWhen))
+		return false;
+
+	_directionFlags = data.directionFlags;
+	_steps = data.steps;
+	_motionType = static_cast<MotionType>(data.motionType);
+
+	return true;
+}
+
+bool SimpleMotionModifier::respondsToEvent(const Event &evt) const {
+	return _executeWhen.respondsTo(evt) || _terminateWhen.respondsTo(evt);
+}
+
+VThreadState SimpleMotionModifier::consumeMessage(Runtime *runtime, const Common::SharedPtr<MessageProperties> &msg) {
+	if (_executeWhen.respondsTo(msg->getEvent())) {
+#ifdef MTROPOLIS_DEBUG_ENABLE
+		if (Debugger *debugger = runtime->debugGetDebugger())
+			debugger->notify(kDebugSeverityError, "Simple Motion Modifier was supposed to execute, but is not implemented");
+#endif
+		return kVThreadReturn;
+	}
+	if (_terminateWhen.respondsTo(msg->getEvent())) {
+#ifdef MTROPOLIS_DEBUG_ENABLE
+		if (Debugger *debugger = runtime->debugGetDebugger())
+			debugger->notify(kDebugSeverityError, "Simple Motion Modifier was supposed to terminate, but is not implemented");
+#endif
+		return kVThreadReturn;
+	}
+	return kVThreadReturn;
+}
+
+void SimpleMotionModifier::disable(Runtime *runtime) {
+}
+
+Common::SharedPtr<Modifier> SimpleMotionModifier::shallowClone() const {
+	return Common::SharedPtr<Modifier>(new SimpleMotionModifier(*this));
+}
+
+const char *SimpleMotionModifier::getDefaultName() const {
+	return "Simple Motion Modifier";
+}
+
 bool DragMotionModifier::load(ModifierLoaderContext &context, const Data::DragMotionModifier &data) {
 	if (!loadTypicalHeader(data.modHeader))
 		return false;
diff --git a/engines/mtropolis/modifiers.h b/engines/mtropolis/modifiers.h
index b38cf3f89b3..d6f1ee2ee1f 100644
--- a/engines/mtropolis/modifiers.h
+++ b/engines/mtropolis/modifiers.h
@@ -394,6 +394,47 @@ private:
 	DynamicValue _incomingData;
 };
 
+class SimpleMotionModifier : public Modifier {
+public:
+	SimpleMotionModifier();
+
+	bool load(ModifierLoaderContext &context, const Data::SimpleMotionModifier &data);
+
+	bool respondsToEvent(const Event &evt) const override;
+	VThreadState consumeMessage(Runtime *runtime, const Common::SharedPtr<MessageProperties> &msg) override;
+	void disable(Runtime *runtime) override;
+
+#ifdef MTROPOLIS_DEBUG_ENABLE
+	const char *debugGetTypeName() const override { return "Simple Motion Modifier"; }
+	SupportStatus debugGetSupportStatus() const override { return kSupportStatusNone; }
+#endif
+
+private:
+	enum MotionType {
+		kMotionTypeOutOfScene = 1,
+		kMotionTypeIntoScene = 2,
+		kMotionTypeRandomBounce = 3,
+	};
+
+	enum DirectionFlags {
+		kDirectionFlagDown = 1,
+		kDirectionFlagUp = 2,
+		kDirectionFlagRight = 4,
+		kDirectionFlagLeft = 8,
+	};
+
+	Common::SharedPtr<Modifier> shallowClone() const override;
+	const char *getDefaultName() const override;
+
+	Event _executeWhen;
+	Event _terminateWhen;
+
+	MotionType _motionType;
+	uint16 _directionFlags;
+	uint16 _steps;
+	uint32 _delayMSecTimes4800;
+};
+
 class DragMotionModifier : public Modifier {
 public:
 	bool load(ModifierLoaderContext &context, const Data::DragMotionModifier &data);
diff --git a/engines/mtropolis/runtime.cpp b/engines/mtropolis/runtime.cpp
index 7cad07bac2e..2c7c82c9148 100644
--- a/engines/mtropolis/runtime.cpp
+++ b/engines/mtropolis/runtime.cpp
@@ -3110,6 +3110,9 @@ bool Structural::readAttribute(MiniscriptThread *thread, DynamicValue &result, c
 		else
 			result.setObject(_children[0]->getSelfReference());
 		return true;
+	} else if (attrib == "element") {
+		result.setObject(getSelfReference());
+		return true;
 	}
 
 	// Traverse children (modifiers must be first)


Commit: 8a01a57c4c431036a8e259fc2d53df4b27ed8d31
    https://github.com/scummvm/scummvm/commit/8a01a57c4c431036a8e259fc2d53df4b27ed8d31
Author: elasota (ejlasota at gmail.com)
Date: 2023-01-06T22:21:45-05:00

Commit Message:
MTROPOLIS: Fix no-debug config.

Changed paths:
    engines/mtropolis/debug.cpp
    engines/mtropolis/runtime.cpp


diff --git a/engines/mtropolis/debug.cpp b/engines/mtropolis/debug.cpp
index edcf4585b73..2390f7995d3 100644
--- a/engines/mtropolis/debug.cpp
+++ b/engines/mtropolis/debug.cpp
@@ -29,6 +29,7 @@
 #include "mtropolis/render.h"
 #include "mtropolis/runtime.h"
 
+#ifdef MTROPOLIS_DEBUG_ENABLE
 
 namespace MTropolis {
 
@@ -1581,3 +1582,5 @@ void Debugger::scanDebuggableStatus(IDebuggable *debuggable, Common::HashMap<Com
 
 
 } // End of namespace MTropolis
+
+#endif
diff --git a/engines/mtropolis/runtime.cpp b/engines/mtropolis/runtime.cpp
index 2c7c82c9148..84168b19f03 100644
--- a/engines/mtropolis/runtime.cpp
+++ b/engines/mtropolis/runtime.cpp
@@ -4579,6 +4579,8 @@ bool Runtime::runFrame() {
 #ifdef MTROPOLIS_DEBUG_ENABLE
 	if (_debugger)
 		_debugger->runFrame(realMSec);
+#else
+	(void)realMSec;
 #endif
 
 	// Frame completed




More information about the Scummvm-git-logs mailing list