summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/System.c4g/Gravity.c
blob: a5ddca86f9a0852b7e92965c2eb205708bd2b79c (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
/*-- Optimize Gravity spell --*/

#strict 2
#appendto GVTY

func FxFloatPSpellTimer(pClonk, iEffectNumber, iEffectTime)
{
	if(!EffectVar(0,pClonk,iEffectNumber)) return -1;
	if(!EffectVar(1,pClonk,iEffectNumber)) return -1;
	EffectVar(0,pClonk,iEffectNumber)--;

	var hyper = EffectVar(2, pClonk, iEffectNumber);

	var iSearchRadius = GetRange();
	var pObj;
	var auraColor = RGB(128, 128, 128);
	var hyperExtra = 0;
	if(hyper)
	{
		auraColor = GetPlrColorDw(GetOwner(pClonk));
	}
	CreateParticle("WhiteAura",GetX(pClonk),GetY(pClonk), RandomX(-1,1), RandomX(-1,1), 12*iSearchRadius, auraColor, pClonk);
	var i=2;
	while(i--)
	{
		var angle = RandomX(-180, 180);
		CreateParticle("PSpark",GetX(pClonk)+Sin(angle, iSearchRadius),GetY(pClonk)-Cos(angle, iSearchRadius),
									 -Sin(angle, iSearchRadius/3),Cos(angle, iSearchRadius/3),RandomX(50,70),
									 RGBa(150,155,80, 75),pClonk);
	}
	CastParticles("PSpark", 3, iSearchRadius/3, GetX(pClonk), GetY(pClonk)+8, 50, 70, RGBa(150,155,80, 75), RGBa(150,155,80, 75), pClonk);

	// Find objects and stop them
	for(var obj in FindObjects(Find_Distance(iSearchRadius, GetX(pClonk), GetY(pClonk)), Find_Not(Find_Func("IgnoreFloatSpell")), Find_Not(Find_OCF(OCF_CrewMember)), Find_Not(Find_Effect("StopNSpell")), Find_NoContainer())) EffectVar(1,pClonk,iEffectNumber)->~DoStop(obj, pClonk, hyper);

		return 1;
}

func FxStopNSpellTimer(pTarget, iNumber, iEffectTime)
{
	if(iEffectTime>600) return -1;

	SetXDir(0,pTarget);
	SetYDir(-2 * GetGravity(),pTarget,1000);

	if (!FindObject2(Find_ID(GVTY), Find_Distance(GetRange(), GetX(pTarget), GetY(pTarget)))) return -1;
}

func DoStop(object pObj, object pCaller, bool hyper)
{
	if(hyper && !Hostile(GetOwner(pCaller), GetController(pObj))) return;
	if(GetEffect("StopNSpell", pObj)) return;
	pObj->~MagicStop(pCaller);
	AddEffect("StopNSpell", pObj, 200, 1, 0, GVTY);
}

func FxFloatPSpellStart(pClonk, iEffectNumber, iTemp)
{
	if(iTemp) return;
	var ret = _inherited(pClonk, iEffectNumber, iTemp, ...);
	EffectVar(0,pClonk,iEffectNumber) = 360;
	return ret;
}

private func FxFloatPSpellAdd(object pTarget, int iNumber)
{
	// Effekt übernehmen
	EffectVar(0, pTarget, iNumber) += 180;
	EffectVar(2, pTarget, iNumber) = true;
}