/
vortex/area/
#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"

void do_sclaws( CHAR_DATA *ch, char *argument )
{
 if(IS_NPC(ch))
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_LUNA) < 5)
 {
  stc("You need level 5 in Luna to use silver claws.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SCLAW) )
 {
  stc("Your claws turn into pure silver!\n\r",ch);
  act("$n's claws turn to pure silver!",ch,NULL,NULL,TO_ROOM);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_SCLAW);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SCLAW) )
 {
  stc("Your claws return to their normal state.\n\r",ch);
  act("$n's claws are no longer composed of pure silver.",ch,NULL,NULL,TO_ROOM);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_SCLAW);
  return;
 }
 return;
}

void do_moonbeam( CHAR_DATA *ch, char *argument )
{
 CHAR_DATA *victim;
 char arg[MAX_INPUT_LENGTH];
 int dam = 0;
 int cost = 100 * GET_POWERS(ch,DISC_LUNA);

 argument = one_argument(argument,arg);
  
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_LUNA) < 8 )
 {
  stc("You need to obtain level 8 in Luna to use moonbeam.\n\r",ch);
  return;
 }
 if( ch->mana < cost )
 {
  stc("You do not have enough energy to summon a moonbeam.\n\r",ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc( "Who's flesh do you wish to sear?\n\r", ch );
  return;
 }
 if( ( victim = get_char_room(ch,arg) ) == NULL )
 {
  stc( "They aren't here.\n\r", ch );
  return;
 }
 if( victim == ch )
 {
  stc("Not the brightest are we?\n\r",ch);
  return;
 }
 if( is_safe(ch,victim) )
 {
  stc("Not in safe.\n\r",ch);
  return;
 }
 if( weather_info.sunlight == SUN_DARK || weather_info.sunlight == SUN_SET )
  dam = number_range(150,300);
 else
  dam = number_range(75,150);
 dam *= GET_POWERS(ch,DISC_LUNA);
 dam += number_range(1,GET_POWERS(ch,DISC_LUNA)*100);

 sprintf(arg,"You sear $N's flesh with a deadly beam of moonlight! [%d]",dam);
 act(arg,ch,NULL,victim,TO_CHAR);
 sprintf(arg,"$n sears $N's flesh with a deadly beam of moonlight! [%d]",dam);
 act(arg,ch,NULL,victim,TO_NOTVICT);
 sprintf(arg,"$n sears your flesh with a deadly beam of moonlight! [%d]",dam);
 act(arg,ch,NULL,victim,TO_VICT);

 hurt_person(ch,victim,dam);
 set_fighting(ch,victim);
 update_pos(victim);
 ch->mana -= cost;
 WAIT_STATE(ch,GET_POWERS(ch,DISC_LUNA)*2);
 return;
}

void do_moongate( CHAR_DATA *ch, char *argument )
{
 CHAR_DATA *victim;
 OBJ_DATA  *obj;
 char arg[MAX_INPUT_LENGTH];
 int cost = 15000;
 
 one_argument( argument, arg );
 
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_LUNA) < 6 )
 {
  stc("You need to obtain level 6 Luna to use moongate.\n\r",ch);
  return;
 }
 if( ch->move < cost )
 {
  stc("You don't have enough stamina to summon a moongate.\n\r",ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc( "Who do you wish to gate to?\n\r", ch );
  return;
 }
 if( (victim = get_char_world( ch, arg ) ) == NULL )
 {
  stc("They arent here.\n\r",ch);
  return;
 }
 if( (ch->in_room->vnum >= 50) && (ch->in_room->vnum <= 68) )
 {
  stc("You cannot do this whilst you are in the arena.\n\r", ch);
  return;
 }
 if ((victim->in_room->vnum >= 50) && (victim->in_room->vnum <= 68))
 {
  stc("You cannot do this whilst they are in the arena.\n\r", ch);
  return;
 }
 if( victim == ch )
 {
  stc("Not the brightest are we?\n\r",ch);
  return;
 }
 if( IS_IMMORTAL(victim) )
 {
  stc("Not on immortals.\n\r",ch);
  return;
 }
 if( is_ds_range(ch) || is_ds_range(victim) )
  return;
 if( victim->in_room == NULL
  || IS_NPC(victim)
  || IS_SET(ch->in_room->room_flags, ROOM_PRIVATE)
  || IS_SET(ch->in_room->room_flags, ROOM_SOLITARY)
  || IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL)
  || IS_SET(victim->in_room->room_flags, ROOM_PRIVATE)
  || IS_SET(victim->in_room->room_flags, ROOM_SOLITARY)
  || IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL)
  || victim->in_room->vnum == ch->in_room->vnum)
 {
  stc( "You failed.\n\r", ch );
  return;
 }

 obj = create_object( get_obj_index( OBJ_VNUM_GATE2 ), 0 );
 obj->value[0] = victim->in_room->vnum;
 obj->value[3] = ch->in_room->vnum;
 obj->timer = 5;
 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_GATE2 ), 0 );
 obj->value[0] = ch->in_room->vnum;
 obj->value[3] = victim->in_room->vnum;
 obj->timer = 5;
 if( IS_AFFECTED(victim,AFF_SHADOWPLANE) )
  obj->extra_flags = ITEM_SHADOWPLANE;
 obj_to_room( obj, victim->in_room );
    
 act("A look of concentration passes over $n's face.",ch,NULL,NULL,TO_ROOM);
 stc("A look of concentration passes over your face.\n\r",ch);
 act("$p appears in front of $n in a beam of moonlight.",ch,obj,NULL,TO_ROOM);
 act("$p appears in front of you in a beam of moonlight.",ch,obj,NULL,TO_CHAR);
 act("$p appears in front of $n in a beam of moonlight.",victim,obj,NULL,TO_ROOM);
 act("$p appears in front of you in a beam of moonlight.",ch,obj,victim,TO_VICT);
 ch->move -= cost;
 WAIT_STATE(ch,12);
 return;
}

