atd/area/
atd/build/
atd/clans/
atd/log/
atd/player/store/
atd/site/
atd/src/bin/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "angel.h"
#include "player.h"
#include "commands.h"

/*
 * Local Functions
 */


void do_angelgift( CHAR_DATA *ch, char *argument)
 {
     CHAR_DATA *victim;
     char     arg1 [MAX_INPUT_LENGTH];
     char     arg2 [MAX_INPUT_LENGTH];
     int      gift = 0;
     int      cost = 0;
     char     *col;
     smash_tilde(argument);
     argument = one_argument( argument, arg1 );
     argument = one_argument( argument, arg2 );

     if (IS_NPC(ch)) return;

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

     if ( arg1[0] == '\0' || arg2[0] == '\0' )
     {
       send_to_char("Syntax: angelgift (person) (gift)\n\r",ch);
       send_to_char("{C*{c---------------{C*{c-------{C*{c------------{C*{c-------------------------{C*{x\n\r",ch);
       send_to_char("{c|{W Gift:         {c|{W Price {c|{W Command:   {c|{W What it does            {c|{x\n\r",ch);
       ch_printf(ch,
	"{C*{c---------------{C*{c-------{C*{c------------{C*{c-------------------------{C*{x\n\r");
       col = "{D";
       ch_printf(ch,
	"{c|%s Angfly        {c|%s  Free {c|%s angfly     {c|%s travel command          {c|{x\n\r",
         col, col, col,col);
       
       col = IS_ANGPOWER(ch,ANG_WINGS) ? "{D" : "{W";
       ch_printf(ch,
          "{c|%s Wings         {c|%s 2000  {c|%s angelwings {c|%s fly                     {c|{x\n\r",
          col, col, col,col );

	col = IS_ANGPOWER(ch,ANG_TOUGHNESS) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Toughness     {c|%s 9000  {c|%s automatic  {c|%s toughness               {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_STRENGTH) ? "{D" : "{W";
	ch_printf(ch,"{c|%s GodStrength   {c|%s 9000  {c|%s automatic  {c|%s extra damcap            {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_SCRY) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Scry          {c|%s 7500  {c|%s scry       {c|%s see location of someone {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_READAURA) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Readaura      {c|%s 7500  {c|%s readaura   {c|%s read someones stats     {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_GODLYSIGHT) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Godlysight    {c|%s 7500  {c|%s godlysight {c|%s truesight               {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_SPEED) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Speed         {c|%s 9000  {c|%s automatic  {c|%s dodge/hit more          {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_HALO) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Halo          {c|%s 15000 {c|%s anghalo    {c|%s hitroll/damroll + damcap{c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_SHIELD_OF_GOD) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Shield        {c|%s 15000 {c|%s shield     {c|%s shield your aura        {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_ETHERFORM) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Etherform     {c|%s 25000 {c|%s etherform  {c|%s etherform               {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_MULTIARM) ? "{D" : "{W";
	ch_printf(ch,"{c|%s MultiArm      {c|%s 50000 {c|%s multiarm   {c|%s stun someone in a fight {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_TRUEFORM) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Trueform      {c|%s 50000 {c|%s trueform   {c|%s like demonform          {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_TOUCH) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Touch         {c|%s 50000 {c|%s touch      {c|%s changes vict alignment  {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_WRAITH_OF_GOD) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Wraith of God {c|%s 75000 {c|%s wraith     {c|%s ff/curse/web/etc.       {c|{x\n\r",
         col, col, col,col);

	col = IS_ANGPOWER(ch,ANG_CHIMERA) ? "{D" : "{W";
	ch_printf(ch,"{c|%s Chimera Form {c|%s 75000 {c|%s chimera     {c|%s Turn into a Chimera       {c|{x\n\r",
         col, col, col,col);
	
	send_to_char("{C*{c---------------{C*{c-------{C*{c------------{C*{c-------------------------{C*{x\n\r",ch);
 return;
     }

     if ( ( victim = get_char_room( ch, arg1) ) == 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 (!str_cmp(arg2,"prince"))
    {
        if (victim == ch)
        {
            send_to_char("Not on yourself!\n\r",ch);
            return;
        }
        if (ch->pcdata->stats[UNI_GEN] < 2)
        {
            send_to_char("Only an Archangel has the power to make princes.\n\r",ch);
            return;
        }
        if (IS_SET(victim->special,SPC_PRINCE))
        {
            send_to_char("You have lost your princehood!\n\r",victim);
            send_to_char("You remove their princehood.\n\r",ch);
            REMOVE_BIT(victim->special, SPC_PRINCE);
        }
        else
        {
            send_to_char("You have been made a prince!\n\r",victim);
            send_to_char("You make them a prince.\n\r",ch);
            SET_BIT(victim->special, SPC_PRINCE);
        }
        save_char_obj(victim);
        return;
    }

     if (!str_cmp(arg2,"wings"))
     {gift = ANG_WINGS; cost = 2000;}
     else if (!str_cmp(arg2,"toughness"))
     {gift = ANG_TOUGHNESS; cost = 9000;}
     else if (!str_cmp(arg2,"godstrength"))
     {gift = ANG_STRENGTH; cost = 9000;}
     else if (!str_cmp(arg2,"godlysight"))
     {gift = ANG_GODLYSIGHT; cost = 7500;}
     else if (!str_cmp(arg2,"scry"))
     {gift = ANG_SCRY; cost = 7500;}
     else if (!str_cmp(arg2,"readaura"))
     {gift = ANG_READAURA; cost = 7500;}
     else if (!str_cmp(arg2,"speed"))
     {gift = ANG_SPEED; cost = 9000;}
     else if (!str_cmp(arg2,"halo"))
     {gift = ANG_HALO; cost = 15000;}
     else if (!str_cmp(arg2,"multiarm"))
     {gift = ANG_MULTIARM; cost = 50000;}
     else if (!str_cmp(arg2,"wraith of god"))
     {gift = ANG_WRAITH_OF_GOD; cost = 75000;}
     else if (!str_cmp(arg2,"trueform"))
     {gift = ANG_TRUEFORM; cost = 50000;}
     else if (!str_cmp(arg2,"shield"))
     {gift = ANG_SHIELD_OF_GOD; cost = 15000;}
     else if (!str_cmp(arg2,"chimera"))
     {gift = ANG_CHIMERA; cost = 75000;}
     else if (!str_cmp(arg2,"etherform"))
     {gift = ANG_ETHERFORM; cost = 25000;}
     else if (!str_cmp(arg2,"touch"))
     {gift = ANG_TOUCH; cost = 50000;}
     else
     {
       send_to_char("Syntax: angelgift (person) (gift)\n\r",ch);
       send_to_char("{C*{c---------------{C*{c-------{C*{c------------{C*{c-------------------------{C*{x\n\r",ch);
       send_to_char("{c|{W Gift:         {c|{W Price {c|{W Command:   {c|{W What it does            {c|{x\n\r",ch);
       send_to_char("{C*{c---------------{C*{c-------{C*{c------------{C*{c-------------------------{C*{x\n\r",ch);
       send_to_char("{c|{W Wings         {c|{W 2000  {c|{W angelwings {c|{W fly                     {c|{x\n\r",ch);
       send_to_char("{c|{W Toughness     {c|{W 9000  {c|{W automatic  {c|{W toughness               {c|{x\n\r",ch);
       send_to_char("{c|{W GodStrength   {c|{W 9000  {c|{W automatic  {c|{W extra damcap            {c|{x\n\r",ch);
       send_to_char("{c|{W Scry          {c|{W 7500  {c|{W scry       {c|{W see location of someone {c|{x\n\r",ch);
       send_to_char("{c|{W Readaura      {c|{W 7500  {c|{W readaura   {c|{W read someones stats     {c|{x\n\r",ch);
       send_to_char("{c|{W Godlysight    {c|{W 7500  {c|{W godlysight {c|{W truesight               {c|{x\n\r",ch);
       send_to_char("{c|{W Speed         {c|{W 9000  {c|{W automatic  {c|{W dodge/hit more          {c|{x\n\r",ch);
       send_to_char("{c|{W Halo          {c|{W 15000 {c|{W anghalo    {c|{W hitroll/damroll + damcap{c|{x\n\r",ch);
       send_to_char("{c|{W MultiArm      {c|{W 50000 {c|{W multiarm   {c|{W stun someone in a fight {c|{x\n\r",ch);
       send_to_char("{c|{W Trueform      {c|{W 50000 {c|{W trueform   {c|{W like demonform          {c|{x\n\r",ch);
       send_to_char("{c|{W Etherform     {c|{W 25000 {c|{W etherform  {c|{W etherform               {c|{x\n\r",ch);
       send_to_char("{c|{W Shield        {c|{W 15000 {c|{W shield     {c|{W shield your aura        {c|{x\n\r",ch);
       send_to_char("{c|{W Wraith of God {c|{W 75000 {c|{W wraith     {c|{W ff/curse/web/etc.       {c|{x\n\r",ch);
       send_to_char("{c|{W Angfly        {c|{W 15000 {c|{W angfly     {c|{W travel command          {c|{x\n\r",ch);
       send_to_char("{c|{W Touch         {c|{W 50000 {c|{W touch      {c|{W changes vict alignment  {c|{xx\n\r",ch);
       send_to_char("{C*{c---------------{C*{c-------{C*{c------------{C*{c-------------------------{C*{x\n\r",ch);
/*       send_to_char("Wraith of God [75000]                                      \n\r",ch);*/
       return;
     }
     if (IS_ANGPOWER(ch, gift))
     {
       send_to_char("God has already given you that gift.\n\r",ch);
       return;
     }

     if (ch->pcdata->stats[DEMON_CURRENT] < cost)
     {
       send_to_char("You don't have enough cps to gift that.\n\r",ch);
       return;
     }
     SET_BIT(ch->pcdata->powers[APOWER_FLAGS], gift);
     ch->pcdata->stats[DEMON_CURRENT]   -= cost;
     if (victim != ch) send_to_char("You have been granted a gift from god.\n\r",ch);
     send_to_char("Ok.\n\r",ch);
     save_char_obj(ch);
     return;
 }

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

     argument = one_argument( argument, arg );

     if (IS_NPC(ch)) return;

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

     if (!IS_ANGPOWER( ch, ANG_WINGS))
     {
       send_to_char("God hasn't given you your wings.\n\r",ch);
       return;
     }

     if (arg[0] != '\0')
 {
     {
       send_to_char("\n\r",ch);
     }
       if (!str_cmp(arg,"spread") || !str_cmp(arg,"s"))
       {
         if (IS_ANGAFF(ch,ANG_SPREAD) )
         {
           send_to_char("Your wings are already spread.\n\r",ch);
           return;
         }
         send_to_char("You spread your wings and start flying.\n\r",ch);
         act("$n spreads its wings and starts to fly.\n\r",ch,NULL,NULL,TO_ROOM);
         SET_BIT(ch->pcdata->powers[APOWER_CURRENT], ANG_SPREAD);
         return;
       }
       else if (!str_cmp(arg,"unspread") || !str_cmp(arg,"u"))
       {
         if (!IS_ANGAFF(ch,ANG_SPREAD) )
         {
           send_to_char("Your wings aren't spread.\n\r",ch);
           return;
         }
         send_to_char("Your wings close up behind your back.\n\r",ch);
         act("$n's wings close up behind its back.",ch, NULL,NULL, TO_ROOM);
         REMOVE_BIT(ch->pcdata->powers[APOWER_CURRENT], ANG_SPREAD);
         return;
       }
       else
       {
         send_to_char("Do you want to SPREAD or CLOSE your wings?\n\r",ch);
         return;
       }
    }
   
      if (IS_ANGAFF(ch,ANG_WINGS) )
        {
         if (IS_ANGAFF(ch,ANG_SPREAD) )
         {
           send_to_char("Your wings close up behind your back.\n\r",ch);
           act("$n's wings close up behind its back.\n\r",ch,NULL,NULL,TO_ROOM);
           REMOVE_BIT(ch->pcdata->powers[APOWER_CURRENT], ANG_SPREAD);
         }
         send_to_char("Your wings dissapear behind your back.\n\r",ch);
         act("$n's wings disappear behind its back.",ch,NULL,NULL, TO_ROOM);
         REMOVE_BIT(ch->pcdata->powers[APOWER_CURRENT], ANG_WINGS);
         return;
       }
       send_to_char("Wings grow from your back.\n\r",ch);
       act("Wings grow from behind $n's back.",ch,NULL,NULL,TO_ROOM);
       SET_BIT(ch->pcdata->powers[APOWER_CURRENT], ANG_WINGS);
    if (!IS_SET(ch->affected_by,AFF_FLYING))
    {
    SET_BIT(ch->affected_by,AFF_FLYING);
    }
       return;
     }


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

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

  if (!IS_ANGPOWER(ch, ANG_GODLYSIGHT) )
  {
    send_to_char("God has not gifted you his sight.\n\r",ch);
    return;
  }

  if (IS_SET(ch->act, PLR_HOLYLIGHT) )
  {
    REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
    send_to_char("God stops assisting you with sight.\n\r",ch);
  }
  else
  {
    send_to_char("God answers your wishes and gives you his sight.\n\r",ch);
    SET_BIT(ch->act, PLR_HOLYLIGHT);
  }
  return;
}

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

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

  if (!IS_ANGPOWER(ch, ANG_ETHERFORM) )
  {
    send_to_char("God has not given you the power to turn ethereal.\n\r",ch);
    return;
  }

  if (IS_AFFECTED(ch, AFF_ETHEREAL) )
  {
    REMOVE_BIT(ch->affected_by, AFF_ETHEREAL);
    send_to_char("You shift back into the normal plane of existance.\n\r",ch);
  }
  else
  {
    send_to_char("You shift into the plane of angelic existance.\n\r",ch);
    SET_BIT(ch->affected_by, AFF_ETHEREAL);
  }
  return;
}

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

  one_argument( argument, arg );

  if (IS_NPC(ch))
  return;

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

  if ( arg[0] == '\0' )
  {
    send_to_char("Bestow the Wraith of god against whom?\n\r",ch);
    return;
  }

  if ( ( victim = get_char_room( ch, arg ) ) == NULL )
  {
    send_to_char("You can't seem to find them here.\n\r",ch);
    return;
  }

  if ( victim == ch )
  {
    send_to_char("God does not approve of suicide.\n\r",ch);
    return;
  }

  if ( !IS_ANGPOWER(ch, ANG_WRAITH_OF_GOD))
  {
    send_to_char("You don't have the Wraith of God to assist you.\n\r",ch);
    return;
  }
  
  if ( is_safe( ch, victim ))
  return;

  if ( IS_CLASS(victim, CLASS_ANGEL))
  {
    send_to_char("You cannot summon the Wraith of God on another angel!\n\r",ch);
    return;
  }

/*
    if ( (ch->pcdata->stats[ANGEL_TOTAL] < 5000 ))
    {
        send_to_char("It costs 5000 angel points to use this power..\n\r",ch);
        return;
    }
*/

  if ( IS_GOOD(victim))
 {
      dam = number_range(2500, 7500);
     if ( dam <= 7500 )
    {
      SET_BIT(victim->affected_by, AFF_CURSE);
      SET_BIT(victim->affected_by, AFF_FAERIE_FIRE);
      SET_BIT(victim->affected_by, AFF_WEBBED);
      }
 }
  if ( IS_EVIL(victim))
  {
      dam = number_range(8501,15000);

      if ( dam <= 7500 )
      {
      SET_BIT(victim->affected_by, AFF_CURSE);
      SET_BIT(victim->affected_by, AFF_FAERIE_FIRE);
      SET_BIT(victim->affected_by, AFF_WEBBED);
      }
  }
  else
  {
      dam = number_range(7501, 12000);

      if ( dam >= 7501);
      {
      SET_BIT(victim->affected_by, AFF_CURSE);
      SET_BIT(victim->affected_by, AFF_FAERIE_FIRE);
      SET_BIT(victim->affected_by, AFF_WEBBED);
      }
  }

  if (!IS_NPC(victim))
       dam /= 3;

  ch_printf( ch, "{wYour #.Wraith of {WGod{w strikes %s {B[{w%d{B]{x",
                 victim->name,
                 dam );
  ch_printf( victim, "{w%s's #.Wraith of {WGod{w strikes you! {B[{w%d{B]{x",
                 ch->name,
                 dam );
  hurt_person( ch, victim, dam, FALSE );
  multi_hit( ch, victim, TYPE_UNDEFINED );
  WAIT_STATE(ch, 12);
  return;
}

void do_touch( CHAR_DATA *ch, char *argument )
{
  CHAR_DATA *victim;
  char arg[MAX_INPUT_LENGTH];
  char buf[MAX_STRING_LENGTH];
  if (IS_NPC(ch))
  return;

  one_argument( argument, arg );

  if (!IS_CLASS(ch, CLASS_ANGEL))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  
  if ( arg[0] == '\0' )
  {
    send_to_char("Angel Touch whom?\n\r",ch);
    return;
  }
   
  if ( ( victim = get_char_room( ch, arg ) ) == NULL )
  {
    send_to_char("You can't seem to find them here.\n\r",ch);
    return;
  }
   
  if ( victim == ch )
  {
    send_to_char("God does not approve of suicide.\n\r",ch);
    return;
  }

  if (!IS_ANGPOWER(ch, ANG_TOUCH))
  {
    send_to_char("God has not given you the gift of touch.\n\r",ch);
    return;
  }

  if ( IS_EVIL(victim))
  {
    send_to_char("They are already evil!\n\r",ch);
    return;
  }

  if ( IS_GOOD(victim))
  { 
    victim->alignment = -1000;
  }

  if (!IS_GOOD(victim) && (!IS_EVIL(victim)))
  {
    victim->alignment = -1000;
  }
  sprintf(buf,"You SCREAM as %s touches you.\n\rYour body and mind becomes more evil.\n\r",ch->name);
  send_to_char(buf,victim);
  sprintf(buf,"%s SCREAMS as you touch them.\n\rTheir body and mind becomes more evil.\n\r",victim->name);
  send_to_char(buf,ch);
  return;
}

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

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

  if (!IS_ANGPOWER(ch, ANG_PROTECTION_OF_GOD))
  {
    send_to_char("God has not given you the gift of his protection.\n\r",ch);
    return;
  }

  if ( IS_AFFECTED(ch, AFF_ANGELPROTECT))
  {
    REMOVE_BIT(ch->affected_by, AFF_ANGELPROTECT);
    send_to_char("God stops protecting you from attacks.\n\r",ch);
  }
  else
  {
    send_to_char("God starts protecting you from attacks.\n\r",ch);
    SET_BIT(ch->affected_by, AFF_ANGELPROTECT);
  }
  return;
}
*/

void do_trueform( CHAR_DATA *ch, char *argument )
{
    char buf [MAX_STRING_LENGTH];
        
    if (IS_NPC(ch)) return;
        
    if (!IS_CLASS(ch, CLASS_ANGEL))
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }
     
    if (!IS_ANGPOWER( ch, ANG_TRUEFORM) && IS_CLASS(ch,CLASS_ANGEL))
    {
        send_to_char("You are not gifted in trueform.\n\r",ch);
        return;
    }   
        if (ch->mounted == IS_RIDING) do_dismount(ch,"");
      
        if ( IS_SET(ch->polyaff, POLY_ANGELFORM) )
    {
        act( "You change back into human form.", ch, NULL, NULL, TO_CHAR );
        act( "$n changes back into human form.", ch, NULL, NULL, TO_ROOM );
        REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
        REMOVE_BIT(ch->polyaff, POLY_ANGELFORM);
        REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED);
        clear_stats(ch);
        free_string( ch->morph );
        ch->morph = str_dup( "" );  
       return; 
 }   
  else if ( !IS_SET(ch->polyaff, POLY_ANGELFORM) )
    {
        act( "You are struck by holy light and turn into a true angel.", ch, NULL, NULL, TO_CHAR );
        act( "$n is struck by holy light and turns into a true angel.", ch, NULL, NULL, TO_ROOM );
        SET_BIT(ch->polyaff, POLY_ANGELFORM);
        SET_BIT(ch->affected_by, AFF_POLYMORPH);
        SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED);
        sprintf(buf, "%s, the radiant angel", ch->name);
        free_string( ch->morph );
        ch->morph = str_dup( buf );
        return;
    }
    else
        send_to_char( "ANGELFORM: The Power to show your true self.\n\r", ch );
    return;
}

