legend/
legend/area/
legend/player/
/***************************************************************************
 *  God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock        *
 *  									   *
 *  Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little *
 *  This mud is NOT to be copied in whole or in part, or to be run without *
 *  the permission of Matthew Little. Nobody else has permission to        *
 *  authorise the use of this code.                                        *
 ***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "garou.h"

bool is_garou (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return FALSE;
   if (IS_CLASS (ch, CLASS_WEREWOLF))
      return TRUE;
   else
      return FALSE;
}

void do_gifts (CHAR_DATA * ch, char *argument)
{
   char arg1[MAX_INPUT_LENGTH];
   char arg2[MAX_INPUT_LENGTH];
   char buf[MAX_STRING_LENGTH];
   char lin[MAX_STRING_LENGTH];

   argument = one_argument (argument, arg1);
   argument = one_argument (argument, arg2);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

   if (arg1[0] == '\0' && arg2[0] == '\0')
   {

      sprintf (lin,
	       "#o================================================================================#n\n\r");
      stc (lin, ch);
      stc ("                                     Breed\n\r", ch);
      stc (lin, ch);
      sprintf (buf,
	       "         Homid     [ %d ]         Metis    [ %d ]         Lupus       [ %d ]\n\r",
	       ch->gifts[HOMID], ch->gifts[METIS], ch->gifts[LUPUS]);
      stc (buf, ch);
      stc (lin, ch);
      stc ("                                    Auspice\n\r", ch);
      stc (lin, ch);
      sprintf (buf,
	       "        Ragabash   [ %d ]        Theurge   [ %d ]        Philodox     [ %d ]\n\r",
	       ch->gifts[RAGABASH], ch->gifts[THEURGE], ch->gifts[PHILODOX]);
      stc (buf, ch);
      sprintf (buf,
	       "        Galliard   [ %d ]                               Ahroun       [ %d ]\n\r",
	       ch->gifts[GALLIARD], ch->gifts[AHROUN]);
      stc (buf, ch);
      stc (lin, ch);
      stc ("                                     Tribe\n\r", ch);
      stc (lin, ch);
      sprintf (buf,
	       "      Black Furies [ %d ]       Wendigo    [ %d ]    Children of Gaia [ %d ]\n\r",
	       ch->gifts[BLACKFURIES], ch->gifts[WENDIGO],
	       ch->gifts[CHILDREN]);
      stc (buf, ch);
      sprintf (buf,
	       "      Silver Fangs [ %d ]       Uktena     [ %d ]      Get of Fenris  [ %d ]\n\r",
	       ch->gifts[SILVERFANGS], ch->gifts[UKTENA],
	       ch->gifts[GETOFFENRIS]);
      stc (buf, ch);
      sprintf (buf,
	       "      Red Talons   [ %d ]     Shadow Lords [ %d ]     Silent Striders [ %d ]\n\r",
	       ch->gifts[REDTALONS], ch->gifts[SHADOWLORDS],
	       ch->gifts[SILENTSTRIDERS]);
      stc (buf, ch);
      sprintf (buf,
	       "      StarGazers   [ %d ]     Bone Gnawers [ %d ]       Glass Walkers [ %d ]\n\r",
	       ch->gifts[STARGAZERS], ch->gifts[BONEGNAWERS],
	       ch->gifts[GLASSWALKERS]);
      stc (buf, ch);
      sprintf (buf, "      Fianna       [ %d ]\n\r", ch->gifts[FIANNA]);
      stc (buf, ch);
      stc (lin, ch);
      stc ("To see the powers you have learned for each gift, type gifts <giftname> without\n\r", ch);
      stc ("any spaces <example - gifts childrenofgaia>.  Type wwpowers to see the commands\n\r", ch);
      stc ("to use the powers you have learned\n\r", ch);
      return;
   }
   if (arg2[0] == '\0')
   {

      if (!str_cmp (arg1, "ragabash"))
      {
	 if (ch->gifts[RAGABASH] == 0)
	 {
	    stc ("You have no knowledge of the Gifts of Ragabash.\n\r", ch);
	    return;
	 }
	 if (ch->gifts[RAGABASH] >= 1)
	 {
	    divide_to_char (ch);
	    centre_text ("The Gifts of Ragabash", ch);
	    divide_to_char (ch);
	    centre_text ("Blur of the Milky Eye (vanish)", ch);
	 }
	 if (ch->gifts[RAGABASH] >= 2)
	    centre_text ("Scent of Running Water", ch);
	 if (ch->gifts[RAGABASH] >= 3)
	    centre_text ("Blissful Ignorance", ch);
	 if (ch->gifts[RAGABASH] >= 4)
	    centre_text ("Luna's Blessing", ch);
	 if (ch->gifts[RAGABASH] >= 5)
	    centre_text ("Whelp's Body, Tailmonkey", ch);
	 divide_to_char (ch);
	 return;
      }

      if (!str_cmp (arg1, "lupus"))
      {
	 if (ch->gifts[LUPUS] == 0)
	 {
	    stc ("You have no knowledge of the Gifts of Lupus\n\r", ch);
	    return;
	 }
	 if (ch->gifts[LUPUS] >= 1)
	 {
	    divide_to_char (ch);
	    centre_text ("The Gifts of Lupus", ch);
	    divide_to_char (ch);
	    centre_text ("Heightened Senses", ch);
	 }
	 if (ch->gifts[LUPUS] >= 2)
	    centre_text ("Catfeet", ch);
	 if (ch->gifts[LUPUS] >= 3)
	    centre_text ("Gnaw", ch);
	 if (ch->gifts[LUPUS] >= 4)
	    centre_text ("Elemental Gift", ch);
	 if (ch->gifts[LUPUS] >= 5)
	    centre_text ("Song of the Great Beast", ch);
	 divide_to_char (ch);
	 return;
      }

      if (!str_cmp (arg1, "metis"))
      {
	 if (ch->gifts[METIS] == 0)
	 {
	    stc ("You have no knowledge of the Gifts of Metis.\n\r", ch);
	    return;
	 }
	 if (ch->gifts[METIS] >= 1)
	 {
	    divide_to_char (ch);
	    centre_text ("The Gifts of Metis", ch);
	    divide_to_char (ch);
	    centre_text ("Quills", ch);
	 }
	 if (ch->gifts[METIS] >= 2)
	    centre_text ("Burrow", ch);
	 if (ch->gifts[METIS] >= 3)
	    centre_text ("Nightsight", ch);
	 if (ch->gifts[METIS] >= 4)
	    centre_text ("Wither Limb", ch);
	 if (ch->gifts[METIS] >= 5)
	    centre_text ("Totem Gift (not in)", ch);
	 divide_to_char (ch);
	 return;
      }

      if (!str_cmp (arg1, "theurge"))
      {
	 if (ch->gifts[THEURGE] == 0)
	 {
	    stc ("You have no knowledge of the Theurge Gifts.\n\r", ch);
	    return;
	 }
	 else
	 {
	    divide_to_char (ch);
	    centre_text ("The Gifts of Theurge", ch);
	    divide_to_char (ch);
	    centre_text ("Mother's Touch", ch);
	    centre_text ("(Grasp the Beyond)", ch);
	    centre_text ("Spirit Drain", ch);
	    centre_text ("Feral Lobotomy", ch);
	    centre_text ("The Malleable Spirit", ch);
	    return;
	 }
      }
      if (!str_cmp (arg1, "Philodox"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of Philodox", ch);
	 divide_to_char (ch);
	 centre_text ("(Resist Pain)", ch);
	 centre_text ("(King of the Beasts)", ch);
	 centre_text ("(Strength of Purpose)", ch);
	 centre_text ("(Weak Arm)", ch);
	 centre_text ("Wall of Granite", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "Ahroun"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of Ahroun", ch);
	 divide_to_char (ch);
	 centre_text ("(Inspiration)", ch);
	 centre_text ("(Razor Claws)", ch);
	 centre_text ("(The Falling Touch)", ch);
	 centre_text ("(Silver Claws)", ch);
	 centre_text ("Clenched Jaw", ch);
	 //centre_text("(Stoking Fury's Furnace)",ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "BlackFuries"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Black Furies", ch);
	 divide_to_char (ch);
	 centre_text ("(Coup De Grace)", ch);
	 centre_text ("(Visceral Agony)", ch);
	 centre_text ("Body Wrack", ch);
	 centre_text ("(Wasp Talons)", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "ChildrenofGaia"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Children of Gaia", ch);
	 divide_to_char (ch);
	 centre_text ("(Luna's Armor)", ch);
	 centre_text ("Dazzle", ch);
	 centre_text ("Garou Serenity", ch);
	 centre_text ("(Halo of the Sun", ch);
	 centre_text ("The Living Wood", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "GetofFenris"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Get of Fenris", ch);
	 divide_to_char (ch);
	 centre_text ("(Halt the Coward's Flight)", ch);
	 centre_text ("Snarl of the Predator", ch);
	 centre_text ("(Might of Thor)", ch);
	 centre_text ("(Venom Blood)", ch);
	 centre_text ("(Fenris' Bite)", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "RedTalons"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Red Talons", ch);
	 divide_to_char (ch);
	 centre_text ("Avalanche", ch);
	 centre_text ("Barrage", ch);
	 centre_text ("Gaia's Vengeance", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "ShadowLords"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Shadow Lords", ch);
	 divide_to_char (ch);
	 centre_text ("(Fatal Flaw)", ch);
	 centre_text ("(Aura of Confidence)", ch);
	 centre_text ("Clap of Thunder", ch);
	 centre_text ("(Icy Chill of Despair)", ch);
	 centre_text ("Paralyzing Stare", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "SilentStriders"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Silent Striders", ch);
	 divide_to_char (ch);
	 centre_text ("(Speed of Thought)", ch);
	 centre_text ("(Speed Beyond Thought)", ch);
	 centre_text ("(Messenger's Speed)", ch);
	 centre_text ("Gate of the Moon", ch);
	 centre_text ("Reach the Umbra", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "SilverFangs"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Silver Fangs", ch);
	 divide_to_char (ch);
	 centre_text ("(Awe)", ch);
	 centre_text ("(Silver Claws)", ch);
	 centre_text ("(Mindblock)", ch);
	 centre_text ("Luna's Avenger", ch);
	 centre_text ("Paws of the Newborn Cub", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "Stargazers"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the StarGazers", ch);
	 divide_to_char (ch);
	 centre_text ("(Inner Strength)", ch);
	 centre_text ("Merciful Blow", ch);
	 centre_text ("(Preternatural Awareness", ch);
	 centre_text ("(Circular Attack)", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "Uktena"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Uktena", ch);
	 divide_to_char (ch);
	 centre_text ("Dark Shroud", ch);
	 centre_text ("(Spirit of the Bird)", ch);
	 centre_text ("Call Flame Spirit", ch);
	 centre_text ("Invisibility", ch);
	 centre_text ("(Hand of the Earth Lords)", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "Wendigo"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Wendigo", ch);
	 divide_to_char (ch);
	 centre_text ("Camouflage", ch);
	 centre_text ("Cutting Wind", ch);
	 centre_text ("Call the Cannibal Spirit", ch);
	 centre_text ("Heart of Ice", ch);
	 centre_text ("Chill of the Early Frost", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "BoneGnawers"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Bone Gnawer", ch);
	 divide_to_char (ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "Galliard"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Galliard", ch);
	 divide_to_char (ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "GlassWalkers"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Glass Walkers", ch);
	 divide_to_char (ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Senseaura", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "Fianna"))
      {
	 divide_to_char (ch);
	 centre_text ("The Gifts of the Fianna", ch);
	 divide_to_char (ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 centre_text ("Un-coded", ch);
	 divide_to_char (ch);
	 return;
      }
      if (!str_cmp (arg1, "homid"))
      {
	 if (ch->gifts[HOMID] == 0)
	 {
	    stc ("You have no knowledge of the Gift of Homid.\n\r", ch);
	    return;
	 }
	 if (ch->gifts[HOMID] >= 1)
	 {
	    divide_to_char (ch);
	    centre_text ("The Gifts of Homid", ch);
	    divide_to_char (ch);
	    centre_text ("Persuasion", ch);
	 }
	 if (ch->gifts[HOMID] >= 2)
	    centre_text ("Staredown", ch);
	 if (ch->gifts[HOMID] >= 3)
	    centre_text ("Disquiet", ch);
	 if (ch->gifts[HOMID] >= 4)
	    centre_text ("Reshape Object", ch);
	 if (ch->gifts[HOMID] >= 5)
	    centre_text ("Cocoon", ch);
	 divide_to_char (ch);
	 return;
      }

      else
      {
	 do_gifts (ch, "");
	 return;
      }
      return;
   }

   if (!str_cmp (arg2, "learn") || !str_cmp (arg2, "improve"))
   {
      int improve;
      int cost;
      int max = 5;

      if (!str_cmp (arg1, "homid"))
	 improve = HOMID;
      else if (!str_cmp (arg1, "metis"))
	 improve = METIS;
      else if (!str_cmp (arg1, "lupus"))
	 improve = LUPUS;
      else if (!str_cmp (arg1, "ragabash"))
	 improve = RAGABASH;
      else if (!str_cmp (arg1, "theurge"))
	 improve = THEURGE;
      else if (!str_cmp (arg1, "philodox"))
	 improve = PHILODOX;
      else if (!str_cmp (arg1, "galliard"))
	 improve = GALLIARD;
      else if (!str_cmp (arg1, "ahroun"))
	 improve = AHROUN;
      else if (!str_cmp (arg1, "blackfuries"))
	 improve = BLACKFURIES;
      else if (!str_cmp (arg1, "childrenofgaia"))
	 improve = CHILDREN;
      else if (!str_cmp (arg1, "getoffenris"))
	 improve = GETOFFENRIS;
      else if (!str_cmp (arg1, "redtalons"))
	 improve = REDTALONS;
      else if (!str_cmp (arg1, "shadowlords"))
	 improve = SHADOWLORDS;
      else if (!str_cmp (arg1, "silentstriders"))
	 improve = SILENTSTRIDERS;
      else if (!str_cmp (arg1, "silverfangs"))
	 improve = SILVERFANGS;
      else if (!str_cmp (arg1, "stargazers"))
	 improve = STARGAZERS;
      else if (!str_cmp (arg1, "uktena"))
	 improve = UKTENA;
      else if (!str_cmp (arg1, "wendigo"))
	 improve = WENDIGO;
      else if (!str_cmp (arg1, "bonegnawers"))
	 improve = BONEGNAWERS;
      else if (!str_cmp (arg1, "glasswalkers"))
	 improve = GLASSWALKERS;
      else if (!str_cmp (arg1, "fianna"))
	 improve = FIANNA;

      else
      {
	 do_gifts (ch, "");
	 return;
      }

      cost = (ch->gifts[improve] + 1) * 10;
      arg1[0] = UPPER (arg1[0]);
      if (ch->gifts[improve] >= max)
      {
	 sprintf (buf, "You have already gained all of the %s gifts.\n\r",
		  arg1);
	 send_to_char (buf, ch);
	 return;
      }

      if (cost > ch->practice)
      {
	 sprintf (buf, "It costs you %d primal to learn a new %s gift.\n\r",
		  cost, arg1);
	 send_to_char (buf, ch);
	 return;
      }

      ch->gifts[improve] += 1;
      ch->practice -= cost;
      sprintf (buf, "You have learned a new %s gift.\n\r", arg1);
      send_to_char (buf, ch);
      return;
   }

   else
      send_to_char
	 ("To learn a new gift, type: gifts '<name>' learn (without the spaces).\n\r",
	  ch);
   return;
}

// Next lines added by Unique 22/07/02 for wwpowers command to work homid_gift etc
void homid_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[HOMID] <= 1)
   {
      stc ("           Homid: None.\n\r", ch);
      return;
   }
   if (ch->gifts[HOMID] >= 2)
      stc ("           Homid: Staredown", ch);
   if (ch->gifts[HOMID] >= 3)
      stc (" Disquiet", ch);
   if (ch->gifts[HOMID] >= 4)
      stc (" Reshape", ch);
   if (ch->gifts[HOMID] >= 5)
      stc (" Cocoon", ch);
   stc ("\n\r", ch);
   return;
}

void metis_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[METIS] == 0)
   {
      stc ("           Metis: None.\n\r", ch);
      return;
   }
   if (ch->gifts[METIS] >= 1)
      stc ("           Metis: Quills", ch);
   if (ch->gifts[METIS] >= 2)
      stc (" Burrow", ch);
   if (ch->gifts[METIS] >= 3)
      stc (" Nightsight", ch);
   if (ch->gifts[METIS] >= 4)
      stc (" Wither", ch);
   stc ("\n\r", ch);
   return;
}

void lupus_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[LUPUS] == 0)
   {
      stc ("           Lupus: None.\n\r", ch);
      return;
   }
   if (ch->gifts[LUPUS] >= 1)
      stc ("           Lupus: Heightened", ch);
   if (ch->gifts[LUPUS] >= 3)
      stc (" Gnaw", ch);
   if (ch->gifts[LUPUS] >= 4)
      stc (" ElementGift", ch);
   if (ch->gifts[LUPUS] >= 5)
      stc (" SongBeast", ch);
   stc ("\n\r", ch);
   return;
}

void ragabash_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[RAGABASH] == 0)
   {
      stc ("        Ragabash: None.\n\r", ch);
      return;
   }
   if (ch->gifts[RAGABASH] >= 1)
      stc ("        Ragabash: Vanish", ch);
   if (ch->gifts[RAGABASH] >= 3)
      stc (" Blissfull", ch);
   if (ch->gifts[RAGABASH] >= 4)
      stc (" Lunasblessing", ch);
   if (ch->gifts[RAGABASH] >= 5)
      stc (" Whelpsbody Tailmonkey", ch);
   stc ("\n\r", ch);
   return;
}

void theurge_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[THEURGE] == 0)
   {
      stc ("         Theurge: None.\n\r", ch);
      return;
   }
   if (ch->gifts[THEURGE] >= 1)
      stc ("         Theurge: Mother", ch);
   if (ch->gifts[THEURGE] >= 3)
      stc (" Spiritdrain", ch);
   if (ch->gifts[THEURGE] >= 4)
      stc (" Feral", ch);
   if (ch->gifts[THEURGE] >= 5)
      stc (" Malleable", ch);
   stc ("\n\r", ch);
   return;
}

void philodox_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[PHILODOX] <= 4)
   {
      stc ("        Philodox: None.\n\r", ch);
      return;
   }
   if (ch->gifts[PHILODOX] >= 5)
      stc ("        Philodox: Granitewall", ch);
   stc ("\n\r", ch);
   return;
}

void galliard_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[GALLIARD] <= 2)
   {
      stc ("        Galliard: None.\n\r", ch);
      return;
   }
   if (ch->gifts[GALLIARD] >= 3)
      stc ("        Galliard: Beastwithin", ch);
   if (ch->gifts[GALLIARD] >= 4)
      stc (" Shred", ch);
   if (ch->gifts[GALLIARD] >= 5)
      stc (" Devour", ch);
   stc ("\n\r", ch);
   return;
}

void ahroun_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[AHROUN] <= 3)
   {
      stc ("          Ahroun: None.\n\r", ch);
      return;
   }
   if (ch->gifts[AHROUN] >= 4)
      stc ("          Ahroun: Clenched", ch);
   stc ("\n\r", ch);
   return;
}

void blackfuries_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[BLACKFURIES] <= 3)
   {
      stc ("    Black Furies: None.\n\r", ch);
      return;
   }
   if (ch->gifts[BLACKFURIES] >= 4)
      stc ("    Black Furies: Bodywrack", ch);
   stc ("\n\r", ch);
   return;
}

void wendigo_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[WENDIGO] == 0)
   {
      stc ("         Wendigo: None.\n\r", ch);
      return;
   }
   if (ch->gifts[WENDIGO] >= 1)
      stc ("         Wendigo: Hide", ch);
   if (ch->gifts[WENDIGO] >= 2)
      stc (" Cuttingwind", ch);
   if (ch->gifts[WENDIGO] >= 3)
      stc (" Cannibal", ch);
   if (ch->gifts[WENDIGO] >= 4)
      stc (" Heart", ch);
   if (ch->gifts[WENDIGO] >= 5)
      stc (" Chill", ch);
   stc ("\n\r", ch);
   return;
}

void childrenofgaia_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[CHILDRENOFGAIA] <= 1)
   {
      stc ("Children of Gaia: None.\n\r", ch);
      return;
   }
   if (ch->gifts[CHILDRENOFGAIA] >= 2)
      stc ("Children of Gaia: Dazzle", ch);
   if (ch->gifts[CHILDRENOFGAIA] >= 3)
      stc (" Calm Garouserenity", ch);
   if (ch->gifts[CHILDRENOFGAIA] >= 4)
      stc (" Halo", ch);
   if (ch->gifts[CHILDRENOFGAIA] >= 5)
      stc (" Living", ch);
   stc ("\n\r", ch);
   return;
}

void silverfangs_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[SILVERFANGS] <= 2)
   {
      stc ("    Silver Fangs: None.\n\r", ch);
      return;
   }
   if (ch->gifts[SILVERFANGS] >= 3)
      stc ("    Silver Fangs: Shield", ch);
   if (ch->gifts[SILVERFANGS] >= 4)
      stc (" Lunasavenger", ch);
   if (ch->gifts[SILVERFANGS] >= 5)
      stc (" Paws", ch);
   stc ("\n\r", ch);
   return;
}

void uktena_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[UKTENA] == 0)
   {
      stc ("          Uktena: None.\n\r", ch);
      return;
   }
   if (ch->gifts[UKTENA] >= 1)
      stc ("          Uktena: Darkshroud", ch);
   if (ch->gifts[UKTENA] >= 3)
      stc (" Flamespirit", ch);
   if (ch->gifts[UKTENA] >= 4)
      stc (" Invisibility", ch);
   stc ("\n\r", ch);
   return;
}

void getoffenris_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[GETOFFENRIS] <= 1)
   {
      stc ("   Get of Fenris: None.\n\r", ch);
      return;
   }
   if (ch->gifts[GETOFFENRIS] >= 2)
      stc ("   Get of Fenris: Snarl", ch);
   stc ("\n\r", ch);
   return;
}

void redtalons_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[REDTALONS] == 0)
   {
      stc ("      Red Talons: None.\n\r", ch);
      return;
   }
   if (ch->gifts[REDTALONS] >= 1)
      stc ("      Red Talons: Avalanche", ch);
   if (ch->gifts[REDTALONS] >= 2)
      stc (" Barrage", ch);
   if (ch->gifts[REDTALONS] >= 3)
      stc (" Vengeance", ch);
   stc ("\n\r", ch);
   return;
}

void shadowlords_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[SHADOWLORDS] <= 2)
   {
      stc ("    Shadow Lords: None.\n\r", ch);
      return;
   }
   if (ch->gifts[SHADOWLORDS] >= 3)
      stc ("    Shadow Lords: Clap", ch);
   stc ("\n\r", ch);
   return;
}

void silentstriders_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[SILENTSTRIDERS] <= 3)
   {
      stc (" Silent Striders: None.\n\r", ch);
      return;
   }
   if (ch->gifts[SILENTSTRIDERS] >= 4)
      stc (" Silent Striders: Gatemoon", ch);
   if (ch->gifts[SILENTSTRIDERS] >= 5)
      stc (" Reach", ch);
   stc ("\n\r", ch);
   return;
}

void stargazers_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[STARGAZERS] <= 1)
   {
      stc ("     Star Gazers: None.\n\r", ch);
      return;
   }
   if (ch->gifts[STARGAZERS] >= 2)
      stc ("     Star Gazers: Merciful", ch);
   stc ("\n\r", ch);
   return;
}

void bonegnawers_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   stc ("    Bone Gnawers: This gift is currently not coded", ch);
   stc ("\n\r", ch);
   return;
}

void glasswalkers_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[GLASSWALKERS] <= 1)
   {
      stc ("   Glass Walkers: None.\n\r", ch);
      return;
   }
   if (ch->gifts[GLASSWALKERS] >= 2)
      stc ("   Glass Walkers: Senseaura", ch);
   stc ("\n\r", ch);
   return;
}

void fianna_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->gifts[FIANNA] == 0)
   {
      stc ("          Fianna: None.\n\r", ch);
      return;
   }
   if (ch->gifts[FIANNA] >= 1)
      stc ("          Fianna: Brew", ch);
   if (ch->gifts[FIANNA] >= 3)
      stc (" Banshee", ch);
   if (ch->gifts[FIANNA] >= 4)
      stc (" Balor", ch);
   if (ch->gifts[FIANNA] >= 5)
      stc (" Talon", ch);
   stc ("\n\r", ch);
   return;
}
void do_wwpowers (CHAR_DATA * ch, char *argument)
{
   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      do_rand_typo (ch);
      return;
   }
   stc ("#o================================================================================#n\n\r", ch);
   cent_to_char ("#w-[ Werewolf Powers ]-#n", ch);
   stc ("#o================================================================================#n\n\r", ch);

   stc ("   Innate Powers: Rage Claws Fangs\n\r", ch);
   homid_gift (ch);
   metis_gift (ch);
   lupus_gift (ch);
   ragabash_gift (ch);
   theurge_gift (ch);
   philodox_gift (ch);
   galliard_gift (ch);
   ahroun_gift (ch);
   blackfuries_gift (ch);
   wendigo_gift (ch);
   childrenofgaia_gift (ch);
   silverfangs_gift (ch);
   uktena_gift (ch);
   getoffenris_gift (ch);
   redtalons_gift (ch);
   shadowlords_gift (ch);
   silentstriders_gift (ch);
   stargazers_gift (ch);
   bonegnawers_gift (ch);
   glasswalkers_gift (ch);
   fianna_gift (ch);
   stc ("#o================================================================================#n\n\r", ch);
   stc ("Powers that are 'auto' are not listed.\n\rTo see all powers for each gift, type gifts <giftname> (no spaces)\n\r", ch);
   stc ("#o================================================================================#n\n\r", ch);
   return;
}

/* Galliard */
void do_beastwithin (CHAR_DATA * ch, char *argument)
{
    char buf[MSL];

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[GALLIARD] < 3)
   {
      stc ("You need level 3 galliard to use this.\n\r", ch);
      return;
   }
   if (IS_SET (ch->special, SPC_WOLFMAN))
   {
      send_to_char ("You are already in crinos form.\n\r", ch);
      return;
   }

   if (ch->beast_timer > 0)
   { 
      sprintf(buf,"You cannot beast for another %d ticks.\n\r",ch->beast_timer);
      stc(buf,ch);
      return;
   }

   ch->pcdata->stats[UNI_RAGE] = number_range (250, 300);
   //ch->beast_timer = 25;
   do_werewolf (ch, "");
   WAIT_STATE (ch, 12);
   return;
}