void do_gmotherstouch( CHAR_DATA *ch, char *argument )
{
 CHAR_DATA *victim;
 char arg[MAX_INPUT_LENGTH];
 int cost = GET_POWERS(ch,DISC_LUNA) * 200;
 int dam = GET_POWERS(ch,DISC_LUNA) * 75;
  dam += number_range(200,450);
 
 argument = one_argument(argument,arg);
  
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch, CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_LUNA) < 4 )
 {
  stc("You need to obtain level 4 in Luna to use grandmother's touch.\n\r",ch);
  return;
 }
 if( ch->mana < cost )
 {
  stc("You do not have enough energy to summon the grandmother's touch.\n\r",ch);
  return;
 }
 if( ( victim = get_char_room(ch, arg) ) == NULL )
 {
  stc( "They aren't here.\n\r", ch );
  return;
 }
 if( arg[0] == '\0' )
  victim = ch;

 if( !can_heal(ch, victim) ) return;

 act2("You surround $N in a healing beam of moonlight. [$D]",ch, NULL, victim, TO_CHAR,dam);
 act2("$n surrounds $N in a healing beam of moonlight. [$D]",ch, NULL, victim, TO_NOTVICT,dam);
 act2("$n surrounds you in a healing beam of moonlight. [$D]",ch, NULL, victim, TO_VICT,dam);
 victim->hit += dam;
 ch->mana -= cost;
 WAIT_STATE(ch,15);
 return;
}

void do_motherstouch( CHAR_DATA *ch, char *argument )
{
 int cost = GET_POWERS(ch,DISC_LUNA) * 100;
 int dam = GET_POWERS(ch,DISC_LUNA) * 40;
  dam += number_range(100,200);

 if( IS_NPC(ch) )
  return;
 if( GET_POWERS(ch,DISC_LUNA) < 3 )
 {
  stc("You need to obtain level 3 in Luna to use mother's touch.\n\r",ch);
  return;
 }
 if( ch->mana < cost )
 {
  stc("You don't have enough energy to use mother's touch.\n\r",ch);
  return;
 }

 act2("You are surrounded by a beam of moonlight, and feel healed. [$D]", ch, NULL, NULL, TO_CHAR,dam);
 act2("$n is surrounded by a beam of moonlight, and looks healed. [$D]",ch, NULL, NULL, TO_ROOM,dam);
 ch->hit += dam;
 ch->mana -= cost;
 WAIT_STATE(ch,12);
 return;
}

void do_flameclaws( CHAR_DATA *ch, char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_LUNA) < 1 )
 {
  stc("You need to obtain level 1 in the Luna totem to use flame claws.\n\r",ch);
  return;
 }
 if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FCLAW) )
 {
  stc("The flames surrounding your claws fade.\n\r",ch);
  act("The flames surrounding $n's claws fade.",ch,NULL,NULL,TO_ROOM);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_FCLAW);
  return;
 }
 else if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FCLAW) )
 {
  stc("Your claws are surrounded by blazing flames.\n\r",ch);
  act("$n's claws are surrounded by blazing flames.",ch,NULL,NULL,TO_ROOM);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_FCLAW);
  return;
 }
 return;
}

void do_rend( CHAR_DATA *ch,char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_BOAR) < 7 )
 {
  stc("You need to obtain level 7 in Boar to rend equipment.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_REND) )
 {
  stc("You will now ruthlessly rend your opponents eq.\n\r",ch);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_REND);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_REND) )
 { 
  stc("You no longer ruthlessly rend your opponents eq.\n\r",ch);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_REND);
  return;
 }
return;
}

void do_skin( CHAR_DATA *ch,char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_BEAR) < 7 )
 {
  stc("You need to obtain level 7 in Bear to toughen your skin.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_TOUGH) )
 {
  stc("Your skin hardens.\n\r",ch);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_TOUGH);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_TOUGH) )
 { 
  stc("Your skin softens.\n\r",ch);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_TOUGH);
  return;
 }
return;
}

void do_jawlock( CHAR_DATA *ch,char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_RAPTOR) < 8 )
 {
  stc("You need to obtain level 8 in Raptor to use jawlock.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_JAW) )
 {
  stc("Your jaw grows stronger and more ready to clamp on your enemy.\n\r",ch);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_JAW);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_JAW) )
 { 
  stc("Your jaw weakens.\n\r",ch);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_JAW);
  return;
 }
 return;
}

void do_perception( CHAR_DATA *ch,char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_RAPTOR) < 3 )
 {
  stc("You need to obtain level 3 in Raptor to heighten your perception.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SENSES) )
 {
  stc("Your senses expand to incredible proportions.\n\r",ch);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_SENSES);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SENSES) )
 { 
  stc("Your senses return to their normal state.\n\r",ch);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_SENSES);
  return;
 }
 return;
}

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

 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_BEAR) < 6 )
 {
  stc("You need to obtain level 6 in Bear to roar.\n\r",ch);
  return;
 }
 if( (victim = ch->fighting) == NULL)
 {
  stc("You arent fighting anyone.\n\r",ch);
  return;
 }
 if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_JAW) )
 {
  stc("That would be pointless with your jaws still clamped!\n\r",ch);
  return;
 }
 act("$n roars and screams, intimidating the hell out of $N!",ch,NULL,victim,TO_NOTVICT);
 act("You roar and scream, intimidating the hell out of $N!",ch,NULL,victim,TO_CHAR);
 act("$n roars and screams, intimidating the hell out of you!",ch,NULL,victim,TO_VICT);
 if( number_range(1,100) > 30 )
 {
  do_flee(victim,"");
  WAIT_STATE(victim,24);
 }
 WAIT_STATE(ch,12);
 return;
}
 

