openclonk/planet/System.ocg/Effect.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;
}
};