/*
 * Homid Gifts
 * Level One  - Persuasion    - Like Awe for Vampires.  Automatic
 * Level Two  - Staredown     - Mobs flee
 * Level Three- Disquiet      - Spell effect, -hit\dam in combat for opponent.
 * Level Four - Reshape Object- Rename objects
 * Level Five - Cocoon        - Damage Reduction
 */

void do_persuasion (CHAR_DATA * ch, char *argument)
{
   if (IS_NPC (ch))
      return;
   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }
   if (ch->gifts[HOMID] < 1)
   {
      send_to_char
	 ("You must obtain at least level 1 in Homid to become persuasive",
	  ch);
      return;
   }
   if (IS_EXTRA (ch, EXTRA_AWE))
   {
      REMOVE_BIT (ch->extra, EXTRA_AWE);
      send_to_char ("You are no longer Persuasive.\n\r", ch);
      act ("$n is no longer persuasive.", ch, NULL, NULL, TO_ROOM);
      return;
   }
   SET_BIT (ch->extra, EXTRA_AWE);
   send_to_char ("You are now very persuasive.\n\r", ch);
   act ("$n is now very persuasive", ch, NULL, NULL, TO_ROOM);
   return;


}

/*
 * Homid - 2 - Staredown
 */

void do_staredown (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MAX_INPUT_LENGTH];
   char buf[MAX_STRING_LENGTH];

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      stc ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[HOMID] < 2)
   {
      stc ("You have not learned the Homid gift of Staredown.\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   arg[0] = UPPER (arg[0]);

   if (ch->fighting == NULL)
   {
      stc ("You must be fighting to use the gift of Staredown.\n\r", ch);
      return;
   }

   if (victim->fighting == NULL)
   {
      sprintf (buf, "%s is not fighting anyone.", arg);
      stc (buf, ch);
      return;
   }

   WAIT_STATE (ch, 16);

   if (IS_NPC (victim))
   {
      if (ch->gifts[HOMID] < 4)
      {
	 if (number_range (1, 3) != 1)
	 {
	    act ("You stare deeply into $N's eyes, but nothing happens.", ch,
		 NULL, victim, TO_CHAR);
	    act ("$n stares deeply into your eyes.", ch, NULL, victim,
		 TO_VICT);
	    act ("$n stares deeply into $N's eyes, but nothing happens.", ch,
		 NULL, victim, TO_NOTVICT);
	    return;
	 }
      }

      act ("You stare into $N's eyes, and $E flees in terror.", ch, NULL,
	   victim, TO_CHAR);
      act ("$n stares deeply into your eyes, and you are filled with terror.",
	   ch, NULL, victim, TO_VICT);
      act ("$n stares deeply into $N's eyes, and $E flees in terror.", ch,
	   NULL, victim, TO_NOTVICT);
      do_flee (victim, "");
      return;
   }

   else
   {
      if (ch->gifts[HOMID] < 5)
      {
	 if (number_range (1, 4) != 2)
	 {
	    act ("You stare deeply into $N's eyes, but nothing happens.", ch,
		 NULL, victim, TO_CHAR);
	    act ("$n stares deeply into your eyes.", ch, NULL, victim,
		 TO_VICT);
	    act ("$n stares deeply into $N's eyes, but nothing happens.", ch,
		 NULL, victim, TO_NOTVICT);
	    return;
	 }
      }

      act ("You stare into $N's eyes, and $E flees in terror.", ch, NULL,
	   victim, TO_CHAR);
      act ("$n stares deeply into your eyes, and you are filled with terror.",
	   ch, NULL, victim, TO_VICT);
      act ("$n stares deeply into $N's eyes, and $E flees in terror.", ch,
	   NULL, victim, TO_NOTVICT);
      do_flee (victim, "");
      return;
   }

   return;

}

/*
void do_disquiet( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    AFFECT_DATA af;
    char arg [MAX_INPUT_LENGTH];

    argument = one_argument( argument, arg );

    if (IS_NPC(ch)) return;

    if (!IS_CLASS(ch, CLASS_WEREWOLF))
    {
      send_to_char("Huh?\n\r", ch);
      return;
    }

    if ( ch->gifts[HOMID] < 3 )
    {
      send_to_char("You have not learned the Homid gift of Disquiet.\n\r", ch);
      return;
    }

    if ( ( victim = get_char_room(ch, arg) ) == NULL )
    {
      stc("They are not here.\n\r",ch);
      return;
    }

    if ( is_safe( ch, victim) ) return;

    if ( ch->gnosis[GCURRENT] < 1 )
    {
      stc("You need one point of gnosis power to use the gift of Disquiet.\n\r",ch);
      return;
    }
* note TYPE is needed for an effect! tkk 011299 *
	af.type      = skill_lookup("disquiet");
    af.duration  = ch->gifts[HOMID];
    af.location  = APPLY_DAMROLL;
    af.modifier  = -( ch->gifts[HOMID] * 5 );
    af.bitvector = 0;
    affect_to_char( victim, &af );

* note TYPE is needed for an effect! tkk 011299 *
	af.type      = skill_lookup("disquiet");
    af.duration  = ch->gifts[HOMID];
    af.location  = APPLY_HITROLL;
    af.modifier  = -( ch->gifts[HOMID] * 5 );
    af.bitvector = 0;
    affect_to_char( victim, &af );

    ch->gnosis[CURRENT]--;
    act("Your eyes glow a sinister red as you glare at $N.",ch,NULL,victim,TO_CHAR);
    act("$n's eyes glow a sinister red as $e glares at you.\n\rYou feel odd.",ch,NULL,victim,TO_VICT);
    act("$n's eyes glow a sinister red as $e glares at $N.",ch,NULL,victim,TO_NOTVICT);

    return;

}
*/

DO_COM (do_disquiet)
{
   CHAR_DATA *victim;
   char arg[MAX_INPUT_LENGTH];

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      do_rand_typo (ch);
      return;
   }
   if (ch->gifts[HOMID] < 3)
   {
      send_to_char ("You have not learned the Homid gift of Disquiet.\n\r",
		    ch);
      return;
   }

   if (arg[0] == '\0')
   {
      send_to_char ("Who do you wish to use Disquiet on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      send_to_char ("They are not here.\n\r", ch);
      return;
   }

   if (IS_NPC (victim))
   {
      send_to_char ("Not on NPC's.\n\r", ch);
      return;
   }
   act ("A look of concentration crosses $n's face.", ch, NULL, NULL,
	TO_ROOM);

   if (IS_SET (victim->newbits, NEW_CALM))
   {
      send_to_char ("You no longer feel so apathetic.\n\r", victim);
      victim->disquiet_counter = 0;
      REMOVE_BIT (victim->newbits, NEW_CALM);
      WAIT_STATE (ch, 12);
      return;
   }

   if (is_safe (ch, victim))
      return;

   if (number_range (1, 25) >= 10)
   {
      send_to_char ("You suddenly feel very apathetic!\n\r", victim);
      act ("$n yawns and looks around with a bored expression.", victim, NULL,
	   NULL, TO_ROOM);
      victim->disquiet_counter = 50;
      SET_BIT (victim->newbits, NEW_CALM);
      WAIT_STATE (ch, 12);
   }
   return;
}
void do_reshape (CHAR_DATA * ch, char *argument)
{
   char arg1[MAX_STRING_LENGTH];
   char arg2[MAX_STRING_LENGTH];
   OBJ_DATA *obj;

   argument = one_argument (argument, arg1);
   strcpy (arg2, argument);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[HOMID] < 4)
   {
      send_to_char
	 ("You have not achieved the Homid gift of Reshape Object.\n\r", ch);
      return;
   }

   if (arg1 == NULL || arg2 == NULL)
   {
      send_to_char ("Syntax: Reshape (Item) (Description).\n\r", ch);
      return;
   }

   if ((obj = get_obj_carry (ch, arg1)) == NULL)
   {
      send_to_char ("You dont have that item.\n\r", ch);
      return;
   }

   if (!str_cmp (arg2, "Tijer"))
   {
      send_to_char ("You failed!\r\n", ch);
      return;
   }
   if (obj->item_type == ITEM_QUEST || obj->item_type == ITEM_AMMO ||
       obj->item_type == ITEM_EGG || obj->item_type == ITEM_VOODOO ||
       obj->item_type == ITEM_PIECE ||
       obj->item_type == ITEM_MONEY || obj->item_type == ITEM_TREASURE || obj->item_type == ITEM_AQUEST ||
       obj->item_type == ITEM_TOOL || obj->item_type == ITEM_SYMBOL ||
       obj->item_type == ITEM_PAGE || IS_SET (obj->quest, QUEST_ARTIFACT) ||
       IS_SET (obj->quest, QUEST_RELIC) || obj->item_type == ITEM_ETOKEN)
   {
      send_to_char ("Not on that item!\n\r", ch);
      return;
   }

   if (strlen (arg2) > 40 || strlen (arg2) < 3)
   {
      send_to_char ("The name should be between 3 and 40 characters.\n\r",
		    ch);
      return;
   }

   free_string (obj->name);
   obj->name = str_dup (arg2);
   free_string (obj->short_descr);
   obj->short_descr = str_dup (arg2);
   free_string (obj->questmaker);
   obj->questmaker = str_dup (ch->name);
   send_to_char ("Ok.\n\r", ch);
   return;
}