void do_quills( CHAR_DATA *ch,char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_BEAR) < 5 )
 {
  stc("You need to obtain level 5 in Bear to extend your quills.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_QUILLS) )
 {
  stc("Sharp quills extend from your back.\n\r",ch);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_QUILLS);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_QUILLS) )
 { 
  stc("Your quills sink into your back.\n\r",ch);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_QUILLS);
  return;
 }
 return;
}

void do_slam(CHAR_DATA *ch,char *argument)
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_BEAR) < 8 )
 {
  stc("You need to obtain level 8 in Bear 8 to shoulder slam.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SLAM) )
 {
  stc("You will now shoulder slam when you get a chance.\n\r",ch);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_SLAM);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SLAM) )
 { 
  stc("You now dont shoulderslam when given a chance.\n\r",ch);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_SLAM);
  return;
 }
 return;
}

void do_shred( CHAR_DATA *ch, char *argument )
{
 char arg[MAX_INPUT_LENGTH];
 CHAR_DATA *victim;
 int dam, cost = 0;

 argument = one_argument( argument, arg );
 
 if( weather_info.sunlight == SUN_DARK || weather_info.sunlight == SUN_SET )
  dam = number_range(250,500);
 else
  dam = number_range(125,250);
 dam *= GET_POWERS(ch,DISC_RAPTOR);
 dam += number_range(1,GET_POWERS(ch,DISC_RAPTOR)*100);
 cost = dam/2;

 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_RAPTOR) < 6 )
 {
  stc("You need to obtain level 6 in Raptor to shred.\n\r",ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc("Shred whom?\n\r",ch);
  return;
 }
 if( ( victim = get_char_room(ch, arg) ) == NULL )
 {
  stc("They aren't here.\n\r",ch);
  return;
 }
 if( victim == ch )
 {
  stc("Not the brightest are you?\n\r",ch);
  return;
 }
 if( victim->fighting != NULL )
 {
  stc("You can't shred a fighting person.\n\r",ch);
  return;
 }
 if( !IS_AFFECTED(ch,AFF_SHADOWPLANE) )
 {
  stc("You can only shred from the shadowplane!\n\r",ch);
  return;
 }

 do_shadowplane(ch,"");
 if( is_safe(ch,victim) )
 {    
  stc("Not while safe.\n\r",ch);
  return;
 }
 damage(ch,victim,dam,gsn_shred);
 if( GET_POWERS(ch,DISC_RAPTOR) > 6)
  damage(ch,victim,dam,gsn_shred);
 if( GET_POWERS(ch,DISC_RAPTOR) > 7)
  damage(ch,victim,dam,gsn_shred);
 if( GET_POWERS(ch,DISC_RAPTOR) > 9)
  damage(ch,victim,dam,gsn_shred);
 WAIT_STATE(ch,24);
 return;
}

void do_run(CHAR_DATA *ch, char *argument)
{
 EXIT_DATA *pexit;
 char direct[MAX_STRING_LENGTH];
 char arg[MAX_INPUT_LENGTH];
 char buf[MAX_STRING_LENGTH];
 ROOM_INDEX_DATA *in_room, *to_room;
 int dir, count = 0;

 argument = one_argument(argument,arg);
 in_room=ch->in_room;

 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_RAPTOR) < 2 )
 {
  stc("You need to obtain level 2 in Raptor to run.\n\r",ch);
  return;
 }
 if( IS_AFFECTED(ch,AFF_WEBBED) )
 {
  stc( "Not with all this sticky webbing on.\n\r", ch);
  return;
 }
 if( IS_AFFECTED(ch, AFF_TENDRILS) )
 {
  stc("You are unable to move tangled in these tendrils.\n\r",ch);
  return;
 }
 if( ch->move < 1000 )
 {
  stc("You are too exhausted.\n\r",ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc("Run which direction?\n\r",ch);
  return;
 }
 if( str_cmp(arg,"w") && str_cmp(arg,"e") && str_cmp(arg,"n") && str_cmp(arg, "s") )
 {
  stc("You can only run n, s, e or w.\n\r",ch);
  return;
 }
 if( !str_cmp(arg,"w") ) sprintf(direct,"west");
 if( !str_cmp(arg,"e") ) sprintf(direct,"east");
 if( !str_cmp(arg,"s") ) sprintf(direct,"south");
 if( !str_cmp(arg,"n") ) sprintf(direct,"north");
 if( !str_cmp(arg,"w") ) dir = 3;
 if( !str_cmp(arg,"e") ) dir = 1;
 if( !str_cmp(arg,"n") ) dir = 0;
 if( !str_cmp(arg,"s") ) dir = 2;
 while( count < 10 )
 {
  if( (pexit = in_room->exit[dir]) == NULL || (to_room= pexit->to_room) == NULL)
  {
   stc("You stop running.\n\r",ch);
   act("$n comes to a screeching halt!",ch,NULL,NULL,TO_ROOM);
   WAIT_STATE(ch,10);
  }
  count++;
  sprintf(buf,"You run %s.\n\r",direct);
  stc(buf,ch);
  sprintf(buf,"%s runs %s.\n\r",ch->name,direct);
  act(buf,ch,NULL,NULL,TO_ROOM);
  move_char(ch,dir);
 }
 stc("You stop running.\n\r",ch);
 act("$n comes to a screeching halt!",ch,NULL,NULL,TO_ROOM);
 return;
}
 
