The
Function of Spells
The functional component of a
spell does the real work. Once a spell runs through
its animation and reaches its intended target, the damaging or beneficial
effects
need to be dealt with.
Healing spells need to restore
health to an injured character, whereas damaging
spells need to take away health. In fact, just about any aspect of a character
can be
altered from a spell, ranging from characters’ health and mana to their
abilities
such as attack or defense. In Table 16.5, I define the effects that can be used
as a
spell effect.
Each spell effect has a
supporting value defined in the source code as an enum
object that is defined as follows:
enum
SpellEffects {
ALTER_HEALTH = 0,
ALTER_MANA,
CURE_AILMENT,
CAUSE_AILMENT,
RAISE_DEAD,
INSTANT_KILL,
DISPEL_MAGIC,
TELEPORT
};
Each spell effect is assigned a
number. In that way, you can contain the processing
of a spell effect within a single switch statement, as in the following:
switch(SpellEffect) {
case ALTER_HEALTH:
// do health altering processing
case ALTER_MANA:
// do mana alter processing
...
}
Each spell effect is pretty
straightforward. Now, take a closer look at just what each
of these effects do.
Alter Health
and Mana
A spell can cause damage or rob
characters of their stored mana, or it can, on the
other hand, restore health or mana. Alteration of health is probably the most
widely
used spell effect.
A health altering spell has an
associated value that determines how much health is
removed or added to the target character. The same applies to mana points, which
can be restored or drained away with the mere flick of a wizard’s hand.
Cure and
Cause Ailment
Status ailments are the bane and bonus of a character’s abilities and
attributes. The
duo of curing and causing spell effects gives you great freedom in devising how
to
curse or what to bestow upon a character.
When you alter an ailment (cause or cure), you must use a bit-encoded number to
define the ailment. By using bit flags, more than one status ailment can be
caused
or cured at once. Each ailment has an associated macro defined as follows:
#define
AILMENT_POISON 1
#define AILMENT_SLEEP 2
#define AILMENT_PARALYZE 4
#define AILMENT_WEAK 8
#define AILMENT_STRONG 16
#define AILMENT_ENCHANTED 32
#define AILMENT_BARRIER 64
#define AILMENT_DUMBFOUNDED 128
#define AILMENT_CLUMSY 256
#define AILMENT_SUREFOOTED 512
#define AILMENT_SLOW 1024
#define AILMENT_FAST 2048
#define AILMENT_BLIND 4096
#define AILMENT_HAWKEYE 8192
#define AILMENT_SILENCED 16384
Character ailments are stored
within a single 32-bit variable, and all characters have
an ailment variable associated with them. That’s right, any character in your
game
can be burdened with status ailments, but it is harder to afflict characters
that have
a higher resistance.
Raise Dead
and Instant Kill
At times, your poor characters are going to die, and except for MCs, you want
the
ability to raise them from the dead. The raise dead spell effect does just that—
raises PC or NPC characters from death and gives them exactly one health point.
On the flip side, there will be times when you just want to strike a monster
down in
one blow. That’s the purpose of the instance kill effect. Although having little
chance of working, the instant kill ability is still a force to be reckoned
with.
Dispel Magic
Forget all those status ailment-curing spells; why not just get rid of them all
in one
shot! The dispel effect clears a target character’s ailments, whether good or
bad,
and although this effect can be represented as a cure ailment effect, it becomes
much easier to not use bit flags.
Teleport
Other than walking around, the best way to travel is to magically teleport
around.
Only PCs can use this spell. Teleporting can move a PC to any position on a map.