void do_cocoon (CHAR_DATA * ch, char *argument)
{
   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      stc ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[HOMID] < 5)
   {
      stc ("You haven't learned the Homid gift of Cocoon.\n\r", ch);
      return;
   }


   if (IS_GAR1 (ch, WOLF_COCOON))
   {
      stc ("Your cocoon breaks and falls to the ground.\n\r", ch);
      act ("$n's cocoon breaks and falls to the ground.", ch, NULL, NULL,
	   TO_ROOM);
      REMOVE_BIT (ch->garou1, WOLF_COCOON);
      return;
   }

   if (ch->gnosis[GCURRENT] < 2)
   {
      stc ("You do not have enough gnosis to use Cocoon.\n\r", ch);
      return;
   }

   else
   {
      stc ("Your body is surrounded by a thick, opaque epidermis.\n\r", ch);
      act ("$n's body is surrounded by a thick, opaque epidermis.", ch, NULL,
	   NULL, TO_ROOM);
      SET_BIT (ch->garou1, WOLF_COCOON);
      ch->gnosis[GCURRENT]--;
      return;
   }
   return;
}

/*
 * Metis Gifts
 * Level One  - Gift of the Porcupine - Quills
 * Level Two  - Burrow          - Like Demon Travel
 * Level Three- Eyes of the Cat - Nightsight
 * Level Four - Wither Limb	- Withers a limb, easier on NPCs
 * Level Five - Totem Gift	- Random, Special Power. Ooo.
 */

void do_quills (CHAR_DATA * ch, char *argument)
{
   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      stc ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[METIS] < 1)
   {
      stc ("You haven't learned the Gift of the Porcupine.\n\r", ch);
      return;
   }

   if (IS_SET (ch->newbits, NEW_QUILLS))
   {
      stc ("Your quills soften and twist into fur.\n\r", ch);
      act ("$n's quills soften and revert back to fur.", ch, NULL, NULL,
	   TO_ROOM);
      REMOVE_BIT (ch->newbits, NEW_QUILLS);
      return;
   }

   if (!IS_SET (ch->newbits, NEW_QUILLS))
   {
      stc ("Your fur becomes bristly and sharp.\n\r", ch);
      act ("$n's fur becomes bristly and sharp.", ch, NULL, NULL, TO_ROOM);
      SET_BIT (ch->newbits, NEW_QUILLS);
      return;
   }
   return;
}

void do_burrow (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   CHAR_DATA *victim;

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

   if (is_inarena (ch))
      return;
   if (ch->gifts[METIS] < 2)
   {
      send_to_char ("You haven't learned the Metis gift of Burrow.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      send_to_char ("Burrow to who?\n\r", ch);
      return;
   }

   if ((victim = get_char_world (ch, arg)) == NULL)
   {
      send_to_char ("They are not here.\n\r", ch);
      return;
   }

   if (IS_NPC (victim))
   {
      send_to_char ("Not on NPC's.\n\r", ch);
      return;
   }

   if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON))
   {
      send_to_char ("I don't think they want you to do that.\n\r", ch);
      return;
   }

   if (victim == ch)
   {
      send_to_char ("You cannot burrow to yourself.\n\r", ch);
      return;
   }

   if (victim->level != LEVEL_AVATAR || !IS_CLASS (victim, CLASS_WEREWOLF))
   {
      send_to_char ("Nothing happens.\n\r", ch);
      return;
   }

   if (victim->in_room == NULL)
   {
      send_to_char ("Nothing happens.\n\r", ch);
      return;
   }

   send_to_char ("You burrow into the ground.\n\r", ch);
   act ("$n burrows into the ground.", ch, NULL, NULL, TO_ROOM);
   char_from_room (ch);
   char_to_room (ch, victim->in_room);
   do_look (ch, "");
   send_to_char ("You burrow out of the ground.\n\r", ch);
   act ("$n burrows out of the ground.", ch, NULL, NULL, TO_ROOM);
   return;
}

// Eyes of the Cat - Nightsight.  clan.c

