cotn/notes/
cotn/src/
/********************************************************
 *                                                      *
 * Coded by Corey Olney(Kip) and Justin C. Good(bohica) *
 * If you are going to use this code and did not get it *
 * from me, please tell me on ICQ #21355940 or AOL IM   *
 * kippykp.                                             *
 * (copyrighted 1998-1999)                              *
 * also send me improvements you make.                  *
 *                                                      *
 ********************************************************/
/********************************************************
 *                                                       *
 * Re-done by GryphonHawk for DarkSkies                  *
 *                                                       *
 * STAY OUT OF MY CODE!!!!!!!!!!                         * 
 *                                                       *
 * March 2003                                            *
 *                                                      *
 ********************************************************/

#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_drackform( CHAR_DATA *ch, char *argument)
{
	 char buf [MAX_STRING_LENGTH];
//	 char buf2 [MAX_STRING_LENGTH];
	 char AGE_STRING [MAX_STRING_LENGTH];

	 if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_DRAGON))
	 {
		send_to_char( "Huh?\n\r",ch);
		return;
	 }
	 if (IS_POLYAFF(ch, POLY_DRAGON))
	 {
		  REMOVE_BIT(ch->polyaff, POLY_DRAGON);
		  REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
		  act( "You transform into human form.", ch, NULL, NULL, TO_CHAR );
		  act( "$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM );
		  ch->max_hit = (ch->max_hit - (ch->pcdata->powers[dragonage] * 550));
		  ch->hit = (ch->hit - (ch->pcdata->powers[dragonage] * 550));
		  if (ch->hit < 1) ch->hit = 1;
                  ch->pcdata->powers[10] = ch->pcdata->powers[DRAGON_COLOR];
		  ch->damroll -= 1000;
		  ch->hitroll -= 1000;
		  ch->armor   += 2000;
                  free_string( ch->morph );
		  ch->morph = str_dup( "" );
		  return;
	 }
	 else if (IS_AFFECTED(ch,AFF_POLYMORPH))
	 {
		send_to_char("You cant demon form when changed.\n\r",ch);
    	return;
	 }
	      if (ch->pcdata->powers[dragonage] == 1  ) sprintf(AGE_STRING,"Hatchling");
	 else if (ch->pcdata->powers[dragonage] == 2  ) sprintf(AGE_STRING,"Very Young");
	 else if (ch->pcdata->powers[dragonage] == 3  ) sprintf(AGE_STRING,"Young");
	 else if (ch->pcdata->powers[dragonage] == 4  ) sprintf(AGE_STRING,"Juvenile");
	 else if (ch->pcdata->powers[dragonage] == 5  ) sprintf(AGE_STRING,"Young Adult");
	 else if (ch->pcdata->powers[dragonage] == 6  ) sprintf(AGE_STRING,"Adult");
	 else if (ch->pcdata->powers[dragonage] == 7  ) sprintf(AGE_STRING,"Mature Adult");
	 else if (ch->pcdata->powers[dragonage] == 8  ) sprintf(AGE_STRING,"Old");
	 else if (ch->pcdata->powers[dragonage] == 9  ) sprintf(AGE_STRING,"Very Old");
	 else if (ch->pcdata->powers[dragonage] == 10 ) sprintf(AGE_STRING,"Elder");
	 else if (ch->pcdata->powers[dragonage] == 11 ) sprintf(AGE_STRING,"Venerable");
	 else if (ch->pcdata->powers[dragonage] == 12 ) sprintf(AGE_STRING,"Ancient");
         else if (ch->pcdata->powers[dragonage] == 13 ) sprintf(AGE_STRING,"Immortal");
	 else return;
//	sprintf(buf2,"%d",ch->pcdata->powers[DRAGON_COLOR]);
//	stc(buf2,ch);

	switch(ch->pcdata->powers[DRAGON_COLOR])
	 {
                default:
			if (ch->pcdata->powers[DRAGON_COLOR] == 0) 
			{
                           send_to_char("Your scales change hues.\n\r",ch);
                        }
                        ch->pcdata->powers[DRAGON_COLOR] = number_range(1,16);
			do_drackform(ch,"");
			return;
// that was left like that so if color was NOT set it would be reported
// and it could be traced where and when the problem was occureing.
// setting a default color is not so great an idea, if we get a major recurrence of the 
// problem we end up flooded with silvers.

                        break;
                case 1:
			sprintf(buf, "%s the %s #RRed#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 2:
			sprintf(buf, "%s the %s #GGreen#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 3:
			sprintf(buf, "%s the %s #LBlue#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 4:
			sprintf(buf, "%s the %s #oBronze#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 5:
			sprintf(buf, "%s the %s #oO#ypa#ol#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 6:
			sprintf(buf, "%s the %s #7White#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 7:
			sprintf(buf, "%s the %s #0Black#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 8:
			sprintf(buf, "%s the %s #cG#nre#cy#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 9:
			sprintf(buf, "%s the %s #0Obs#7id#0ian#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 10:
			sprintf(buf, "%s the %s #pP#Pur#ppl#Pe#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 11:
			sprintf(buf, "%s the %s #rC#0h#ra#0o#rs#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 12:
			sprintf(buf, "%s the %s #LS#la#Lp#lp#Lh#li#Lr#le#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 13:
			sprintf(buf, "%s the %s #GE#gm#Ge#gr#Ga#gl#Gd#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 14:
			sprintf(buf, "%s the %s #RR#ru#Rb#ry#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 15:
			sprintf(buf, "%s the %s #yT#oo#yp#oa#yz#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
		case 16:
			sprintf(buf, "%s the %s #7D#Ci#7a#Cm#7o#Cn#7d#n Dragon", ch->name,AGE_STRING);
			free_string( ch->morph );
			ch->morph = str_dup( buf );
			break;
/*                default: 
                        sprintf(buf, "%s the %s invalid color Dragon", ch->name,AGE_STRING);
                        free_string( ch->morph );
                        ch->morph = str_dup( buf );
                        break;*/
	 }

	 act( "You transform into a huge dragon.", ch, NULL, NULL, TO_CHAR );
	 act( "$n's body grows and distorts into a huge dragon.", ch, NULL, NULL, TO_ROOM );
//	 ch->pcdata->mod_str = 15;
//	 ch->pcdata->mod_dex = 15;
	 SET_BIT(ch->polyaff, POLY_DRAGON);
	 SET_BIT(ch->affected_by, AFF_POLYMORPH);

	 ch->max_hit += ch->pcdata->powers[dragonage] * 550;
	 ch->hit     += ch->pcdata->powers[dragonage] * 550;
	 ch->damroll += 1000;
	 ch->hitroll += 1000;
	 ch->armor   -= 2000;
	 return;
}

void do_hatch( 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_IMMORTAL(ch) )
	{
    if (!IS_CLASS(ch, CLASS_DRAGON))
		{
			send_to_char( "Huh?\n\r", ch);
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_ADULT)
		{
			send_to_char( "You must be an adult to create hatchlings.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[hatch] >= 3)
		{
			send_to_char( "You have already created 3 hatchlings.\n\r", ch );
			return;
		}
	}

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

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

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

    if ( ch == victim )
	 {
    send_to_char( "You cannot hatch yourself.\n\r", ch );
	 return;
	 }
	 if ( victim->level != LEVEL_AVATAR && !IS_IMMORTAL(victim) )
    {
    send_to_char( "You can only hatch a dragon from avatars.\n\r", ch );
    return;
	 }

	if( IS_CLASS( victim, CLASS_DEMON ) )
	{
		send_to_char( "You can't hatch a dragon from a Demon.\n\r", ch );
		return;
	}
	if( IS_CLASS( victim, CLASS_MAGE ) )
	{
		send_to_char( "You can't hatch a dragon from a Mage.\n\r", ch );
		return;
	}
	if( IS_CLASS( victim, CLASS_WEREWOLF ) )
	{
		send_to_char( "You can't hatch a dragon from a Werewolf.\n\r", ch );
		return;
	}
	if( IS_CLASS( victim, CLASS_VAMPIRE ) )
	{
		send_to_char( "You can't hatch a dragon from a Vampire.\n\r", ch );
		return;
	}
	if( IS_CLASS( victim, CLASS_DROW ) )
	{
		send_to_char( "You can't hatch a dragon from a Drow.\n\r", ch );
		return;
	}
        if (ch->exp < 50000000 || ch->pcdata->stats[DEMON_CURRENT] < 5000000)
        {
          send_to_char("You need 50000000 exp and 5000000 dps to hatch a dragon.\n\r",ch);
          return;
        }
        if (victim->exp < 5000000)
        {
          send_to_char("You need 5000000 exp to be hatched.\n\r",victim);
          send_to_char("They need 5000000 exp to be hatched.\n\r",ch);
          return;
        }
       
	 act("You consume $N's essence and hatch a new egg!", ch, NULL, victim, TO_CHAR);
	 act("$n consumes $N's essence and hatch a new egg!", ch, NULL, victim, TO_NOTVICT);
	 act("$n consumes your essence and makes you a dragon!", ch, NULL, victim, TO_VICT);

	 victim->class=0;
	 victim->class=CLASS_DRAGON;
	 victim->pcdata->powers[dragonage] = 1;
	 victim->pcdata->powers[DRAGON_COLOR] = ch->pcdata->powers[DRAGON_COLOR];
	 if ( ch->pcdata->powers[DRAGON_COLOR] == 0 ) 
           victim->pcdata->powers[DRAGON_COLOR] = number_range (1, 15);
	 victim->special=0;
	 victim->level = LEVEL_AVATAR;
	 victim->class = CLASS_DRAGON;
	 ch->pcdata->powers[hatch] += 1;
         ch->pcdata->stats[DEMON_CURRENT] -= 5000000;
         ch->exp -= 50000000;
         victim->exp -= 5000000;
	 save_char_obj(ch);
	 save_char_obj(victim);
	 return;
}

void do_dgain( CHAR_DATA *ch, char *argument )
{
	char arg[MAX_INPUT_LENGTH];
	char buf[MAX_INPUT_LENGTH];
	int count = 1;

	 argument = one_argument( argument, arg );

    if (!IS_CLASS(ch, CLASS_DRAGON))
	  {
       stc("You're not a dragon!\n\r",ch);
       return;
	  }

	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT )) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS)) count += 1;
	if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS)) count += 1;

	if( IS_NPC(ch) ) return;

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

	if( arg[0] == '\0' )
	{
		int x = 0;
		send_to_char( "Valid choices are:  ALL(shows skills learned)\n\r", ch );
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS ) && ch->pcdata->powers[dragonage] >= D_ADULT)
		{
			send_to_char( "Wings,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY ) )
		{
			send_to_char( " Scry,", ch );
			x++;
			if( x > 5){send_to_char("\n\r", ch);x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS ) )
		{
			send_to_char( " Claws,", ch );
			x++;
			if( x > 5){send_to_char("\n\r", ch);x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ) )
		{
			send_to_char(" Truesight,", ch );
			x++;
			if(x>5){send_to_char("\n\r", ch);x=0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER ) )
		{
			send_to_char( " Peer,", ch );
			x++;
			if(x > 5){send_to_char("\n\r", ch);x=0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS ) )
		{
			send_to_char( " Fangs,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK ) )
		{
			send_to_char( " Lick,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ) && ch->pcdata->powers[dragonage] >= D_MATURE)
		{
			send_to_char( " FrostBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH ) && ch->pcdata->powers[dragonage] >= D_JUVENILE)
		{
			send_to_char( " FireBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH ) && ch->pcdata->powers[dragonage] >= D_YADULT )
		{
			send_to_char( " LightningBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH ) && ch->pcdata->powers[dragonage] >= D_VENERABLE )
		{
			send_to_char( " AcidBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH ) )
		{
			send_to_char( " GasBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL ) && ch->pcdata->powers[dragonage] >= D_YOUNG )
		{
			send_to_char( " Tail,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR ) )
		{
			send_to_char( " Terror,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE ) )
		{
			send_to_char( " Confuse,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK ) && ch->pcdata->powers[dragonage] >= D_OLD )
		{
			send_to_char( " Mask,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC ) )
		{
			send_to_char( " Magic,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH ) && ch->pcdata->powers[dragonage] >= D_IMMORTAL )
		{
			send_to_char( " Polymorph,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK ) && ch->pcdata->powers[dragonage] >= D_ADULT )
		{
			send_to_char( " Luck,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY	) && ch->pcdata->powers[dragonage] >= D_ADULT )
		{
			send_to_char( " Fly,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS) && ch->pcdata->powers[dragonage] >= D_ANCIENT)
		{
			send_to_char( " Scales,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		send_to_char( "\n\r", ch );
		send_to_char( "Some are only avaiable after a certain age. Check helps for ages.\n\r", ch );
		return;
	}
	else if( !str_cmp( arg, "all"	) )
	{
		int x = 0;
		send_to_char( "You have the folowing dragon powers:\n\r", ch );
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS ))
		{
			send_to_char( "Wings,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS	) )
		{
			send_to_char( " Claws,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}

		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY	) )
		{
			send_to_char( " Fly,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ) )
		{
			send_to_char(" Truesight,", ch );
			x++;
			if(x>5){send_to_char("\n\r", ch);x=0;}
		}
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER ) )
		{
			send_to_char( " Peer,", ch );
			x++;
			if(x > 5){send_to_char("\n\r", ch);x=0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS ))
		{
			send_to_char( " Fangs,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY ) )
		{
			send_to_char( " Scry,", ch );
			x++;
			if( x > 5){send_to_char("\n\r", ch);x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK ))
		{
			send_to_char( " Lick,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ))
		{
			send_to_char( " FrostBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH )) 
		{
			send_to_char( " FireBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH )) 
		{
			send_to_char( " LightningBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH )) 
		{
			send_to_char( " AcidBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH ))
		{
			send_to_char( " GasBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL ))
		{
			send_to_char( " Tail,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR )) 
		{
			send_to_char( " Terror,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE )) 
		{
			send_to_char( " Confuse,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK )) 
		{
			send_to_char( " Mask,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC ))
		{
			send_to_char( " Magic,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH ))
		{
			send_to_char( " Polymorph,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK ))
		{
			send_to_char( " Luck,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS))
		{
			send_to_char( " Scales,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		send_to_char( "\n\r", ch );
		return;
	}
	else if( !str_cmp( arg, "wings" ) )
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS ) )
		{
			send_to_char( "You already have your wings.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_ADULT )
		{
			send_to_char( "You must be an adult dragon to learn this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
								sprintf( buf, "You need %d exp.\n\r", (count * 1000) );
			return;
		}
		ch->exp -= (count * 1000);
		send_to_char( "You now have your wings.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS );
		return;
	}
	else if( !str_cmp( arg, "truesight" ) )
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ))
		{
			send_to_char( "You already have sight beyond sight.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
			sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now have sight beyond sight.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT );
		return;
	}
	else if( !str_cmp( arg, "fangs" ) )
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS ))
		{
			send_to_char( "You already have your fangs.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now have your fangs.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS );
		return;
	}
	else if( !str_cmp( arg, "claws" ) )
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS ))
		{
			send_to_char( "You already have your claws.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now have your claws.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS );
		return;
	}

	else if( !str_cmp( arg, "lick" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK ))
		{
			send_to_char( "You already can can heal your wounds by licking 'em.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can heal your wounds by licking them.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK );
		return;
	}
	else if( !str_cmp( arg, "frostbreath" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ))
		{
			send_to_char( "You already can breath frost.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_MATURE )
		{
			send_to_char( "You must be a mautre adult dragon to learn this skill.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can breath frost.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH );
		return;
	}
	else if( !str_cmp( arg, "firebreath" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH ))
		{
			send_to_char( "You already can breath fire.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_JUVENILE )
		{
			send_to_char( "You must be a juvenile dragon to learn this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can breath fire.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH );
		return;
	}
	else if( !str_cmp( arg, "lightningbreath" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH ))
		{
			send_to_char( "You already can breath lightning.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_YADULT )
		{
			send_to_char( "You mus be a young dragon adult to learn this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can breath lightning.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH );
		return;
	}
	else if( !str_cmp( arg, "acidbreath" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH ))
		{
			send_to_char( "You already can breath acid.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_VENERABLE )
		{
			send_to_char( "You mus be a venerable dragon to learn this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can breath acid.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH );
		return;
	}
	else if( !str_cmp( arg, "gasbreath" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH ))
		{
			send_to_char( "You already can breath gas.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can breath gas.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH );
		return;
	}
	else if( !str_cmp( arg, "tail" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL ))
		{
			send_to_char( "You already can use your tail to attack.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_VYOUNG )
		{
			send_to_char( "You must be a very young dragon to learn this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can use your tail to attack.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL );
		return;
	}
	else if( !str_cmp( arg, "terror" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR ))
		{
			send_to_char( "You already inspire terror in mobs.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now inspire terror in mobs.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR );
		return;
	}
	else if( !str_cmp( arg, "confuse" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE ))
		{
			send_to_char( "You already can confuse your targets.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can confuse your targets.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE );
		return;
	}
	else if( !str_cmp( arg, "mask" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK ))
		{
			send_to_char( "You already can mask people.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_OLD )
		{
			send_to_char( "You must be an old dragon to learn this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can mask other people.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK );
		return;
	}
	else if( !str_cmp( arg, "scry" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY))
		{
			send_to_char( "You already can see people who are far away.\n\r", ch);
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You can now see people who are far away.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY );
		return;
	}
	else if( !str_cmp( arg, "polymorph" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH ))
		{
			send_to_char( "You already can polymorph.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_IMMORTAL )
		{
			send_to_char( "You must be an immortal dragon to learn this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can polymorph.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH );
		return;
	}
	else if( !str_cmp( arg, "luck" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK ))
		{
			send_to_char( "You already have extra luck.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_ADULT )
		{
			send_to_char( "You have to be at least an adult dragon to get this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now have extra luck.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK );
		return;
	}
	else if( !str_cmp( arg, "fly"	))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY ))
		{
			send_to_char( "You already can fly to targets.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_ADULT )
		{
			send_to_char( "You have to be at least an adult dragon to get this power.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now can fly to people.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY );
		return;
	}
	else if( !str_cmp( arg, "scales"))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS ))
		{
			send_to_char( "Your scales are already very tough.\n\r", ch );
			return;
		}
		if( ch->pcdata->powers[dragonage] < D_ANCIENT )
		{
			send_to_char( "You have to be at least a great wyrm to get this power.\n\r", ch);
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "Your scales now are tougher than ever.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS );
		return;
	}
	else if( !str_cmp( arg, "peer"	))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER	))
		{
			send_to_char( "You already can see people's stats.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
                       sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );                  
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		SET_BIT(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER);
		send_to_char( "You now can see other people's stats.\n\r", ch );
		return;
	}
	else if( !str_cmp( arg, "magic" ))
	{
		if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC ))
		{
			send_to_char( "You already have magic control.\n\r", ch );
			return;
		}
		if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) )
		{
							  sprintf( buf, "You need %d dragon points\n\r", (count * 1000) );
			send_to_char( buf, ch );
			return;
		}
		ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000);
		send_to_char( "You now have great magical control.\n\r", ch );
		SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC);
		return;
	}
	else
	{
		int x = 0;
		send_to_char( "Valid choices are:\n\r", ch );
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS ) && ch->pcdata->powers[dragonage] >= D_ADULT)
		{
			send_to_char( "Wings,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY	) && ch->pcdata->powers[dragonage] >= D_ADULT )
		{
			send_to_char( " Fly,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ) )
		{
			send_to_char(" Truesight,", ch );
			x++;
			if(x>5){send_to_char("\n\r", ch);x=0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY ) )
		{
			send_to_char( " Scry,", ch );
			x++;
			if( x > 5){send_to_char("\n\r", ch);x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS ) )
		{
			send_to_char( " Fangs,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS ) )
		{
			send_to_char( " Claws,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK ) )
		{
			send_to_char( " Lick,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ) && ch->pcdata->powers[dragonage] >= D_MATURE)
		{
			send_to_char( " FrostBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH ) && ch->pcdata->powers[dragonage] >= D_JUVENILE)
		{
			send_to_char( " FireBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH ) && ch->pcdata->powers[dragonage] >= D_YADULT)
		{
			send_to_char( " LightningBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH ) && ch->pcdata->powers[dragonage] >= D_VENERABLE )
		{
			send_to_char( " AcidBreath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH ) )
		{
			send_to_char( " Gas Breath,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER ) )
		{
			send_to_char( " Peer,", ch );
			x++;
			if(x > 5){send_to_char("\n\r", ch);x=0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL ) && ch->pcdata->powers[dragonage] >= D_YOUNG )
		{
			send_to_char( " Tail,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR ) )
		{
			send_to_char( " Terror,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE ) )
		{
			send_to_char( " Confuse,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK ) && ch->pcdata->powers[dragonage] >= D_OLD )
		{
			send_to_char( "Mask,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC ) )
		{
			send_to_char( " Magic,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH ) && ch->pcdata->powers[dragonage] >= D_IMMORTAL )
		{
			send_to_char( " Polymorph,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK ) && ch->pcdata->powers[dragonage] >= D_ADULT )
		{
			send_to_char( " Luck,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS) && ch->pcdata->powers[dragonage] >= D_ANCIENT)
		{
			send_to_char( " Scales,", ch );
			x++;
			if( x > 5 ){send_to_char( "\n\r", ch );x = 0;}
		}
		send_to_char( "\n\r", ch );
		send_to_char( "Some are only avaiable after a certain age. Check helps for ages.\n\r", ch );
		return;
	}

	return;
}


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


    if (!IS_CLASS(ch, CLASS_DRAGON))
 send_to_char("huh?\n\r", ch);


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

  if( str_cmp(arg, "gem") )
  {
     send_to_char("only gems\n\r", ch);
     return;
  }

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

  if (!IS_NPC(ch))
  

  act("$n eats $p.", ch, obj, NULL, TO_ROOM);
  act("You eat $p.", ch, obj, NULL, TO_CHAR);
  ch->pcdata->stats[DEMON_CURRENT] += obj->value[0];
  if (obj != NULL)
  extract_obj(obj);
  return;
  
}
void do_lick( CHAR_DATA *ch, char *argument )
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;

	one_argument(argument, arg );

	if( !IS_IMMORTAL(ch) )
	{
    if (!IS_CLASS(ch, CLASS_DRAGON))
		{
			send_to_char( "Huh?!?\n\r", ch );
			return;
		}
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK) )
		{
			send_to_char( "You haven't learned this skill yet.\n\r", ch );
			return;
		}
	        if(ch->hit <= 0) return;
	}
        if( arg[0] != '\0' )
        {

	  if ( ( victim = get_char_room( ch, NULL,  arg ) ) == NULL )
          {
              send_to_char( "They aren't here.\n\r", ch );
              return;
	  }
	  if ( (victim->position == POS_FIGHTING) && (victim != ch))
          {
              send_to_char( "You can only heal yourself during combat.\n\r", ch );
              return;
          }
        }

	if( arg[0] == '\0' ) victim = ch;

  if (victim->loc_hp[6] > 0)
  {
    stc("Your wounds close up and stop bleeding.\n\r",victim);
    victim->loc_hp[6] = 0;
  }

  if ((victim->loc_hp[0] + victim->loc_hp[1] + victim->loc_hp[2] + victim->loc_hp[3] + victim->loc_hp[4] +
victim->loc_hp[5]) != 0)
  {
    stc("Your bones mend themselves together and new limbs grow out of your body.\n\r",victim);
    victim->loc_hp[0] = 0;
    victim->loc_hp[1] = 0;
    victim->loc_hp[2] = 0;
    victim->loc_hp[3] = 0;
    victim->loc_hp[4] = 0;
    victim->loc_hp[5] = 0;
  }


	victim->hit += 250 * ch->pcdata->powers[dragonage];
	victim->move += 250 * ch->pcdata->powers[dragonage];
	victim->mana += 250 * ch->pcdata->powers[dragonage];
	if( victim->hit > victim->max_hit )
		victim->hit = victim->max_hit;
	if( victim->move > victim->max_move )
		victim->move = victim->max_move;
	if( victim->mana > victim->max_mana )
		victim->mana = victim->max_mana;

	update_pos(victim);

	act( "You lick $N's wounds and heal $M.",ch,NULL,victim,TO_CHAR);
	act( "$n licks your wounds and heals $M.",ch,NULL,victim,TO_VICT);
	act( "$n licks $N's wounds and heals $M.",ch,NULL,victim,TO_NOTVICT);
		  gain_condition( ch, COND_FULL, -(number_range(10,30)));
	WAIT_STATE(ch,6);
	return;
}

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

	one_argument( argument, arg );

	if( !IS_IMMORTAL(ch))
	{
    if (!IS_CLASS(ch, CLASS_DRAGON))
	{
		send_to_char( "Huh?!?\n\r", ch );
		return;
	}
	if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE) )
	{
		send_to_char( "You haven't learned this skill yet.\n\r", ch );
		return;
	}
	}

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

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

	 af.type      = gsn_curse;
	 af.duration  = 5;
	 af.location  = APPLY_HITROLL;
	 af.modifier  = -2000;
	 af.bitvector = 0;
	 affect_to_char( victim, &af );

	 af.location  = APPLY_DAMROLL;
	 af.modifier  = -2000;
	 affect_to_char( victim, &af );
	 gain_condition( ch, COND_FULL, -(number_range(50,100)));
	 WAIT_STATE(ch,8);

	return;
}

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

	one_argument( argument, arg );

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

	 if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY) )
	 {
	  send_to_char( "You haven't learned this skill yet.\n\r", ch );
	  return;
	 }
	}

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

	if ( ch->position == POS_FIGHTING )
	 {
	  send_to_char( "No way! You are fighting.\n\r", ch );
	  return;
	 }

	if ( ( victim = get_char_world( ch, arg ) ) == NULL )
	 {
	  send_to_char( "Nobody by that name.\n\r", ch );
 	  return;
	 }

	if( victim == ch )
	 {
	  stc( "Not to yourself.\n\r",ch);
	  return;
	 }

	if ( victim->fight_timer == 0 && !IS_IMMUNE(victim, IMM_SUMMON) && !IS_NPC(victim) && !IS_IMMORTAL(ch))
	{
	  send_to_char("You can't find them.\n\r", ch);
	  return;
	}

	if(IS_SET(victim->in_room->room_flags, ROOM_ASTRAL) || IS_SET(ch->in_room->room_flags, ROOM_ASTRAL))
	  {
	   send_to_char("You can't find them.\n\r",ch);
	   return;
	  }
	act( "You disappear up into the sky.", ch, NULL, NULL, TO_CHAR );
	act( "$n disappears up into the sky.", ch, NULL, NULL, TO_ROOM );
	char_from_room( ch );
	char_to_room( ch, get_room_index(victim->in_room->vnum) );
	act( "You swoop down and land infront of $N", ch, NULL, victim, TO_CHAR );
	act( "$n swoop down and land infront of $N.", ch, NULL, victim, TO_ROOM );
	do_look( ch, "auto" );
	WAIT_STATE(ch,4);
	if ( (mount = victim->mount) == NULL ) return;
	char_from_room( mount );
	char_to_room( mount, get_room_index(victim->in_room->vnum) );
	return;
}

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

	 one_argument( argument, arg );

	if (IS_NPC(ch)) return;

	if(!IS_IMMORTAL(ch))
	{
    if (!IS_CLASS(ch, CLASS_DRAGON))
	 {
	  send_to_char( "Huh?!?\n\r", ch );
	  return;
	 }
	 if(!IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER))
	 {
	  send_to_char( "You don't have the ability to know people's stats.\n\r", ch);
	  return;
	 }
	}

	if( arg[0] == '\0' )
	{
		send_to_char( "Peer at who?\n\r", ch );
		return;
	}
	 if ( ( victim = get_char_room( ch, NULL,  arg ) ) == NULL )
    {
    if ( ( obj = get_obj_carry( ch, arg, ch ) ) == NULL )
    {
		  send_to_char( "Peer at what?\n\r", ch );
        return;
	 }
	 act("$n examines $p intently.",ch,obj,NULL,TO_ROOM);
//	 spell_identify( skill_lookup( "identify" ), ch->level, ch, obj );
	 return;
	}
	 act("$n examines $N intently.",ch,NULL,victim,TO_NOTVICT);
	 act("$n examines you intently.",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,"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->pcdata->souls);
	 send_to_char(buf,ch);
	 if (IS_CLASS(victim, CLASS_VAMPIRE))
	 {
		  sprintf(buf,"Blood:%d, ",victim->pcdata->condition[COND_THIRST]);
		  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) && victim->sex == SEX_FEMALE)
	 act("$N is pregnant.",ch,NULL,victim,TO_CHAR);
	return;
}

void do_consume( CHAR_DATA *ch, char *argument )
{
	 OBJ_DATA *corpse;
	 OBJ_DATA *c_next;
//	 OBJ_DATA *obj;
//	 OBJ_DATA *obj_next;
	char arg[MAX_INPUT_LENGTH];
	char buf[MAX_INPUT_LENGTH];
	int points;

	one_argument( argument, arg );

    if (!IS_CLASS(ch, CLASS_DRAGON))
return;

	 for ( corpse = ch->in_room->contents; corpse != NULL; corpse = c_next )
	 {
	c_next = corpse->next_content;
	if ( corpse->item_type != ITEM_CORPSE_NPC && corpse->item_type != ITEM_CORPSE_PC)
		 continue;
if (!global_cp)
	points = number_range( 280, 350 * (ch->pcdata->powers[dragonage]) );
else
	points = number_range( 400, 650 * (ch->pcdata->powers[dragonage]) );
	ch->pcdata->stats[DEMON_CURRENT] += points;
	ch->pcdata->stats[DEMON_TOTAL] += points;
	act( "$n savagely devours a corpse.", ch, NULL, NULL, TO_ROOM );
	sprintf( buf, "You gain %d dragon points.\n\r", points );
	send_to_char( buf, ch );
/*	for ( obj = corpse->contains; obj; obj = obj_next )
	{
		 obj_next = obj->next_content;
		 obj_from_obj( obj );
		 obj_to_room( obj, ch->in_room );
	}*/

	if (corpse != NULL) extract_obj( corpse );
	 }
	return;
}

void do_dgem ( CHAR_DATA *ch, char *argument )
{
	 char arg1[MAX_INPUT_LENGTH];
	 char buf[MAX_STRING_LENGTH];
	 OBJ_INDEX_DATA *pObjIndex;
	 OBJ_DATA *obj;
	 int value;

	 argument = one_argument( argument, arg1 );

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

	 if ( IS_NPC(ch) || (ch->pcdata->stats[DEMON_CURRENT] < 1 ) )
	 {
	send_to_char("You are unable to make a gem.\n\r",ch);
	return;
	 }
	 else if ( arg1[0] == '\0' || !is_number( arg1 ) )
	 {
	send_to_char("Please specify a value for gem.\n\r",ch);
	return;
	 }
	 else
	 {
		  value = atoi( arg1 );
	if ( value < 1 || value > 100000 )
		  {
		 send_to_char( "Gem value should have a value between 1 and 100000.\n\r", ch );
		 return;
		  }
	else if ( value > ch->pcdata->stats[DEMON_CURRENT] )
		  {
		 sprintf(buf,"You only have %d dragon points left to put into gems.\n\r",ch->pcdata->stats[DEMON_CURRENT]);
	    send_to_char( buf, ch );
	    return;
        }
	 }

	 if ( ( pObjIndex = get_obj_index( OBJ_VNUM_PROTOPLASM ) ) == NULL )
    {
	send_to_char( "Error...missing object, please inform KaVir.\n\r", ch );
	return;
    }

	 ch->pcdata->stats[DEMON_CURRENT] -= value;
	 ch->pcdata->stats[DEMON_TOTAL]	 -= value;
	 if (ch->pcdata->stats[DEMON_CURRENT]  < 0) ch->pcdata->stats[DEMON_CURRENT] = 0;
    obj = create_object( pObjIndex, value );
    obj->value[0] = value;
    obj->level = 1;
    obj->cost = value*1000;
	 obj->item_type = ITEM_DRAGONGEM;
    obj_to_char(obj,ch);
	 if (obj->questmaker != NULL) free_string(obj->questmaker);
    obj->questmaker = str_dup(ch->name);
    free_string( obj->name );
	 obj->name = str_dup( "dragon gem" );
    sprintf(buf,"a %d point gem",value);
    free_string( obj->short_descr );
    obj->short_descr = str_dup( buf );
    sprintf(buf,"A %d point gem lies on the floor.",value);
    free_string( obj->description );
    obj->description = str_dup( buf );

		act( "A tear rolls down your cheek and crystalizes into $p.", ch, obj, NULL, TO_CHAR );
   	act( "A tear rolls down $n's cheek and crystalizes into $p.", ch, obj, NULL, TO_ROOM );

    return;
}


void do_age( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_INPUT_LENGTH];
    if (!IS_CLASS(ch, CLASS_DRAGON))
    return;

    if(ch->pcdata->stats[DEMON_CURRENT] < (ch->pcdata->powers[dragonage] * 30000))
      {
	sprintf( buf, "You need %d dragon points to age \n\r", (ch->pcdata->powers[dragonage] * 30000));
	  send_to_char( buf, ch );
	return;
      }
    if ( ch->practice < (ch->pcdata->powers[dragonage]*100))
      {
        sprintf(buf,"It costs %d points of primal to age.\n\r",(ch->pcdata->powers[dragonage]*100));
          send_to_char(buf,ch);
        return;
      }

    if(ch->max_hit < (ch->pcdata->powers[dragonage] * 5000))
      {
	sprintf( buf, "You need %d hitpoints to age \n\r", (ch->pcdata->powers[dragonage] * 5000));
	  send_to_char( buf, ch );
	return;
      }
	 if(ch->pcdata->powers[dragonage] == 12 && !IS_IMMORTAL(ch))
      {
	sprintf( buf, "You cannot age any further\n\r");
 	  send_to_char( buf, ch );
 	return;
		}
    if (IS_IMMORTAL(ch))
      {
	  ch->pcdata->powers[dragonage] = 13;
	  return;
      }
    ch->pcdata->stats[DEMON_CURRENT] -= (ch->pcdata->powers[dragonage] * 30000);
    ch->practice -= (100 * ch->pcdata->powers[dragonage]);
    ch->pcdata->powers[dragonage] +=1;
    send_to_char( "You have aged.\n\r", ch );
    return;
}


void do_fbreath(CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *victim;
  int i=0;
  int dam = 0;
  int chance =0;
  char buf[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char arg [MAX_INPUT_LENGTH];

  one_argument( argument, arg );

  if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_DRAGON))

 {
	 send_to_char("Huh?\n\r",ch);
	 return;
  }
    if (!IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH ))
  {
	 send_to_char("You haven't learned how to breath fire yet.\n\r",ch);
	 return;
  }
  if ( ( victim = get_char_room( ch, NULL,  arg ) ) == NULL )
  {
    if (ch->fighting == NULL) 
    {
      send_to_char( "They aren't here.\n\r", ch );
      return;
    }
    else victim = ch->fighting;
  }
 if (ch->mana < 100 )
  {
	 send_to_char("You dont have enough mana.\n\r",ch);
	 return;
  }
  if ((victim = ch->fighting) == NULL)
  {
	 send_to_char( "You aren't fighting anyone.\n\r", ch );
	 return;
  }
  ch->mana -= 100;

  chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->pRank));

  if (chance <= 7) i = 1;
  if (chance > 7 && chance <= 22)   i = 2;
  if (chance > 22 && chance <= 32)   i = 3;
//  if (chance > 32 && chance <= 52)   i = 4;
  if (chance > 52 && chance <= 90)   i = 5;
  if (chance > 90 && chance <= 94)   i = 6;
//  if (chance > 94 && chance <= 110)  i = 7;
  if (chance > 110 && chance <= 125) i = 8;
//  if (chance > 125 && chance <= 128) i = 9;
  if (chance > 128 ) i = 10;

  for(i=i;i>0;i--)
   {
     dam = number_range(6000 , 880 * (ch->pRank+ch->pcdata->powers[dragonage]));
     if (dam < 6000) dam = 6000;
     dam = cap_dam(ch,victim,dam);
     sprintf(buf, "%s's blast of #rf#Rl#ra#Rm#re #Rimmolates#n you [#r%d#n]\n\r", ch->name, dam);
     send_to_char( buf, victim );
     sprintf(buf2, "Your blast of #rf#Rl#ra#Rm#re #Rimmolates#n %s [#r%d#n]\n\r",victim->name, dam);
     send_to_char( buf2, ch );
     act( "$n's blast of #rf#Rl#ra#Rm#re #Rimmolates#n $N",ch,NULL,victim,TO_NOTVICT);
     fire_effect(victim,ch->explevel,dam,TARGET_CHAR);
     hurt_person(ch,victim,dam);
     if (victim->hit < 1) break;
   }
  if (!IS_AFFECTED(victim, AFF_FLAMING))
    SET_BIT(victim->affected_by, AFF_FLAMING);
  WAIT_STATE(ch,6);
  return;
}

void do_lbreath(CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *victim;
  int i=0;
  int dam = 0;
  int chance =0;
  char buf[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char arg [MAX_INPUT_LENGTH];

  if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_DRAGON))
{	
 send_to_char("Huh?\n\r",ch);
	 return;
  }
    if (!IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH ))
  {
	 send_to_char("You haven't learned how to breath lightning yet.\n\r",ch);
	 return;
  }
  if ( ( victim = get_char_room( ch, NULL,  arg ) ) == NULL )
  {
    if (ch->fighting == NULL) 
    {
      send_to_char( "They aren't here.\n\r", ch );
      return;
    }
    else victim = ch->fighting;
  }


   if  (ch->mana < 100 )
  {
	 send_to_char("You dont have enough mana.\n\r",ch);
	 return;
  }
  if ((victim = ch->fighting) == NULL)
  {
	 send_to_char( "You aren't fighting anyone.\n\r", ch );
	 return;
  }
  ch->mana -= 100;
  chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->pRank));

  if (chance <= 7) i = 1;
  else if (chance > 7 && chance <= 22)   i = 2;
  else if (chance > 22 && chance <= 32)   i = 3;
//  else if (chance > 32 && chance <= 52)   i = 4;
  else if (chance > 52 && chance <= 90)   i = 5;
  else if (chance > 90 && chance <= 94)   i = 6;
  else if (chance > 94 && chance <= 110)  i = 7;
//  else if (chance > 110 && chance <= 125) i = 8;
  else if (chance > 125 && chance <= 128) i = 9;
  else if (128 < chance ) i = 10;

  for(i=i;i>0;i--)
    {
	dam = number_range(6000 , 680 * (ch->pRank+ch->pcdata->powers[dragonage]));
	if (dam < 6000) dam =6000;
        dam = cap_dam(ch,victim,dam);
	sprintf(buf, "%s's blast of #yl#oi#yg#oh#yt#on#yi#on#yg #yelectrifies#n you [#y%d#n]\n\r", ch->name, dam);
	send_to_char( buf, victim );
	sprintf(buf2,"Your blast of #yl#oi#yg#oh#yt#on#yi#on#yg #yelectrifes#n %s [#y%d#n]\n\r",victim->name, dam);
	send_to_char( buf2, ch );
	act( "$n's blast of #yl#oi#yg#oh#yt#on#yi#on#yg #yelectrifes#n $N.",ch,NULL,victim,TO_NOTVICT);
	hurt_person(ch,victim,dam);
	if (victim->hit < 1) break;
	shock_effect(victim,ch->explevel,dam,TARGET_CHAR);
    }
    chance = number_range (1,10);
    if(ch->pcdata->powers[DRAGON_COLOR] == 3) chance += 1;
    if(ch->pcdata->powers[DRAGON_COLOR] ==12) chance += 1;
    if (chance >= 9)
      {
        act( "Your blast of #yl#oi#yg#oh#yt#on#yi#on#yg#n stuns $N.",ch,NULL,victim,TO_CHAR);
        act( "$n's blast of #yl#oi#yg#oh#yt#on#yi#on#yg stuns you.",ch,NULL,victim,TO_VICT);
        act( "$n's blast of #yl#oi#yg#oh#yt#on#yi#on#yg stuns $N.",ch,NULL,victim,TO_NOTVICT);
        victim->position = POS_STUNNED;
      }
  WAIT_STATE(ch,6);
  return;
}

void do_gbreath(CHAR_DATA *ch, char *argument)
{
	 CHAR_DATA *vch;
	 CHAR_DATA *vch_next;
         CHAR_DATA *victim;
	 char buf[MAX_STRING_LENGTH];
	 char buf2[MAX_STRING_LENGTH];
	 int dam;
	int rrdam = 0;
        int rrcount = 0;
         int i = 0;
	 int chance = 0;


    if (!IS_CLASS(ch, CLASS_DRAGON))

         {
            send_to_char ("Huh?\n\r",ch);
            return;
         }

	 if (ch->mana < 100)
	 {
		send_to_char ("You dont have enough mana.\n\r",ch);
		return;
	 }

        chance = (number_range (1, (100+ch->pRank+ch->pcdata->powers[dragonage])));
        if (chance <= 7) i = 1;
  	else if (chance > 7 && chance <= 22)   i = 2;
  	else if (chance > 22 && chance <= 32)   i = 3;
  	else if (chance > 32 && chance <= 52)   i = 4;
  	else if (chance > 52 && chance <= 90)   i = 5;
  	else if (chance > 90 && chance <= 94)   i = 6;
  	else if (chance > 94 && chance <= 110)  i = 7;
  	else if (chance > 110 && chance <= 125) i = 8;
  	else if (chance > 125 && chance <= 128) i = 9;
  	else if (128 < chance ) i = 10;

   for(i=i;i>0;i--)
   {
	  send_to_char("#GYou belch forth a cloud of poisonous gas#n.\n\r",ch);
     for ( vch = ch->in_room->people; vch!=NULL;vch = vch_next)     
      {
      	if(ch->mana <= 100)
      		break;
        vch_next = vch->next_in_room;
        if (can_see(ch,vch))
	if ( IS_NPC(ch) ? !IS_NPC(vch) : IS_NPC(vch) )
	{
          dam = number_range((ch->damcap[DAM_CAP] - 500), (ch->damcap[DAM_CAP]+(ch->pRank*125)));
	  sprintf(buf, "%s's #sblast of gas#n chokes you [#G%d#n]\n\r", ch->name, dam);
	  send_to_char( buf, vch );
	if(!IS_SET(ch->act,PLR_BRIEF5)){
	  sprintf(buf2, "Your #sblast of gas#n chokes %s [#G%d#n]\n\r",vch->name, dam);
	  send_to_char( buf2, ch );
	}
	else{
		rrdam += dam;
		rrcount += 1;
	}
	  //act( "$n's #sblast of gas#n chokes $N.",ch,NULL,vch,TO_NOTVICT);
          spell_poison(gsn_poison,(ch->level*number_range(100,120)),ch,victim);
	  set_fighting(ch,vch, TRUE);
	  hurt_person(ch,vch,dam);
	  ch->mana -= 100;
	}
      }
    }
	if(IS_SET(ch->act,PLR_BRIEF5)){
		sprintf(buf,"#GYou've dealt #C%d #Gattacks causing #C%d #Gdamage. #0(#y%d #Gaverage#0)#n\n\r",rrcount,rrdam,dam);
		stc(buf,ch);
	}

  WAIT_STATE (ch, 4);
  return;
}



void do_abreath(CHAR_DATA *ch, char *argument)
{
	CHAR_DATA *victim;
		  int dam = 0;
	int damp = 0;
	int vorpchance = 0;
	bool is_vorpal = FALSE;
	char buf[MAX_STRING_LENGTH];
	char buf2[MAX_STRING_LENGTH];
	char arg [MAX_INPUT_LENGTH];


  if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_DRAGON))
{
     send_to_char("Huh?\n\r",ch);
     return;
   }
    if (!IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH ))
   {
     send_to_char("You haven't learned how to breath acid yet.\n\r",ch);
     return;
   }
  if ( ( victim = get_char_room( ch, NULL, arg ) ) == NULL )
  {
    if (ch->fighting == NULL) 
    {
      send_to_char( "They aren't here.\n\r", ch );
      return;
    }
    else victim = ch->fighting;
  }

  if   (ch->mana < 100 )
  {
	 send_to_char("You dont have enough mana.\n\r",ch);
	 return;
  }
  if ((victim = ch->fighting) == NULL)
  {
	 send_to_char( "You aren't fighting anyone.\n\r", ch );
	 return;
  }
//  ch->mana -= 100;
  dam = number_range(8000 , (5000+(ch->pRank*100)));
   WAIT_STATE (ch, 12);
  sprintf(buf, "%s's blast of acid covers you [#C%d#n]\n\r", ch->name, dam);
  send_to_char( buf, victim );
  sprintf(buf2, "Your blast of acid covers %s [#C%d#n]\n\r",victim->name, dam);
  send_to_char( buf2, ch );
  act( "$n's blast of acid covers $N.",ch,NULL,victim,TO_NOTVICT);
  hurt_person(ch,victim,dam);
  acid_effect(victim,ch->explevel,dam,TARGET_CHAR);
  vorpchance = number_range (1, 100);
  vorpchance += (2 * ch->pcdata->powers[dragonage]);
  if ( ch->pcdata->powers[DRAGON_COLOR] == 7 ) vorpchance += 35;   // Black Dragon Acid Bonus
  if ( ch->pcdata->powers[DRAGON_COLOR] == 15 ) vorpchance += 25;  // Topaz Dragon Acid Bonus
  if ( vorpchance >= 40) is_vorpal = TRUE;
  if ( is_vorpal )
  {
//    ch->mana-=9000;
    damp=number_range(1,8);
    if ( damp == 1 )
     {
 	return;
     }
    else if ( damp == 2 )
     {
 	return;
     }
    else if ( damp == 3 )
     {
 	return;
     }
    else if ( damp == 4 )
     {
	return;
     }
    else if ( damp == 5 ) 
     {
	return;
     }
    else if ( damp == 6 )
     {
	return;
     }
    else if ( damp == 7 )
     {
	if (!IS_ARM_L(victim,LOST_ARM))
	 {
	  act("Your acid burns off $N's arm.", ch, NULL, victim, TO_CHAR);
	  act("$n's acid burns off $N's arm.", ch, NULL, victim, TO_NOTVICT);
	  act("$n's acid burns off your arm.", ch, NULL, victim, TO_VICT);
	  make_part(victim,"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);
	}
       else if (!IS_ARM_R(victim,LOST_ARM))
	{
	  act("Your acid burns off $N's arm.", ch, NULL, victim, TO_CHAR);
	  act("$n's acid burns $N's arm.", ch, NULL, victim, TO_NOTVICT);
	  act("$n's acid burns off your arm.", ch, NULL, victim, TO_VICT);
	  make_part(victim,"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);
	}
       else
	{
	  return;
	}
     }
    else if ( damp == 8 )
     {
	if (!IS_LEG_L(victim,LOST_LEG))
	{
	  act("Your acid burns off $N's leg at the hip.", ch, NULL, victim, TO_CHAR);
	  act("$n's acid burns off $N's leg at the hip.", ch, NULL, victim, TO_NOTVICT);
	  act("$n's acid burns off your leg at the hip.", ch, NULL, victim, TO_VICT);
	  make_part(victim,"leg");
	  SET_BIT(victim->loc_hp[4],LOST_LEG);
	  if (!IS_BLEEDING(victim,BLEEDING_LEG_L)) SET_BIT(victim->loc_hp[6],BLEEDING_LEG_L);
	  if (IS_BLEEDING(victim,BLEEDING_FOOT_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_L);
	}
	else if (!IS_LEG_R(victim,LOST_LEG))
	{
	  act("Your acid burns off $N's leg at the hip.", ch, NULL, victim, TO_CHAR);
	  act("$n's acid burns off $N's leg at the hip.", ch, NULL, victim, TO_NOTVICT);
	  act("$n's acid burns off your leg at the hip.", ch, NULL, victim, TO_VICT);
	  make_part(victim,"leg");
	  SET_BIT(victim->loc_hp[5],LOST_LEG);
	  if (!IS_BLEEDING(victim,BLEEDING_LEG_R)) SET_BIT(victim->loc_hp[6],BLEEDING_LEG_R);
	  if (IS_BLEEDING(victim,BLEEDING_FOOT_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_R);
	}
	else
	{
		return;
	}
     }
 }

 if (!IS_AFFECTED(victim, AFF_FLAMING))
 SET_BIT(victim->affected_by, AFF_FLAMING);
 WAIT_STATE(ch,6);
 return;
}

void do_cbreath( CHAR_DATA *ch, char *argument )
{
	 CHAR_DATA *victim;
	 int i=0;
	 int dam = 0;
	 int chance =0;
	 char buf[MAX_STRING_LENGTH];
	 char buf2[MAX_STRING_LENGTH];
	char arg [MAX_INPUT_LENGTH];

	 if (IS_NPC(ch)) return;

    if (!IS_CLASS(ch, CLASS_DRAGON))
	  {
		  send_to_char("Huh?\n\r",ch);
		  return;
	  }
    if (!IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ))
	  {
		  send_to_char("You haven't learned how to breath frost yet.\n\r",ch);
		  return;
	  }

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

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

	 if (ch->mana < 100)
	  {
		  send_to_char("You don't have enough mana.\n\r", ch);
		  return;
	  }
  chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->pRank));

  if (chance <= 7) i = 1;
  else if (chance > 7 && chance <= 22)   i = 2;
  else if (chance > 22 && chance <= 32)   i = 3;
  else if (chance > 32 && chance <= 52)   i = 4;
  else if (chance > 52 && chance <= 90)   i = 5;
  else if (chance > 90 && chance <= 94)   i = 6;
  else if (chance > 94 && chance <= 110)  i = 7;
  else if (chance > 110 && chance <= 125) i = 8;
  else if (chance > 125 && chance <= 128) i = 9;
  else if (128 < chance ) i = 10;

  for(i=i;i>0;i--)
	  {
		dam = number_range(1000 ,2500);
		if (dam > 5000) dam = 5000;
		sprintf(buf, "%s's cone of #Cf#7r#Co#7s#Ct#n freezes you [#C%d#n]\n\r", ch->name, dam);
		send_to_char( buf, victim );
		sprintf(buf2, "Your cone of #Cf#7r#Co#7s#Ct#n freezes %s [#C%d#n]\n\r",victim->name, dam);
		send_to_char( buf2, ch );
		act( "$n's cone of #Cf#7r#Co#7s#Ct#n freezes $N.",ch,NULL,victim,TO_NOTVICT);
		hurt_person(ch,victim,dam);
		if (victim->hit < 1) break;
		cold_effect(victim,ch->explevel,dam,TARGET_CHAR);
	  }

  ch->mana = ch->mana - 100;
  WAIT_STATE(ch,12);
  WAIT_STATE(victim, 6);
  return;
}

void do_nest( 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_DRAGON))
	 {
	send_to_char("Huh?\n\r",ch);
	return;
	 }
	 sprintf( buf, "                 #C[#LThe Lords of the Skies#C]\n\r");
	 send_to_char( buf, ch );
	 send_to_char("#0[      #rName      #0] [   #rHits  #0] [   #rMana  #0] [   #rMove  #0] [  #rAge  #0]\n\r", ch );
	 for ( gch = char_list; gch != NULL; gch = gch->next )
	 {
	if ( IS_NPC(gch) ) continue;
    if (!IS_CLASS(gch, CLASS_DRAGON)) continue;
//	if ( gch->level >= 7) continue; 
// if i had WANTED that in there i would have PUT it in there, GryphonHawk
	sprintf( buf,"#0[#R%-16s#0] [#r%-9d#0] [#r%-9d#0] [#r%-9d#0] [   #r%-2d  #0]\n\r",
	capitalize( gch->name ),
	gch->hit,gch->mana,gch->move,
	gch->pcdata->powers[dragonage]);
	send_to_char( buf, ch );
	 }
	 return;
}


void do_dswoop( CHAR_DATA *ch, char *argument )
{
  char arg[MAX_INPUT_LENGTH];
  ROOM_INDEX_DATA *location;
  CHAR_DATA *victim;
          
  one_argument (argument, arg);
  if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_DRAGON))
  {
    send_to_char("Huh?\n\r", ch );
    return;
  }
		if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY) )
		{
			send_to_char( "You haven't learned this skill yet.\n\r", ch );
			return;
		}
  if ((victim = get_char_world(ch, arg)) == NULL)
  {
    send_to_char("Swoop down on whom?\n\r", ch );
    return;
  }
  if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL))
  {
    stc( "You can't find it's room.\n\r",ch);
    return;
  }
  if( IS_IMMUNE(victim, IMM_TRAVEL ) && victim->fight_timer == 0) {
     send_to_char("He doesnt want you near him!\n\r",ch);
     return;
  }
  if (IS_SET(ch->in_room->room_flags, ROOM_ASTRAL))
  {
    stc( "Your room is not connected to the astral plane.\n\r",ch);
    return;
  }
  location = victim->in_room;
  if (ch->move < 500)
  {
    send_to_char("You don't have the move to fly that far.\n\r", ch );
    return;
  }

	act( "You disappear up into the sky.", ch, NULL, NULL, TO_CHAR );
	act( "$n disappears up into the sky.", ch, NULL, NULL, TO_ROOM );
  ch->move -= 500;
  char_from_room(ch);
  char_to_room(ch, location);
  do_look(ch, "auto");
  if(victim->fight_timer > 0) WAIT_STATE(ch,4);
	  act("You swoop down from the sky onto $N.",ch,NULL,victim,TO_CHAR);
	  act("$n swoops down from the sky onto $N.",ch,NULL,victim,TO_NOTVICT);
	  act("$n swoops down from the sky onto you.",ch,NULL,victim,TO_VICT);
	  if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS) ) one_hit( ch, victim, gsn_claws,8);
	  if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS) ) one_hit( ch, victim, gsn_claws,8);
	  if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS) ) one_hit( ch, victim, gsn_fangs,8);
	  one_hit(ch, victim, gsn_fireball,8);
          one_hit(ch, victim, gsn_fireball,8);
          one_hit(ch, victim, gsn_fireball,8);
          one_hit(ch, victim, gsn_sweep,8);
	  one_hit(ch, victim, gsn_headbutt,8);
  return;
}





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

    if (IS_CLASS(ch, CLASS_DRAGON) && !IS_SET(ch->pcdata->powers[DPOWER_FLAGS],DRA_TRUESIGHT))
	 {
	  send_to_char("Huh?\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_breathforge(CHAR_DATA *ch, char *argument)
{
	 OBJ_DATA *obj;

    if (!IS_CLASS(ch, CLASS_DRAGON))

          {
             send_to_char("huh?\n\r",ch);
             return;
          }
    if (ch->pcdata->powers[dragonage] < 12)
	  {
		 send_to_char("You have earned the power to forge items yet.\n\r",ch);
		 return;
	  }
 	if ( ch->practice < 1500)
	  {
		 send_to_char("It costs 1500 primal to forge an item.\n\r",ch);
		 return;
	  }
	if (argument[0] == '\0')
	  {
		 send_to_char("Which item do you wish to forge?\n\r", ch);
		 return;
	  }
	if ( (obj = get_obj_carry(ch, argument, ch)) == NULL)
	  {
		 send_to_char("You are not carrying that item.\n\r", ch);
		 return;
	  }
	if (IS_SET(obj->quest,QUEST_RELIC) || IS_SET(obj->quest,QUEST_ARTIFACT))
	  {
		send_to_char("Not on a Relic.\n\r",ch);
		return;
	  }
        if (IS_SET(obj->quest2,QUEST2_BREATH))
          {
                send_to_char("This item has already been forged by a dragon!!\n\r",ch);
                return;
          }
	if (obj->item_type == ITEM_WEAPON)
	  {
		 obj->value[1] += 50;
		 obj->value[2] += 50;
		 obj->level     =  50;
		 oset_affect(ch,obj,50,APPLY_HITROLL,TRUE);
		 oset_affect(ch,obj,50,APPLY_DAMROLL,TRUE);
		 SET_BIT(obj->quest2,QUEST2_BREATH);
		 obj->condition = 100;
		 obj->toughness = 100;
		 obj->resistance = 1;
		 act("You temper $p in a blast of flame.", ch, obj, NULL, TO_CHAR);
		 act("$n tempers $p in a blast of flame.", ch, obj, NULL, TO_ROOM);
		 if(!IS_SET(obj->weapflags, WEAPON_FLAMING)) SET_BIT(obj->weapflags, WEAPON_FLAMING);
		 ch->practice -= 1500;
		 WAIT_STATE(ch, 8); 
		 return;
	  }
	if (obj->item_type == ITEM_ARMOR)
	  {
		obj->value[0] += 50;
		oset_affect(ch,obj,30,APPLY_HITROLL,TRUE);
		oset_affect(ch,obj,30,APPLY_DAMROLL,TRUE);
		oset_affect(ch,obj,-50,APPLY_AC,TRUE);
		SET_BIT(obj->quest2,QUEST2_BREATH);
		obj->condition = 100;
		obj->toughness = 100;
		obj->resistance = 1;
		act("You temper $p in a blast of flame.", ch, obj, NULL, TO_CHAR);
		act("$n tempers $p in a blast of flame.", ch, obj, NULL, TO_ROOM);
		ch->practice -= 1500;
		WAIT_STATE(ch, 8);
		return;
	  }

}