SPECIAL(sea_serpent)
{
  struct char_data *vict;
  if (cmd)
     return FALSE;
  if (GET_POS(ch) != POSITION_FIGHTING)
     return FALSE;
  if (!ch->specials.fighting)
     return FALSE;

  vict=ch->specials.fighting; 

   if (!vict)
      return FALSE;
   if ((GET_LEVEL(ch)<10) && (number(0,100)==10))
      {
        act("$n utters the words, 'hisssssss'.",1, ch, 0, 0, TO_ROOM);
        cast_fireball(15, ch, "", SPELL_TYPE_SPELL, vict, 0);
      }
   else if (number(0,100)<=15) 
      {
        act("$n utters the words, 'hissssss'.",1, ch, 0,0, TO_ROOM);
        cast_fireball(GET_LEVEL(ch), ch, "", SPELL_TYPE_SPELL, vict, 0);
      }
   return(TRUE);
}

SPECIAL(Leviathan)
{
  struct char_data *vict;
  if (cmd)
     return FALSE;
  if (GET_POS(ch) != POSITION_FIGHTING)
     return FALSE;
  if (!ch->specials.fighting)
     return FALSE;

   vict=ch->specials.fighting; 

   if (!vict)
      return FALSE;

  switch(number(0,20))
    {
    case 1:
      act("$n utters the words, 'transvecta aqua'.",1,ch,0,0,TO_ROOM);
      cast_tidal_wave(30, ch, "", SPELL_TYPE_SPELL, vict, 0);
       break;
    case 6:
      act("$n looks at you with the deepest sorrow.",1,ch,0,0,TO_ROOM);
       break;
    case 12:
      act("$n utters the words, 'transvecta talon'.", 1,ch,0,0,TO_ROOM);
      cast_cure_critic(30, ch, "", SPELL_TYPE_SPELL, ch,  0);
       break;
    default:
      break;     
 
    }
 return(TRUE);
}



SPECIAL(master)
{ 
   char buf[MAX_STRING_LENGTH];
   ACMD(do_order);
 
  if (cmd || !AWAKE(ch)) return(FALSE);

  switch(number(0,8))
  {
     case 0: 
     case 1:
     case 2:
         if (GET_POS(ch)!=POSITION_FIGHTING)
	   {
         act("The master looks at his minions and growls, 'get to work, bitches!'", FALSE,ch, 0, 0, TO_ROOM); 
         sprintf(buf, "followers bow master");
         do_order(ch, buf,0,0);
         return(TRUE);
         break;}
     case 3:
     case 4: 
     case 5:
     case 6:
        if (GET_POS(ch)==POSITION_FIGHTING)
        {
           act("The master screams loudly, 'HELP ME, MY SLAVES!'", FALSE, ch, 0, 0, TO_ROOM); 
           sprintf(buf, "followers kill %s",GET_NAME(ch->specials.fighting));
                do_order(ch, buf, 0, 0);
                return(TRUE);
               
	 }
         
      break;
     default: return(FALSE);
              break;
   }
   return(TRUE);
}       
 
SPECIAL(slave)
{
   struct char_data *master;
   char buf[MAX_STRING_LENGTH];

   if (!AWAKE(ch)) return FALSE;
  
   sprintf(buf, "a fat harem master");

   if ((!cmd) && ((master = find_npc_by_name(ch, buf, 18))))
   {
    if (ch->master!=master)
    {
      if(ch->master)
        stop_follower(ch);
      add_follower(ch, master);
      SET_BIT(ch->specials.affected_by, AFF_CHARM);
      IS_CARRYING_W(ch) = 1000;
      IS_CARRYING_N(ch) = 100; 
      return TRUE;
    }	    
   }

   return(FALSE);
 }
  
SPECIAL(Priest_of_Fear)
{
   
 struct char_data *vict;
  if (cmd)
     return(FALSE);
  if (GET_POS(ch) != POSITION_FIGHTING)
     return(FALSE);
  if (!ch->specials.fighting)
     return(FALSE);

  vict=ch->specials.fighting; 

   if (!vict)
      return(FALSE);
   if (number(0,100)<35)
      {
        act("$n utters the words, 'pabrow'.",1, ch, 0, 0, TO_ROOM);
        cast_fear(GET_LEVEL(ch), ch, "", SPELL_TYPE_SPELL, vict, 0);
      }
   return(TRUE);
}