void do_angellist( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    char lord[MAX_INPUT_LENGTH];
    CHAR_DATA *gch;

    one_argument( argument, arg );

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

    if (IS_CLASS(ch, CLASS_ANGEL)) strcpy(lord,ch->name);
        else strcpy(lord,ch->lord);
    sprintf( buf, "The Angels of %s:\n\r", lord );
    send_to_char( buf, ch );
    send_to_char("[      Name      ] [ Hits ] [ Mana ] [ Move ] [  Exp  ] [   Angel   Points   ]\n\r", ch );
    for ( gch = char_list; gch != NULL; gch = gch->next )
    {
        if ( IS_NPC(gch) ) continue;
        if ( !IS_CLASS(gch, CLASS_ANGEL)) 
            continue;
        if ( !str_cmp(ch->clan,gch->clan) )
        {
            sprintf( buf,
            "[%-16s] [%-6ld] [%-6ld] [%-6ld] [%7d] [ %-9d%9d ]\n\r",
                capitalize( gch->name ),
                gch->hit,gch->mana,gch->move,
                gch->exp, gch->pcdata->stats[ANGEL_CURRENT], gch->pcdata->stats[ANGEL_TOTAL]);
                send_to_char( buf, ch );
        }
    }
    return;
}

void do_multiarm( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    int dam = number_range(100,200) + char_damroll(ch);

    if (dam < 10) dam = 10;
        
    if ( IS_NPC(ch) ) 
	return;
        
    if (!IS_ANGPOWER( ch, ANG_MULTIARM) && IS_CLASS(ch,CLASS_ANGEL)) 
    {
	send_to_char("God hasn't given you the gift of multiarm.\n\r",ch);
        return;
    }
    if ( !IS_CLASS(ch, CLASS_ANGEL) )   
    {
        send_to_char("Huh?\n\r", ch);
        return;
    }
        
    if ( ( victim = ch->fighting ) == NULL )
    {
        send_to_char( "You aren't fighting anyone.\n\r", ch );
        return;
    }
        
    if (is_safe(ch, victim))
        return;
        
            special_move(ch,victim);
            special_move(ch,victim);
            special_move(ch,victim);
            special_move(ch,victim);
    return;
}

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

    argument = one_argument( argument, arg );

    if (IS_NPC(ch)) return;

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

    if (ch->pcdata->stats[UNI_GEN] > 2 && !IS_SET(ch->special, SPC_PRINCE))
    {
        send_to_char("You are not able to purify.\n\r",ch);
        return;
    }

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

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

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

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

    if ( victim->class != 0)
    {
	send_to_char("They are already classed.\n\r",ch);
	return;
    }
    if ( victim->level != LEVEL_AVATAR && !IS_IMMORTAL(victim) )
    {
        send_to_char( "You can only purify avatars.\n\r", ch );
        return;
    }

        if (!IS_GOOD(victim)) {
        send_to_char("They must be good!\n\r", ch );
                return;}

    act("You make $N an angel!", ch, NULL, victim, TO_CHAR);
    act("$n makes $N an angel!", ch, NULL, victim, TO_NOTVICT);
    act("$n makes you an angel!", ch, NULL, victim, TO_VICT);
    victim->class=0;
    victim->class=CLASS_ANGEL;

    if (IS_CLASS(victim, CLASS_VAMPIRE)) do_mortalvamp(victim,"");
    REMOVE_BIT(victim->act, PLR_HOLYLIGHT);
    REMOVE_BIT(victim->act, PLR_WIZINVIS);
    REMOVE_BIT(victim->special, SPC_SIRE);
    REMOVE_BIT(victim->special, SPC_ANARCH);
    victim->pcdata->stats[UNI_RAGE] = 0;
    free_string(victim->lord);
    victim->clan=str_dup(ch->clan); 
    if (IS_CLASS(ch,CLASS_ANGEL)) victim->lord=str_dup(ch->name);
    else victim->lord=str_dup(ch->lord);

    save_char_obj(ch);
    save_char_obj(victim);
    return;
}

