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.                                        *
 ***************************************************************************/

/* Bastet code for Legend of Chrystancia written by Graham Caisley         */

#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 "bastet.h"

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

void do_bgifts (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_BASTET))
   {
      send_to_char ("Huh?\n\r", ch);
      return;
   }

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

      sprintf (lin,
	       "#G================================================================================#n\n\r");
      stc (lin, ch);
      stc ("                                   Breed Gifts\n\r", ch);
      stc (lin, ch);
      sprintf (buf,
	       "#o         Homid     #w[ #c%d #w]#o       Metis     #w[ #c%d #w]#o    Feline      #w[ #c%d #w]#n\n\r",
	       ch->bgifts[BHOMID], ch->bgifts[BMETIS], ch->bgifts[BFELINE]);
      stc (buf, ch);
      stc (lin, ch);
      stc ("                                  Tribal Gifts\n\r", ch);
      stc (lin, ch);
      sprintf (buf,
	       "#o      Bagheera     #w[ #c%d #w]#o       Balam     #w[ #c%d #w]#o    Bubasti     #w[ #c%d #w]#n\n\r",
	       ch->bgifts[BBAGHEERA], ch->bgifts[BBALAM],
	       ch->bgifts[BBUBASTI]);
      stc (buf, ch);
      sprintf (buf,
	       "#o      Ceilican     #w[ #c%d #w]#o       Khan      #w[ #c%d #w]#o    Pumonca     #w[ #c%d #w]#n\n\r",
	       ch->bgifts[BCEILICAN], ch->bgifts[BKHAN],
	       ch->bgifts[BPUMONCA]);
      stc (buf, ch);
      sprintf (buf,
	       "#o      Qualmi       #w[ #c%d #w]#o       Simba     #w[ #c%d #w]#o    Swara       #w[ #c%d #w]#n\n\r",
	       ch->bgifts[BQUALMI], ch->bgifts[BSIMBA], ch->bgifts[BSWARA]);
      stc (buf, ch);
      stc (lin, ch);
      stc ("To learn powers type bgifts <giftname> learn.\n\r", ch);
      stc ("Type bastetpowers to see the commands you have learned.\n\r", ch);
      return;
   }

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

      if (!str_cmp (arg1, "homid"))
	 improve = BHOMID;
      else if (!str_cmp (arg1, "metis"))
	 improve = BMETIS;
      else if (!str_cmp (arg1, "feline"))
	 improve = BFELINE;
      else if (!str_cmp (arg1, "bagheera"))
	 improve = BBAGHEERA;
      else if (!str_cmp (arg1, "balam"))
	 improve = BBALAM;
      else if (!str_cmp (arg1, "bubasti"))
	 improve = BBUBASTI;
      else if (!str_cmp (arg1, "ceilican"))
	 improve = BCEILICAN;
      else if (!str_cmp (arg1, "khan"))
	 improve = BKHAN;
      else if (!str_cmp (arg1, "pumonca"))
	 improve = BPUMONCA;
      else if (!str_cmp (arg1, "qualmi"))
	 improve = BQUALMI;
      else if (!str_cmp (arg1, "simba"))
	 improve = BSIMBA;
      else if (!str_cmp (arg1, "swara"))
	 improve = BSWARA;
      else
      {
	 do_bgifts (ch, "");
	 return;
      }

      cost = (ch->bgifts[improve] + 1) * 10;
      arg1[0] = UPPER (arg1[0]);
      if (ch->bgifts[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->bgifts[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: bgifts '<name>' learn.\n\r",
		    ch);
   return;
}
void do_pride (CHAR_DATA * ch, char *argument)
{
   char buf[MAX_STRING_LENGTH];
   char arg[MAX_INPUT_LENGTH];
   CHAR_DATA *gch;

   one_argument (argument, arg);

   if (IS_NPC (ch))
      return;
   if (!IS_CLASS (ch, CLASS_BASTET))
   {
      do_rand_typo (ch);
      return;
   }
   stc ("The Pride:\n\r", ch);
   send_to_char
      ("[      Name      ] [ Hits   % ] [ Mana   % ] [ Move   % ] [   Exp    ]\n\r",
       ch);
   for (gch = char_list; gch != NULL; gch = gch->next)
   {
      if (IS_NPC (gch))
	 continue;
      if (!IS_CLASS (gch, CLASS_BASTET))
	 continue;
      if (IS_IMMORTAL (gch) && !can_see (ch, gch))
	 continue;
      sprintf (buf,
               "[%-16s] [%-7d%3d] [%-7d%3d] [%-7d%3d] [%10lli]\n\r",
	       capitalize (gch->name),
	       gch->hit, (gch->hit * 100 / gch->max_hit),
	       gch->mana, (gch->mana * 100 / gch->max_mana),
	       gch->move, (gch->move * 100 / gch->max_move), gch->exp);
      send_to_char (buf, ch);
   }
   return;
}
void do_purrr (CHAR_DATA * ch, char *argument)
{
   char buf[MSL];
   CHAR_DATA *vch;

   if (!IS_CLASS (ch, CLASS_BASTET) && !IS_IMMORTAL (ch))
   {
      do_huh (ch, "");
      return;
   }

   if (argument[0] == '\0')
   {
      stc ("Purr what??\n\r", ch);
      return;
   }
   if (!IS_NPC (ch) && IS_SET (ch->act, PLR_SILENCE))
   {
      sprintf (buf, "You can't purr because you are silenced.\n\r");
      send_to_char (buf, ch);
      return;
   }

   for (vch = char_list; vch; vch = vch->next)
   {
      if (IS_NPC (vch) || !vch->desc
	  || (!IS_IMMORTAL (vch) && !IS_CLASS (vch, CLASS_BASTET)))
	 continue;
      sprintf (buf, "#w-#o(#w%s#o)#w- #o'#w%s#o'.#n\n\r",
	       PERS (ch, vch), bash_color (argument));
      stc (buf, vch);
   }
}
void bhomid_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BHOMID] == 0)
   {
      stc ("#w   Homid: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BHOMID] >= 1)
      stc ("#w   Homid: #rCat Claws#w, #rSweet Hunter's Smile#n", ch);
   if (ch->bgifts[BHOMID] >= 2)
      stc ("#w, #rJam Technology#w,#r Eavesdropper's Ear#w,#n", ch);
   if (ch->bgifts[BHOMID] >= 3)
      stc ("#r\n\r          Craft of the Maker#w,#r Babel's Cure#n", ch);
   if (ch->bgifts[BHOMID] >= 4)
      stc ("#w, #rWhat's the Password?#w,#r Monkeys Uncle#w,#n", ch);
   if (ch->bgifts[BHOMID] >= 5)
      stc ("#r\n\r          Black Friday#w, #rDeny the Hungry#n", ch);
   stc ("\n\r", ch);
   return;
}

void bmetis_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BMETIS] == 0)
   {
      stc ("#w   Metis: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BMETIS] >= 1)
      stc ("#w   Metis: #rCreate Element#w, #rSense Primal Nature#n", ch);
   if (ch->bgifts[BMETIS] >= 2)
      stc ("#w, #rBlinding Moonbeam Gaze#w,#r \n\r          Whisker Sight#n",
	   ch);
   if (ch->bgifts[BMETIS] >= 3)
      stc ("#w, #rSpirit-Touch#w, #rFist of Cahlash#n", ch);
   if (ch->bgifts[BMETIS] >= 4)
      stc ("#w, #rMoon's Gateway#w,#r \n\r          Redeem the Waste#n", ch);
   if (ch->bgifts[BMETIS] >= 5)
      stc ("#w, #rMoon Sense#w, #rWrath of Nala#n", ch);
   stc ("\n\r", ch);
   return;
}

void bfeline_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BFELINE] == 0)
   {
      stc ("#w  Feline: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BFELINE] >= 1)
      stc ("#w  Feline: #rKitten's Cry#w,#r Mark as Mine#n", ch);
   if (ch->bgifts[BFELINE] >= 2)
      stc ("#r#w,#r Killer's Leap#w,#r Perfect Cover#n", ch);
   if (ch->bgifts[BFELINE] >= 3)
      stc ("#r#w,#r Underbelly#w,#r\n\r          Whisker Sight#n", ch);
   if (ch->bgifts[BFELINE] >= 4)
      stc ("#r#w,#r Ghosts at Play#w,#r Hand of Will#n", ch);
   if (ch->bgifts[BFELINE] >= 5)
      stc ("#r#w,#r Judgment of Pestilence#w,#r\n\r          Revolt of the Land#n", ch);
   stc ("\n\r", ch);
   return;
}

void bbagheera_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BBAGHEERA] == 0)
   {
      stc ("#wBagheera: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BBAGHEERA] >= 1)
      stc ("#wBhageera: #rHumbaba's Escape#w,#r Treeclimber#n", ch);
   if (ch->bgifts[BBAGHEERA] >= 2)
      stc ("#r#w,#r Lawgiver's Legacy#w,#r Ojas Surge#n", ch);
   if (ch->bgifts[BBAGHEERA] >= 3)
      stc ("#r#w,#r\n\r          Cobra's Dance#w,#r Traveler's Tongues#n",
	   ch);
   if (ch->bgifts[BBAGHEERA] >= 4)
      stc ("#r#w,#r Paradox of Time#w,#r Potter's Clay#n", ch);
   if (ch->bgifts[BBAGHEERA] >= 5)
      stc ("#r#w,#r\n\r          Part the Curtain#w,#r Shiva's Might#n", ch);
   stc ("\n\r", ch);
   return;
}

void bbalam_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BBALAM] == 0)
   {
      stc ("#w   Balam: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BBALAM] >= 1)
      stc ("#w   Balam: #rHunter's Mists#w,#r Storm of Pests#n", ch);
   if (ch->bgifts[BBALAM] >= 2)
      stc ("#r#w,#r Ancestral Wings#w,#r Smoking Mirror#n", ch);
   if (ch->bgifts[BBALAM] >= 3)
      stc ("#r#w,#r\n\r          Touch of the Tree-Frog#w,#r Wantering Forest#n", ch);
   if (ch->bgifts[BBALAM] >= 4)
      stc ("#r#w,#r Vision Cloud#w,#r\n\r          Jungle's Vengeance#n", ch);
   if (ch->bgifts[BBALAM] >= 5)
      stc ("#r#w,#r Feed the Gods#w,#r Heal the Wounded Land#n", ch);
   stc ("\n\r", ch);
   return;
}

void bbubasti_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BBUBASTI] == 0)
   {
      stc ("#w Bubasti: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BBUBASTI] >= 1)
      stc ("#w Bubasti: #rAlms to the Poor#w,#r Scholar's Friend#n", ch);
   if (ch->bgifts[BBUBASTI] >= 2)
      stc ("#r#w,#r Mousemaze#w,#r Spirit Ward#n", ch);
   if (ch->bgifts[BBUBASTI] >= 3)
      stc ("#r#w,#r\n\r          Banish Cahlash's Brood#w,#r The Many Tongues of Ptah#n", ch);
   if (ch->bgifts[BBUBASTI] >= 4)
      stc ("#r#w,#r The Scarab's Flight#w,#r\n\r          Shadowplay#n", ch);
   if (ch->bgifts[BBUBASTI] >= 5)
      stc ("#r#w,#r Deny the Hungry#w,#r Spirit Wall#w,#r The Fleeing Scarab#n", ch);
   stc ("\n\r", ch);
   return;
}

void bceilican_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BCEILICAN] == 0)
   {
      stc ("#wCeilican: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BCEILICAN] >= 1)
      stc ("#wCeilican: #rMother's Blessing/Curse#w,#r Satyr's Wisdom#n", ch);
   if (ch->bgifts[BCEILICAN] >= 2)
      stc ("#r#w,#r Banish Burning#w,#r\n\r          Sorcerer's Blade#n", ch);
   if (ch->bgifts[BCEILICAN] >= 3)
      stc ("#r#w,#r Data Flow#w,#r Phantasm#n", ch);
   if (ch->bgifts[BCEILICAN] >= 4)
      stc ("#r#w,#r Monkey's Uncle#w,#r Small Cousin#n", ch);
   if (ch->bgifts[BCEILICAN] >= 5)
      stc ("#r#w,#r\n\r          Chariot of Lions#w,#r The Madness of Crowds#n", ch);
   stc ("\n\r", ch);
   return;
}

void bkhan_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BKHAN] == 0)
   {
      stc ("#w    Khan: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BKHAN] >= 1)
      stc ("#w    Khan: #rRhino's Favor#w,#r Skin of Jade#n", ch);
   if (ch->bgifts[BKHAN] >= 2)
      stc ("#r#w,#r Heart of Fury#w,#r Ricepaper Walk#n", ch);
   if (ch->bgifts[BKHAN] >= 3)
      stc ("#r#w,#r\n\r          Maker's Charm#w,#r Paws of the Raging Spirit Tiger#n", ch);
   if (ch->bgifts[BKHAN] >= 4)
      stc ("#r#w,#r Asuras' Bane#w,#r\n\r          Dragonroar#n", ch);
   if (ch->bgifts[BKHAN] >= 5)
      stc ("#r#w,#r Call to Battle#w,#r Thousand-Thunder Strike#n", ch);
   stc ("\n\r", ch);
   return;
}

void bpumonca_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BPUMONCA] == 0)
   {
      stc ("#w Pumonca: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BPUMONCA] >= 1)
      stc ("#w Pumonca: #rMockingbird's Mirror#w,#r Wanderer's Boon#n", ch);
   if (ch->bgifts[BPUMONCA] >= 2)
      stc ("#r#w,#r Raincalling#w,#r Stonework#n", ch);
   if (ch->bgifts[BPUMONCA] >= 3)
      stc ("#r#w,#r\n\r          Bayou Shambler#w,#r Thunderbolt#n", ch);
   if (ch->bgifts[BPUMONCA] >= 4)
      stc ("#r#w,#r Element-Folk Favor#w,#r The Hungry Earth#n", ch);
   if (ch->bgifts[BPUMONCA] >= 5)
      stc ("#r#w,#r\n\r          Earthspeaking#w,#r Thunderbird's Cry#w,#r Earthquake#n", ch);	//note - earthquake is actually lev 6
   stc ("\n\r", ch);
   return;
}

void bqualmi_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BQUALMI] == 0)
   {
      stc ("#w  Qualmi: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BQUALMI] >= 1)
      stc ("#w  Qualmi: #rBreakfast of Stones#w,#r Turned Fur#n", ch);
   if (ch->bgifts[BQUALMI] >= 2)
      stc ("#r#w,#r No Hidden Thing#w,#r Wind from the West#n", ch);
   if (ch->bgifts[BQUALMI] >= 3)
      stc ("#r#w,#r\n\r          Drop of Sea#w,#r Nighttime Web#n", ch);
   if (ch->bgifts[BQUALMI] >= 4)
      stc ("#r#w,#r Dancing on Air#w,#r Still Breeze Blowing#n", ch);
   if (ch->bgifts[BQUALMI] >= 5)
      stc ("#r#w,#r\n\r          Call down the Stars#w,#r Water's Vision#n",
	   ch);
   stc ("\n\r", ch);
   return;
}

void bsimba_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BSIMBA] == 0)
   {
      stc ("#w   Simba: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BSIMBA] >= 1)
      stc ("#w   Simba: #rMajesty#w,#r Submit#n", ch);
   if (ch->bgifts[BSIMBA] >= 2)
      stc ("#r#w,#r Armor if Kings#w,#r Rallying Challenge#n", ch);
   if (ch->bgifts[BSIMBA] >= 3)
      stc ("#r#w,#r Fireroar#w,#r\n\r          Shadow the Moon's Light#n",
	   ch);
   if (ch->bgifts[BSIMBA] >= 4)
      stc ("#r#w,#r The Bountiful Dominion#w,#r King of Beasts#n", ch);
   if (ch->bgifts[BSIMBA] >= 5)
      stc ("#r#w,#r\n\r          Command the Multitude#w,#r Rising Sun#w,#r Royal Privilege#n", ch);	//note - royal privilege is lev 6
   stc ("\n\r", ch);
   return;
}

void bswara_gift (CHAR_DATA * ch)
{
   if (IS_NPC (ch))
      return;
   if (ch->bgifts[BSWARA] == 0)
   {
      stc ("#w   Swara: #rNone.#n\n\r", ch);
      return;
   }
   if (ch->bgifts[BSWARA] >= 1)
      stc ("#w   Swara: #rDiamond Claws#w,#r Impala's Flight#n", ch);
   if (ch->bgifts[BSWARA] >= 2)
      stc ("#r#w,#r Walking Between Worlds#w,#r\n\r          Weight of a Heart#n", ch);
   if (ch->bgifts[BSWARA] >= 3)
      stc ("#r#w,#r Clearwater Passage#w,#r Dance of the Chaya#n", ch);
   if (ch->bgifts[BSWARA] >= 4)
      stc ("#r#w,#r\n\r          Ghost Caress#w,#r Judgement of Pestilence#n",
	   ch);
   if (ch->bgifts[BSWARA] >= 5)
      stc ("#r#w,#r All Beasts Under the Sun#w,#r\n\r          River of Blood#n", ch);
   stc ("\n\r", ch);
   return;
}

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

   if (!IS_CLASS (ch, CLASS_BASTET))
   {
      do_rand_typo (ch);
      return;
   }
   stc ("#G================================================================================#n\n\r", ch);
   cent_to_char ("#w-[ Bastet Powers ]-#n", ch);
   stc ("#G================================================================================#n\n\r", ch);
   bhomid_gift (ch);
   bmetis_gift (ch);
   bfeline_gift (ch);
   bbagheera_gift (ch);
   bbalam_gift (ch);
   bbubasti_gift (ch);
   bceilican_gift (ch);
   bkhan_gift (ch);
   bpumonca_gift (ch);
   bqualmi_gift (ch);
   bsimba_gift (ch);
   bswara_gift (ch);
   stc ("#G================================================================================#n\n\r", ch);
   return;
}