summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ActMap.txt3
-rw-r--r--DefCore.txt4
-rw-r--r--Graphics.pngbin0 -> 126 bytes
-rw-r--r--Script.c99
4 files changed, 106 insertions, 0 deletions
diff --git a/ActMap.txt b/ActMap.txt
new file mode 100644
index 0000000..6906463
--- /dev/null
+++ b/ActMap.txt
@@ -0,0 +1,3 @@
+[Action]
+Name=Float
+Procedure=FLOAT
diff --git a/DefCore.txt b/DefCore.txt
new file mode 100644
index 0000000..ab21ee0
--- /dev/null
+++ b/DefCore.txt
@@ -0,0 +1,4 @@
+[DefCore]
+Name=Specific Solidmask
+id=SM7I
+Category=C4D_StaticBack
diff --git a/Graphics.png b/Graphics.png
new file mode 100644
index 0000000..f1acbb0
--- /dev/null
+++ b/Graphics.png
Binary files differ
diff --git a/Script.c b/Script.c
new file mode 100644
index 0000000..39f1aa3
--- /dev/null
+++ b/Script.c
@@ -0,0 +1,99 @@
+#strict 2
+
+global func DisableSolidMaskFor(object forObj, array restoreMask, object target)
+{
+ target = target || this;
+ var helper = CreateObject(SM7I);
+ helper->SetCategory(forObj->GetCategory());
+ SetObjectOrder(helper, forObj);
+ AddEffect("DisableSolidMask", helper, 1, 1, helper, SM7I, target);
+ return [forObj, AddEffect("RestoreSolidMask", forObj, 1, 1, 0, SM7I, restoreMask || target->GetSolidMask(), target, helper)];
+}
+
+global func SetSolidMaskFor(object forObj, array mask, object target)
+{
+ target = target || this;
+ var helper = CreateObject(SM7I);
+ helper->SetCategory(forObj->GetCategory());
+ SetObjectOrder(helper, forObj);
+ AddEffect("DisableSolidMask", forObj, 1, 1, helper, SM7I, target);
+ return [forObj, AddEffect("RestoreSolidMask", helper, 1, 1, 0, SM7I, mask, target, helper)];
+}
+
+global func RemoveSolidMaskSetting(array setting)
+{
+ return EffectVar(3, setting[0], setting[1]) = true;
+}
+
+func Initialize()
+{
+ SetAction("Float");
+}
+
+func FxDisableSolidMaskStart(object target, int effectNumber, int temp, object forObj)
+{
+ if(!temp)
+ {
+ EffectVar(0, target, effectNumber) = forObj;
+ }
+}
+
+func FxDisableSolidMaskTimer(object target, int effectNumber)
+{
+ var obj = EffectVar(0, target, effectNumber);
+ if(!obj)
+ {
+ return FX_Execute_Kill;
+ }
+
+ obj->SetSolidMask();
+}
+
+func FxDisableSolidMaskStop(object target, int effectNumber, int reason, bool temp)
+{
+ if(!temp && reason != FX_Call_RemoveClear)
+ {
+ RemoveObject();
+ }
+}
+
+func FxRestoreSolidMaskStart(object target, int effectNumber, int temp, array mask, object solidMaskObject, object helper)
+{
+ if(!temp)
+ {
+ EffectVar(0, target, effectNumber) = mask;
+ EffectVar(1, target, effectNumber) = solidMaskObject;
+ EffectVar(2, target, effectNumber) = helper;
+ }
+}
+
+func FxRestoreSolidMaskTimer(object target, int effectNumber)
+{
+ var mask = EffectVar(0, target, effectNumber);
+ var solidMaskObject = EffectVar(1, target, effectNumber);
+ var helper = EffectVar(2, target, effectNumber);
+ if(!helper || !solidMaskObject || EffectVar(3, target, effectNumber))
+ {
+ return FX_Execute_Kill;
+ }
+
+ solidMaskObject->SetSolidMask(mask[0], mask[1], mask[2], mask[3], mask[4], mask[5]);
+
+ helper->SetCategory(target->GetCategory());
+ SetObjectOrder(target, helper, true);
+}
+
+func FxRestoreSolidMaskStop(object target, int effectNumber, int reason, bool temp)
+{
+ if(!temp && reason != FX_Call_RemoveClear)
+ {
+ var helper = EffectVar(2, target, effectNumber);
+ if(helper)
+ {
+ RemoveObject(helper);
+ }
+ var mask = EffectVar(0, target, effectNumber);
+ var solidMaskObject = EffectVar(1, target, effectNumber);
+ solidMaskObject->SetSolidMask(mask[0], mask[1], mask[2], mask[3], mask[4], mask[5]);
+ }
+}