void do_talons( CHAR_DATA *ch, char *argument )
{
 char arg[MAX_STRING_LENGTH];
 CHAR_DATA *victim;
 int dam, cost = 0;

 if( weather_info.sunlight == SUN_DARK || weather_info.sunlight == SUN_SET )
  dam = number_range(125,250);
 else
  dam = number_range(75,125);
 dam *= GET_POWERS(ch,DISC_RAPTOR)/2;
 dam += number_range(1,GET_POWERS(ch,DISC_RAPTOR)*100);
 cost = dam/2;

 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_RAPTOR) < 10 )
 {
  stc("You need to obtain level 10 in Raptor to use talons.\n\r",ch);
  return;
 }
 if( (victim = ch->fighting) == NULL )
 {
  stc( "You aren't fighting anyone.\n\r", ch );
  return;
 }
 if( ch->move < cost )
 {
  stc("You are too exhausted.\n\r",ch);
  return;
 }

 sprintf(arg,"Your talons strike $N incredibly hard! [%d]",dam);
 act(arg,ch,NULL,victim,TO_CHAR);
 sprintf(arg,"$n's talons strike you incredibly hard! [%d]",dam);
 act(arg,ch,NULL,victim,TO_VICT);
 sprintf(arg,"$n's talons strike $N incredibly hard! [%d]",dam);
 act(arg,ch,NULL,victim,TO_NOTVICT);

 WAIT_STATE(ch,16);
 ch->move -= cost;
 hurt_person(ch,victim,dam);
 return;
}

void do_devour( CHAR_DATA *ch, char *argument )
{
 char arg[MAX_INPUT_LENGTH];
 OBJ_DATA *obj;
 int heal;
 
 argument = one_argument(argument, arg);

 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_RAPTOR) < 5 )
 {
  stc("You need to obtain level 5 in Raptor to devour.\n\r",ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc("Devour what?\n\r",ch);
  return;
 }
 if( (obj = get_obj_list(ch,arg,ch->in_room->contents)) == NULL )
 {
  stc( "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;
 }

 heal = number_range(1,100);
 ch->hit += heal;
 ch->mana += heal/4;
 ch->move += heal/4;
 if( ch->hit > ch->max_hit ) ch->hit = ch->max_hit;
 if( ch->mana > ch->max_mana ) ch->mana = ch->max_mana;
 if( ch->move > ch->max_move ) ch->move = ch->max_move;

 sprintf(arg,"You devour %d life from $p.",heal);
 act(arg,ch,obj,NULL,TO_CHAR);
 act("$p is devoured by $n.", ch,obj,NULL,TO_ROOM);
 extract_obj(obj);
 return;
}

void do_call_wild ( 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_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_CONG) < 7 )
 {
  stc("You need to obtain level 7 in Congregation to call the wild.\n\r", ch);
  return;
 }
 if( ch->mana < 3000 )
 {
  stc("You do not have the required 3000 mana to use this power.\n\r", ch);
  return;
 }
 if( ch->practice < 30 )
 {
  stc("You do not have the required 30 primal to use this power.\n\r", ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc("Summon whom?\n\r",ch);
  return;
 }
 if( (victim = get_char_world(ch,arg) ) == NULL)
 {
  stc("They aren't here.\n\r",ch);
  return;
 }
 if( victim->in_room == NULL || victim->in_room->area != ch->in_room->area )
 {
  stc("They aren't here.\n\r",ch);
  return;
 }
 if( IS_NPC(victim) )
 {
  stc("Not on NPC's.\n\r",ch);
  return;
 }
 if( is_safe(ch,victim) )
 {
  stc("Not while safe.\n\r",ch);
  return;
 }
 if( ch == victim )
 {
  stc("Not the brightest are we?\n\r",ch);
  return;
 }
 if( is_ds_range(ch) )
  return;
 if( victim->fighting != NULL ) stop_fighting(victim,TRUE );

 act("A pack of savage dire wolves enter and drag $n away.",victim,NULL,NULL,TO_ROOM);
 char_from_room(victim);
 char_to_room(victim,ch->in_room);
 ch->mana -= 3000;
 ch->practice -= 30;
 act("Your animal friends have retrieved $N.",ch,NULL,victim,TO_CHAR);
 act("$n's wolf companions drag $N into the room.",ch,NULL,victim,TO_NOTVICT);
 act( "A pack of savage dire wolves enter the room and drag you away.", ch, NULL, victim, TO_VICT );
 do_look(victim,"auto");
 WAIT_STATE(ch, 12);
 return;
} 

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

 argument = one_argument (argument, arg);

 if( IS_NPC (ch) )
  return;

 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_CONG) < 10 )
 {
  stc("You require congregation level 10 to use wither.\n\r", ch);
  return;
 }
 if( ch->mana < cost )
 {
  stc("You lack the magical stamina.\n\r", ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc("Whom 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_NPC(victim) )
 {
  stc("Not on mobs.\n\r",ch);
  return;
 }  
 if( is_safe(ch,victim) )
 {
  stc("Not while safe.\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;
 }

 WAIT_STATE(ch,36);
 ch->mana -= cost;

 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_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);
  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_WIELD) ) != 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;
}