void do_wither (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   OBJ_DATA *obj;
   char arg[MAX_INPUT_LENGTH];
   bool blah = FALSE;
   int chance = 0;

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      stc ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[METIS] < 4)
   {
      stc ("You haven't learned the Metis gift of Wither Limb.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 3)
   {
      stc ("You do not have enough gnosis power stored to use the gift of Wither Limb.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Who's limb do you wish to wither?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (IS_ARM_R (victim, LOST_ARM) && IS_ARM_L (victim, LOST_ARM))
   {
      stc ("They have already lost both their arms.\n\r", ch);
      return;
   }
   if (is_safe (ch, victim))
      return;
   WAIT_STATE (ch, 32);
   ch->gnosis[CURRENT] -= 3;
   if (IS_NPC (victim))
   {
      chance = number_range (45, 55);

      if (number_percent () > chance)
      {
	 stc ("Nothing happened.\n\r", ch);
	 return;
      }

      if (!IS_ARM_R (victim, LOST_ARM))
	 blah = FALSE;
      else
	 blah = TRUE;

      if (!blah)
      {
	 if (!IS_ARM_R (victim, LOST_ARM))
	    SET_BIT (victim->loc_hp[3], LOST_ARM);
	 if (!IS_BLEEDING (victim, BLEEDING_ARM_R))
	    SET_BIT (victim->loc_hp[6], BLEEDING_ARM_R);
	 if (IS_BLEEDING (victim, BLEEDING_HAND_R))
	    REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_R);
	 act ("You concentrate deeply and $N's arm starts to wither!", ch,
	      NULL, victim, TO_CHAR);
	 act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
	 act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
	      victim, TO_VICT);
	 make_part (victim, "arm");
	 if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
	 {
	    if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
	       take_item (victim, obj);
	 }
	 if ((obj = get_eq_char (victim, WEAR_WIELD)) != NULL)
	    take_item (victim, obj);
         if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_WRIST_R)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_FINGER_R)) != NULL)
	    take_item (victim, obj);
	 return;
      }

      else if (blah)
      {
	 if (!IS_ARM_L (victim, LOST_ARM))
	    SET_BIT (victim->loc_hp[2], LOST_ARM);
	 else
	    blah = TRUE;
	 if (!IS_BLEEDING (victim, BLEEDING_ARM_L))
	    SET_BIT (victim->loc_hp[6], BLEEDING_ARM_L);
	 if (IS_BLEEDING (victim, BLEEDING_HAND_L))
	    REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_L);
	 act ("You concentrate deeply and $N's arm starts to wither!", ch,
	      NULL, victim, TO_CHAR);
	 act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
	 act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
	      victim, TO_VICT);
	 make_part (victim, "arm");
	 if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
	 {
	    if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
	       take_item (victim, obj);
	 }
         if ((obj = get_eq_char (victim, WEAR_HOLD)) != NULL)
	    take_item (victim, obj);
         if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_WRIST_L)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_FINGER_L)) != NULL)
	    take_item (victim, obj);
	 return;
      }
   }

   else if (!IS_NPC (victim))
   {
      chance = 35;

      if (IS_ITEMAFF (victim, ITEMA_ARTIFACT))
	 chance = 0;

      if (number_percent () > chance)
      {
	 act ("You gaze intently at $N.\n\rNothing happens.", ch, NULL,
	      victim, TO_CHAR);
	 act ("$n gazes eerily at you.\n\rNothing happens.", ch, NULL, victim,
	      TO_VICT);
	 act ("$n gazes eerily at $N.", ch, NULL, victim, TO_NOTVICT);
	 return;
      }


      if (!IS_ARM_R (victim, LOST_ARM))
	 blah = FALSE;
      else
	 blah = TRUE;

      if (!blah)
      {
	 if (!IS_ARM_R (victim, LOST_ARM))
	    SET_BIT (victim->loc_hp[3], LOST_ARM);
	 if (!IS_BLEEDING (victim, BLEEDING_ARM_R))
	    SET_BIT (victim->loc_hp[6], BLEEDING_ARM_R);
	 if (IS_BLEEDING (victim, BLEEDING_HAND_R))
	    REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_R);
	 act ("You concentrate deeply and $N's arm starts to wither!", ch,
	      NULL, victim, TO_CHAR);
	 act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
	 act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
	      victim, TO_VICT);
	 make_part (victim, "arm");
	 if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
	 {
	    if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
	       take_item (victim, obj);
	 }
	 if ((obj = get_eq_char (victim, WEAR_WIELD)) != NULL)
	    take_item (victim, obj);
         if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_WRIST_R)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_FINGER_R)) != NULL)
	    take_item (victim, obj);
	 return;
      }

      else if (blah)
      {
	 if (!IS_ARM_L (victim, LOST_ARM))
	    SET_BIT (victim->loc_hp[2], LOST_ARM);
	 else
	    blah = TRUE;
	 if (!IS_BLEEDING (victim, BLEEDING_ARM_L))
	    SET_BIT (victim->loc_hp[6], BLEEDING_ARM_L);
	 if (IS_BLEEDING (victim, BLEEDING_HAND_L))
	    REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_L);
	 act ("You concentrate deeply and $N's arm starts to wither!", ch,
	      NULL, victim, TO_CHAR);
	 act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
	 act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
	      victim, TO_VICT);
	 make_part (victim, "arm");
	 if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
	 {
	    if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
	       take_item (victim, obj);
	 }
         if ((obj = get_eq_char (victim, WEAR_HOLD)) != NULL)
	    take_item (victim, obj);
         if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_WRIST_L)) != NULL)
	    take_item (victim, obj);
	 if ((obj = get_eq_char (victim, WEAR_FINGER_L)) != NULL)
	    take_item (victim, obj);
	 return;
      }
   }
   return;
}

/* Lupus Gifts
 * Heightened Senses-do_truesight
 * Catfeet-Auto
 * Gnaw
 * Elemental Gift
 * Song of the Great Beast
 */
void do_heightened (CHAR_DATA * ch, char *argument)
{
   if (IS_NPC (ch))
      return;

   if (!is_garou (ch))
      return;

   if (ch->gifts[LUPUS] < 1)
   {
      stc ("You must obtain level one Lupus to use Heightened Senses.\n\r",
	   ch);
      return;
   }

   if (IS_SET (ch->act, PLR_HOLYLIGHT))
   {
      REMOVE_BIT (ch->act, PLR_HOLYLIGHT);
      send_to_char ("Your senses return to normal.\n\r", ch);
   }
   else
   {
      SET_BIT (ch->act, PLR_HOLYLIGHT);
      send_to_char ("Your senses increase to incredible proportions.\n\r",
		    ch);
   }

   return;
}

void do_gnaw (CHAR_DATA * ch, char *argument)
{
   if (!is_garou (ch))
      return;

   if (ch->gifts[LUPUS] < 3)
   {
      stc ("You must obtain level three Lupus to use Gnaw.\n\r", ch);
      return;
   }

   stc ("You try to gnaw through your restrains.\n\r", ch);
   act ("$n gnaws at $s restrains.", ch, NULL, NULL, TO_ROOM);

   if (IS_EXTRA (ch, TIED_UP))
   {
      act ("The ropes restraining you snap.", ch, NULL, NULL, TO_CHAR);
      act ("The ropes restraining $n snap.", ch, NULL, NULL, TO_ROOM);
      REMOVE_BIT (ch->extra, TIED_UP);
   }
   if (is_affected (ch, gsn_web))
   {
      act ("The webbing entrapping $n breaks away.", ch, NULL, NULL, TO_ROOM);
      send_to_char ("The webbing entrapping you breaks away.\n\r", ch);
      affect_strip (ch, gsn_web);
   }
   if (IS_AFFECTED (ch, AFF_WEBBED))
   {
      act ("The webbing entrapping $n breaks away.", ch, NULL, NULL, TO_ROOM);
      send_to_char ("The webbing entrapping you breaks away.\n\r", ch);
      REMOVE_BIT (ch->affected_by, AFF_WEBBED);
   }
   if (IS_SET (ch->flag2, AFF2_TENDRILS))
   {
      act ("The tendrils entrapping $n break away.", ch, NULL, NULL, TO_ROOM);
      send_to_char ("The tendrils entrapping you break away.\n\r", ch);
      REMOVE_BIT (ch->flag2, AFF2_TENDRILS);
   }

   return;
}

