File: Effect.c

package info (click to toggle)
openclonk 8.1-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 169,520 kB
  • sloc: cpp: 180,479; ansic: 108,988; xml: 31,371; python: 1,223; php: 767; makefile: 145; sh: 101; javascript: 34
file content (56 lines) | stat: -rw-r--r-- 1,172 bytes parent folder | download | duplicates (5)
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
/**
	Effect.c
	Prototype for effect prototypes and useful effects.
	
	@author Günther
*/

static const Effect = new Global
{
	Remove = func(bool no_calls)
	{
		return RemoveEffect(nil, nil, this, no_calls);
	},
	// These properties are set on all effects by the engine.
	// They are declared here so that functions on proplists inheriting from this one can use them easily.
	Name = nil,
	Priority = 0,
	Interval = 0,
	Target = nil,
	Time = 0
};

// This effect blocks all damage.
static const FxBlockDamage = new Effect
{
	Damage = func()
	{
		// Block all damage.
		return 0;
	},
	SaveScen = func(proplist props)
	{
		if (Target)
			props->AddCall("BlockDamage", Target, "CreateEffect", Format("%v", FxBlockDamage), this.Priority);
		return true;
	}
};

// This effect blocks fire.
static const FxBlockFire = new Effect
{
	Effect = func(string new_name)
	{
		// Block fire effects.
		if (WildcardMatch(new_name, "*Fire*"))
			return FX_Effect_Deny;
		// All other effects are okay.
		return FX_OK;
	},
	SaveScen = func(proplist props)
	{
		if (Target)
			props->AddCall("BlockFire", Target, "CreateEffect", Format("%v", FxBlockFire), this.Priority);
		return true;
	}
};