forked from Mirrors/openclonk
56 lines
1.1 KiB
C
56 lines
1.1 KiB
C
/**
|
|
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;
|
|
}
|
|
}; |