summaryrefslogtreecommitdiffstats
path: root/Script.c
blob: 39f1aa3e305af5e58c257ebf34c3a2094b11a70c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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]);
	}
}