void do_wburrow( 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_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_BOAR) < 5 )
 {
  stc("You need to obtain level 5 in Boar to burrow\n\r",ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc("Burrow to who?\n\r", ch);
  return;
 }
 if( (victim = get_char_world(ch,arg) ) == NULL )
 {
  stc("They're not here.\n\r",ch);
  return;
 }
 if( IS_NPC(victim) )
 {
  stc("Not on NPC's.\n\r",ch);
  return;
 }
 if( !str_cmp(ch->clan,"None") || strlen(ch->clan) < 5 )
 {
  stc("You're not even clanned!\n\r",ch);
  return;
 }
 if( str_cmp(victim->clan,ch->clan) )
 {
  stc("You can only burrow to members of your own clan.\n\r", ch);
  return;
 }
 if( victim == ch )
 {
  stc( "Not the brightest are you?\n\r", ch);
  return;
 }
 if( (ch->in_room->vnum >= 50) && (ch->in_room->vnum <= 68) )
 {
  stc("You cannot do this whilst you are in the arena.\n\r", ch);
  return;
 }
 if( (victim->in_room->vnum >= 50) && (victim->in_room->vnum <= 68) )
 {
  stc("You cannot do this whilst they are in the arena.\n\r", ch);
  return;
 }
 if( is_ds_range(victim) )
  return;
 if( victim->in_room == NULL )
 {
  stc( "Nothing happens.\n\r", ch );
  return;
 }

 stc("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,"auto");
 stc("You burrow out of the ground.\n\r",ch);
 act("$n burrows out of the ground.",ch,NULL,NULL,TO_ROOM);
 return;
}

void do_shift( CHAR_DATA *ch, char *argument )
{
 char arg[MAX_INPUT_LENGTH];
 int toform = 0;
 int cost = 10000;

 argument = one_argument(argument,arg);

 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch, CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_WOLF) < 10 )
 {
  stc("You need to obtain level 10 in Wolf to use shift.\n\r",ch);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc( "You can shift between the following forms: Homid, Glabro, Crinos, Hispo, Lupus.\n\r", ch );
  return;
 }
 if( !str_cmp(arg,"homid") ) toform = 1;
 else if( !str_cmp(arg,"glabro") ) toform = 2;
 else if( !str_cmp(arg,"crinos") ) toform = 3;
 else if( !str_cmp(arg,"hispo") ) toform = 4;
 else if( !str_cmp(arg,"lupus") ) toform = 5;
 else
 {
  stc( "You can shift between the following forms: Homid, Glabro, Crinos, Hispo, Lupus.\n\r", ch );
  return;
 }
 if( ch->mana < cost )
 {
  stc("You lack the energy to shift forms.\n\r",ch);
  return;
 }
 if( GET_POWERS(ch,WOLF_FORM) == toform )
 {
  stc( "You are already in that form.\n\r", ch );
  return;
 }

 switch(toform)
 {
  default:
   log_string("*** do_shift returned NULL ***");
   break;
  case 1:
   stc("Your body shifts and distorts into Homid form!\n\r",ch);
   break;
  case 2:
   stc("Your body shifts and distorts into Glabro form!\n\r",ch);
   break;
  case 3:
   stc("Your body shifts and distorts into Crinos form!\n\r",ch);
   break;
  case 4:
   stc("Your body shifts and distorts into Hispo form!\n\r",ch);
   break;
  case 5:
   stc("Your body shifts and distorts into Lupus form!\n\r",ch);
   break;
 }
 ch->mana -= cost;
 GET_POWERS(ch,WOLF_FORM) = toform;
 return;
}

void do_claws( CHAR_DATA *ch, char *argument)
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_WOLF) < 1 )
 {
  stc("You need to obtain level 1 in Wolf to extend your claws.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_CLAWS) )
 {
  stc("Razor sharp talons extend from your fingers!\n\r",ch);
  act("Razor sharp talons extend from $n's fingers!",ch,NULL,NULL,TO_ROOM);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_CLAWS);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_CLAWS) )
 { 
  stc("Your talons shrink back into your fingers.\n\r",ch);
  act("$n's talons shrink back into $s fingers.",ch,NULL,NULL,TO_ROOM);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_CLAWS);
  return;
 }
 return;
}

void do_fangs( CHAR_DATA *ch, char *argument)
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_WOLF) < 2 )
 {
  stc("You need to obtain level 2 in Wolf to extend your fangs.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FANGS) )
 {
  stc("Razor sharp fangs extend from your gums!\n\r",ch);
  act("Razor sharp fangs extend from $n's gums!",ch,NULL,NULL,TO_ROOM);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_FANGS);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FANGS) )
 { 
  stc("Your fangs shrink back into your gums.\n\r",ch);
  act("$n's fangs shrink back into $s gums.",ch,NULL,NULL,TO_ROOM);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_FANGS);
  return;
 }
 return;
}

void do_shield( CHAR_DATA *ch, char *argument)
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_OWL) < 3 )
 {
  stc("You need to obtain level 3 in Owl to form a shield.\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SHIELD) )
 {
  stc("A barely visible shield of nature forms around you!\n\r",ch);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_SHIELD);
  return;
 }
 else if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SHIELD) )
 { 
  stc("Your shield of nature flickers, then fades away.\n\r",ch);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_SHIELD);
  return;
 }
 return;
}

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

 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF))
  return;
 if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) )
  return;
 else if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) )
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_RAGED);

 stc("You throw back your head and howl with rage!\n\r",ch);
 act("$n throws back $s head and howls with rage!.",ch,NULL,NULL,TO_ROOM);
 stc("Coarse dark hair sprouts from your body!\n\r",ch);
 act("Coarse dark hair sprouts from $n's body!",ch,NULL,NULL,TO_ROOM);
 stc("Your eyes start glowing red!\n\r",ch);
 act("$n's eyes start glowing red!",ch,NULL,NULL,TO_ROOM);

 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FANGS) ) do_fangs(ch,"");
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_CLAWS) ) do_claws(ch,"");

 ch->rage += 50;

 if( GET_POWERS(ch,DISC_WOLF) > 3) ch->rage += number_range(100,200);
 if( ch->rage > 300 ) ch->rage = 300;

 for( vch = char_list; vch != NULL; vch = vch_next )
 {
  vch_next	= vch->next;
  if( vch->in_room == NULL ) continue;
  if( ch == vch )
   continue;
  if( vch->trust > 6 )
   continue;
  if( !IS_NPC(vch) && vch->pcdata->chobj != NULL ) continue;
  if( !IS_NPC(vch) )
  {
   if (vch->in_room == ch->in_room) act("$n throws back $s head and howls with rage!", ch, NULL, vch, TO_VICT);
   else if( vch->in_room->area == ch->in_room->area ) stc("You hear a fearsome howl close by!\n\r", vch);
  }
  if( vch->in_room == ch->in_room )
  {
   if( is_safe(ch,vch) ) continue;
   if( vch == NULL ) continue;
   multi_hit(ch,vch,TYPE_UNDEFINED);
   multi_hit(ch,vch,TYPE_UNDEFINED);
   if( GET_POWERS(ch,DISC_WOLF) > 4 )
   {
    one_hit(ch,vch,TYPE_UNDEFINED,1);
    if( number_range(1,2) == 1 )
     one_hit(ch,vch,TYPE_UNDEFINED,2);
   }
   if( GET_POWERS(ch,DISC_BEAR) > 4 )
   {
    one_hit(ch,vch,TYPE_UNDEFINED,1);
    if( number_range(1,2) == 1 )
     one_hit(ch,vch,TYPE_UNDEFINED,2);
   }
  }
 }
 return;
}

