From 19b2e79011de6c3800302c8d5841ad8baff4d1b6 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Mon, 2 Jan 2017 19:34:01 +0100 Subject: Initial --- ActMap.txt | 3 ++ DefCore.txt | 4 +++ Graphics.png | Bin 0 -> 126 bytes Script.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 ActMap.txt create mode 100644 DefCore.txt create mode 100644 Graphics.png create mode 100644 Script.c 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 Binary files /dev/null and b/Graphics.png 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]); + } +} -- cgit v1.2.3-54-g00ecf