final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
#include "spells.h"

mixed spells;
mixed minor_spheres; // Also used by schools.
mixed major_spheres;
mixed neutral_spheres;

//object guild;
//string spell_dir;

/* here is the start on the new spells.c i will try to make
 *   Baldrick, started july '93
 * Added Major/Minor/Neutral spheres.  This won't be used til
 * FR-III, probably, but I want it there for FR-2.5.  For now
 * it'll work exactly the same; but since the spheres are saved
 * on the player, I want the data to be there so we can easily
 * change the functions later.  --Wonderflug, august '95.
 */

void create() 
{
  spells = ([ ]);
  minor_spheres = ({ });
  neutral_spheres = ({ });
  major_spheres = ({ });
  //guild = this_player()->query_guild_ob();
}
  
/*
void init_spells()
{
  spell_dir = guild->query_spell_directory();
}
*/

void spell_commands() 
{
  add_action("show_spells", "spells");
  add_action("show_spheres", "spheres");
  add_action("show_schools", "schools");
  add_action("cast", "cast");
  /* this is a reset of the spellarray,the players will have to
   * learn again..
   * Baldrick. sept '93 */
  //add_action("reset_spellarray", "reset_spells");
}

/*  If you have a function help() in the spell itself.  It will print the
 *  string you return there. 
 */
string help_spell(string str) 
{
  object guild;
  string spell_dir;

  if (!mappingp(spells))
    spells = ([ ]);
  if(!m_sizeof(spells))
    return 0;
  if (!spells[str])
    return 0;
  guild = this_player()->query_guild_ob();
  spell_dir = guild->query_spell_directory();

  /* Since I have removed the /std/spells from the spellaray
  * do I have to put it here..Baldrick sept '93 */
  return ((string)(spell_dir+spells[str][S_OBJECT])->help(str));
}
 
/*
 * Lists spells you know
 */
int show_spells(string str) 
  {
  string *frog;

  if (!mappingp(spells))
   spells = ([ ]);
  if (!m_sizeof(spells)) {
    write("You don't know any spells yet.\n");
    return 1;
  }

  frog = m_indices(spells);
  write("You know the following spells:\n");
  printf("%#-*s\n", this_player()->query_cols(), implode(frog, "\n"));
  return 1;
}

/* Will cast the spell after a round of casting time */
int cast(string str) 
{
  int j;
  string *s,s1;
  object guild;
  string spell_dir;

  if( this_player()->query_property("nocast") )
  {
    tell_object(this_player(), "You cannot seem to summon the power "+
      "within you right now.\n");
    return 1;
  }

  if ( this_player()->query_property("stillcasting") )
  {
    tell_object(this_player(), "You cannot cast another spell again so soon "
      "after your last one.\n");
    return 1;
  }

  if (environment(this_player())->query_property("nocast"))
  {
    tell_object(this_player(),"The mystical powers seem to be too "+
      "weak here to affect anything.\n");
    return 1;
  }
 
  if (!str) 
  {
    notify_fail("Usage: cast <spell> [<target>]\n");
    return 0;
  }
  /* Dead players should not cast spells!
   * Baldrick.
   */
//if(this_player()->query_property("dead"))
//Radix was here, doubtful this was necessary
// Dec 14, 1995
  if(this_player()->query_dead())
  {
    notify_fail("Ghosts cannot cast spells.\n");
    return 0;
  }

  guild=(object)this_player()->query_guild_ob();

  /* The spellcasters shall not be able to cast spells when in full armour. 
   * Modify by Baldrick. oct '94.
   * Changed a bit, now it tests on the legality of the armour.
   */
// Taniwha 28/09/95, we now have armour restrictions in globally, not needed, also not 100% consistant with other code
/*
  if (armours = this_player()->query_worn_ob())
  {
    for (i=0;i<sizeof(armours);i++)
    {
      if (!guild->query_legal_armour((string)armours[i]->
                                   query_armour_type_name()))
      {
        notify_fail("You can not cast spells while wearing this armour.\n");
        return 0;
      }
      }
   }
*/
  s = explode(str, " ");
  s1 = s[0];
  j = 1;
  while (!spells[s1] && j < sizeof(s))
    s1 = implode(s[0..j++], " ");
  if (!spells[s1]) 
  {
    notify_fail("You don't know any "+str+" spell.\n");
    return 0;
  }
  /* ok we found our spell...
   * cast it...
   * Or, at least try to ;)
   */
  /* the Spell_dir is used to reduce space in the spellarray */
  spell_dir = guild->query_spell_directory();
  return (int)call_other(spell_dir + spells[s1][S_OBJECT], "cast_spell",
                           implode(s[j..sizeof(s)], " "));
} /* Cast */

mixed query_spells() { return spells; }

int add_spell(string name, mixed ob) 
{
  int i;
  mapping tmp;

  if (pointerp(spells)) 
  {
    tmp = ([ ]);
    for (i=0;i<sizeof(spells);i+=2)
      tmp[spells[i]] = spells[i+1];
    spells = tmp;
  }
  if (!mappingp(spells))
    spells = ([ ]);
  spells[name] = ({ ob });
  return 1;
}

int remove_spell(string name) 
{
  spells = m_delete(spells, name);
  return 1;
}

int reset_spellarray() 
{
  spells = ([ ]);
  // write ("Bing.\n");
  return 1;
}

int query_spell(string type) 
{
  if (!mappingp(spells)) return 0;
  return spells[type];
}

/* the sphere code.. added by Baldrick october '93 to use by 
 * add_spell code in the guilds..*
 * Fubaring by Wonderflug, August 95.
 */