SPECIAL(Butcher)
{
  if (cmd) return(FALSE);
  if (GET_POS(ch)==POSITION_FIGHTING) return(FALSE);
  if (ch->specials.fighting) return(FALSE);
   
  if (number(0,100)<20)
    act("$n begins sharpening $s knife.",1,ch,0,0,TO_ROOM);
  return(TRUE);
}

SPECIAL(tarbaby)
{
  struct char_data *vict, *temp;

  if (cmd!=224) return(FALSE);

  for (vict=character_list;vict;vict=temp)
  {
    temp = vict->next;
    if (ch->in_room == vict->in_room) 
    {
      if (!IS_NPC(vict) && (vict!=ch)) 
      {
        if (ch->master!=vict)
        {
         if(ch->master)
            stop_follower(ch);
         add_follower(ch, vict);
         IS_CARRYING_W(ch) = 100;
         IS_CARRYING_N(ch) = 10; 
         return(TRUE);
        }            
      }
     }
  }       

  if (!vict) return(FALSE);
  
  if (cmd==224)
  {
     send_to_char("Ho ho, hee hee, you are sooo funneeee!\n\r",ch);
     return(TRUE);
  }
  
 
   else if (number(0,100)<20)
     {
        act("$n looks at you with the cutest expression.",FALSE,ch,0,vict,TO_CHAR);
        act("$n looks at $N with the cutest expression.",FALSE,ch,0,vict, TO_ROOM);
        return(TRUE);
      }
  return(FALSE);
}
   
SPECIAL(Grand_Inquisitor)
{
 struct char_data *vict;
  if (cmd)
     return(FALSE);
  if (GET_POS(ch) != POSITION_FIGHTING)
     return(FALSE);
  if (!ch->specials.fighting)
     return(FALSE);

  vict=ch->specials.fighting; 

   if (!vict)
      return(FALSE);
   if (number(0,100)<15)
      {
        act("$n utters the words, 'ordalaba'.",1, ch, 0, 0, TO_ROOM);
        cast_energy_drain(GET_LEVEL(ch), ch, "", SPELL_TYPE_SPELL, vict, 0);
        return(TRUE);
      }
   else if(number(0,100)<30)
     { act("$n evilly grins and snaps his hands.",1,ch,0,0,TO_ROOM);
       cast_animate_dead(GET_LEVEL(ch),ch,"",SPELL_TYPE_SPELL,vict,0);
       return(TRUE);
     }
   return(TRUE);
}  
  
SPECIAL(High_Priest_of_Terror)
{
 struct char_data *vict;
 struct char_data *newvict,*temp;
  if (cmd)
     return(FALSE);
  if (GET_POS(ch) != POSITION_FIGHTING)
     return(FALSE);
  if (!ch->specials.fighting)
     return(FALSE);

  vict=ch->specials.fighting; 

   if (!vict)
      return(FALSE);

   if (number(0,100)<10)
      {
        act("$n utters the words, 'ordalaba'.",1, ch, 0, 0, TO_ROOM);
        cast_charm_person(GET_LEVEL(ch), ch, "", SPELL_TYPE_SPELL, vict, 0);
        return(TRUE);
        for (newvict=character_list;newvict;newvict=temp)
	{
           temp = newvict->next;
           if (ch->in_room == newvict->in_room) 
           {
              if (!IS_NPC(newvict)) 
	      {
                if (!IS_SET(newvict->specials.affected_by, AFF_CHARM))
		{
                  ch->specials.fighting=newvict;
                  newvict->specials.fighting=ch;
                }
	      }
	    }
	 }          
      }
   else if(number(0,100)<30)
     { 
       act("$n waves $s hands in a swirling motion.",1,ch,0,0,TO_ROOM);
       cast_earthquake(GET_LEVEL(ch),ch,"",SPELL_TYPE_SPELL,vict,0);
       return(TRUE);
     }
   return(TRUE);
 }