void do_elementalgift (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[LUPUS] < 4)
   {
      stc ("You must obtain level 5 Lupus to use Elemental Gift.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 1)
   {
      stc ("You must have one point of Gnosis to use this power.\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("You cannot find them here.\n\r", ch);
      return;
   }

   dam = ch->gifts[LUPUS] * 100;
   if (IS_NPC (victim))
      dam *= 3;
   if (IS_CLASS (victim, CLASS_VAMPIRE))
      dam *= 2.3;

   act ("You call upon the forces of Gaia to annihilate $N.", ch, NULL,
	victim, TO_CHAR);
   act ("$n throws back $s head and howls loudly, causing the room to shake.\nThe room turns dark, and a blast of elemental fire consumes you.", ch, NULL, victim, TO_VICT);
   act ("$n throws back $s head and howls loudly, causing the room to shake.\nThe room turns dark.\nA blast of elemental fire consumes $N!", ch, NULL, victim, TO_NOTVICT);
   mage_damage (ch, victim, dam, "elemental blast", MAGEDAM_FIRE);
   ch->gnosis[GCURRENT] -= 1;
   WAIT_STATE (ch, 16);
   return;
}

void do_songbeast (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   AFFECT_DATA af;
   int sn;

   if (!is_garou (ch))
      return;

   if (is_inarena (ch))
      return;

   if (ch->gifts[LUPUS] < 5)
   {
      stc ("You must obtain level 5 Lupus to use this power.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 3)
   {
      stc ("You need 3 points of gnosis to use this power.\n\r", ch);
      return;
   }

   if (ch->pcdata->followers > 3)
   {
      stc ("Nothing happens..\n\r", ch);
      return;
   }

   ch->pcdata->followers++;

   victim = create_mobile (get_mob_index (MOB_VNUM_GUARDIAN));
   free_string (victim->short_descr);
   victim->short_descr = str_dup ("a Giant Yeti");
   free_string (victim->name);
   victim->name = str_dup ("yeti giant");
   free_string (victim->long_descr);
   victim->long_descr =
      str_dup ("A Giant Yeti, towers over you snarling vicously.\n\r");
   victim->level = 500;
   victim->hit = 15000;
   victim->max_hit = 15000;
   victim->hitroll = 250;
   victim->damroll = 250;
   victim->armor = -1500;
   SET_BIT (victim->act, ACT_NOEXP);

   act ("You howl loudly at the sky.\nThe ground beneath your feet begins to shake.\n  Suddenly,  A huge dinosaur emerges from the earth below you.", ch, NULL, NULL, TO_CHAR);
   act ("$n howls loudly at the sky.\nThe ground beneath your feet begins to shake.\n  Suddenly, A huge dinosaur bursts from the ground with a loud roar!", ch, NULL, NULL, TO_ROOM);
   char_to_room (victim, ch->in_room);


   if ((sn = skill_lookup ("guardian")) < 0)
   {
      send_to_char ("Bug - please inform a coder.\n\r", ch);
      return;
   }


   add_follower (victim, ch);
   af.type = sn;
   af.duration = 666;
   af.location = APPLY_NONE;
   af.modifier = 0;
   af.bitvector = AFF_CHARM;
   affect_to_char (victim, &af);
   ch->gnosis[GCURRENT] -= 3;
   return;
}

/*
 * Ahroun Gifts
 * 1=razorclaws
 */

void do_razorclaws (CHAR_DATA * ch, char *argument)
{

   if (IS_CLASS (ch, CLASS_WEREWOLF))
   {
      if (ch->gifts[AHROUN] <= 1)
      {
	 stc ("Huh?\n\r", ch);
	 return;
      }
   }
   else
      return;

   if (!IS_VAMPAFF (ch, VAM_CLAWS))
   {
      stc ("Your talons aren't even extended!\n\r", ch);
      return;
   }

   if (IS_GAR1 (ch, WOLF_RAZORCLAWS))
   {
      stc ("Your claws lose their razor-sharp edge.\n\r", ch);
      act ("$n's claws lose their razor-sharp edge.", ch, NULL, NULL,
	   TO_ROOM);
      REMOVE_BIT (ch->garou1, WOLF_RAZORCLAWS);
   }
   else
   {
      send_to_char ("You hone your claws to a razor sharpness.\n\r", ch);
      act ("$n hones $s claws to a razor sharpness.", ch, NULL, NULL,
	   TO_ROOM);
      SET_BIT (ch->garou1, WOLF_RAZORCLAWS);
   }

   return;

}

/* Ragabash
 * Vanish
 * Scent of Running Water - No hunt\track(auto)
 * Blissful Ignorance
 * Luna's Blessing
 * Whelp Body
 */

void do_tailmonkey (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   CHAR_DATA *victim;
   int dam;
   int stance;

   one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      do_rand_typo (ch);
      return;
   }

   if (ch->gifts[RAGABASH] < 5)
   {
      send_to_char
	 ("You require the level 5 Ragabash power to use Tail of the Monkey.\n\r",
	  ch);
      return;
   }

   if (arg[0] == '\0' && ch->fighting == NULL)
   {
      send_to_char ("Who do you wish to use Tail of the Monkey on?\n\r", ch);
      return;
   }

   if ((victim = ch->fighting) == NULL)
   {
      if ((victim = get_char_room (ch, arg)) == NULL)
      {
	 send_to_char ("They aren't here.\n\r", ch);
	 return;
      }
   }

   if (IS_ITEMAFF (ch, ITEMA_PEACE))
      do_majesty (ch, "");

   if (is_safe (ch, victim))
   {
      return;
   }

   WAIT_STATE (ch, skill_table[gsn_kick].beats);
   dam = number_range (10, 20);

   dam += char_damroll (ch);
   dam += ch->damcap[0]/2;
   if (dam == 0)
      dam = 1;
   if (!IS_AWAKE (victim))

      dam *= 2;
   else
      dam *= 1;

   dam = dam + (dam * ((ch->wpn[0]) * 0.01));

   {
      stance = ch->stance[0];
      if (IS_STANCE (ch, STANCE_NORMAL))
	 dam *= 1.25;
      else
	 dam = dambonus (ch, victim, dam, stance);
   }

   if (dam <= 0)
      dam = 1;

   damage (ch, victim, dam, gsn_tail);
   return;
}

void do_blissful (CHAR_DATA * ch, char *argument)
{
   if (!is_garou (ch))
      return;

   if (ch->gifts[RAGABASH] < 3)
   {
      stc ("You must obtain level 3 Ragabash to use Blissful Ignorance.\n\r",
	   ch);
      return;
   }

   if (has_timer (ch))
      return;

   if (IS_GAR1 (ch, GAROU_BLISSFUL))
   {
      stc ("You fade back into view.\n\r", ch);
      REMOVE_BIT (ch->garou1, GAROU_BLISSFUL);
      return;
   }
   else
   {
      stc ("You become completely invisible.\n\r", ch);
      SET_BIT (ch->garou1, GAROU_BLISSFUL);
      return;
   }
   return;
}

void do_lunasblessing (CHAR_DATA * ch, char *argument)
{
   int sn, level;

   if (!is_garou (ch))
      return;

   if (ch->gifts[RAGABASH] < 4)
   {
      stc ("You must obtain level 4 Ragabash to use Luna's Blessing.\n\r",
	   ch);
      return;
   }

   if ((sn = skill_lookup ("lunas blessing")) < 0)
      return;

   if (is_affected (ch, skill_lookup ("lunas blessing")))
   {
      stc ("You already have Luna's Blessing!\n\r", ch);
      return;
   }

   stc ("A beam of moonlight shoots out of the sky and surrounds you.\n\r",
	ch);
   act ("$n is engulfed by a beam of moonlight from the sky.", ch, NULL, NULL,
	TO_ROOM);
   level = (ch->gifts[RAGABASH] * 5);
   (*skill_table[sn].spell_fun) (sn, level, ch, ch);
   WAIT_STATE (ch, 12);
   return;
}

void do_whelp (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam;  
    
   argument = one_argument (argument, arg);
   
   if (!is_garou (ch))
      return;
      
   if (ch->gifts[RAGABASH] < 5)
   {
      stc ("You must obtain level 5 Ragabash to use Whelp's Body\n\r", ch);
      return;
   }
      
   if (arg[0] == '\0')
   {
      stc ("Whelp who?\n\r", ch);
      return;
   }
        
   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }
   
   if (victim->level < 3)
   {
      stc ("You can only use this power on Avatars!\n\r", ch);
      return;
   }
    
   if (ch->gnosis[GCURRENT] < 6)
   {
      stc ("You require six points of gnosis to use this power.\n\r", ch);
      return;
   }
    
   if (victim->hit < 1000)
   {
      stc ("They are almost dead already.  It wouldn't be any fun.\n\r", ch);
      return;
   }

   dam = number_range (1000, 5000);
   //dam = number_range((ch->gifts[BLACKFURIES] * 150),(ch->gifts[BLACKFURIES]*175));
   act ("You lay your hands on $N, and $S body starts to shake and quiver.",
        ch, NULL, victim, TO_CHAR);
   act ("$n lays $s hands on you, and you feel your body quiver and weaken.",
        ch, NULL, victim, TO_VICT);
   act ("$n lays $s hands on $N, and $N's body starts to shake and quiver.",
        ch, NULL, victim, TO_NOTVICT);
   mage_damage (ch, victim, dam, "curse", MAGEDAM_OTHER);
   ch->gnosis[GCURRENT] -= 6;
   WAIT_STATE (ch, 16);
   return;   
}   

void do_whelp2 (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[RAGABASH] < 5)
   {
      stc ("You must obtain level 5 Ragabash to use Whelp's Body\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("You cannot find them here.\n\r", ch);
      return;
   }

   if (victim->level < 3)
   {
      stc ("You can only use this power on Avatars!\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 6)
   {
      stc ("You require six points of gnosis to use this power.\n\r", ch);
      return;
   }

   if (IS_SET (victim->garou1, GAROU_WHELP2)
       || IS_SET (victim->garou1, GAROU_WHELP1))
   {
      stc ("They are already affected by a Whelp Curse.\n\r", ch);
      return;
   }


   SET_BIT (victim->garou1, GAROU_WHELP2);
   act ("You lay your hands on $N, and $S body starts to shake and quiver.",
	ch, NULL, victim, TO_CHAR);
   act ("$n lays $s hands on you, and you feel your body quiver and weaken.",
	ch, NULL, victim, TO_VICT);
   act ("$n lays $s hands on $N, and $N's body starts to shake and quiver.",
	ch, NULL, victim, TO_NOTVICT);
   dam = number_range (1500, 2500);
   mage_damage (ch, victim, dam, "curse", MAGEDAM_OTHER);
   if (victim->max_hit > 3001)
      victim->max_hit -= 3000;
   WAIT_STATE (victim, 8);
   WAIT_STATE (ch, 16);
   ch->gnosis[GCURRENT] -= 6;
   return;
}

/* Theurge
 * Mother's Touch
 * Grasp the Beyond
 * Spirit Drain
 * Feral Lobotomy
 * The Malleable Spirit
 */

void do_mothers (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[THEURGE] < 1)
   {
      stc ("You must obtain level 1 Theurge to use Mother's Touch.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to heal?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("You cannot find them here.\n\r", ch);
      return;
   }

   if (victim == ch)
   {
      stc ("You cannot use this power on yourself!\n\r", ch);
      return;
   }

   if (victim->hit >= victim->max_hit)
   {
      stc ("They are already at full health!\n\r", ch);
      return;
   }

   act ("You lay your hands on $N, rejuvenating them.", ch, NULL, victim,
	TO_CHAR);
   act ("$n lays $s hands on you, and you feel healthier.", ch, NULL, victim,
	TO_VICT);
   act ("$n lays $s hands on $N, and $N's wounds begin to close.", ch, NULL,
	victim, TO_NOTVICT);
   victim->hit +=
      (number_range ((ch->gifts[THEURGE] * 100), (ch->gifts[THEURGE] * 140)));
   if (victim->hit > victim->max_hit)
      victim->hit = victim->max_hit;
   update_pos (victim);
   WAIT_STATE (ch, 12);
   return;
}

// grasp the beyond. auto. lets you get shit from shadowplane.

void do_spiritdrain (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   OBJ_DATA *obj;
   int hpgain;

   one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (arg[0] == '\0')
   {
      send_to_char ("Drain the spirit of which corpse?\n\r", ch);
      return;
   }

   obj = get_obj_list (ch, arg, ch->in_room->contents);
   if (obj == NULL)
   {
      send_to_char ("You can't find it.\n\r", ch);
      return;
   }

   if (obj->item_type != ITEM_CORPSE_NPC)
   {
      act ("You are unable to drain the energy of $p.", ch, obj, 0, TO_CHAR);
      return;
   }
   else if (obj->chobj != NULL && !IS_NPC (obj->chobj)
	    && obj->chobj->pcdata->obj_vnum != 0)
   {
      act ("You are unable to drain the energy of $p.", ch, obj, 0, TO_CHAR);
      return;
   }

   hpgain = number_range (50, 150);
   ch->hit += hpgain;
   if (ch->hit > ch->max_hit)
      ch->hit = ch->max_hit;
   act ("You drain the spirit energy out of $p.", ch, obj, NULL, TO_CHAR);
   act ("$p is drained of energy by $n.", ch, obj, NULL, TO_ROOM);
   extract_obj (obj);
   WAIT_STATE (ch, 4);
   return;
}

void do_feral (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[THEURGE] < 4)
   {
      stc ("You must obtain level 4 Theurge to use Feral Lobotomy.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They are not here.\n\r", ch);
      return;
   }

   if (victim->level < 3)
   {
      stc ("You can only use this power on Avatars!\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 3)
   {
      stc ("You need three points of gnosis to use this power.\n\r", ch);
      return;
   }

   dam = ch->gifts[THEURGE] * 100;
   if (IS_NPC (victim))
      dam *= 4;
   dam = number_range ((dam - 100), (dam + 100));
   act ("You focus your gnosis power on $N.", ch, NULL, victim, TO_CHAR);
   act ("$n's claws deliver a power blow of energy to your head.", ch, NULL,
	victim, TO_VICT);
   act ("$n's claws slash open $N's forehead.", ch, NULL, victim, TO_NOTVICT);
   mage_damage (ch, victim, dam, "mind blast", MAGEDAM_OTHER);
   ch->gnosis[GCURRENT] -= 3;
   return;
}

void do_malleable (CHAR_DATA * ch, char *argument)
{
   OBJ_DATA *obj;
   char arg[MIL];

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[THEURGE] < 5)
   {
      stc ("You must obtain level 5 Theurge to use Malleable Spirit\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Which object do you wish to use this on?\n\r", ch);
      return;
   }

   if ((obj = get_obj_carry (ch, arg)) == NULL)
   {
      stc ("You aren't even carrying that object.\n\r", ch);
      return;
   }

   if (obj->item_type != ITEM_WEAPON)
   {
      stc ("This power can only be used on weapons.\n\r", ch);
      return;
   }

   if (IS_SET (obj->quest, QUEST_MALLEABLE))
   {
      stc ("This object has already been modified.\n\r", ch);
      return;
   }

   obj->value[1] += (ch->gifts[THEURGE] * 2);
   obj->value[2] += (ch->gifts[THEURGE] * 2);
   act ("You manipulate the spirit in $p, increasing it's effectiveness.", ch,
	obj, NULL, TO_CHAR);
   SET_BIT (obj->quest, QUEST_MALLEABLE);
   WAIT_STATE (ch, 8);
   return;
}

/* Philodox Gifts
 * Resist Pain (Auto)
 * King of the Beasts (Auto)
 * Strength of Purpose (Auto)
 * Weak Arm (Auto)
 * Wall of Granite
 */

void do_wallofgranite (CHAR_DATA * ch, char *argument)
{
   if (!is_garou (ch))
      return;

   if (ch->gifts[PHILODOX] < 5)
   {
      stc ("You must obtain level 5 Philodox to use Wall of Granite.\n\r",
	   ch);
      return;
   }

   if (IS_SET (ch->garou1, WW_GRANITE))
   {
      stc ("Your wall of granite fades away.\n\r", ch);
      REMOVE_BIT (ch->garou1, WW_GRANITE);
   }

   if (!IS_SET (ch->garou1, WW_GRANITE))
   {
      stc ("A wall of granite arises around your body to protect you.\n\r",
	   ch);
      SET_BIT (ch->garou1, WW_GRANITE);
      return;
   }

   return;
}

/* Ahroun
 * Inspiration (Auto)
 * Razor Claws (Auto)
 * The Falling Touch (Auto)
 * Silver Claws (Auto)
 * Clenched Jaw
 * Stoking Fury's Furnace (Auto)
 */

void do_clenched (CHAR_DATA * ch, char *argument)
{
   if (!is_garou (ch))
      return;

   if (ch->gifts[AHROUN] < 4)
   {
      stc ("You must obtain level 4 Ahroun to use this power.\n\r", ch);
      return;
   }

   if (IS_SET (ch->garou1, GAROU_CLENCHED))
   {
      stc ("You relax your jaw.\n\r", ch);
      REMOVE_BIT (ch->garou1, GAROU_CLENCHED);
      return;
   }

   if (!IS_GAR1 (ch, GAROU_CLENCHED))
   {
      stc ("You prepare to clench your jaw on your opponents.\n\r", ch);
      SET_BIT (ch->garou1, GAROU_CLENCHED);
      return;
   }
   return;
}

/* Black Furies
 * Heightened Senses
 * Coup De Grace (Auto)
 * Visceral Agony (Auto)
 * Body Wrack
 * Wasp Talons (Auto)
 */

void do_bodywrack (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[BLACKFURIES] < 4)
   {
      stc ("You must obtain level 4 Black Furies to use Body Wrack.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 5)
   {
      stc ("You need five points of gnosis to use this power.\n\r", ch);
      return;
   }

   if (victim->hit < 1000)
   {
      stc ("They are almost dead already.  It wouldn't be any fun.\n\r", ch);
      return;
   }
   dam = number_range (500, 1000);
   //dam = number_range((ch->gifts[BLACKFURIES] * 150),(ch->gifts[BLACKFURIES]*175));
   act ("You focus a blast of gnosis on $N.", ch, NULL, victim, TO_CHAR);
   act ("A blast of energy shoots out of $n's claws and wracks your body.",
	ch, NULL, victim, TO_VICT);
   mage_damage (ch, victim, dam, "gnosis warp", MAGEDAM_OTHER);
   ch->gnosis[GCURRENT] -= 5;
   WAIT_STATE (ch, 16);
   return;
}


/* Children of Gaia
 * Luna's Armor (Auto)
 * Dazzle
 * Calm the Beast
 * Halo of the Sun
 * The Living Wood
 */

void do_dazzle (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[CHILDRENOFGAIA] < 2)
   {
      stc ("You must obtain level 2 Children of Gaia to use Dazzle.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (victim->wait > 0)
   {
      stc ("You failed...\n\r", ch);
      return;
   }

   act ("You gaze at $N, dazzling $M with Gaia's Glory.", ch, NULL, victim,
	TO_CHAR);
   act ("You catch $n's gaze, and are dazzled by $s glory.", ch, NULL, victim,
	TO_VICT);
   WAIT_STATE (victim, 12);
   WAIT_STATE (ch, 8);
   return;
}

void do_garouserenity (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[CHILDRENOFGAIA] < 3)
   {
      stc ("You must obtain the third Children of Gaia gift to use Serenity.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to calm?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }
   victim->beast_timer = 25;
   if (number_range (1, 4) != 3)
   {
      stc ("You sing a blissful and soothing song.\n\r", ch);
      act ("$n starts singing a blissful and soothing song.", ch, NULL,
	   victim, TO_VICT);
      stc ("Nothing seems to happen..\n\r", ch);
      WAIT_STATE (ch, 12);
      return;
   }


   if (IS_CLASS (victim, CLASS_VAMPIRE))
   {
      if (victim->pcdata->stats[UNI_RAGE] < 1)
      {
	 stc ("They aren't even raged!\n\r", ch);
	 return;
      }
      else
      {
	 stc ("You sing a blissful and soothing song.\n\r", ch);
	 act ("$n starts singing a blissful and soothing song.", ch, NULL,
	      victim, TO_VICT);
	 do_calm (victim, "");
	 return;
      }
      WAIT_STATE (ch, 16);
      return;
   }
   else if (IS_CLASS (victim, CLASS_WEREWOLF))
   {
      if (victim->pcdata->stats[UNI_RAGE] < 100)
      {
	 stc ("They aren't even raged!\n\r", ch);
	 return;
      }
      else
      {
	 stc ("You sing a blissful and soothing song.\n\r", ch);
	 act ("$n starts singing a blissful and soothing song.", ch, NULL,
	      victim, TO_VICT);
	 do_unwerewolf (victim, "");
	 return;
      }
      WAIT_STATE (ch, 16);
   }
   return;
}

void do_livingwood (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[CHILDRENOFGAIA] < 5)
   {
      stc ("You must obtain the fifth Children of Gaia gift to use this power.\n\r", ch);
      return;
   }

   if (ch->in_room->sector_type != SECT_FOREST)
   {
      stc ("You can only use this power in the forest.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this power on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (IS_SET (victim->mflags, MAGE_EMBRACED2)
       || IS_SET (victim->mflags, MAGE_EMBRACED1))
   {
      stc ("They are already embraced by the earth.\n\r", ch);
      return;
   }

   act ("You call upon the forest to entrap your foe.", ch, NULL, NULL,
	TO_CHAR);
   act ("$n chants softly.\nThe ground around you begins to rise up, entrapping you.", ch, NULL, victim, TO_VICT);
   act ("$n begins to chant softly.\nSuddenly, the ground surrounding $N begins to rise up and entrap $M!", ch, NULL, victim, TO_NOTVICT);
   SET_BIT (victim->mflags, MAGE_EMBRACED2);
   WAIT_STATE (ch, 16);
   return;
}

/* Get of Fenris
 * Halt the Coward's Flight (Auto)
 * Snarl of the PRedator
 * MIght of Thor (Auto)
 * Venom Blood (Auto)
 * Fenris' Bite (Auto)
 */

void do_snarl (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;

   if (!is_garou (ch))
      return;

   if (ch->gifts[GETOFFENRIS] < 2)
   {
      stc ("You must obtain the second gift of Get Of Fenris to use this power.\n\r", ch);
      return;
   }

   if (ch->fighting == NULL)
   {
      stc ("You must be fighting to use this power.\n\r", ch);
      return;
   }

   victim = ch->fighting;

   if (victim->wait > 0)
   {
      stc ("You snarl visciously, but nothing seems to happen..\n\r", ch);
      return;
   }

   act ("You snarl visciously at $N, sending chills up $S spine..", ch, NULL,
	victim, TO_CHAR);
   act ("$n snarls visciously at you.\nYou are scared stiff.", ch, NULL,
	victim, TO_VICT);
   WAIT_STATE (victim, 8);
   WAIT_STATE (ch, 12);
   return;
}

/* Red Talons
 * Avalanche
 * Quicksand
 * Gaia's Vengeance
 * ONLY THREE POWERS IN THIS SONUVABITCH.
 */

void do_avalanche (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *vch;
   CHAR_DATA *vch_next;
   CHAR_DATA *mount;

   if (!is_garou (ch))
      return;

   if (ch->gifts[REDTALONS] < 1)
   {
      stc ("You must obtain the level one Red Talons gift to use Avalanche.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 5)
   {
      stc ("You must have 5 points of gnosis to use this power.\n\r", ch);
      return;
   }

   stc ("You call upon the power of Gaia to unleash an avalanche on your foes.\n\r", ch);
   for (vch = char_list; vch != NULL; vch = vch_next)
   {
      vch_next = vch->next;
      if (vch->in_room == NULL)
	 continue;
      if (vch->in_room != ch->in_room)
	 continue;
      if (vch->level < 3)
	 continue;
      if (!IS_NPC (vch) && vch->pcdata->chobj != NULL)
	 continue;
      if (is_safe (ch, vch))
	 continue;
      if (ch == vch)
	 continue;
      if ((mount = ch->mount) != NULL)
	 if (mount == vch)
	    continue;
      act ("$n calls upon the power of Gaia to unleash an Avalanche on the area!", ch, NULL, vch, TO_VICT);
      mage_damage (ch, vch, number_range (400, 500), "avalanche",
		   MAGEDAM_OTHER);
   }
   ch->gnosis[GCURRENT] -= 5;
   WAIT_STATE (ch, 16);
   return;
}

void do_barrage (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *vch;
   CHAR_DATA *vch_next;
   CHAR_DATA *mount;

   if (!is_garou (ch))
      return;

   if (ch->gifts[REDTALONS] < 2)
   {
      stc ("You must obtain the second gift of the Red Talons to use Barrage.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] <= 5)
   {
      stc ("You must have 5 points of gnosis to use this power.\n\r", ch);
      return;
   }

   for (vch = char_list; vch != NULL; vch = vch_next)
   {
      vch_next = vch->next;
      if (vch->in_room == NULL)
	 continue;
      if (vch->in_room != ch->in_room)
	 continue;
      if (vch->level < 3)
	 continue;
      if (!IS_NPC (vch))
	 continue;
      if (is_safe (ch, vch))
	 continue;
      if (ch == vch)
	 continue;
      if ((mount = ch->mount) != NULL)
	 if (mount == vch)
	    continue;
      mage_damage (ch, vch, number_range (4000, 5000), "elemental barrage",
		   MAGEDAM_OTHER);
   }
   ch->gnosis[GCURRENT] -= 5;
   WAIT_STATE (ch, 16);
   return;
}

void do_vengeance (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *vch;
   CHAR_DATA *vch_next;
   CHAR_DATA *mount;

   if (!is_garou (ch))
      return;

   if (ch->gifts[REDTALONS] < 3)
   {
      stc ("You must obtain the third gift of the Red Talons to use Gaia's Vengeance.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 10)
   {
      stc ("You need 10 points of gnosis to use this power.\n\r", ch);
      return;
   }

   stc ("You stir up the essence of Gaia in the land around you, summoning her vegeance to strike down your foes.\n\r", ch);
   act ("$n summons the essence of Gaia into $s body, and the room bursts with a blinding white light.", ch, NULL, NULL, TO_ROOM);
   for (vch = char_list; vch != NULL; vch = vch_next)
   {
      vch_next = vch->next;
      if (vch->in_room == NULL)
	 continue;
      if (vch->in_room != ch->in_room)
	 continue;
      if (vch->level < 3)
	 continue;
      if (!IS_NPC (vch) && ch->pcdata->chobj != NULL)
	 continue;
      if (ch == vch)
	 continue;
      if (is_safe (ch, vch))
	 continue;
      if ((mount = ch->mount) != NULL)
	 if (mount == vch)
	    continue;
      mage_damage (ch, vch, number_range (2000, 3000), "vengeance of Gaia",
		   MAGEDAM_OTHER);
   }
   ch->gnosis[GCURRENT] -= 10;
   WAIT_STATE (ch, 24);
   return;
}

/* Shadow Lords
 * Fatal Flaw (Auto)
 * Aura of Confidence (Auto)
 * Clap of Thunder
 * Icy Chill of Dispair (Auto)
 * Strength of the Dominator (Auto)
 */

void do_clapofthunder (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *vch;
   CHAR_DATA *vch_next;
   CHAR_DATA *mount;

   if (!is_garou (ch))
      return;

   if (ch->gifts[SHADOWLORDS] < 3)
   {
      stc ("You must obtain the third gift of the Shadow Lords to use Clap of Thunder.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 5)
   {
      stc ("You must have 5 points of gnosis to use this power.\n\r", ch);
      return;
   }

   stc ("You clap your hands together, sending forth a shockwave that stuns everyone in the room.\n\r", ch);
   act ("$n claps $s hands together, sending forth a shockwave that stuns you instantly!", ch, NULL, NULL, TO_ROOM);
   for (vch = char_list; vch != NULL; vch = vch_next)
   {
      vch_next = vch->next;
      if (vch->in_room == NULL)
	 continue;
      if (vch->in_room != ch->in_room)
	 continue;
      if (vch->level < 3)
	 continue;
      if (!IS_NPC (vch))
	 continue;
      if (is_safe (ch, vch))
	 continue;
      if (ch == vch)
	 continue;
      if ((mount = ch->mount) != NULL)
	 if (mount == vch)
	    continue;
      mage_damage (ch, vch, number_range (50, 100), "clap of thunder",
		   MAGEDAM_OTHER);
      vch->position = POS_STUNNED;
   }
   ch->gnosis[GCURRENT] -= 5;
   WAIT_STATE (ch, 16);
   return;
}

/* Silent Striders
 * Speed of Thought (Auto)
 * Speed beyond Thought (Auto)
 * Messenger's Speed (Auto)
 * Gate of the Moon
 * Reach the Umbra
 */

void do_gatemoon (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   OBJ_DATA *obj;
   char arg[MIL];
   int duration;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[SILENTSTRIDERS] < 4)
   {
      stc ("You must obtain the fourth Silent Striders gift to use Gate of the Moon.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this power on?\n\r", ch);
      return;
   }

   if ((victim = get_char_world (ch, arg)) == NULL)
   {
      stc ("They aren't anywhere to be found.\n\r", ch);
      return;
   }
   if IS_SET
      (victim->in_room->room_flags, ROOM_CCHAMBER)
   {
      stc ("You failed.\n\r", ch);
      return;
   }
   if (IS_NPC (victim) && IS_SET (victim->in_room->area->aflags, AFLAG_HQ))
   {
      stc ("You failed.\n\r", ch);
      return;
   }
   if (IS_NPC (victim) && victim->level > 150)
   {
      stc ("You failed.\n\r", ch);
      return;
   }

   if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON))
   {
      stc ("You can't manage to open a moongate to them.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 2)
   {
      stc ("You need two points of Gnosis to use this power.\n\r", ch);
      return;
   }


   if (weather_info.sunlight == SUN_LIGHT
       || weather_info.sunlight == SUN_RISE)
   {
      send_to_char ("The moon is not out.\n\r", ch);
      return;
   }


   duration = number_range (2, 3) * 15;

   obj = create_object (get_obj_index (OBJ_VNUM_PORTAL), 0);
   obj->value[0] = victim->in_room->vnum;
   obj->value[3] = ch->in_room->vnum;
   obj->timer = duration;
   free_string (obj->name);
   obj->name = str_dup ("gate moon portal");
   free_string (obj->short_descr);
   obj->short_descr = str_dup ("a moongate");
   free_string (obj->description);
   obj->description = str_dup ("A glimmering moongate floats here.");
   if (IS_AFFECTED (ch, AFF_SHADOWPLANE))
      obj->extra_flags = ITEM_SHADOWPLANE;
   obj_to_room (obj, ch->in_room);

   obj = create_object (get_obj_index (OBJ_VNUM_PORTAL), 0);
   obj->value[0] = ch->in_room->vnum;
   obj->value[3] = victim->in_room->vnum;
   obj->timer = duration;
   free_string (obj->name);
   obj->name = str_dup ("gate moon portal");
   free_string (obj->short_descr);
   obj->short_descr = str_dup ("a moongate");
   free_string (obj->description);
   obj->description = str_dup ("A glimmering moongate floats here.");
   if (IS_AFFECTED (victim, AFF_SHADOWPLANE))
      obj->extra_flags = ITEM_SHADOWPLANE;
   obj_to_room (obj, victim->in_room);

   act ("$p appears in front of $n.", ch, obj, NULL, TO_ROOM);
   act ("$p appears in front of you.", ch, obj, NULL, TO_CHAR);
   act ("$p appears in front of $n.", victim, obj, NULL, TO_ROOM);
   act ("$p appears in front of you.", ch, obj, victim, TO_VICT);

   WAIT_STATE (ch, 8);
   ch->gnosis[GCURRENT] -= 2;
   return;
}


/* Silver Fangs
 * Awe (Auto)
 * Silver Claws (Auto)
 * Mindblock (Auto)
 * Luna's Avenger
 * Paws of the Newborn Cub
 */
void do_lunasavenger (CHAR_DATA * ch, char *argument)
{
   if (!is_garou (ch))
      return;

   if (ch->gifts[SILVERFANGS] < 4)
   {
      stc ("You must obtain the fourth gift of the Silver Fangs to use Luna's Avenger.\n\r", ch);
      return;
   }

   if (IS_SET (ch->garou1, GAROU_AVENGER))
   {
      stc ("Your body warps and shrinks, losing it's silver composition.\n\r",
	   ch);
      REMOVE_BIT (ch->garou1, GAROU_AVENGER);
      return;
   }

   else
   {
      stc ("Your body warps and grows, becoming imbued with silver.\n\r", ch);
      SET_BIT (ch->garou1, GAROU_AVENGER);
      return;
   }
   return;
}

void do_paws (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[SILVERFANGS] < 5)
   {
      stc ("You must obtain the fifth gift of the Silver Fangs to use Paws of the Newborn Cub.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (ch == victim)
   {
      stc ("It might be a bad idea to use this on yourself..\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 15)
   {
      stc ("You need 15 points of gnosis to use this power.\n\r", ch);
      return;
   }

   if (IS_NPC (victim))
   {
      stc ("This power is useless on beasts..\n\r", ch);
      return;
   }

   if (IS_SET (victim->garou1, GAROU_PAWS))
   {
      stc ("They are already afflicted with this disease..\n\r", ch);
      return;
   }

   act ("You focus your gnosis power into your hands, and lay them on $N.",
	ch, NULL, victim, TO_CHAR);
   act ("$n's hands start to glow violently, and $e reaches out and lays them on you.", ch, NULL, victim, TO_VICT);
   act ("$n's hands start to glow brightly, and $e reaches out and presses them against $N's forehead.", ch, NULL, victim, TO_NOTVICT);
   act ("$N's body starts to weaken and shrink!", ch, NULL, victim, TO_CHAR);
   act ("$N's body starts to weaken and shrink!", ch, NULL, victim,
	TO_NOTVICT);
   stc ("Your body starts to weaken and shrink!\n\r", victim);
   SET_BIT (victim->garou1, GAROU_PAWS);
   ch->gnosis[GCURRENT] -= 15;
   WAIT_STATE (ch, 24);
   return;
}

/* Stargazers
 * Inner Strength (Auto)
 * Merciful Blow
 * Preternatural Awareness (Auto)
 * Circular Attack (Auto)
 */
void do_merciful (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;

   if (!is_garou (ch))
      return;

   if (ch->gifts[STARGAZERS] < 2)
   {
      stc ("You must obtain the second gift of the Stargazers to use Merciful Blow.\n\r", ch);
      return;
   }

   if (ch->fighting == NULL)
   {
      stc ("You must be fighting to use this power.\n\r", ch);
      return;
   }

   victim = ch->fighting;

   if (((victim->hit / victim->max_hit) * 100) >= 50)
   {
      stc ("They are far too healthy to be affected by this power.\n\r", ch);
      return;
   }

   if (number_range (1, 8) != 4)
   {
      act ("You deliver a blow to $N's neck, but nothing happens.", ch, NULL,
	   victim, TO_CHAR);
      act ("$n delivers a powerful blow to your neck, but you shrug it off.",
	   ch, NULL, victim, TO_VICT);
      act ("$n delivers a powerful blow to $N's neck, but $E shrugs it off.",
	   ch, NULL, victim, TO_NOTVICT);
      WAIT_STATE(ch, 12);
      return;
   }
   else
   {
      act ("You deliver a blow to $N's neck, and $N falls to the ground.", ch,
	   NULL, victim, TO_CHAR);
      act ("$n delivers a powerful blow to your neck, and you fall to the ground.", ch, NULL, victim, TO_VICT);
      act ("$n delivers a powerful blow to $N's neck, and $E falls to the ground.", ch, NULL, victim, TO_NOTVICT);
      do_peace (ch, "");
      victim->position = POS_STUNNED;
      WAIT_STATE(ch, 12);
      return;
   }
//   WAIT_STATE(ch, 12);
   return;
}

/* Uktena
 * Shroud
 * Spirit of the Bird (Auto)
 * Call Flame Spirit
 * Invisibility
 * Hand of the Earth Lords (Auto)
 */

void do_darkshroud (CHAR_DATA * ch, char *argument)
{
   if (!is_garou (ch))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }
   if (ch->gifts[UKTENA] < 1)
   {
      stc ("You must obtain the first gift of the Uktena to use Dark Shroud.\n\r", ch);
      return;
   }
   if (IS_SET (ch->newbits, NEW_DARKNESS))
   {
      REMOVE_BIT (ch->newbits, NEW_DARKNESS);
      REMOVE_BIT (ch->in_room->room_flags, ROOM_DARK);
      send_to_char ("You banish the darkness from the room!\n\r", ch);
      act ("A look of concentration crosses $n's face.", ch, NULL, NULL,
	   TO_ROOM);
      act ("$n banishes the darkness from the room!", ch, NULL, NULL,
	   TO_ROOM);
      return;
   }
   if (IS_SET (ch->in_room->room_flags, ROOM_DARK))
   {
      send_to_char ("The room is already in darkness.\n\r", ch);
      return;
   }

   SET_BIT (ch->in_room->room_flags, ROOM_DARK);
   SET_BIT (ch->newbits, NEW_DARKNESS);
   send_to_char ("You call forth the Shroud of Night to darken the room!\n\r",
		 ch);
   act ("A look of concentration crosses $n's face.", ch, NULL, NULL,
	TO_ROOM);
   act ("The room is filled with darkness!", ch, NULL, NULL, TO_ROOM);
   WAIT_STATE (ch, 8);
   return;
}

void do_flamespirit (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam = 0;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[UKTENA] < 3)
   {
      stc ("You must obtain the third gift of the Uktena to use Call the Flame Spirit.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (is_safe (ch, victim))
      return;

   if (ch->gnosis[GCURRENT] < 2)
   {
      stc ("You need two points of gnosis to use this power.\n\r", ch);
      return;
   }

   dam = number_range ((ch->gifts[UKTENA] * 100), (ch->gifts[UKTENA] * 120));
   if (IS_CLASS (victim, CLASS_VAMPIRE))
      dam *= number_range (2, 3);
   act ("You summon a spirit of Flames to disintegrate $N.", ch, NULL, victim,
	TO_CHAR);
   act ("$n conjures a spirit of flames to smite you.", ch, NULL, victim,
	TO_VICT);
   act ("$n conjures a spirit of flames to smite $N!", ch, NULL, victim,
	TO_NOTVICT);
   if (!WORN_ARTIFACT (victim, ARTI_DEMONS_HEART)) mage_damage (ch, victim, dam, "flame spirit", MAGEDAM_OTHER);
   ch->gnosis[GCURRENT] -= 2;
   WAIT_STATE (ch, 16);
   return;
}

void do_invisibility (CHAR_DATA * ch, char *argument)
{
   if (!is_garou (ch))
      return;

   if (ch->gifts[UKTENA] < 4)
   {
      stc ("You must obtain the fourth gift of the Uktena to use Invisibility.\n\r", ch);
      return;
   }

   if (IS_GAR1 (ch, GAROU_BLISSFUL))
   {
      stc ("You fade out of your invisibility.\n\r", ch);
      REMOVE_BIT (ch->garou1, GAROU_BLISSFUL);
      return;
   }
   else
   {
      stc ("Your body fades out of existance.\n\r", ch);
      SET_BIT (ch->garou1, GAROU_BLISSFUL);
      return;
   }
   return;
}

/* Wendigo
 * Camouflage
 * Cutting Wind
 * Call the Cannibal Spirit
 * Heart of Ice
 * Chill of the Early Frost
 */

void do_cuttingwind (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam = 0;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[WENDIGO] < 2)
   {
      stc ("You must obtain the second gift of the Wendigo to use Cutting Wind.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 2)
   {
      stc ("You need two points of gnosis to use this power.\n\r", ch);
      return;
   }

   dam = number_range (1000, 1250);
   if (IS_NPC (victim))
      dam *= 2;
   act ("You summon the bitter winds of the Great Wendigo to rip $N.", ch,
	NULL, victim, TO_CHAR);
   act ("$n summons the bitter winds of the Great Wendigo to tear you apart.",
	ch, NULL, victim, TO_VICT);
   act ("$n summons the bitter winds of the Great Wendigo to tear $N apart.",
	ch, NULL, victim, TO_NOTVICT);
   mage_damage (ch, victim, dam, "blast of wind", MAGEDAM_OTHER);
   ch->gnosis[GCURRENT] -= 2;
   WAIT_STATE (ch, 24);
   return;
}

void do_cannibalspirit (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   CHAR_DATA *mob;
   char arg[MIL];

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[WENDIGO] < 3)
   {
      stc ("You must obtain the third gift of the Wendigo to Call the Cannibal Spirit.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this on?\n\r", ch);
      return;
   }

   if ((victim = get_char_world (ch, arg)) == NULL)
   {
      stc ("You cannot find them in this realm.\n\r", ch);
      return;
   }

   if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON))
   {
      stc ("You failed\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 15)
   {
      stc ("You need 15 gnosis points to use this power.\n\r", ch);
      return;
   }

   if (is_safe (ch, victim))
   {
      stc ("They are in a holy place.\n\r", ch);
      return;
   }

   if (victim->level < 3)
   {
      stc ("They must be an avatar!\n\r", ch);
      return;
   }

   if ((mob = create_mobile (get_mob_index (MOB_VNUM_CANNIBAL))) == NULL)
   {
      stc ("Shit.  The Mob is missing.  Fuck.  Tell someone. Fuck!\n\r", ch);
      return;
   }

   SET_BIT (mob->affected_by, AFF_DETECT_INVIS);
   SET_BIT (mob->affected_by, AFF_DETECT_HIDDEN);
   SET_BIT (mob->affected_by, AFF_SHADOWSIGHT);
   SET_BIT (mob->act, ACT_NOEXP);
   SET_BIT (mob->act, ACT_AGGRESSIVE);
   char_to_room (mob, ch->in_room);
   act ("You summon a Great Wendigo avatar to hunt your foe.", ch, NULL,
	victim, TO_CHAR);
   act ("$N bows before you and grins evilly.", ch, NULL, mob, TO_CHAR);
   act ("$N bursts out of the ground and grins evilly.", ch, NULL, mob,
	TO_CHAR);
   char_from_room (mob);
   char_to_room (mob, victim->in_room);
   stc ("The huge beast quickly burrows into the ground and seeks out your foe.\n\r", ch);
   stc ("A huge werewolf bursts out of the ground and growls verociously.\n\r", victim);
   stc ("The werewolf turns to you and grins.\n\r", victim);
   do_kill (mob, victim->name);
   ch->gnosis[GCURRENT] -= 15;
   WAIT_STATE (ch, 16);
   return;
}

void do_heartofice (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MIL];
   int dam = 0;

   argument = one_argument (argument, arg);

   if (!is_garou (ch))
      return;

   if (ch->gifts[WENDIGO] < 4)
   {
      stc ("You must obtain the fourth gift of the Wendigo to use this power.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      stc ("Whom do you wish to use this power on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      stc ("They aren't here.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 10)
   {
      stc ("You must have 10 points of gnosis to use this power.\n\r", ch);
      return;
   }

   if (is_safe (ch, victim))
      return;

   if (victim->level < 3)
   {
      stc ("They must be an Avatar.\n\r", ch);
      return;
   }

   dam = number_range (400, 600);
   if (IS_NPC (victim))
      dam *= 3;
   act ("You summon the frost of the Wendigo to chill $N.", ch, NULL, victim,
	TO_CHAR);
   act ("A cold air fills the room.\nYou are gripped with pain as the cold freezes your body.", ch, NULL, victim, TO_VICT);
   mage_damage (ch, victim, dam, "ice blast", MAGEDAM_OTHER);
   ch->gnosis[GCURRENT] -= 10;
   WAIT_STATE (ch, 16);
   return;
}

void do_chillfrost (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *vch;
   CHAR_DATA *vch_next;
   CHAR_DATA *mount;
   int number_hit = 0;
   if (!is_garou (ch))
      return;

   if (ch->gifts[WENDIGO] < 5)
   {
      stc ("You must obtain the fifth gift of the Wendigo to use this power.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 20)
   {
      stc ("You need 20 points of gnosis to use this power.\n\r", ch);
      return;
   }

   stc ("You conjure the very essence of the Great Wendigo to blanket the area.\nThe skies turn white and the air turns bitter cold.\n\r", ch);

   for (vch = char_list; vch != NULL; vch = vch_next)
   {
      vch_next = vch->next;
      if (number_hit > 15)
	 break;
      if (vch->in_room == NULL)
	 continue;
      if (vch->in_room->area != ch->in_room->area)
	 continue;
      if (vch->level < 3)
	 continue;
      if (!IS_NPC (vch) && vch->pcdata->chobj != NULL)
	 continue;
      if (is_safe (ch, vch))
	 continue;
      if (ch == vch)
	 continue;
      if ((mount = ch->mount) != NULL)
	 if (mount == vch)
	    continue;
      stc ("The skies turn white and the sun is banished.\nThe room becomes bitterly cold, and your body starts to shiver.\n\r", vch);
      mage_damage (ch, vch, number_range (400, 500), "chill frost",
		   MAGEDAM_OTHER);
      number_hit++;

   }

   ch->gnosis[GCURRENT] -= 20;
   WAIT_STATE (ch, 24);
   return;
}


/* Glass Walker Gifts */

//LVL 2 Sense Aura

void do_senseaura (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   OBJ_DATA *obj;
   char arg[MAX_INPUT_LENGTH];
   char buf[MAX_INPUT_LENGTH];

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      do_rand_typo (ch);
      return;
   }

   if (ch->gifts[GLASSWALKERS] < 2)
   {
      send_to_char ("You require level 2 Glass Walkers to use senseaura.\n\r",
		    ch);
      return;
   }


   if (arg[0] == '\0')
   {
      send_to_char ("Sense the aura of what?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      if ((obj = get_obj_carry (ch, arg)) == NULL)
      {
	 send_to_char ("Sense the aura of what?\n\r", ch);
	 return;
      }
      act ("A look of concentration comes over $n's face as they examine $p intently.", ch, obj, NULL, TO_ROOM);
      spell_identify (skill_lookup ("identify"), ch->level, ch, obj);
      return;
   }

   if (!IS_NPC (victim) && IS_IMMUNE (victim, IMM_SHIELDED))
   {
      send_to_char ("You are unable to sense their aura.\n\r", ch);
      return;
   }

   act ("$n examines $N's aura.", ch, NULL, victim, TO_NOTVICT);
   act ("$n examines your aura.", ch, NULL, victim, TO_VICT);
   if (IS_NPC (victim))
      sprintf (buf, "%s is an NPC.\n\r", victim->short_descr);
   else
   {
      if (victim->level == 12)
	 sprintf (buf, "%s is an Implementor.\n\r", victim->name);
      else if (victim->level == 11)
	 sprintf (buf, "%s is a High Judge.\n\r", victim->name);
      else if (victim->level == 10)
	 sprintf (buf, "%s is a Judge.\n\r", victim->name);
      else if (victim->level == 9)
	 sprintf (buf, "%s is an Enforcer.\n\r", victim->name);
      else if (victim->level == 8)
	 sprintf (buf, "%s is a Quest Maker.\n\r", victim->name);
      else if (victim->level == 7)
	 sprintf (buf, "%s is a Builder.\n\r", victim->name);
      else if (victim->level >= 3)
	 sprintf (buf, "%s is an Avatar.\n\r", victim->name);
      else
	 sprintf (buf, "%s is a Mortal.\n\r", victim->name);
   }
   send_to_char (buf, ch);
   if (!IS_NPC (victim))
   {
      sprintf (buf, "Str:%d, Int:%d, Wis:%d, Dex:%d, Con:%d.\n\r",
	       get_curr_str (victim), get_curr_int (victim),
	       get_curr_wis (victim), get_curr_dex (victim),
	       get_curr_con (victim));
      send_to_char (buf, ch);
   }
   sprintf (buf, "Hp:%d/%d, Mana:%d/%d, Move:%d/%d.\n\r", victim->hit,
	    victim->max_hit, victim->mana, victim->max_mana, victim->move,
	    victim->max_move);
   send_to_char (buf, ch);
   if (!IS_NPC (victim))
      sprintf (buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r",
	       char_hitroll (victim), char_damroll (victim),
	       char_ac (victim));
   else
      sprintf (buf, "AC:%d.\n\r", char_ac (victim));
   send_to_char (buf, ch);
   if (!IS_NPC (victim))
   {
      sprintf (buf, "Status:%d, ", victim->race);
      send_to_char (buf, ch);
   }
   sprintf (buf, "Alignment:%d.\n\r", victim->alignment);
   send_to_char (buf, ch);
   if (!IS_NPC (victim) && IS_EXTRA (victim, EXTRA_PREGNANT))
      act ("$N is pregnant.", ch, NULL, victim, TO_CHAR);
   return;
}

/***************************************************************************
 *  New Powers for Wolves, for Legend of Chrystancia by Macademus          *
 ***************************************************************************/


/* Gallaiard
 */

/* LvL 1 Call of the Wyld */

void do_wyld (CHAR_DATA * ch, char *argument)
{
   DESCRIPTOR_DATA *d;
   CHAR_DATA *vch;
   CHAR_DATA *victim;
   char buf[MAX_STRING_LENGTH];

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF) && ch->in_room == NULL)
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[GALLIARD] < 1)
   {
      stc ("You have not learned the Galliard gift of Call Of The Wyld.\n\r",
	   ch);
      return;
   }

   if ((victim = ch->fighting) == NULL && ch->hit > 0)
   {
      send_to_char
	 ("You can only call for assistance in times of great need.\n\r", ch);
      return;
   }

   if (ch->pcdata->wyld > 0)
   {
      send_to_char ("Your voice has not yet recovered.\n\r", ch);
      return;
   }

   ch->pcdata->wyld = 5;

   for (d = first_descriptor; d != NULL; d = d->next)
   {
      if (d->connected != CON_PLAYING)
	 continue;
      if ((vch = d->character) == NULL)
	 continue;
      if (vch->in_room == NULL)
	 continue;
      if (IS_NPC (vch))
	 continue;
      if (ch->pcdata->stats[UNI_RAGE] >= 40
	  && vch->pcdata->stats[UNI_RAGE] < 40)
	 continue;
      if (ch->pcdata->stats[UNI_RAGE] < 40
	  && vch->pcdata->stats[UNI_RAGE] >= 40)
	 continue;
      if (vch == ch)
	 act ("You call for assistance!", ch, NULL, argument, TO_CHAR);
      if (ch != vch && (IS_CLASS (vch, CLASS_WEREWOLF) || IS_IMMORTAL (vch)))
      {
	 if (victim != NULL)
	 {
	    sprintf (buf, "CALL OF THE WYLD:[$n is under attack by %s at %s]",
		     IS_NPC (victim) ? victim->short_descr : victim->name,
		     ch->in_room->name);
	    act (buf, ch, NULL, vch, TO_VICT);
	 }
	 else if (ch->hit < 1)
	 {
	    sprintf (buf, "CALL OF THE WYLD:[$n is badly wounded at %s]",
		     ch->in_room->name);
	    act (buf, ch, NULL, vch, TO_VICT);
	 }
	 else
	 {
	    sprintf (buf, "CALL OF THE WYLD:[$n needs assistance at %s]",
		     ch->in_room->name);
	    act (buf, ch, NULL, vch, TO_VICT);
	 }
      }
   }
   return;
}

// LVL 2

// LVL 4 Shred

void do_shred (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   CHAR_DATA *victim;
   int dam = 0;
   argument = one_argument (argument, arg);
   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }
   if (ch->gifts[GALLIARD] < 4)
   {
      send_to_char ("You need level 4 Galliard to Shred.\n\r", ch);
      return;
   }
   if (arg[0] == '\0')
   {
      send_to_char ("Shred whom?\n\r", ch);
      return;
   }
   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      send_to_char ("They aren't here.\n\r", ch);
      return;
   }
   if (victim == ch)
   {
      send_to_char ("How can you shred yourself?\n\r", ch);
      return;
   }
   if (victim->fighting != NULL)
   {
      send_to_char ("You can't shred a fighting person.\n\r", ch);
      return;
   }
   if (victim->hit < victim->max_hit)
   {
      act ("$N is hurt and suspicious ... you can't sneak up.",
	   ch, NULL, victim, TO_CHAR);
      return;
   }
   if (!IS_AFFECTED (ch, AFF_SHADOWPLANE))
   {
      send_to_char ("You must be in the umbra to Shred!\n\r", ch);
      return;
   }
   do_shadowplane (ch, "");
   if (is_safe (ch, victim))
      return;

   if (!IS_NPC (victim))
      dam = 2000;
   if (IS_NPC (victim))
      dam = 2500;
   dam += number_range (1, 20);
   WAIT_STATE (ch, 15);
   if (ch->gifts[GALLIARD] > 1)
      damage (ch, victim, dam, gsn_shred);
   damage (ch, victim, dam, gsn_shred);
   if (ch->gifts[GALLIARD] > 3)
      damage (ch, victim, dam, gsn_shred);
   if (ch->gifts[GALLIARD] > 4)
      damage (ch, victim, dam, gsn_shred);
   return;
}

// LVL 5  Devour
void do_devour (CHAR_DATA * ch, char *argument)
{
   char arg[MAX_INPUT_LENGTH];
   OBJ_DATA *obj;
   char buf[MAX_INPUT_LENGTH];
   int hpgain;

   one_argument (argument, arg);
   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }
   if (ch->gifts[GALLIARD] < 5)
   {
      send_to_char ("You require Galliard 5 to devour.\n\r", ch);
      return;
   }


   if (arg[0] == '\0')
   {
      send_to_char ("Devour what?\n\r", ch);
      return;
   }
   obj = get_obj_list (ch, arg, ch->in_room->contents);
   if (obj == NULL)
   {
      send_to_char ("You can't find it.\n\r", ch);
      return;
   }
   if (obj->item_type != ITEM_CORPSE_NPC)
   {
      act ("You are unable to devour $p.", ch, obj, 0, TO_CHAR);
      return;
   }
   else if (obj->chobj != NULL && !IS_NPC (obj->chobj)
	    && obj->chobj->pcdata->obj_vnum != 0)
   {
      act ("You are unable to devour $p.", ch, obj, 0, TO_CHAR);
      return;
   }
   hpgain = number_range (100, 250);
   ch->hit += hpgain;
   if (ch->hit > ch->max_hit)
   {
      ch->hit = ch->max_hit;
   }
   sprintf (buf, "You devour %d hp of life from $p.", hpgain);
   act (buf, ch, obj, NULL, TO_CHAR);
   act ("You devour $p.", ch, obj, NULL, TO_CHAR);
   act ("$p is devoured by $n.", ch, obj, NULL, TO_ROOM);
   extract_obj (obj);
   return;
}






/* Fianna
 */

//LVL 1

void do_brew (CHAR_DATA * ch, char *argument)
{
   OBJ_DATA *obj;
   char arg[MAX_INPUT_LENGTH];

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }
   if (ch->gifts[FIANNA] < 1)
   {
      stc ("You have not learned the Fianna gift of brew.\n\r", ch);
      return;
   }

   if (arg[0] == '\0')
   {
      send_to_char ("You must state what you wish to brew?\n\r", ch);
      return;
   }

   if ((obj = get_obj_here (ch, arg)) == NULL)
   {
      send_to_char ("That isn't here.\n\r", ch);
      return;
   }

   if (obj->item_type != ITEM_FOUNTAIN)
   {
      send_to_char ("You can only brew fountains.\n\r", ch);
      return;
   }
   if (strlen (obj->questmaker) > 2 && obj->questmaker != NULL
       && !str_cmp (obj->questmaker, ch->name))
   {
      send_to_char
	 ("You can't brew a fountain that belongs to someone else.\n\r", ch);
      return;
   }

   if (obj->value[2] == 1)
   {
      obj->value[2] = 0;
      act ("You transform the beer in $p into water.", ch, obj, NULL,
	   TO_CHAR);
      act ("$n transforms the beer in $p into water.", ch, obj, NULL,
	   TO_ROOM);
   }
   else if (obj->value[2] == 0)
   {
      obj->value[2] = 1;
      act ("You change the water in $p into beer.", ch, obj, NULL, TO_CHAR);
      act ("$n change the water in $p into beer.", ch, obj, NULL, TO_ROOM);
   }
   else
      send_to_char ("You can only change water and beer.\n\r", ch);

   return;
}

// Fianna 3

void do_banshee (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *vch;
   CHAR_DATA *vch_next;
   CHAR_DATA *mount;
   char arg[MAX_INPUT_LENGTH];

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      stc ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[FIANNA] < 3)
   {
      stc ("You have not learned the Fianna gift of Howl of the Banshee.\n\r",
	   ch);
      return;
   }


   if (IS_SET (ch->in_room->room_flags, ROOM_SAFE))
   {
      stc ("Not while in a safe room.\n\r", ch);
      return;
   }

   if (ch->gnosis[GCURRENT] < 6)
   {
      stc ("You need six point of gnosis power to use Howl of the Banshee.\n\r", ch);
      return;
   }

   for (vch = char_list; vch != NULL; vch = vch_next)
   {
      vch_next = vch->next;

      if (vch->in_room == NULL)
	 continue;
      if (!IS_NPC (vch) && vch->pcdata->chobj != NULL)
	 continue;
      if (ch == vch)
	 continue;
      if (vch->in_room == ch->in_room)
      {
	 if ((mount = ch->mount) != NULL)
	 {
	    if (mount == vch)
	       continue;
	 }
	 if (can_see (ch, vch))
	 {
	    if (number_range (1, (7 - ch->gifts[FIANNA])) == 2)
	    {
	       act ("A look of concentration crosses $n face.", ch, NULL, vch,
		    TO_ROOM);
	       WAIT_STATE (ch, 25);
	       stc ("You hear an ear poping howl and are suddenly attacked from all sides.\n\r", vch);
	       // vch->position = POS_STUNNED;
	       vch->hit -= 1000;
	       vch->position = POS_STUNNED;
	       ch->gnosis[GCURRENT] = ch->gnosis[GCURRENT] - 6;
	       act ("You hear an ear poping howl, $n is suddenly attacked from all sides.", vch, NULL, vch, TO_NOTVICT);

	       return;
	    }
	    else
	    {
	       act ("A look of concentration crosses $n face.", ch, NULL, vch,
		    TO_ROOM);
	       return;
	    }
	 }
	 else
	    continue;

	 return;
      }
   }

   return;
}

//Fianna 4

void do_balor (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char arg[MAX_INPUT_LENGTH];

   argument = one_argument (argument, arg);

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[FIANNA] < 4)
   {
      send_to_char
	 ("You have not yet learned the Fianna gift of Balor's gaze.\n\r",
	  ch);
      return;
   }


   if (arg[0] == '\0')
   {
      send_to_char ("Who do you wish to use Balor's gaze on?\n\r", ch);
      return;
   }

   if ((victim = get_char_room (ch, arg)) == NULL)
   {
      send_to_char ("They aren't here.\n\r", ch);
      return;
   }

   if (IS_NPC (victim))
   {
      send_to_char ("Not on mobs.\n\r", ch);
      return;
   }

   if (IS_IMMORTAL (victim) && victim != ch)
   {
      send_to_char ("You can only use Balor's gaze on Avatar's or lower.\n\r",
		    ch);
      return;
   }

   if (is_safe (ch, victim) == TRUE)
      return;

   if (victim->hit < victim->max_hit)
   {
      send_to_char ("They are hurt and suspicious.\n\r", ch);
      return;
   }
   act ("You close your eyes and concentrate on $N.", ch, NULL, victim,
	TO_CHAR);
   act ("$n's right eye begins to glow a baleful red!", ch, NULL, victim,
	TO_VICT);
   act ("$n closes $s eyes and cencentrates on $N.", ch, NULL, victim,
	TO_NOTVICT);
   WAIT_STATE (ch, 12);
   if (number_percent () < 50)
   {
      send_to_char ("You failed.\n\r", ch);
      return;
   }

   act ("You scream in pain as your body is torn apart from the inside out!",
	victim, NULL, NULL, TO_CHAR);
   act ("$n screams in pain as there body is torn apart from the inside out!",
	victim, NULL, NULL, TO_ROOM);
   SET_BIT (victim->flag2, AFF2_BALOR);
   return;
}

// Fianna 5
void do_talons (CHAR_DATA * ch, char *argument)
{
   CHAR_DATA *victim;
   char buf[MAX_STRING_LENGTH];
   int dam = 0;

   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }
   if (ch->gifts[FIANNA] < 5)
   {
      send_to_char ("You need level 5 in Fianna to use talons.\n\r", ch);
      return;
   }


   if ((victim = ch->fighting) == NULL)
   {
      send_to_char ("You aren't fighting anyone.\n\r", ch);
      return;

   }
   WAIT_STATE (ch, 12);
   if (!IS_NPC (victim))
   {
      dam = 350;
   }
   else if (IS_NPC (victim))
   {
      dam = 3000;
   }
   if (!IS_NPC (victim) && IS_CLASS (victim, CLASS_WEREWOLF))
   {
      if (victim->gifts[STARGAZERS] > 2)
	 dam *= 0.5;
   }

   dam += number_range (1, 30);
   if (dam <= 0)
      dam = 1;
   sprintf (buf, "Your talons strike $N incredibly hard! [%d]\n\r", dam);
   act (buf, ch, NULL, victim, TO_CHAR);
   sprintf (buf, "$n's talons strike you incredibly hard! [%d]\n\r", dam);
   act (buf, ch, NULL, victim, TO_VICT);
   sprintf (buf, "$n's talons strike $N incredibly hard! [%d]\n\r", dam);
   act (buf, ch, NULL, victim, TO_NOTVICT);


   hurt_person (ch, victim, dam);
   return;

}
void do_halosun (CHAR_DATA * ch, char *argument)
{
   if (IS_NPC (ch))
      return;

   if (!IS_CLASS (ch, CLASS_WEREWOLF))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

   if (ch->gifts[CHILDREN] < 5)
   {
      send_to_char
	 ("You require the level 5 Children of Gaia power to use the Halo of the Sun.\n\r",
	  ch);
      return;
   }

   if (IS_ITEMAFF (ch, ITEMA_SUNSHIELD))
   {
      send_to_char ("Your Halo of the Sun gradually fades away.\n\r", ch);
      act ("$n's Halo of the Sun gradually fades away.", ch, NULL, NULL,
	   TO_ROOM);
      REMOVE_BIT (ch->itemaffect, ITEMA_SUNSHIELD);
      return;
   }
   send_to_char ("You are surrounded by a halo of sunlight!\n\r", ch);
   act ("$n is surrounded by a halo of sunlight!", ch, NULL, NULL, TO_ROOM);
   SET_BIT (ch->itemaffect, ITEMA_SUNSHIELD);
   return;
}