tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
   The TMI mudlib comes with a spellpoint system and a number of built-in
spells. A player's spellcasting ability is determined by his spell points.
His maximum number of spell points is determined at create time and is
45 + his intelligence + a random number between 0 and 20. Each spell a
player casts costs him a certain number of spell points. If he is below
his maximum spell points, he gains them back at a rate of 1 every 20 seconds
via the heal_up() function in /std/living/attack.c.
   Players cast spells using the _cast command in /cmds/std. The cast
command parses the input, looking for one of four forms: "cast <spell>",
"cast <spell> <target>", "cast <spell> at <target>", or "cast <spell> on
<target>". If none of these forms match, it returns an error. Otherwise,
it passes the target name ("NONE" if there was none) to the spell code,
which is of the form "<spellname>_spell.c" and can be found in the 
directory /cmds/std/spells.
  Each spell checks to see if the player has enough spell points to cast
it and, if so, subtracts the points from his total. It checks to make
sure that the target is the appropriate one or is the default target if
that is appropriate. It also credits the player with a use of one of the
three spellcasting skills (Combat spells, Healing spells, Divinations spells)
so that his skills improve. It then creates the spell effect.
   There are three spellcasting skills: Combat spells, Healing spells, and
Divinations spells. Combat spells are things like magic missiles and fireballs.
Healing spells are things like cure wound and raise dead. Divinations spells
are information spells like invisibility or vision. The number of spellpoints
it takes to cast a spell depends on the skill of the caster. Thus, more
skilled casters can throw more spells for a given number of spellpoints. The
player's maximum spell points does not change. Also, for the combat spells
the amount of damage done is affected by the skill of the caster.
   As the player cast a spell more and more times, his spellcasting skills go
up and he becomes more proficient at casting not only the given spell but also
other spells that use the same skill, ie missile and fireball, or vision and
message. You may, if you like, invent some bogus rationale for this involving
the controlling of magical elemental forces. Alternatively, you can make each
spell use a seperate skill, if you have few spells or you can stand having
a lot of skills. See /doc/mudlib/skills for more details on skill use and
improvement.
   As the .
  Some spells can be executed immediately without reference to the player
object, such as the vision spell. For these spells, all the code for the
spell is found in the spell code. Other spells, such as the magic missile
spell, require a delayed effect. These spells call a function inside the
player object call <spellname>_cast(). This function blocks the caster
from attacking while the spell is being cast, and call_outs a second
function called <spellname>_effect, which does the spell effect. These
functions can be found in /std/living/spells.c which is inherited by
/std/living.c. Spells.c also defines an internal variable, target, which
keeps track of the target of a pending spell, if one is relevant.
   In the default mudlib, all players know all spells from the outset; they
don't have to learn them or memorize them, they can cast as many as their
spell points permit. You may want to change this, requiring mages to learn
spells through their guilds, or through scrolls and a read_magic spell, or
in other ways. (There are enough different ways to do it that we prefer to
let everyone implement his preferred method rather than pick one at random.)
See the guilds help document for some ideas on how you might implement
spell learning through guilds, or special guild spells. You can also do
it through a spellbook property in the player which keeps track of all
known spells, and add commands to permit learning of new spells. If you
want to, you can also implement memorization the same way, and have each
spellcast remove one of the memorized versions from the "memorized_spells"
property. It is possible that we will implement spellbooks in a future 
release of the mudlib, depending on the feedback we get from beta sites.

   The TMI mudlib comes with six spells, and you can add more if you like.
They are:

missile. This spell casts a magic missile at a specified target, or if
no target is specified, at the current attacker. It takes 2 seconds to
cast. It uses the Combat spells skill.

fireball. This spell casts a fireball which affects all monsters currently
attacking the player. It takes 8 seconds to cast. It uses the Combat spells
skill.

heal. This spell restores hit points to the target. If no target is given,
the casting player is healed. It takes two seconds to cast, and uses the
Healing spells skill.

vision. This spell permits the caster to see the environment of another
player. It does this by calling look_at_room() in the target object and
reporting the result to the caster. It takes two seconds to cast, and uses
the Divinations spells skill.

invisibility. This spell turns the player invisible. Other players cannot
see him, and things he says or does will not be reported to other players
(effectively this mutes the caster also). It takes 4 seconds to cast and
it uses the Divinations spell skill. It does not prevent aggressive monsters
from attacking the player, although they will not detect his movement using
catch_tell; they'll have to detect his entry some other way. The invisibility
spell has no effect on wizards' ability to see and hear the player.

message. This spell lets one player send a message to another player.
It takes two seconds to cast, and uses the Divinations spells skill. The
player must supply a target.