void do_rage_down( CHAR_DATA *ch, char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF))
  return;
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) )
  return;
 REM_BIT_POWERS(ch,WOLF_BITS,BIT_RAGED);

 stc("The red glow in your eyes fades.\n\r",ch);
 act("The red glow in $n's eyes fades.",ch,NULL,NULL,TO_ROOM);
 stc("Your coarse hair shrinks back into your body.\n\r",ch);
 act("$n's coarse hair shrinks back into $s body.",ch,NULL,NULL,TO_ROOM);
 ch->rage -= 50;
 if( ch->rage < 0 ) ch->rage = 0;
 return;
}

void do_vanish( CHAR_DATA *ch, char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch, CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_HAWK) < 5 )
 {
  stc("You need to obtain level 5 in Hawk to vanish from sight.\n\r",ch);
  return;
 }
 if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_VANISH) )
 {
  stc("You slowly fade into existance.\n\r",ch);
  act("$n slowly fades into existance.",ch,NULL,NULL,TO_ROOM);
  REM_BIT_POWERS(ch,WOLF_BITS,BIT_VANISH);
  return;
 }
 else if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_VANISH) )
 {
  stc( "You slowly fade out of existance.\n\r", ch );
  act("$n slowly fades out of existance.",ch,NULL,NULL,TO_ROOM);
  SET_BIT_POWERS(ch,WOLF_BITS,BIT_VANISH);
 }
 return;
}

void do_web( CHAR_DATA *ch, char *argument )
{
 AFFECT_DATA af;
 CHAR_DATA *victim;
 char arg[MAX_INPUT_LENGTH];
 int sn;
 int cost = 0; 
 bool fail = FALSE;

 argument = one_argument(argument,arg);
   
 if( !IS_CLASS(ch,CLASS_WOLF) && !IS_CLASS(ch,CLASS_DROW) )
 {
  do_huh(ch,"");
  return;
 }
 if( IS_CLASS(ch,CLASS_DROW) && !IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_WEB) )
 {
  do_huh(ch,"");
  return;
 }
 if( IS_CLASS(ch,CLASS_WOLF) && GET_POWERS(ch,DISC_SPIDER) < 2 )
 {
  stc("You need to obtain level 2 in Spider to web your enemies.\n\r",ch);
  return;
 }
 if( IS_CLASS(ch,CLASS_DROW) )
  cost = 100;
 else
  cost = 1500;
 if( ch->mana < cost )
 {
  act2("You lack the $D mana to create a magical webbing!",ch,NULL,NULL,TO_CHAR,cost);
  return;
 }
 if( arg[0] == '\0' )
 {
  stc("Web who?\n\r", ch);
  return;
 }
 if( (victim = get_char_room(ch, arg)) == NULL)
 {
  stc("They arent here.\n\r", ch);
  return; 
 }
 if( ch == victim )
 {
  stc("Not the brightest are you?\n\r",ch);
  return;
 }
 if( is_safe(ch, victim) )
 {
  stc("Not while safe.\n\r", ch);
  return;
 }
 if( IS_AFFECTED(victim, AFF_WEBBED))
 {
  stc("They are already webbed.\n\r", ch);
  return;
 } 
 if( (sn = skill_lookup("web")) < 0)
  return;
 if( IS_CLASS(ch,CLASS_DROW) && number_percent() > 80 )
  fail = TRUE;
 else if( IS_CLASS(ch,CLASS_WOLF) && number_percent() > (GET_POWERS(ch,DISC_SPIDER) * 7) )
  fail = TRUE;
 else
  fail = FALSE;
 if( fail )
 {
  act("You shoot a web at $N, but it misses!",ch,NULL,victim,TO_CHAR);
  act("$n shoots a web at you, but it misses!",ch,NULL,victim,TO_VICT);
  act("$n shoots a web at $N, but it misses!",ch,NULL,victim,TO_NOTVICT);
 }
 else
 {
  af.type = sn;
  af.location = APPLY_AC;
  af.modifier = 400;
  af.duration = number_range(1,2);
  af.bitvector = AFF_WEBBED;
  affect_to_char(victim, &af);
  act("You shoot a web at $N, covering $M in sticky webbing!",ch,NULL,victim,TO_CHAR);
  act("$n shoots a web at you, covering you in sticky webbing!.",ch,NULL,victim,TO_VICT);
  act("$n shoots a web at $N, covering $M in sticky webbing!",ch,NULL,victim,TO_NOTVICT);
 }
 ch->mana -= cost;
 WAIT_STATE(ch, 10);
 return;
}

