[Scummvm-git-logs] scummvm master -> d35b69d48be42f4b23266e9982f8556a930770b8

elasota noreply at scummvm.org
Fri Sep 23 06:01:12 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:
d35b69d48b MTROPOLIS: Add image effect modifier stub


Commit: d35b69d48be42f4b23266e9982f8556a930770b8
    https://github.com/scummvm/scummvm/commit/d35b69d48be42f4b23266e9982f8556a930770b8
Author: elasota (ejlasota at gmail.com)
Date: 2022-09-23T02:00:48-04:00

Commit Message:
MTROPOLIS: Add image effect modifier stub

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


diff --git a/engines/mtropolis/data.cpp b/engines/mtropolis/data.cpp
index 95d1b92732f..20ca4257616 100644
--- a/engines/mtropolis/data.cpp
+++ b/engines/mtropolis/data.cpp
@@ -1650,6 +1650,20 @@ DataReadErrorCode GraphicModifier::load(DataReader &reader) {
 	return kDataReadErrorNone;
 }
 
+ImageEffectModifier::ImageEffectModifier() : flags(0), type(0), bevelWidth(0), toneAmount(0), unknown2{0, 0} {
+}
+
+DataReadErrorCode ImageEffectModifier::load(DataReader &reader) {
+	if (_revision != 1000)
+		return kDataReadErrorUnsupportedRevision;
+
+	if (!modHeader.load(reader) || !reader.readU32(flags) || !reader.readU16(type) || !applyWhen.load(reader) || !removeWhen.load(reader)
+		|| !reader.readU16(bevelWidth) || !reader.readU16(toneAmount) || !reader.readBytes(unknown2))
+		return kDataReadErrorReadFailed;
+
+	return kDataReadErrorNone;
+}
+
 CompoundVariableModifier::CompoundVariableModifier()
 	: modifierFlags(0), sizeIncludingTag(0), unknown1{0, 0}, guid(0), unknown4{0, 0, 0, 0, 0, 0}, unknown5(0),
 	  editorLayoutPosition(Point::createDefault()), lengthOfName(0), numChildren(0), unknown7{0, 0, 0, 0} {
@@ -2376,6 +2390,9 @@ DataReadErrorCode loadDataObject(const PlugInModifierRegistry &registry, DataRea
 	case DataObjectTypes::kGraphicModifier:
 		dataObject = new GraphicModifier();
 		break;
+	case DataObjectTypes::kImageEffectModifier:
+		dataObject = new ImageEffectModifier();
+		break;
 
 	case DataObjectTypes::kColorTableAsset:
 		dataObject = new ColorTableAsset();
diff --git a/engines/mtropolis/data.h b/engines/mtropolis/data.h
index e5f9334b68c..90b0c261311 100644
--- a/engines/mtropolis/data.h
+++ b/engines/mtropolis/data.h
@@ -95,7 +95,7 @@ enum DataObjectType {
 
 	kGraphicElement							= 0x8,
 	kMovieElement							= 0x5,
-	kMToonElement							= 0x6,		// NYI
+	kMToonElement							= 0x6,
 	kImageElement							= 0x7,
 	kSoundElement							= 0xa,
 	kTextLabelElement						= 0x15,
@@ -121,7 +121,7 @@ enum DataObjectType {
 	kKeyboardMessengerModifier				= 0x302,
 	kTextStyleModifier						= 0x32a,
 	kGraphicModifier						= 0x334,
-	kImageEffectModifier					= 0x384,	// NYI
+	kImageEffectModifier					= 0x384,
 	kMiniscriptModifier						= 0x3c0,
 	kCursorModifierV1						= 0x3ca,	// NYI - Obsolete version
 	kGradientModifier						= 0x4b0,	// NYI
@@ -1518,6 +1518,31 @@ protected:
 	DataReadErrorCode load(DataReader &reader) override;
 };
 
+struct ImageEffectModifier : public DataObject {
+	ImageEffectModifier();
+
+	enum Types {
+		kTypeInvert = 1,
+		kTypeSelectedBevels = 2,
+		kTypeDeselectedBevels = 3,
+		kTypeToneDown = 4,
+		kTypeToneUp = 5,
+	};
+
+	TypicalModifierHeader modHeader;
+
+	uint32 flags;
+	uint16 type;
+	Event applyWhen;
+	Event removeWhen;
+	uint16 bevelWidth;
+	uint16 toneAmount;
+	uint8 unknown2[2];
+
+protected:
+	DataReadErrorCode load(DataReader &reader) override;
+};
+
 struct CompoundVariableModifier : public DataObject {
 	CompoundVariableModifier();
 
diff --git a/engines/mtropolis/modifier_factory.cpp b/engines/mtropolis/modifier_factory.cpp
index 44d99e1ce2e..d825ca9c83b 100644
--- a/engines/mtropolis/modifier_factory.cpp
+++ b/engines/mtropolis/modifier_factory.cpp
@@ -109,6 +109,8 @@ SIModifierFactory *getModifierFactoryForDataObjectType(const Data::DataObjectTyp
 		return ModifierFactory<TextStyleModifier, Data::TextStyleModifier>::getInstance();
 	case Data::DataObjectTypes::kGraphicModifier:
 		return ModifierFactory<GraphicModifier, Data::GraphicModifier>::getInstance();
+	case Data::DataObjectTypes::kImageEffectModifier:
+		return ModifierFactory<ImageEffectModifier, Data::ImageEffectModifier>::getInstance();
 	case Data::DataObjectTypes::kMessengerModifier:
 		return ModifierFactory<MessengerModifier, Data::MessengerModifier>::getInstance();
 	case Data::DataObjectTypes::kSetModifier:
diff --git a/engines/mtropolis/modifiers.cpp b/engines/mtropolis/modifiers.cpp
index b67678a1f8f..dcbe927b50d 100644
--- a/engines/mtropolis/modifiers.cpp
+++ b/engines/mtropolis/modifiers.cpp
@@ -2036,6 +2036,41 @@ const char *GraphicModifier::getDefaultName() const {
 	return "Graphic Modifier";
 }
 
+ImageEffectModifier::ImageEffectModifier() : _type(kTypeUnknown), _bevelWidth(0), _toneAmount(0), _includeBorders(false) {
+}
+
+bool ImageEffectModifier::load(ModifierLoaderContext &context, const Data::ImageEffectModifier &data) {
+	if (!loadTypicalHeader(data.modHeader) || !_applyWhen.load(data.applyWhen) || !_removeWhen.load(data.removeWhen))
+		return false;
+
+	_includeBorders = ((data.flags & 0x40000000) != 0);
+	_type = static_cast<Type>(data.type);
+	_bevelWidth = data.bevelWidth;
+	_toneAmount = data.toneAmount;
+
+	return true;
+}
+
+bool ImageEffectModifier::respondsToEvent(const Event &evt) const {
+	return _applyWhen.respondsTo(evt) || _removeWhen.respondsTo(evt);
+}
+
+VThreadState ImageEffectModifier::consumeMessage(Runtime *runtime, const Common::SharedPtr<MessageProperties> &msg) {
+	warning("Image effect modifier not implemented");
+	return kVThreadReturn;
+}
+
+void ImageEffectModifier::disable(Runtime *runtime) {
+}
+
+Common::SharedPtr<Modifier> ImageEffectModifier::shallowClone() const {
+	return Common::SharedPtr<Modifier>(new ImageEffectModifier(*this));
+}
+
+const char *ImageEffectModifier::getDefaultName() const {
+	return "Image Effect Modifier";
+}
+
 bool CompoundVariableModifier::load(ModifierLoaderContext &context, const Data::CompoundVariableModifier &data) {
 	if (data.numChildren > 0) {
 		ChildLoaderContext loaderContext;
diff --git a/engines/mtropolis/modifiers.h b/engines/mtropolis/modifiers.h
index 8ee4b7cf95e..005f29d6913 100644
--- a/engines/mtropolis/modifiers.h
+++ b/engines/mtropolis/modifiers.h
@@ -799,6 +799,43 @@ private:
 	VisualElementRenderProperties _renderProps;
 };
 
+class ImageEffectModifier : public Modifier {
+public:
+	ImageEffectModifier();
+
+	bool load(ModifierLoaderContext &context, const Data::ImageEffectModifier &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 "Image Effect Modifier"; }
+	SupportStatus debugGetSupportStatus() const override { return kSupportStatusNone; }
+#endif
+
+private:
+	enum Type {
+		kTypeUnknown = 0,
+
+		kTypeInvert = 1,
+		kTypeSelectedBevels,
+		kTypeDeselectedBevels,
+		kTypeToneDown,
+		kTypeToneUp,
+	};
+
+	Common::SharedPtr<Modifier> shallowClone() const override;
+	const char *getDefaultName() const override;
+
+	Event _applyWhen;
+	Event _removeWhen;
+	Type _type;
+	uint16 _bevelWidth;
+	uint16 _toneAmount;
+	bool _includeBorders;
+};
+
 // Compound variable modifiers are not true variable modifiers.
 // They aren't treated as values by Miniscript and they aren't
 // treated as unique objects by aliases.  The only way that




More information about the Scummvm-git-logs mailing list