void do_anghalo( CHAR_DATA *ch, char *argument )
{
    if (IS_NPC(ch)) return;
    
    if (!IS_ANGEL(ch) )
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }
 
    if (!IS_ANGPOWER( ch, ANG_HALO) && IS_CLASS(ch,CLASS_ANGEL))
    {
        send_to_char("God hasn't granted you a halo.\n\r",ch);
        return;
    }

    if (IS_ITEMAFF(ch,ITEMA_ANGHALO) )
    {
        send_to_char("The halo floating above your head disappears.\n\r",ch);
        act("The halo floating above $n's head disappears.", ch, NULL, NULL, TO_ROOM);
        REMOVE_BIT(ch->itemaffect, ITEMA_ANGHALO);
        ch->damroll -= 500;
        ch->hitroll -= 500;
        return;
    }
    send_to_char("A halo appears above your head.\n\r",ch);
    act("A halo appears above $n's head.", ch, NULL, NULL, TO_ROOM);
    SET_BIT(ch->itemaffect, ITEMA_ANGHALO);
    ch->damroll += 500;
    ch->hitroll += 500;
    return;
}

void do_angfly( CHAR_DATA *ch, char *argument )
{
    char      arg [MAX_INPUT_LENGTH];
    CHAR_DATA *victim;
    
    argument = one_argument( argument, arg );
    
    if (IS_NPC(ch)) return;
     
  if ( ch->move < 2000)
  {
    stc("You don't have enough movement points!\n\r",ch);
    return;
  }

    if (IS_CLASS(ch, CLASS_ANGEL))
    {
        if (!IS_ANGPOWER( ch, ANG_TRAVEL))
        {
            send_to_char("You haven't been granted the gift of angfly.\n\r",ch);
            return;
        }
    }
    else
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }
    if (!str_cmp( arg, "heaven" ) )
    {
        send_to_char("You spread your wings and begin to fly away.\n\r",ch);
        act("$n spreads its wings and begins to fly away.\n\r",ch,NULL,NULL,TO_ROOM);
        char_from_room(ch);
        char_to_room(ch, get_room_index(ROOM_VNUM_HEAVEN));
        do_look(ch,"");
        send_to_char("You slowly float to the ground after a long trip.\n\r",ch);
        act("$n slowly floats to the ground after a long trip.\n\r",ch,NULL,NULL,TO_ROOM);
        return;
    }
    
    if ( ( victim = get_char_world( ch, arg ) ) == NULL )
    {
        send_to_char( "Nobody by that name.\n\r", ch );
        return;
    }
        
    if (IS_IMMUNE(victim, IMM_TRAVEL))
    {
        send_to_char("I don't think they want you to do that.\n\r",ch);
        return;
    }
    
    if (IS_IMMUNE(victim, IMM_SUMMON))
    {
        send_to_char("I don't think they want you to do that.\n\r",ch);
        return;
    }
    
    if ( victim == ch ) {
                send_to_char( "Nothing happens.\n\r", ch);
                return; }
    
    if (victim->in_room == NULL)
    {
        send_to_char( "Nothing happens.\n\r", ch );
        return;
    }
     
    send_to_char("You spread your wings and begin to fly away.\n\r",ch);
    act("$n spreads its wings and begins to fly away.",ch,NULL,NULL,TO_ROOM);
    char_from_room(ch);
    char_to_room(ch,victim->in_room);
    do_look(ch,"");
    send_to_char("You appear at your location and slowly float to the ground.\n\r",ch);
    act("You hear wings flapping as you see $n float the ground.",ch,NULL,NULL,TO_ROOM);
    ch->move -= 2000;
    return;
}    