void wolf_disciplines( CHAR_DATA *ch, char *argument, char *argument2 )
{
 char arg[MAX_INPUT_LENGTH];
 char arg2[MAX_INPUT_LENGTH];

 argument = one_argument(argument,arg);
 argument2 = one_argument(argument2,arg2);
 
 
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( arg[0] == '\0' && arg2[0] == '\0' )
 {
  display_class_stats(ch);
  return;
 }
 else if( !str_cmp(arg,"learn") )
 {
  if( arg2[0] == '\0' )
  {
   stc("Learn which discipline?\n\r",ch);
   return;
  }
  if( !str_cmp(arg2,"bear") )
  {
   improve_class(ch,DISC_BEAR);
   return;
  }
  else if( !str_cmp(arg2,"lynx") )
  {
   improve_class(ch,DISC_LYNX);
   return;
  }
  else if( !str_cmp(arg2,"boar") )
  {
   improve_class(ch,DISC_BOAR);
   return;
  }
  else if( !str_cmp(arg2,"owl") )
  {
   improve_class(ch,DISC_OWL);
   return;
  }
  else if( !str_cmp(arg2,"spider") )
  {
   improve_class(ch,DISC_SPIDER);
   return;
  }
  else if( !str_cmp(arg2,"wolf") )
  {
   improve_class(ch,DISC_WOLF);
   return;
  }
  else if( !str_cmp(arg2,"hawk") )
  {
   improve_class(ch,DISC_HAWK);
   return;
  }
  else if( !str_cmp(arg2,"mantis") )
  {
   improve_class(ch,DISC_MANTIS);
   return;
  }
  else if( !str_cmp(arg2,"raptor") )
  {
   improve_class(ch,DISC_RAPTOR);
   return;
  }
  else if( !str_cmp(arg2,"luna") )
  {
   improve_class(ch,DISC_LUNA);
   return;
  }
  else if( !str_cmp(arg2,"pain") )
  {
   improve_class(ch,DISC_PAIN);
   return;
  }
  else if( !str_cmp(arg2,"congregation") )
  {
   improve_class(ch,DISC_CONG);
   return;
  }
  else
  {
   stc("Learn which discipline?\n\r",ch);
   return;
  }
  return;
 }
 else if( !str_cmp(arg,"bear") )
 {
  if( GET_POWERS(ch,DISC_BEAR) == 0 )
   stc("You have no knowledge of the Bear discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_BEAR) > 0 )
   stc("[01] [Auto         ] You are empowered by the spirit of the Bear, increasing damage.\n\r",ch);
  if( GET_POWERS(ch,DISC_BEAR) > 2 )
   stc("[03] [Rage         ] You can force yourself into a wild rage.\n\r",ch);
  if( GET_POWERS(ch,DISC_BEAR) > 4 )
   stc("[05] [Quills       ] You can extend sharp quills from your backs, and your rage is improved.\n\r",ch);
  if( GET_POWERS(ch,DISC_BEAR) > 5 )
   stc("[06] [Roar         ] You know how to roar, and intimidate your enemies.\n\r",ch);
  if( GET_POWERS(ch,DISC_BEAR) > 6 )
   stc("[07] [Skin         ] You can toughen your skin, reducing damage.\n\r",ch);
  if( GET_POWERS(ch,DISC_BEAR) > 7 )
   stc("[08] [Slam         ] You can shoulder slam your opponents in combat.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"lynx") )
 {
  if( GET_POWERS(ch,DISC_LYNX) == 0 )
   stc("You have no knowledge of the Lynx discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_LYNX) > 0 )
   stc("[**] [Auto         ] Mastery of the Lynx discipline grants enhanced parry/dodge.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"boar") )
 {
  if( GET_POWERS(ch,DISC_BOAR) == 0 )
   stc("You have no knowledge of the Boar discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_BOAR) > 0 )
   stc("[**] [Auto         ] Mastery of the Boar discipline grants enhanced toughness.\n\r",ch);
  if( GET_POWERS(ch,DISC_BOAR) > 4 )
   stc("[05] [Burrow       ] You can burrow to your clan members in need.\n\r",ch);
  if( GET_POWERS(ch,DISC_BOAR) > 6 )
   stc("[07] [Rend         ] You can ruthlessly rend your opponents in combat, enhancing damage.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"owl") )
 {
  if( GET_POWERS(ch,DISC_OWL) == 0 )
   stc("You have no knowledge of the Owl discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_OWL) > 0 )
   stc("[**] [Auto         ] Mastery of the Owl discipline grants enhanced dodge.\n\r",ch);
  if( GET_POWERS(ch,DISC_OWL) > 2 )
   stc("[03] [Shield       ] You are able to form a protective shield of nature around yourself.\n\r",ch);
  if( GET_POWERS(ch,DISC_OWL) > 5 )
   stc("[06] [Shadowplane  ] You can enter the realm of shadows.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"spider") )
 {
  if( GET_POWERS(ch,DISC_SPIDER) == 0 )
   stc("You have no knowledge of the Spider discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_SPIDER) > 0 )
   stc("[**] [Auto         ] Mastery of the spider discipline grants inceased attack speed.\n\r",ch);
  if( GET_POWERS(ch,DISC_SPIDER) > 2 )
   stc("[03] [Web          ] You know how to entrap your enemies in a web.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"wolf") )
 {
  if( GET_POWERS(ch,DISC_WOLF) == 0 )
   stc("You have no knowledge of the Wolf discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_WOLF) > 0 )
   stc("[01] [Claws        ] You can extend long claws from your fingers.\n\r",ch);
  if( GET_POWERS(ch,DISC_WOLF) > 1 )
   stc("[02] [Fangs        ] You can extend long fangs from your gums.\n\r",ch);
  if( GET_POWERS(ch,DISC_WOLF) > 2 )
   stc("[03] [Calm         ] You have learned to control your anger, and calm yourself.\n\r",ch);
  if( GET_POWERS(ch,DISC_WOLF) > 4 )
   stc("[05] [Auto         ] You are in tune with the Wolf, and your rage has been enhanced.\n\r",ch);
  if( GET_POWERS(ch,DISC_WOLF) > 9 )
   stc("[10] [Shift        ] You are able to shift between the various forms of a werewolf.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"hawk") )
 {
  if( GET_POWERS(ch,DISC_HAWK) == 0 )
   stc("You have no knowledge of the Hawk discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_HAWK) > 0 )
   stc("[**] [Auto         ] Mastery of the Hawk discipline grants increased attack speed.\n\r",ch);
  if( GET_POWERS(ch,DISC_HAWK) > 4 )
   stc("[05] [Vanish       ] You have mastered the understanding of sight, enabling you to vanish from your foes.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"mantis") )
 {
  if( GET_POWERS(ch,DISC_MANTIS) == 0 )
   stc("You have no knowledge of the Mantis discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_MANTIS) > 0 )
   stc("[**] [Auto         ] Mastery of the Mantis discipline grants enhanced parry.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"raptor") )
 {
  if( GET_POWERS(ch,DISC_RAPTOR) == 0 )
   stc("You have no knowledge of the Raptor discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_RAPTOR) > 1 )
   stc("[02] [Run          ] You can rapidly sprint across land.\n\r",ch);
  if( GET_POWERS(ch,DISC_RAPTOR) > 2 )
   stc("[03] [Perception   ] Your perception has been heightened, aiding in critical blows.\n\r",ch);
  if( GET_POWERS(ch,DISC_RAPTOR) > 4 )
   stc("[05] [Devour       ] You can devour corpses and drain the life from them.\n\r",ch);
  if( GET_POWERS(ch,DISC_RAPTOR) > 5 )
   stc("[06] [Shred        ] You can shred your enemies ruthlessly from the shadows.\n\r",ch);
  if( GET_POWERS(ch,DISC_RAPTOR) > 7 )
   stc("[08] [Jawlock      ] You can lock your jaw, to prevent your enemies from fleeing.\n\r",ch);
  if( GET_POWERS(ch,DISC_RAPTOR) > 9 )
   stc("[10] [Talons       ] You can claw at your enemies with long, sharp talons.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"luna") )
 {
  if( GET_POWERS(ch,DISC_LUNA) == 0 )
   stc("You have no knowledge of the Luna discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_LUNA) > 0 )
   stc("[01] [Flameclaws   ] You are able to set your claws on fire.\n\r",ch);
  if( GET_POWERS(ch,DISC_LUNA) > 2 )
   stc("[03] [Motherstouch ] You can heal your wounds with the touch of your mother.\n\r",ch);
  if( GET_POWERS(ch,DISC_LUNA) > 3 )
   stc("[04] [Gmotherstouch] You can heal your wounds with the touch of your grandmother.\n\r",ch);
  if( GET_POWERS(ch,DISC_LUNA) > 4 )
   stc("[05] [Silverclaws  ] You can turn your claws to pure silver.\n\r",ch);
  if( GET_POWERS(ch,DISC_LUNA) > 5 )
   stc("[06] [Moongate     ] You can create a gate of moonlight to others.\n\r",ch);
  if( GET_POWERS(ch,DISC_LUNA) > 7 )
   stc("[08] [Moonbeam     ] You can sear the flesh of your enemies with a beam of moonlight.\n\r",ch);
  if( GET_POWERS(ch,DISC_LUNA) > 9 )
   stc("[10] [Auto         ] At night you are protected from harm in the moon's rays.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"pain") )
 {
  if( GET_POWERS(ch,DISC_PAIN) == 0 )
   stc("You have no knowledge of the Pain discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_PAIN) > 0 )
   stc("[**] [Auto         ] Mastery of the Pain discipline grants enhanced toughness.\n\r",ch);
  return;
 }
 else if( !str_cmp(arg,"congregation") )
 {
  if( GET_POWERS(ch,DISC_CONG) == 0 )
   stc("You have no knowledge of the Congregation discipline.\n\r",ch);
  if( GET_POWERS(ch,DISC_CONG) > 6 )
   stc("[07] [Callwild     ] You can summon wolves of the wild and draw your enemies to you.\n\r",ch);
  if( GET_POWERS(ch,DISC_CONG) > 9 )
   stc("[10] [Wither       ] You can summon the forces of nature to rip off your opponents limbs.\n\r",ch);
  return;
 }
 return;
}

void do_wolf_rage( CHAR_DATA *ch, char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_BEAR) < 3 )
 {
  stc("You need to obtain level 3 in Bear to force your anger.\n\r",ch);
  return;
 }
 if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) )
 {
  stc("You are already in a frenzied rage!\n\r",ch);
  return;
 }
 if( !IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_RAGED) )
 {
  ch->rage += number_range(8,15);
  stc("You start snarling angrilly.\n\r",ch);
  act("$n starts snarling angrilly.",ch,NULL,NULL,TO_ROOM);
  if( ch->rage >= 100 ) do_rage_up(ch,"");
  WAIT_STATE(ch,12);
  return;
 } 
 return;
}

void do_wolf_calm( CHAR_DATA *ch, char *argument )
{
 if( IS_NPC(ch) )
  return;
 if( !IS_CLASS(ch,CLASS_WOLF) )
 {
  do_huh(ch,"");
  return;
 }
 if( GET_POWERS(ch,DISC_WOLF) < 3 )
 {
  stc("You need to obtain level 3 in Wolf to calm your anger.\n\r",ch);
  return;
 }
 if( ch->fighting != NULL )
 {
  stc("You can't control your rage in combat!\n\r",ch);
  return;
 }
 if( ch->rage < 100 )
 {
  stc("You are not in a frenzied rage!\n\r",ch);
  return;
 }

 ch->rage -= number_range(8,15);                                           
 stc("You take a deep breath and calm yourself.\n\r",ch);
 act("$n takes a deep breath and tries to calm $mself.",ch,NULL,NULL,TO_ROOM);
 if( ch->rage < 100 ) do_rage_down(ch,"");
 WAIT_STATE(ch,12);
 return;
}

void do_wolfpowers( CHAR_DATA *ch, char *argument )
{
 if( IS_NPC(ch) )
  return;
 stc("Bear        : rage, quills, roar, skin, slam\n\r",ch);
 stc("Boar        : burrow, rend\n\r",ch);
 stc("Owl         : scry, shield, shadowplane\n\r",ch);
 stc("Spider      : web\n\r",ch);
 stc("Wolf        : claws, fangs, calm, shift\n\r",ch);
 stc("Hawk        : vanish\n\r",ch);
 stc("Raptor      : run, perception, devour, shred, jawlock, talons\n\r",ch);
 stc("Luna        : flameclaws, motherstouch, gmothertouch, silverclaws, moongate, moonbeam\n\r",ch);
 stc("Congregation: callwild, wither\n\r",ch);
 return;
}