#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]); } }