void do_chimera( CHAR_DATA *ch, char * argument )
{
   char buf [MIL];
      if( !IS_CLASS(ch,CLASS_ANGEL) )
      {
	stc("Huh?\n\r",ch);
	return;
      }
    if (!IS_ANGPOWER( ch, ANG_CHIMERA) && IS_CLASS(ch,CLASS_ANGEL))
    {
        send_to_char("You are not gifted in trueform.\n\r",ch);
        return;
    }   
    if( !IS_POLYAFF(ch,POLY_ANGELFORM))
    {
	send_to_char("You must be a in trueform first.\n\r",ch);
	return;
    }
      

    if (ch->mounted == IS_RIDING) do_dismount(ch,"");
      
    if ( IS_SET(ch->polyaff, POLY_ZULO) )
    {
        act( "You change back into true angel form.", ch, NULL, NULL, TO_CHAR);
        act( "$n changes back into true angel form.", ch, NULL, NULL, TO_ROOM);
        REMOVE_BIT(ch->polyaff, POLY_ZULO );
        clear_stats(ch);
	sprintf( buf, "%s, the radiant angel.", ch->name );
        free_string( ch->morph );
        ch->morph = str_dup( buf );  
       return; 
  }   
  else if ( !IS_SET(ch->polyaff, POLY_ZULO) )
  {
	SET_BIT(ch->polyaff, POLY_ZULO);
	sprintf( buf, "%s, the chimera", ch->name );
        free_string( ch->morph );
        ch->morph = str_dup( buf );
	return;
  }
  else
	stc("CHIMERA: Holy warrior\n\r",ch);
  return;
}