A Variety of Status Effects

// Status: This defines an instance of a certain status effect, all
status effect types are
//   derived off of this to share similar information. A status effect
registers itself
//   to base event handlers to perform specific needs. These are
modifiable information
//
// StatusBenefit BENEFIT = { BUFF, DEBUFF, NEUTRAL };
// A description of a status effect to determine whether it
helps/hurts/meh the target it is
// attached to.
//
// StatusMatch MATCH = { STATUS_UNMATCHABLE, STATUS_SELFMATCHABLE,
STATUS_ALLMATCHABLE };
// Determines how the same status applied to the same target will
behave. Unmatchable will
// have same name status not merge at all and appear as its own status
on target. Self matchable
// will only merge with same name status. All matchable will merge any
status with the same name.
// Note that the merge behavior can be defined uniquely in the onMerge
event handler.
//
// bool DISPELLABLE = { false, true };
// A flag to determine whether a status can be removed by special means.

//
// bool INSTANCING = { false, true };
// Determines whether a merging status should call onMerge, or become
its own copy in
// a Status Group. This is particularly useful when it is desired that
you need to group a set
// of status effects, but each need to keep their individual expiration
timer.
//
// bool COLLECTIVE = { false, true }
// This is particularly important for status that do instancing
// (any status that uses Status Group). calls to useStacks() will not
use the instance's stacks
// but the total stacks that belong to Status Group. This allows only a
single instance to
// only execute the important parts with access to all stacks
// (i.e. don't need to show 5 Damage Events from 5 stacks of poison but
only one)
//
// bool TIMED = { false, true };
// Tells whether a status effect will expire through a timer.
//
// int MAX_SINGLE_STACKS = { -inf, inf }
// A limit for Self Merging Status Effects.
//
// int MAX_GROUP_STACKS = { -inf, inf }
// A limit for Status Group total stacks (instancing), the most recent
instances will overwrite
// the older instances.
//