int add_sphere(string name, string power)
{
  if (!pointerp(minor_spheres))
    minor_spheres = ({ });
  if (!pointerp(major_spheres))
    major_spheres = ({ });
  if (!pointerp(neutral_spheres))
    neutral_spheres = ({ });

  switch( power )
  {
    case "minor":
      minor_spheres += ({ name, });
      break ;
    case "neutral":
      neutral_spheres += ({ name, });
      break;
    case "major":
      major_spheres += ({ name, });
      break;
    default:
      /* For backward compatibility. */
      neutral_spheres += ({ name, });
      break;
  }      
  
  return 1;
}

int add_spheres(mixed list)
{
  int i;

  if (!pointerp(minor_spheres))
    minor_spheres = ({ });
  if (!pointerp(major_spheres))
    major_spheres = ({ });
  if (!pointerp(neutral_spheres))
    neutral_spheres = ({ });

  for ( i=0; i<sizeof(list); i++ )
  {
    if ( sizeof(list[i]) < 2 )
    {
      /* Again, for backward compatibility. */
      neutral_spheres += ({ list[i] });
      continue;
    }
    switch( list[i][1] )
    {
      case "minor":
        minor_spheres += ({ list[i][0] });
        break;
      case "major":
        major_spheres += ({ list[i][0] });
        break;
      case "neutral":
        neutral_spheres += ({ list[i][0] });
        break;
      default:
        break;
    } /* switch */
  } /* for */

  return 1;
}

/*
int remove_sphere(string name)
  {
  spheres = m_delete(spheres, name);
  return 1;
  }
*/

int reset_spheres()
{
  minor_spheres = ({ });
  major_spheres = ({ });
  neutral_spheres = ({ });
  return 1;
}

/* This we keep completely backward compatible.  Just return
 * the sum of all 3.
 */
mixed query_spheres() 
{
  return minor_spheres + major_spheres + neutral_spheres + ({ });
} 

/* Extensions */
mixed query_minor_spheres() { return minor_spheres + ({ }); }
mixed query_neutral_spheres() { return neutral_spheres + ({ }); }
mixed query_major_spheres() { return major_spheres + ({ }); }

/* Slight change, to reflect the power of the sphere for the player */
mixed query_sphere(string name)
{
  if ( member_array(name, minor_spheres) != -1 )
    return 1;
  if ( member_array(name, neutral_spheres) != -1 )
    return 2;
  if ( member_array(name, major_spheres) != -1 )
    return 3;

  return 0;
}

mixed query_minor_sphere(string name)
{
  if ( member_array(name, minor_spheres) != -1 )
    return 1;
  return 0;
}

mixed query_neutral_sphere(string name)
{
  if ( member_array(name, neutral_spheres) != -1 )
    return 1;
  return 0;
}

mixed query_major_sphere(string name)
{
  if ( member_array(name, major_spheres) != -1 )
    return 1;
  return 0;
}

/* Another extension. Just returns the string instead of a number. */
mixed query_sphere_level(string name)
{
  switch( query_sphere(name) )
  {
    case 1:
      return "minor";
    case 2:
      return "neutral";
    case 3:
      return "major";
    default:
      return 0;
  }
  return 0;
}


int show_spheres()
{
  object guild;
  int written, i;

  guild = this_player()->query_guild_ob();

  written = 0;

  if ((!guild) || ((string)guild->query_spell_directory()!=CLERIC_ROOT))
  {
    notify_fail("You don't need spheres.\n");
    return 0;
  }

  /* Could format it better, but I don't care. */
  for ( i=0; i<sizeof(minor_spheres); i++, written++ )
    write(minor_spheres[i]+" (Minor)\n");
  for ( i=0; i<sizeof(neutral_spheres); i++, written++ )
    write(neutral_spheres[i]+" (Neutral)\n");
  for ( i=0; i<sizeof(major_spheres); i++, written++ )
    write(major_spheres[i]+" (Major)\n");
 
  if (!written)
  {
    notify_fail("You are sphereless.\n");
    return 0;
  }
  return written;
} /* int show spheres..*/
 
int show_schools()
{ 
  object guild;
  int written, i;

  guild = this_player()->query_guild_ob();

  if ((string)guild->query_spell_directory()!=MAGE_ROOT)
  {
    notify_fail("You dont need schools.\n");
    return 0;
  }

  written = 0;
  for ( i=0; i<sizeof(minor_spheres); i++, written++ )
    write(minor_spheres[i]+" (Minor)\n");
  for ( i=0; i<sizeof(neutral_spheres); i++, written++ )
    write(neutral_spheres[i]+" (Neutral)\n");
  for ( i=0; i<sizeof(major_spheres); i++, written++ )
    write(major_spheres[i]+" (Major)\n");

  if (!written)
  {
    notify_fail("You don't belong to any schools.\n");
    return 0;
  }
  return written;
} /* int show schools..*/

/*** damage and resistance routine for different damage types ***/
/*** added by Eerevann 2-11-94 ***/
/* resist calcs in /std/spells/patch.c */

int spell_damage(mixed target, int damage, string type,object caster)
{
    if(!caster) target->adjust_hp(-damage);
    else target->adjust_hp(-damage,caster);
  return 1;
}

/* hmm, could we put this one somewhere else ? save up some memory.
 * Baldrick, just peeping around.. */

int spell_saving_throw(mixed target, int damage, string save_type)
{

 /*** SAVING THROW ***/
 /*** make save if random(level+20) > 15 ***/

 if ( (random( (target->query_level() )+20)) > 15)
    damage = damage/2;  /*** save for half damage ***/
  
 return damage;

}