mc25b/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen  *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/
 /***************************************************************************
 *                                 _/                            _/        *
 *      _/_/_/  _/_/      _/_/_/  _/    _/_/    _/    _/    _/_/_/         *
 *     _/    _/    _/  _/        _/  _/    _/  _/    _/  _/    _/          *
 *    _/    _/    _/  _/        _/  _/    _/  _/    _/  _/    _/           *
 *   _/    _/    _/    _/_/_/  _/    _/_/      _/_/_/    _/_/_/            *
 ***************************************************************************
 * Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius),                 *
 * Additional credits are in the help file CODECREDITS                     *
 * All Rights Reserved.                                                    *
 ***************************************************************************/

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "interp.h"

void do_reveal(CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *ich;

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE))
  {
    send_to_char("Huh?!?.\n\r",ch);
    return;
  }
  if (ch->mana < 5000)
  {
    send_to_char("You don't have the mystical energies to do this.\n\r",ch);
    return;
  } 
  act( "$n mumles a few words, and you are suddenly blinded by a flash.", ch, NULL, NULL, TO_ROOM );   
  send_to_char( "You reveal everything hidden in the room.\n\r", ch );
  for ( ich = ch->in_room->people; ich != NULL; ich = ich->next_in_room )
  {
    if (ich==ch || ich->trust > 6) continue;
    affect_strip ( ich, gsn_invis );
    affect_strip ( ich, gsn_mass_invis );
    affect_strip ( ich, gsn_sneak );
    if (IS_AFFECTED(ich, AFF_HIDE))      REMOVE_BIT(ich->affected_by, AFF_HIDE);
    if (IS_SET(ich->affected_by, AFF_INVISIBLE)) REMOVE_BIT(ich->affected_by, AFF_INVISIBLE);
    if (IS_SET(ich->affected_by, AFF_SNEAK))     REMOVE_BIT(ich->affected_by, AFF_SNEAK);
    if (IS_SET(ich->act, PLR_WIZINVIS))          REMOVE_BIT(ich->act, PLR_WIZINVIS);
    if (IS_SET(ich->affected_by, AFF_SHIFT))     REMOVE_BIT(ich->affected_by, AFF_SHIFT);
    if (IS_SET(ich->extra, EXTRA_EARTHMELD))     REMOVE_BIT(ich->extra, EXTRA_EARTHMELD);
    if (IS_AFFECTED(ch,AFF_SHADOWPLANE)) REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE);
    if (IS_AFFECTED(ch, AFF_PEACE)) REMOVE_BIT(ch->affected_by, AFF_PEACE);
    if (IS_AFFECTED(ch,AFF_ETHEREAL)) REMOVE_BIT(ch->affected_by, AFF_ETHEREAL);

    if (IS_CLASS(ich, CLASS_DROW) && IS_SET(ich->newbits, NEW_DARKNESS))
    {
      REMOVE_BIT(ich->newbits, NEW_DARKNESS);
      REMOVE_BIT(ich->in_room->room_flags, ROOM_TOTAL_DARKNESS);
    }
    send_to_char("You are suddenly very visible.\n\r",ich);
  }
  ch->mana -= 5000;
  return;
}

void do_magearmor( CHAR_DATA *ch, char *argument )
{
  OBJ_INDEX_DATA *pObjIndex;
  OBJ_DATA *obj;
  char arg[MAX_INPUT_LENGTH];
  int vnum = 0;

  argument = one_argument( argument, arg );
  if (IS_NPC(ch)) return;
 	if(!IS_IMMORTAL(ch))
	{
    if( !IS_CLASS(ch, CLASS_MAGE) )
    {
      send_to_char("What?\n\r",ch);
      return;
    }
	}
  if (arg[0] == '\0')
  {
    send_to_char("Please specify which piece of mage armor you wish to make: Dagger Staff\n\r"
                 "Ring Collar Robe Cap Leggings Boots Gloves Sleeves Cape Belt Bracer Mask.\n\r",ch);
    return;
  }
  if ( ch->practice < 100 )
  {
    send_to_char("It costs 100 points of primal to create mage equipment.\n\r",ch);
    return;
  }
  if (!str_cmp(arg,"mask")) vnum = 33013;
  else if (!str_cmp(arg,"belt")) vnum = 33011;
  else if (!str_cmp(arg,"cape")) vnum = 33010;
  else if (!str_cmp(arg,"ring")) vnum = 33002;
  else if (!str_cmp(arg,"collar")) vnum = 33003;
  else if (!str_cmp(arg,"robe")) vnum = 33004;
  else if (!str_cmp(arg,"cap")) vnum = 33005;
  else if (!str_cmp(arg,"leggings")) vnum = 33006;
  else if (!str_cmp(arg,"boots")) vnum = 33007;
  else if (!str_cmp(arg,"gloves")) vnum = 33008;
  else if (!str_cmp(arg,"sleeves")) vnum = 33009;
  else if (!str_cmp(arg,"bracer")) vnum = 33012;
  else if (!str_cmp(arg,"staff")) vnum = 33000;
  else if (!str_cmp(arg,"dagger")) vnum = 33001;
  else
  {
    do_magearmor(ch,"");
    return;
  }
  if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
  {
    send_to_char("Missing object, please inform a God.\n\r",ch);
    return;
  }
  obj = create_object(pObjIndex, 50);
  obj->questowner = str_dup(ch->pcdata->switchname);
  obj->ownerid = ch->pcdata->playerid;
  obj_to_char(obj, ch);
  ch->practice -= 100;
  act("$p appears in your hands.",ch,obj,NULL,TO_CHAR);
  act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM);
  return;
}

void do_chaosmagic (CHAR_DATA *ch, char *argument)
{
  char arg[MAX_STRING_LENGTH];
  CHAR_DATA *victim;
  int sn, crandom, level;

  argument=one_argument(argument,arg);
  level = ch->spl[RED_MAGIC]/4;

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE) && !IS_CLASS(ch, CLASS_LICH))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (IS_CLASS(ch, CLASS_LICH) && ch->pcdata->powers[CHAOS_MAGIC] < 1)
  {
    send_to_char("Not yet, not yet.\n\r",ch);
    return;
  }
  if (ch->mana < 1500)
  {
    send_to_char("You need more mana.\n\r",ch);
    return;
  }
  if (ch->in_room != NULL)
  {
    if ( IS_SET(ch->in_room->room_flags,ROOM_SAFE) )
    {
      send_to_char( "You cannot invoke the forces of chaos in a safe room.\n\r", ch );
      return;
    }
  }
  if (arg[0] == '\0' && ch->fighting != NULL) victim = ch->fighting;
  else if ((victim = get_char_room(ch, NULL, arg)) == NULL)
  {
    send_to_char("They are not here.\n\r", ch );
    return;
  }
  crandom = number_range(1,12);
  if (crandom == 1) sn = skill_lookup("spirit kiss");
  else if (crandom == 2) sn = skill_lookup("desanct");
  else if (crandom == 3) sn = skill_lookup("imp heal");
  else if (crandom == 4) sn = skill_lookup("imp fireball");
  else if (crandom == 5) sn = skill_lookup("imp faerie fire");
  else if (crandom == 6) sn = skill_lookup("imp teleport");
  else if (crandom == 7) sn = skill_lookup("change sex");
  else if (crandom == 8) sn = skill_lookup("shield");
  else if (crandom == 9) sn = skill_lookup("readaura");
  else if (crandom == 10) sn = skill_lookup("earthquake");
  else if (crandom == 11) sn = skill_lookup("gate");
  else if (crandom == 12) sn = skill_lookup("dispel magic");
  else sn = 0;
  if (sn  > 0) (*skill_table[sn].spell_fun) (sn,level,ch,victim);
  ch->mana -= 1500;
  WAIT_STATE(ch,6);
  return;
}

/* Syntax : chant <type> <color> <target>
 * ex. chant bless red self 
 */
void do_chant (CHAR_DATA *ch, char *argument)
{
  char arg1[MAX_STRING_LENGTH];
  char arg2[MAX_STRING_LENGTH];
  char buf1[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char buf3[MAX_STRING_LENGTH];
  CHAR_DATA *victim;
  AFFECT_DATA af;
  int i = 0, dam = 0, count = 0, sn = 0;
  int red_magic = ch->spl[RED_MAGIC];
  int blue_magic = ch->spl[BLUE_MAGIC];
  int green_magic = ch->spl[GREEN_MAGIC];
  int purple_magic = ch->spl[PURPLE_MAGIC];
  int yellow_magic = ch->spl[YELLOW_MAGIC];
  int magic_power = ch->spl[RED_MAGIC] + ch->spl[BLUE_MAGIC] + ch->spl[GREEN_MAGIC] + ch->spl[PURPLE_MAGIC] + ch->spl[YELLOW_MAGIC];
    
  argument=one_argument(argument,arg1);
  strcpy(arg2,argument);

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE) && !IS_CLASS(ch, CLASS_LICH))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (arg1[0] == '\0')
  {  
    send_to_char("Syntax : chant <bless/curse/damage/heal> <target>.\n\r", ch);
    return;
  }  
  if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) 
  {
    magic_power +=100;
    red_magic +=20;
    yellow_magic +=20;
    purple_magic +=20;
    green_magic +=20;
    blue_magic +=20;
  }
  if (!str_cmp(arg1, "heal"))
  {
    if (arg2[0] == '\0') victim = ch;
    else if ((victim = get_char_room(ch, NULL, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana < 4500)
    {
      send_to_char("You need 4500 mana.\n\r",ch);
      return;
    }    
    act("$n channels lifeforce from the five elements into $N.",ch,NULL,victim,TO_NOTVICT);
    act("You channel lifeforce from the five elements into $N.",ch,NULL,victim,TO_CHAR);
    act("$n channels lifeforce from the five elements into you.",ch,NULL,victim,TO_VICT);
    WAIT_STATE(ch,8);
    ch->mana -= 4500;
    victim->hit = UMIN(victim->hit + (magic_power * 1.5), victim->max_hit);
    return;
  }
  else if (!str_cmp(arg1, "damage"))
  {
    if (arg2[0] == '\0' && ch->fighting != NULL) victim = ch->fighting;
    else if ((victim = get_char_room(ch, NULL, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana <5000)
    {
      send_to_char("You need 5000 mana.\n\r",ch);
      return;
    }
    if (victim == ch)
    {
      send_to_char("You really don't want to hurt yourself.\n\r", ch );
      return;
    }
    if (is_safe(ch, victim)) return;
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room)
      return;
    if (IS_AFFECTED(ch, AFF_PEACE)) REMOVE_BIT(ch->affected_by, AFF_PEACE);
    if (victim->position > POS_STUNNED)
    {
      if (ch->fighting == NULL) set_fighting(ch, victim, TRUE);
      if (victim->fighting == NULL) set_fighting(victim, ch, FALSE);
    }
    WAIT_STATE(ch,8);
    ch->mana -= 5000;
    dam = number_range(red_magic*4, red_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    xprintf(buf1,"$n calls for the forces of #Rhell#n to destroy $N [#C%d#n]" , dam);
    xprintf(buf2,"You call for the forces of #Rhell#n to destroy $N [#C%d#n]" , dam);
    xprintf(buf3,"$n calls for the forces of #Rhell#n to destroy you [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(blue_magic*4, blue_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    xprintf(buf1,"$n summons a supernatural #Bstorm#n to strike $N with lightning [#C%d#n]" , dam);
    xprintf(buf2,"You summon a supernatural #Bstorm#n to strike $N with lightning [#C%d#n]" , dam);
    xprintf(buf3,"$n summons a supernatural #Bstorm#n to strike you with lightning [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(green_magic*4, green_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    xprintf(buf1,"$n calls for #Gthorns#n to grow from the earth and pierce $N [#C%d#n]" , dam);
    xprintf(buf2,"You call for #Gthorns#n to grow from the earth and pierce $N [#C%d#n]" , dam);
    xprintf(buf3,"$n calls for #Gthorns#n to grow from the earth and pierce You [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(purple_magic*4, purple_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    xprintf(buf1,"$n calls on the powers of the #punderdark#n to shatter $N's bones [#C%d#n]" , dam);
    xprintf(buf2,"You call on the powers of the #punderdark#n to shatter $N's bones [#C%d#n]" , dam);
    xprintf(buf3,"$n calls on the powers of the #punderdark#n to shatter your bones [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(yellow_magic*4, yellow_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    xprintf(buf1,"$n spews forth a shower of #Yacid#n striking $N [#C%d#n]" , dam);
    xprintf(buf2,"you spew forth a shower of #Yacid#n striking $N [#C%d#n]" , dam);
    xprintf(buf3,"$n spews forth a shower of #Yacid#n striking you [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    return;
  }
  else if (!str_cmp(arg1, "bless"))
  {
    if ((victim = get_char_room(ch, NULL, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana <5500)
    {
      send_to_char("You need 5500 mana.\n\r",ch);
      return;
    }
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room)
      return;
    count = 0;
    for (i = 0; i<5 ; i++)
    {
      if (i==0) {sn = skill_lookup("purple sorcery");dam=purple_magic;}
      if (i==1) {sn = skill_lookup("yellow sorcery");dam=yellow_magic;}
      if (i==2) {sn = skill_lookup("green sorcery");dam=green_magic;}
      if (i==3) {sn = skill_lookup("red sorcery");dam=red_magic;}
      if (i==4) {sn = skill_lookup("blue sorcery");dam=blue_magic;}
      if (is_affected(victim, sn))
        continue;
      
      count++;
      
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HIT;
      af.modifier  = dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_AC;
      af.modifier  = -dam/2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MOVE;
      af.modifier  = dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MANA;
      af.modifier  = dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HITROLL;
      af.modifier  = dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_DAMROLL;
      af.modifier  = dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
    }
    ch->mana -= count * 1100;
    WAIT_STATE(ch,6);
    xprintf(buf1, "You bless $N with the power of the elements.");
    xprintf(buf2, "The power of the five elements fills your body.");
    act(buf1, ch, NULL, victim, TO_CHAR);
    act(buf2, ch, NULL, victim, TO_VICT);
    return;
  }
  else if (!str_cmp(arg1, "curse"))
  {
    if ((victim = get_char_room(ch, NULL, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana <4500)
    {
      send_to_char("You need 4500 mana.\n\r",ch);
      return;
    }
    if (victim->level < 3)
    {
      send_to_char("Not on mortal, thier bodies cant handles the strain....poor little buggers.\n\r",ch);
      return;
    }
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room)
      return;
    count = 0;
    for (i = 0;i<5;i++)
    {
      if (i==0) {sn = skill_lookup("purple sorcery");dam=purple_magic;}
      if (i==1) {sn = skill_lookup("yellow sorcery");dam=yellow_magic;}
      if (i==2) {sn = skill_lookup("green sorcery");dam=green_magic;}
      if (i==3) {sn = skill_lookup("red sorcery");dam=red_magic;}
      if (i==4) {sn = skill_lookup("blue sorcery");dam=blue_magic;}
      if (is_affected(victim, sn))
        continue;
      
      count++;

      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HIT;
      af.modifier  = -dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_AC;
      af.modifier  = dam/2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MOVE;
      af.modifier  = -dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MANA;
      af.modifier  = -dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HITROLL;
      af.modifier  = -dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_DAMROLL;
      af.modifier  = -dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
    }
    ch->mana -= count * 900;
    WAIT_STATE(ch,6);
    xprintf(buf1, "You curse $N with the power of the elements.");
    xprintf(buf2, "The power of the five elements wrecks your body.");
    act(buf1, ch, NULL, victim, TO_CHAR);
    act(buf2, ch, NULL, victim, TO_VICT);
    return;      
  }
  send_to_char("Syntax : chant <bless/curse/damage/heal> <target>.\n\r", ch);
  return;
}

/* Syntax : invoke <list/learn/spell> <none/power/power>
 * ex. invoke learn stoneskin
 * ex. invoke spell stoneskin
 */
void do_invoke (CHAR_DATA *ch, char *argument)
{
  char arg1[MAX_STRING_LENGTH];
  char arg2[MAX_STRING_LENGTH];
  char buf[MAX_STRING_LENGTH];
  int shieldcost=25;
  int steelshieldcost=5;
  int beastcost=10;
  int illusioncost=5;
  int defshieldcost=5;

  argument=one_argument(argument,arg1);
  strcpy(arg2,argument);

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (arg1[0]== '\0')
  {
    if(ch->pcdata->powers[PINVOKE] > 0)
      send_to_char("* You have the power to teleport yourself anywhere.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 1)
      send_to_char("* You know how to invoke mageshields.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 2)
      send_to_char("* You have the power to scry on far away places.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 3)
      send_to_char("* You can discharge your shields in a shower of power.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 4)
      send_to_char("* A deflector shield defends you in combat.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 5)
      send_to_char("* You have the power to turn your skin into solid steel.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 7)
      send_to_char("* You have mastered the power of illusions.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 8)
      send_to_char("* You can invoke the power of the beast.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 6 && ch->pcdata->powers[PINVOKE] < 10)
      send_to_char("* You have a deeper understanding of magic.\n\r",ch);
    if(ch->pcdata->powers[PINVOKE] > 9)
      send_to_char("* You have mastered the art of magic.\n\r",ch);
    xprintf(buf,"invokes Learned (%d).\n\r", ch->pcdata->powers[PINVOKE]);
    send_to_char(buf,ch);
    return;  
  }
  if (!str_cmp(arg1,"learn"))
  {
    int cost = (ch->pcdata->powers[PINVOKE]+1) * 20;
    if ( ch->pcdata->powers[PINVOKE] >= 10 )
    {
      send_to_char("You have already gained all the known invokes.\n\r",ch);
      return;
    }
    else if (cost > ch->practice)
    {
      send_to_char("you don't have enough primal.\n\r",ch);
      return;
    }
    else
    {
      ch->pcdata->powers[PINVOKE] +=1;
      ch->practice -= cost;
      send_to_char("You gain a deeper understanding of the mystical powers.\n\r",ch);
    }
    return;
  }
  else if (!str_cmp(arg1,"steelshield"))
  {
    if (ch->pcdata->powers[PINVOKE] < 6)
    {
      send_to_char("You don't have that invoke yet.\n\r",ch);
      return;
    }
    if (!IS_ITEMAFF(ch, ITEMA_STEELSHIELD) && ch->practice >= steelshieldcost)
    {
      SET_BIT(ch->itemaffect, ITEMA_STEELSHIELD);
      ch->practice -= steelshieldcost;
      send_to_char("Your skin turns to solid steel.\n\r",ch);
      return;
    }
    else if (IS_ITEMAFF(ch, ITEMA_STEELSHIELD))
    {
      send_to_char("Your skin cannot become any harder.\n\r",ch);
      return;
    }
    else
    {
      send_to_char("it costs 5 primal to activate steelskin.\n\r",ch);
      return;
    }
  }
  else if (!str_cmp(arg1,"beast"))
  {
    if (ch->pcdata->powers[PINVOKE] < 9)
    {
      send_to_char("You don't have that invoke yet.\n\r",ch);
      return;
    }
    if (!IS_ITEMAFF(ch, ITEMA_BEAST) && ch->practice >= beastcost)
    {
      SET_BIT(ch->itemaffect, ITEMA_BEAST);
      ch->practice -= beastcost;
      send_to_char("Your let your inner beast take control over your actions.\n\r",ch);
      return;
    }
    else if (IS_ITEMAFF(ch, ITEMA_BEAST))
    {
      send_to_char("You feel the beast inside of you roar, but nothing else happens.\n\r",ch);
      return;
    }
    else
    {
      send_to_char("it costs 10 primal to let the beast take over.\n\r",ch);
      return;
    }
  }
  else if (!str_cmp(arg1,"illusions"))
  {
    if (ch->pcdata->powers[PINVOKE] < 8)
    {
      send_to_char("You don't have that invoke yet.\n\r",ch);
      return;
    }
    if (!IS_ITEMAFF(ch, ITEMA_ILLUSIONS) && ch->practice >= illusioncost)
    {
      SET_BIT(ch->itemaffect, ITEMA_ILLUSIONS);
      ch->practice -= illusioncost;
      send_to_char("You conjure several images of yourself, making it impossibly to tell which is really you.\n\r",ch);
      return;
    }
    else if (IS_ITEMAFF(ch, ITEMA_ILLUSIONS))
    {
      send_to_char("You cannot summon any more illusions.\n\r",ch);
      return;
    }
    else
    {
      send_to_char("it costs 5 primal to invoke the illusions of yourself.\n\r",ch);
      return;
    }
    return;
  }
  else if (!str_cmp(arg1,"deflector"))
  {
    if (ch->pcdata->powers[PINVOKE] < 5)
    {
      send_to_char("You don't have that invoke yet.\n\r",ch);
      return;
    }
    if (!IS_ITEMAFF(ch, ITEMA_DEFLECTOR) && ch->practice >= defshieldcost)
    {
      SET_BIT(ch->itemaffect, ITEMA_DEFLECTOR);
      ch->practice -= defshieldcost;
      send_to_char("A shield appears in the air, preventing people from hitting you.\n\r",ch);
      return;
    }
    else if (IS_ITEMAFF(ch, ITEMA_DEFLECTOR))
    {
      send_to_char("You cannot summon any more shields.\n\r",ch);
      return;
    }
    else
    {
      send_to_char("it costs 5 primal to summon a shield.\n\r",ch);
      return;
    }
  }
  else if (!str_cmp(arg1,"mageshield") || !str_cmp(arg1,"shield"))
  {
    if (ch->pcdata->powers[PINVOKE] < 2)
    {
      send_to_char("You don't have that invoke yet.\n\r",ch);
      return;
    }
    if (!IS_SET(ch->newbits, NEW_MULTIARMS))
      SET_BIT(ch->newbits, NEW_MULTIARMS);
    if (!IS_ITEMAFF(ch, ITEMA_MAGESHIELD) && ch->practice>=shieldcost)
    {
      SET_BIT(ch->itemaffect, ITEMA_MAGESHIELD);
      ch->practice -= shieldcost;
      send_to_char("A layer of mystic shields envelopes your body.\n\r",ch);
      return;
    }
    else if (IS_ITEMAFF(ch, ITEMA_MAGESHIELD))
    {
      send_to_char("You are allready shielded.\n\r",ch);
      return;
    }
    else
    {
      send_to_char("The cost is 25 primal.\n\r",ch);
      return;
    }
  }
  else if (!str_cmp(arg1,"all"))
  {
    int totalcost = 0;
    if (ch->pcdata->powers[PINVOKE] < 9)
    {
      send_to_char("You don't have all invokes, so theres no point in invoking them all.\n\r",ch);
      return;
    }
    if (!IS_ITEMAFF(ch, ITEMA_MAGESHIELD)) totalcost += shieldcost;
    if (!IS_ITEMAFF(ch, ITEMA_DEFLECTOR)) totalcost += defshieldcost;
    if (!IS_ITEMAFF(ch, ITEMA_ILLUSIONS)) totalcost += illusioncost;
    if (!IS_ITEMAFF(ch, ITEMA_BEAST)) totalcost += beastcost;
    if (!IS_ITEMAFF(ch, ITEMA_STEELSHIELD)) totalcost += steelshieldcost;
    if (totalcost == 0)
    {
      send_to_char("You already have all invokes on.\n\r",ch);
      return;
    }
    if (ch->practice < totalcost)
    {
      send_to_char("You don't have the primal.\n\r",ch);
      return;
    }
    if (!IS_ITEMAFF(ch, ITEMA_MAGESHIELD)) SET_BIT(ch->itemaffect, ITEMA_MAGESHIELD);
    if (!IS_ITEMAFF(ch, ITEMA_DEFLECTOR)) SET_BIT(ch->itemaffect, ITEMA_DEFLECTOR);
    if (!IS_ITEMAFF(ch, ITEMA_ILLUSIONS)) SET_BIT(ch->itemaffect, ITEMA_ILLUSIONS);
    if (!IS_ITEMAFF(ch, ITEMA_BEAST)) SET_BIT(ch->itemaffect, ITEMA_BEAST);
    if (!IS_ITEMAFF(ch, ITEMA_STEELSHIELD)) SET_BIT(ch->itemaffect, ITEMA_STEELSHIELD);
    send_to_char("You invoke all your powers.\n\r",ch);
    ch->practice -= totalcost;
    return;
  }
  send_to_char("invoke <learn/mageshield/deflector/steelshield/illusions/beast/all>.\n\r",ch);
  return;
}

/* syntax : magics
 * shows all class powers in effect
 */
void do_magics (CHAR_DATA *ch, char *argument)
{
  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (IS_ITEMAFF(ch, ITEMA_MAGESHIELD))
    send_to_char("* Your skin is covered in a layer of mystical energies.\n\r",ch);
  if (IS_ITEMAFF(ch, ITEMA_BEAST))
    send_to_char("* Your inner beast is in control of your actions.\n\r",ch);
  if (IS_ITEMAFF(ch, ITEMA_STEELSHIELD))
    send_to_char("* Your skin is solid steel.\n\r",ch);
  if (IS_ITEMAFF(ch, ITEMA_DEFLECTOR))
    send_to_char("* A shield hovers in the air, defending you.\n\r",ch);
  if (IS_ITEMAFF(ch, ITEMA_ILLUSIONS))
    send_to_char("* Several images of you stand by your side.\n\r",ch);
  return;
}

/* syntax : discharge
 * (drops all elementalshields in one BIG blast)
 */
void do_discharge (CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *vch;
  CHAR_DATA *vch_next;
  CHAR_DATA *mount;
  char buf1[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char buf3[MAX_STRING_LENGTH];
  int magic_power = ch->spl[RED_MAGIC] + ch->spl[BLUE_MAGIC] + ch->spl[GREEN_MAGIC] + ch->spl[PURPLE_MAGIC] + ch->spl[YELLOW_MAGIC];
  int dam;

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[PINVOKE] < 4) /* 4 is just a test */
  {
    send_to_char("You don't have that invoke yet.\n\r",ch);
    return;
  }
  if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) 
    magic_power +=100;
  if (IS_ITEMAFF(ch, ITEMA_MAGESHIELD))
  {
    REMOVE_BIT(ch->itemaffect, ITEMA_MAGESHIELD);
    for (vch = ch->in_room->people; vch != NULL; vch = vch_next)
    {
      vch_next = vch->next_in_room;
      if (vch != ch)
      {
        if (is_safe(ch,vch)) continue;
        if ((mount = ch->mount) != NULL)
          if (mount == vch) continue;
        dam = number_range(magic_power*7/2, magic_power*9/2) + ch->damroll;
        if (IS_AFFECTED(vch, AFF_SANCTUARY)) dam *= 0.5;
        xprintf(buf1,"$n's mystical shields explodes in a shower of flames striking $N [#C%d#n]",dam);
        xprintf(buf2,"Your mystical shields explodes in a shower of flames striking $N [#C%d#n]",dam);
        xprintf(buf3,"$n's mystical shields explodes in a shower of flames striking you [#C%d#n]",dam);
        act(buf1,ch,NULL,vch, TO_NOTVICT);
        act(buf2,ch,NULL,vch, TO_CHAR);
        act(buf3,ch,NULL,vch, TO_VICT);
        hurt_person(ch,vch,dam);
        if (vch->position > POS_STUNNED)
        {
          if (vch->fighting == NULL) set_fighting(vch, ch, TRUE);
          if (ch->fighting == NULL) set_fighting(ch, vch, FALSE);
        }
      }
    }
  }
  return;
}


/* syntax : teleport <target>
 * ex : teleport satan
 */
void do_teleport (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_MAGE))
  {
    send_to_char("Huh?\n\r", ch );
    return;
	}
  if (ch->pcdata->powers[PINVOKE] < 1) /* 1 is just a test */
  {
    send_to_char("You don't have that invoke yet.\n\r",ch);
    return;
  }
  if ((victim = get_char_world(ch, arg)) == NULL) 
  {
    send_to_char("Teleport to 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) && !IS_NPC(victim))
  {
    send_to_char("I don't think they want you to do that.\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;
  }
      if (IS_SET(victim->act, ACT_NOTRAVEL))
  {
  	send_to_char("No Can Do.\n\r", ch);
  	return;
  }
	location = victim->in_room;
  if (ch->mana < 250) 
  {
    send_to_char("You don't have the mana to cast teleport.\n\r", ch );
    return;
  }
	act("You utter a single powerword.", ch, NULL, NULL, TO_CHAR);
	act("$n utters a strange sounding word and disappers.", ch, NULL, NULL, TO_ROOM);
	ch->mana -= 250;
	char_from_room(ch);
	char_to_room(ch, location);
	do_look(ch, "auto");
	act("You materialize.", ch, NULL, NULL, TO_CHAR);
	act("$n suddenly appear from out of nowhere.", ch, NULL, NULL, TO_ROOM);
  return;
}

/* syntax : objectgate <object>
 * ex. objectgate 2.bells
 */
void do_objectgate (CHAR_DATA *ch, char *argument)
{
  OBJ_DATA *obj;
  char arg1[MAX_INPUT_LENGTH];

  argument = one_argument(argument, arg1);

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE) && !IS_CLASS(ch, CLASS_LICH))
  {
    send_to_char("Huh?\n\r", ch );
    return;
  }
  if (IS_CLASS(ch, CLASS_LICH) && ch->pcdata->powers[CON_LORE] < 1)
  {
    send_to_char("But you don't know how to do that silly.\n\r",ch);
    return;
  }
  if (arg1[0] == '\0')
  {
    send_to_char("What object do you want to attempt to gate?\n\r",ch);
    return;
  }
  if ((obj = get_obj_world(ch, arg1)) == NULL)
  {
    send_to_char("No such object.\n\r",ch);
    return;
  }
  if (IS_SET(obj->quest, QUEST_ARTIFACT) || IS_SET(obj->quest, QUEST_RELIC))
  {
    send_to_char("You cannot grab artifacts or relics.\n\r",ch);
    return;
  }
  if (IS_OBJ_STAT(obj, ITEM_NOLOCATE))
  {
    send_to_char("You wish.\n\r", ch);
    return;
  }
  if (obj->carried_by != NULL)
  {
    send_to_char("Someone is holding the item.\n\r",ch);
    return;
  }
  if (obj->in_room == NULL)
  {
    send_to_char("It seems to be inside something.\n\r",ch);
    return;
  }
  if (!IS_SET(obj->wear_flags, ITEM_TAKE))
  {
    send_to_char("This item is too big.\n\r",ch);
    return;
  }
  if( IS_SET(obj->in_room->room_flags, ROOM_ASTRAL))
  {
    send_to_char( "You can't find it's room.\n\r",ch);
    return;
  }
  if(IS_SET(ch->in_room->room_flags, ROOM_ASTRAL))
  {
    send_to_char( "Your room is not connected to the astral plane.\n\r",ch);
    return;
  }
  obj_from_room( obj );
  obj_to_char( obj, ch );
  send_to_char("The item appears in your hand.\n\r",ch);
  return;
}

/* 
 * for affect spells
 */

void do_bewitch (CHAR_DATA *ch, char *argument)
{
  /*ged*/
  WAIT_STATE(ch, 2);
  return;
}


void do_mageskill( CHAR_DATA *ch, char *argument )
{
    char arg1[MAX_INPUT_LENGTH];
    char arg2[MAX_INPUT_LENGTH];
	char buf[MAX_STRING_LENGTH];

    argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );

    if (IS_NPC(ch)) return;

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

    if (arg1[0] == '\0' && arg2[0] == '\0')
    {
	stc(" #o_________________________________#n\n\r",ch);
	stc("#o/  _\\                             \\#n\n\r",ch);
	stc("#o\\ (_/_____________________________/#n\n\r",ch);
	stc(" #o\\           #0.:#pS#Pkills#0:.        #o\\#n\n\r",ch);
	xprintf(buf,"  #o\\   #P*#cS#Cpritual #cK#Carma       #0[#P%d#0]#o \\#n\n\r",ch->pcdata->powers[MAGE_SK]);
	stc(buf,ch);
	xprintf(buf,"   #o\\   #P*#cS#Corcery #cS#Cpell #cU#Cse    #0[#P%d#0]#o \\#n\n\r",ch->pcdata->powers[MAGE_SSU]);
	stc(buf,ch);
	xprintf(buf,"  #o__\\   #P*#cM#Cagical #cS#Cpell #cU#Cse    #0[#P%d#0] #o\\#n\n\r",ch->pcdata->powers[MAGE_MSU]);
	stc(buf,ch);
	xprintf(buf," #o/ )_\\   #P*#cN#Caturalism #cS#Cpell #cU#Cse #0[#P%d#0] #o\\#n\n\r",ch->pcdata->powers[MAGE_NSU]);
	stc(buf,ch);
	stc(" #o\\___/_____________________________/#n\n\r",ch);
	return;
	}

else if (!str_cmp(arg2,"learn") && !str_cmp(arg1,"sk"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_SK]+1) * 2000000;
	if ( ch->pcdata->powers[MAGE_SK] >= max )
	{
	    xprintf(buf,"#0You've learned as much #cS#Cpiritual #cK#Carma #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_SK] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You further your studies in #cS#Cpiritual #cK#Carma!#n\n\r");
	send_to_char(buf,ch);
    }

else if (!str_cmp(arg2,"learn") && !str_cmp(arg1,"ssu"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_SSU]+1) * 2000000;
	if ( ch->pcdata->powers[MAGE_SSU] >= max )
	{
	    xprintf(buf,"#0You've learned as much #rS#Rorcery #rS#Rpell #rU#Rse #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_SSU] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You further your studies in #rS#Rorcery #rS#Rpell #rU#Rse!#n\n\r");
	send_to_char(buf,ch);
    }

else if (!str_cmp(arg2,"learn") && !str_cmp(arg1,"msu"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_MSU]+1) * 2000000;
	if ( ch->pcdata->powers[MAGE_MSU] >= max )
	{
	    xprintf(buf,"#0You've learned as much #lM#Lagical #lS#Lpell #lU#Lse #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_MSU] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You further your studies in #lM#Lagical #lS#Lpell #lU#Lse!#n\n\r");
	send_to_char(buf,ch);
    }

else if (!str_cmp(arg2,"learn") && !str_cmp(arg1,"nsu"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_NSU]+1) * 2000000;
	if ( ch->pcdata->powers[MAGE_NSU] >= max )
	{
	    xprintf(buf,"#0You've learned as much #gN#Gaturalism #gS#Gpell #gU#Gse #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_NSU] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You further your studies in #gN#Gaturalism #gS#Gpell #gU#Gse!#n\n\r");
	send_to_char(buf,ch);
    }
    else send_to_char("#PTo learn skills, type #0Mageskill #c<#Csk#c/#Cssu#c/#Cnsu#c/#Cmsu#c> #0Learn.#n\n\r",ch);
	return;
}

void do_magespells( CHAR_DATA *ch, char *argument )
{
    char arg1[MAX_INPUT_LENGTH];
    char arg2[MAX_INPUT_LENGTH];
	char buf[MAX_STRING_LENGTH];

    argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );

    if (IS_NPC(ch)) return;

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

    if (arg1[0] == '\0' && arg2[0] == '\0')
    {
	stc("                #W.-~~~~~~~~~-._       _.-~~~~~~~~~-.#n\n\r",ch);
	stc("            #l__#W.'  #C((#0Spells#C))  #W~.   .~   #C((#yIndex#C))  #7`.#l__#n\n\r",ch);
	xprintf(buf,"          #l.'#7// #rS#Rorcery    #P[#0%d#P]   #7\\#0.#7/   #lM#Lagical     #P[#0%d#P]#7\\\\#l`.#n\n\r",ch->pcdata->powers[MAGE_SORCERY],ch->pcdata->powers[MAGE_MAGIC]);
	stc(buf,ch);
	xprintf(buf,"        #l.'#7//  #gN#Gaturalism #P[#0%d#P]     #0|     #oE#ynchantment #P[#0%d#P]#7 \\\\#l`.#n\n\r",ch->pcdata->powers[MAGE_NATURALISM],ch->pcdata->powers[MAGE_ENCHANTMENT]);
	stc(buf,ch);
	stc("      #l.'#7// #W.-~\"\"\"\"\"\"\"~~~~-._     #0|#W     _,-~~~~\"\"\"\"\"\"\"~-. #7\\\\#l`.#n\n\r",ch);
	stc("    #L.'#7//#W.-\"                 `-.  #0|#7  #W.-'                 \"-.#7\\\\#L`.#n\n\r",ch);
	stc("  #L.'#7//______.============-..   \\ #0|#7 /   ..-============.______\\\\#L`.#n\n\r",ch);
	stc("#L.'______________________________#7\\#0|#7/#L______________________________`.#n\n\r",ch);
	stc("Syntax: magespells (sorcery, enchantment, naturalism, magical) [scribe]#n\n\r",ch);
	return;
	}

//Fuckin Output
    if (arg2[0] == '\0')
    {
	if (!str_cmp(arg1,"sorcery"))
	{
	stc("      ___________________   ___________________\n\r",ch);
	stc("  #R.-#7/|       #0~~#P**#0~~      #7\\ /      #0~~#P**#0~~       #7|\\#R-.#n\n\r",ch);
	stc("  #R|#7||#W|   #rS#Rorcery #rS#Rpells   #7:     #CM#cana  #CC#cost     #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	if (ch->pcdata->powers[MAGE_SORCERY] > 0)
	{
	stc("  #R|#7||#W|   #rNerve Blank      #7:        #y2000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_SORCERY] > 1)
	{
	stc("  #R|#7||#W|   #rAcid Arrow       #7:        #y3000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_SORCERY] > 2)
	{
	stc("  #R|#7||#W|   #rEther Blast      #7:        #y3000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_SORCERY] > 3)
	{
	if (IS_SET(ch->sohbits, SOH_SPECFIRE))
	{
	stc("  #R|#7||#W|   #rDemon Fire       #7:        #y5000        #W|#7||#R|#n\n\r",ch);}
else if (IS_SET(ch->sohbits, SOH_SPECICE))
	{
	stc("  #R|#7||#W|   #rIcy Chill        #7:        #y5000        #W|#7||#R|#n\n\r",ch);}
else if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING))
{
	stc("  #R|#7||#W|   #rElectroBolt      #7:        #y5000        #W|#7||#R|#n\n\r",ch);}
else
{
	stc("  #R|#7||#W|   #rElemental Spell  #7:        #y5000        #W|#7||#R|#n\n\r",ch);}
}
else 
{	
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_SORCERY] > 4)
	{
	stc("  #R|#7||#W|   #rEngulf           #7:        #y7000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|       #0~~#C**#0~~       #7:       #0~~#C**#0~~       #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7|/====================#W\\#7:#W/#7====================#W\\#7|#R|#n\n\r",ch);
	stc("  #R`---------------------~#r___#R~--------------------''#n\n\r",ch);
        stc("Syntax: magespells (sorcery, enchantment, naturalism, magical) [scribe]#n\n\r",ch);
	return;
	}
	}


    if (arg2[0] == '\0')
    {
	if (!str_cmp(arg1,"magical"))
	{
	stc("      ___________________   ___________________\n\r",ch);
	stc("  #R.-#7/#W|       #0~~#P**#0~~      #W\\ /      #0~~#P**#0~~       #W|#7\\#R-.#n\n\r",ch);
	stc("  #R|#7||#W|   #lMa#Lgic#7a#Wl S#7p#Lel#lls   #7:     #CM#cana  #CC#cost     #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	if (ch->pcdata->powers[MAGE_MAGIC] > 0)
	{
	stc("  #R|#7||#W|   #LThird Eye        #7:        #y1000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_MAGIC] > 1)
	{
	stc("  #R|#7||#W|   #LScry             #7:        #y1500        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_MAGIC] > 2)
	{
	stc("  #R|#7||#W|   #LTeleport         #7:        #y2000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_MAGIC] > 3)
	{
	stc("  #R|#7||#W|   #LSlow             #7:        #y3000        #W|#7||#R|#n\n\r",ch);}
	else 
	{	
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_MAGIC] > 4)
	{
	stc("  #R|#7||#W|   #LHaste            #7:        #y5000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|       #0~~#C**#0~~       #7:       #0~~#C**#0~~       #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7|/====================#W\\#7:#W/#7====================#W\\#7|#R|#W\n\r",ch);
	stc("  #R`---------------------~#r___#R~--------------------''#n\n\r",ch);
	stc("Syntax: magespells (sorcery, enchantment, naturalism, magical) [scribe]#n\n\r",ch);
	return;
	}
	}

    if (arg2[0] == '\0')
    {
	if (!str_cmp(arg1,"naturalism"))
	{
	stc("      ___________________   ___________________\n\r",ch);
	stc("  #R.-#7/#W|       #0~~#P**#0~~      #W\\ /      #0~~#P**#0~~       #W|#7\\#R-.#n\n\r",ch);
	stc("  #R|#7||#W|  #GN#gaturalism #GS#gpells #7:     #CM#cana  #CC#cost     #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	if (ch->pcdata->powers[MAGE_NATURALISM] > 0)
	{
	stc("  #R|#7||#W|   #GEagle Eye        #7:        #y2000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_NATURALISM] > 1)
	{
	stc("  #R|#7||#W|   #GOgre Strength    #7:        #y3000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_NATURALISM] > 2)
	{
	stc("  #R|#7||#W|   #GLight Shards     #7:        #y5000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_NATURALISM] > 3)
	{
	stc("  #R|#7||#W|   #GSoul Mend        #7:        #y2000        #W|#7||#R|#n\n\r",ch);}
	else 
	{	
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_NATURALISM] > 4)
	{
	stc("  #R|#7||#W|   #GRegenerate       #7:        #y6000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|       #0~~#C**#0~~       #7:       #0~~#C**#0~~       #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7|/====================#W\\#7:#W/#7====================#W\\#7|#R|#W\n\r",ch);
	stc("  #R`---------------------~#r___#R~--------------------''#n\n\r",ch);
	stc("Syntax: magespells (sorcery, enchantment, naturalism, magical) [scribe]#n\n\r",ch);
	return;
	}
	}

    if (arg2[0] == '\0')
    {
	if (!str_cmp(arg1,"enchantment"))
	{
	stc("      ___________________   ___________________\n\r",ch);
	stc("  #R.-#7/#W|       #0~~#P**#0~~      #W\\ /      #0~~#P**#0~~       #W|#7\\#R-.#n\n\r",ch);
	stc("  #R|#7||#W| #oE#ynchantment #oS#ypells #7:     #CM#cana  #CC#cost     #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	if (ch->pcdata->powers[MAGE_ENCHANTMENT] > 0)
	{
	stc("  #R|#7||#W|   #yElemental Rune   #7:        #y2000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_ENCHANTMENT] > 1)
	{
	stc("  #R|#7||#W|   #yChaos Rune       #7:        #y3000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_ENCHANTMENT] > 2)
	{
	stc("  #R|#7||#W|   #yClown Rune       #7:        #y3000        #W|#7||#R|#W\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_ENCHANTMENT] > 3)
	{
	if (IS_SET(ch->sohbits, SOH_SPECFIRE))
	{
	stc("  #R|#7||#W|   #yFire Enchant     #7:       #y10000        #W|#7||#R|#n\n\r",ch);}
else if (IS_SET(ch->sohbits, SOH_SPECICE))
	{
	stc("  #R|#7||#W|   #yFrost Enchant    #7:       #y10000        #W|#7||#R|#n\n\r",ch);}
else if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING))
{
	stc("  #R|#7||#W|   #yLightning Enchant#7:       #y10000        #W|#7||#R|#n\n\r",ch);}
else
{
	stc("  #R|#7||#W|   #yElemental Enchant#7:       #y10000        #W|#7||#R|#n\n\r",ch);}
}
	else 
	{	
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	if (ch->pcdata->powers[MAGE_ENCHANTMENT] > 4)
	{
	stc("  #R|#7||#W|   #yMagic Plating    #7:       #y15000        #W|#7||#R|#n\n\r",ch);}
	else
	{
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);}
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|       #0~~#C**#0~~       #7:       #0~~#C**#0~~       #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7||#W|                    #7:                    #W|#7||#R|#n\n\r",ch);
	stc("  #R|#7|/====================#W\\#7:#W/#7====================#W\\#7|#R|#n\n\r",ch);
	stc("  #R`---------------------~#r___#R~--------------------''#n\n\r",ch);
	stc("Syntax: magespells (sorcery, enchantment, naturalism, magical) [scribe]#n\n\r",ch);
	return;
	}
	}


else if (!str_cmp(arg2,"scribe") && !str_cmp(arg1,"sorcery"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_SORCERY]+1) * 1000000;
	if ( ch->pcdata->powers[MAGE_SORCERY] >= max )
	{
	    xprintf(buf,"#0You've learned as many #rS#Rorcery #rS#Rpells #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_SORCERY] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You learn a new #rS#Rorcery #0Spell!#n\n\r");
	send_to_char(buf,ch);
    }

else if (!str_cmp(arg2,"scribe") && !str_cmp(arg1,"enchantment"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_ENCHANTMENT]+1) * 1000000;
	if ( ch->pcdata->powers[MAGE_ENCHANTMENT] >= max )
	{
	    xprintf(buf,"#0You've learned as many #oE#ynchantment #oS#ypells #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_ENCHANTMENT] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You learn a new #oE#ynchant #oS#ypell!#n\n\r");
	send_to_char(buf,ch);
    }

else if (!str_cmp(arg2,"scribe") && !str_cmp(arg1,"naturalism"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_NATURALISM]+1) * 1000000;
	if ( ch->pcdata->powers[MAGE_NATURALISM] >= max )
	{
	    xprintf(buf,"#0You've learned as many #gN#Gaturalism #gS#Gpells #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_NATURALISM] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You learn a new #gN#Gaturalism #0Spell!#n\n\r");
	send_to_char(buf,ch);
    }

else if (!str_cmp(arg2,"scribe") && !str_cmp(arg1,"magic"))
    {
	int cost;
	int max = 5;

	cost = (ch->pcdata->powers[MAGE_MAGIC]+1) * 1000000;
	if ( ch->pcdata->powers[MAGE_MAGIC] >= max )
	{
	    xprintf(buf,"#0You've learned as many #lM#Lagical #lS#Lpells #0as possible at this point in time!#n\n\r");
	    send_to_char(buf,ch);
	    return;
	}
	if ( cost > ch->exp)
	{
	    xprintf(buf,"#0You need #P%d #0exp to improve this skill any further!#n\n\r", cost);
	    send_to_char(buf,ch);
	    return;
	}
	ch->pcdata->powers[MAGE_MAGIC] += 1;
	ch->exp -= cost;
	xprintf(buf,"#0You learn a new #lM#Lagical #0Spell!#n\n\r");
	send_to_char(buf,ch);
    }
    else send_to_char("#PTo learn spells, type #0spells #c<#Csorcery#c/#Cenchantment#c/#Cnaturalism#c/#Cmagic#c> #0Scribe.#n\n\r",ch);
	return;
}

void do_specialize( CHAR_DATA *ch, char *argument )
{
    char arg1[MAX_INPUT_LENGTH];
	char buf[MAX_STRING_LENGTH];

    argument = one_argument( argument, arg1 );

    if (IS_NPC(ch)) return;

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

	if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING) || IS_SET(ch->sohbits, SOH_SPECFIRE) || IS_SET(ch->sohbits, SOH_SPECICE))
	{
	stc("#PYou've already specialized your magic!#n\n\r",ch);
	return;
	}

    if (arg1[0] == '\0')
	{
	stc("#0Syntax: #PSpecialize #C<#ylightning#0/#Cice#0/#Rfire#C>#n\n\r",ch);
	return;
	}

	if (!str_cmp(arg1,"lightning"))
	{
	stc("#0You specialize in #oLi#ygh#Wtn#yin#yg M#Wa#ygi#oc!#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPECLIGHTNING);
	xprintf(buf,"#P%s #0has specialized in #oLi#ygh#Wtn#yin#yg M#Wa#ygi#oc!#n",ch->pcdata->switchname);
	do_info(ch,buf);
	return;
	}

	else if (!str_cmp(arg1,"ice"))
	{
	stc("#0You specialize in #LI#Cc#7e M#Wa#Cgi#Lc!#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPECICE);
	xprintf(buf,"#P%s #0has specialized in #LI#Cc#7e M#Wa#Cgi#Lc!#n",ch->pcdata->switchname);
	do_info(ch,buf);
	return;
	}

	else if (!str_cmp(arg1,"fire"))
	{
	stc("#0You specialize in #rF#Ri#yr#7e #WM#7a#yg#Ri#rc!#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPECFIRE);
	xprintf(buf,"#P%s #0has specialized in #rF#Ri#yr#7e #WM#7a#yg#Ri#rc!#n",ch->pcdata->switchname);
	do_info(ch,buf);
	return;
	}

	else
	stc("#0Syntax: #PSpecialize #C<#ylightning#0/#Cice#0/#Rfire#C>#n\n\r",ch);
	return;
	}


void do_sorchant( CHAR_DATA *ch, char *argument )
{
	OBJ_DATA *obj = NULL;
	char arg1[MAX_INPUT_LENGTH];
	int cost;
	int failure; /*Chance of your spell to fizzle*/
    int chance; /*% to check for success/failure*/
	bool sorcstaff = FALSE;

	chance = number_range(1, 100);
	argument = one_argument( argument, arg1 );

    if (IS_NPC(ch)) return;

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

	if (IS_SET(ch->sohbits, SOH_SPELLREADY))
	{
	stc("#PYou've already got a spell readied!  Type 'mindblank' to clear it!#n\n\r",ch);
	return;
	}

	if (IS_SET(ch->in_room->room_flags, ROOM_SILENCE))
	{
	stc("You cannot speak! The room has been silenced!\n\r",ch);
	return;
	}


    if (arg1[0] == '\0')
    {
	stc("#0Chant which Spell?#n\n\r",ch);
	return;
	}
	
	if (((obj = get_eq_char( ch, WEAR_WIELD ) ) != NULL) && (obj->pIndexData->vnum == 33000))
	sorcstaff = TRUE;
	else sorcstaff = FALSE;

	/*We'll start first with Magical Spells*/
	if (!str_cmp(arg1,"thirdeye"))
	{
		int lag;
		cost = 1000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_MSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
			

		if (ch->pcdata->powers[MAGE_MAGIC] < 1)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		ch->mana -= cost;
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"newt eye",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLTRUESIGHT);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	{
	extract_obj( obj );	
	stc("#0Your spell component #Rflashes #0and #Rburns #0out of reality!#n\n\r",ch);	
	}
	WAIT_STATE(ch, lag);
	return;
	}
	
	else if (!str_cmp(arg1,"scry"))
	{
		int lag;
		cost = 1500;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_MSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
			

		if (ch->pcdata->powers[MAGE_MAGIC] < 2)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		ch->mana -= cost;
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"eye beholder",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSCRY);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	stc("#0Your spell component #gg#Gl#7o#Gw#gs #ybrightly#0!#n\n\r",ch);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"teleport"))
	{
		int lag;
		cost = 2000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_MSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}
		
		if (ch->position == POS_FIGHTING)
		{
		stc("Not in a fight!\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_MAGIC] < 3)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLTELEPORT);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"slow"))
	{
		int lag;
		cost = 3000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 12 - ch->pcdata->powers[MAGE_MSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
			

		if (ch->pcdata->powers[MAGE_MAGIC] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"spirit plasma",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSLOW);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
    ch->mana -= cost;
	stc("#0Your spell component #gg#Gl#7o#Gw#gs #ybrightly#0!#n\n\r",ch);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"haste"))
	{
		int lag;
		cost = 5000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 17 - ch->pcdata->powers[MAGE_MSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
			

		if (ch->pcdata->powers[MAGE_MAGIC] < 5)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"monkey paw",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLHASTE);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
    ch->mana -= cost;
	stc("#0Your spell component #gg#Gl#7o#Gw#gs #ybrightly#0!#n\n\r",ch);
	WAIT_STATE(ch, lag);
	return;
	}

	/*Sorcery Spells*/
	else if (!str_cmp(arg1,"nerveblank"))
	{
		int lag;
		cost = 2000;
		failure = 110 - ch->pcdata->powers[MAGE_SSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		act("#PY#0ou begin chanting the spidery language of magic...#n",ch,NULL,NULL,TO_CHAR);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
                ch->mana -= cost;
		if (ch->pcdata->powers[MAGE_SORCERY] < 1)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"white powder",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSORC1);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	{
	extract_obj( obj );	
	stc("#0Your spell component #Rflashes #0and #Rburns #0out of reality!#n\n\r",ch);
	}
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"acidarrow"))
	{
		int lag;
		cost = 3000;
		failure = 110 - ch->pcdata->powers[MAGE_SSU] * 20;
		lag = 11 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_SORCERY] < 2)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"weapon arrowhead",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSORC2);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	stc("#0Your spell component #gg#Gl#7o#Gw#gs #ybrightly#0!#n\n\r",ch);    
	WAIT_STATE(ch, lag);
	return;
	}	

	else if (!str_cmp(arg1,"etherblast"))
	{
		int lag;
		cost = 3000;
		failure = 110 - ch->pcdata->powers[MAGE_SSU] * 20;
		lag = 13 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_SORCERY] < 3)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"wyrm tooth",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSORC3);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
    ch->mana -= cost;
	stc("#0Your spell component #gg#Gl#7o#Gw#gs #ybrightly#0!#n\n\r",ch);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"icychill"))
	{
		int lag;
		cost = 5000;
		failure = 110 - ch->pcdata->powers[MAGE_SSU] * 20;
		lag = 11 - ch->pcdata->powers[MAGE_SSU];
		
		if (!IS_SET(ch->sohbits, SOH_SPECICE))
		{
		stc("#CYou are not specialized in that elemental field!#n\n\r",ch);
		return;
		}

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_SORCERY] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSORC4);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"demonfire"))
	{
		int lag;
		cost = 5000;
		failure = 110 - ch->pcdata->powers[MAGE_SSU] * 20;
		lag = 11 - ch->pcdata->powers[MAGE_SSU];
		
		if (!IS_SET(ch->sohbits, SOH_SPECFIRE))
		{
		stc("#CYou are not specialized in that elemental field!#n\n\r",ch);
		return;
		}

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_SORCERY] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSORC4);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"electrobolt"))
	{
		int lag;
		cost = 5000;
		failure = 110 - ch->pcdata->powers[MAGE_SSU] * 20;
		lag = 11 - ch->pcdata->powers[MAGE_SSU];
		
		if (!IS_SET(ch->sohbits, SOH_SPECLIGHTNING))
		{
		stc("#CYou are not specialized in that elemental field!#n\n\r",ch);
		return;
		}

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_SORCERY] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSORC4);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"engulf"))
	{
		int lag;
		cost = 7000;
		failure = 110 - ch->pcdata->powers[MAGE_SSU] * 20;
		lag = 13 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_SORCERY] < 5)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"spider web",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSORC5);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	{
	extract_obj( obj );	
	stc("#0Your spell component #Rflashes #0and #Rburns #0out of reality!#n\n\r",ch);
	}
	WAIT_STATE(ch, lag);
	return;
	}

	/*Naturalism Spells*/
	else if (!str_cmp(arg1,"eagleeye"))
	{
		int lag;
		cost = 2000;
		failure = 110 - ch->pcdata->powers[MAGE_NSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_NSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_NATURALISM] < 1)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"eagle eye",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLACCURACY);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	{
	extract_obj( obj );	
	stc("#0Your spell component #Rflashes #0and #Rburns #0out of reality!#n\n\r",ch);
	}
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"ogrestrength"))
	{
		int lag;
		cost = 3000;
		failure = 110 - ch->pcdata->powers[MAGE_NSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_NSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_NATURALISM] < 2)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"Mandrake Root",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLMIGHT);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	{
	extract_obj( obj );	
	stc("#0Your spell component #Rflashes #0and #Rburns #0out of reality!#n\n\r",ch);
	}
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"lightshards"))
	{
		int lag;
		cost = 5000;
		failure = 110 - ch->pcdata->powers[MAGE_NSU] * 20;
		lag = 12 - ch->pcdata->powers[MAGE_NSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_NATURALISM] < 3)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"crystal",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLSHARDS);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	{
	extract_obj( obj );	
	stc("#0Your spell component #Rflashes #0and #Rburns #0out of reality!#n\n\r",ch);
	}
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"soulmend"))
	{
		int lag;
		cost = 2000;
		failure = 110 - ch->pcdata->powers[MAGE_NSU] * 20;
		lag = 15 - ch->pcdata->powers[MAGE_NSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_NATURALISM] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLHEAL);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"regen"))
	{
		int lag;
		cost = 6000;
		failure = 110 - ch->pcdata->powers[MAGE_NSU] * 20;
		lag = 17 - ch->pcdata->powers[MAGE_NSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_NATURALISM] < 5)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( (obj = get_obj_wear(ch,"lizard tail",TRUE)) == NULL )         
		{
        send_to_char( "You lack the spell component!\n\r", ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLREGEN);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	if (sorcstaff == FALSE)
	{
	extract_obj( obj );	
	stc("#0Your spell component #Rflashes #0and #Rburns #0out of reality!#n\n\r",ch);
	}
	WAIT_STATE(ch, lag);
	return;
	}

/*Enchantment Spells.  These don't require components to cast, but you need the runes to enchant stuff.*/
	else if (!str_cmp(arg1,"elemental"))
	{
		int lag;
		cost = 2000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_ENCHANTMENT] < 1)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLENCHANT1);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"chaos"))
	{
		int lag;
		cost = 3000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 10 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_ENCHANTMENT] < 2)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLENCHANT2);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"metta"))
	{
		int lag;
		cost = 3000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 5 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_ENCHANTMENT] < 3)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLENCHANT3);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"lightningenchant"))
	{
		int lag;
		cost = 10000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 20 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		if (!IS_SET(ch->sohbits, SOH_SPECLIGHTNING))
		{
		stc("#pYou are not specialized in that elemental field!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_ENCHANTMENT] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLENCHANT4);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"iceenchant"))
	{
		int lag;
		cost = 10000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 20 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		if (!IS_SET(ch->sohbits, SOH_SPECICE))
		{
		stc("#pYou are not specialized in that elemental field!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_ENCHANTMENT] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLENCHANT4);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"fireenchant"))
	{
		int lag;
		cost = 10000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 20 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		if (!IS_SET(ch->sohbits, SOH_SPECFIRE))
		{
		stc("#pYou are not specialized in that elemental field!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_ENCHANTMENT] < 4)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLENCHANT4);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else if (!str_cmp(arg1,"magicplating"))
	{
		int lag;
		cost = 15000;
		failure = 110 - ch->pcdata->powers[MAGE_MSU] * 20;
		lag = 20 - ch->pcdata->powers[MAGE_SSU];

		if (ch->mana < cost)
		{
		stc("#pN#Pot enough mana!#n\n\r",ch);
		return;
		}

		stc("#PY#0ou begin chanting the spidery language of magic...#n\n\r",ch);
		act("#C$n #0begins chanting the spidery language of magic...#n",ch, NULL, NULL, TO_ROOM);	
		ch->mana -= cost;	

		if (ch->pcdata->powers[MAGE_ENCHANTMENT] < 5)
		{
		stc("#pYou attempt to cast the spell, but alas you haven't the knowledge.#n\n\r",ch);
		stc("#CYour spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
        }

		if ( failure >= chance ) 
		{
		stc("#CYou mispronounce a syllable and your spell fizzles and leaves your mind!#n\n\r",ch);
		WAIT_STATE(ch, lag);		
		return;
		}
	
	stc("#pY#Pour spell comes to mind.#n\n\r",ch);
	SET_BIT(ch->sohbits, SOH_SPELLENCHANT5);
	SET_BIT(ch->sohbits, SOH_SPELLREADY);
	WAIT_STATE(ch, lag);
	return;
	}

	else
	{
	stc("#pY#Pou have no knowledge of that spell!#n\n\r",ch);
	return;
	}
	}

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

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

	if (!IS_SET(ch->sohbits, SOH_SPELLREADY))
	{
	stc("#CYou don't have a spell readied!#n\n\r",ch);
	return;
	}

	stc("#PYou force your mind to blank, removing your spell from memory#n\n\r",ch);

	if (IS_SET(ch->sohbits, SOH_SPELLREADY))
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	if (IS_SET(ch->sohbits, SOH_SPELLTRUESIGHT))
	REMOVE_BIT(ch->sohbits, SOH_SPELLTRUESIGHT);
	if (IS_SET(ch->sohbits, SOH_SPELLSCRY))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSCRY);
	if (IS_SET(ch->sohbits, SOH_SPELLTELEPORT))
	REMOVE_BIT(ch->sohbits, SOH_SPELLTELEPORT);
	if (IS_SET(ch->sohbits, SOH_SPELLSLOW))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSLOW);
	if (IS_SET(ch->sohbits, SOH_SPELLHASTE))
	REMOVE_BIT(ch->sohbits, SOH_SPELLHASTE);
	if (IS_SET(ch->sohbits, SOH_SPELLACCURACY))
	REMOVE_BIT(ch->sohbits, SOH_SPELLACCURACY);
	if (IS_SET(ch->sohbits, SOH_SPELLMIGHT))
	REMOVE_BIT(ch->sohbits, SOH_SPELLMIGHT);
	if (IS_SET(ch->sohbits, SOH_SPELLSHARDS))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSHARDS);
	if (IS_SET(ch->sohbits, SOH_SPELLHEAL))
	REMOVE_BIT(ch->sohbits, SOH_SPELLHEAL);
	if (IS_SET(ch->sohbits, SOH_SPELLREGEN))
	REMOVE_BIT(ch->sohbits, SOH_SPELLREGEN);
	if (IS_SET(ch->sohbits, SOH_SPELLSORC1))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC1);
	if (IS_SET(ch->sohbits, SOH_SPELLSORC2))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC2);
	if (IS_SET(ch->sohbits, SOH_SPELLSORC3))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC3);
	if (IS_SET(ch->sohbits, SOH_SPELLSORC4))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC4);
	if (IS_SET(ch->sohbits, SOH_SPELLSORC5))
	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC5);
	if (IS_SET(ch->sohbits, SOH_SPELLENCHANT1))
	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT1);
	if (IS_SET(ch->sohbits, SOH_SPELLENCHANT2))
	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT2);
	if (IS_SET(ch->sohbits, SOH_SPELLENCHANT3))
	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT3);
	if (IS_SET(ch->sohbits, SOH_SPELLENCHANT4))
	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT4);
	if (IS_SET(ch->sohbits, SOH_SPELLENCHANT5))
	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT5);
	return;
}

/*All this is invoked below*/
void do_magesight( CHAR_DATA *ch, char *argument )
{
    if ( IS_NPC(ch) )
	return;

	if (!IS_CLASS(ch,CLASS_MAGE))
	{
	stc("Huh?\n\r",ch);
	return;
	}
	
	if ( IS_SET(ch->act, PLR_HOLYLIGHT) )
    {
	REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
	send_to_char( "#cYou close your third eye.#n\n\r", ch );
	act("#c$n #0closes their third eye.#n\n\r",ch, NULL, NULL, TO_ROOM);	
	return;
	}
	
	else
	{
	stc("#cYou open your third eye, and it #Cglows #ybrightly#C!#n\n\r",ch);
	act("#c$n #0opens their third eye, and it #Cglows #ybrightly#C!#n\n\r",ch, NULL, NULL, TO_ROOM);	
	SET_BIT(ch->act, PLR_HOLYLIGHT);
	return;
	}
}

void do_magescry( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    ROOM_INDEX_DATA *chroom;
    ROOM_INDEX_DATA *victimroom;
    char      arg [MAX_INPUT_LENGTH];
    int rand_room;
    bool chaosvalue = FALSE;

    argument = one_argument( argument, arg );

    if (IS_NPC(ch)) return;

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

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

    if (victim->trust > 6)
    {
      send_to_char("SPYING ON THE GODS!?!?!?!\n\r",ch);
      send_to_char("Someone is scrying you.\n\r",victim);
      return;
    }

    if (!IS_NPC(victim) && IS_IMMUNE(victim,IMM_SHIELDED))
    {
       send_to_char( "You cannot find them.\n\r",ch);
       return;
    }

    if (!IS_NPC(victim) && IS_IMMUNE(victim, IMM_SHIELD2)) chaosvalue = TRUE;



    chroom = ch->in_room;
    victimroom = victim->in_room;
    if (chaosvalue)
      for ( ; ; ) 
      {
        rand_room = number_range( 0, 65535 );
        victimroom = get_room_index( rand_room );
        if (victimroom != NULL) break;   
      }

    char_from_room(ch);
    char_to_room(ch,victimroom);
    if (IS_AFFECTED(ch, AFF_SHADOWPLANE) && (!IS_AFFECTED(victim, AFF_SHADOWPLANE)))
    {
	REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE);
	do_look(ch,"auto");
	SET_BIT(ch->affected_by, AFF_SHADOWPLANE);
    }
    else if (!IS_AFFECTED(ch, AFF_SHADOWPLANE) && (IS_AFFECTED(victim, AFF_SHADOWPLANE)))
    {
	SET_BIT(ch->affected_by, AFF_SHADOWPLANE);
	do_look(ch,"auto");
	REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE);
    }
    else
	do_look(ch,"auto");
    char_from_room(ch);
    char_to_room(ch,chroom);
    if (!IS_NPC(victim)) ch->fight_timer += 2;
    
}

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

  argument = one_argument (argument, arg);

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

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

  if ( ( victim = get_char_world( ch, arg ) ) == NULL )
  {
    send_to_char( "You cannot find them.\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_SET(ch->in_room->room_flags, ROOM_ASTRAL))
  {
    stc( "Your body can't go there.\n\r",ch);
    return;
  }

  if (ch == victim)
  {
    send_to_char("But you're already at yourself!\n\r",ch);
    return;
  }
      if (IS_SET(victim->act, ACT_NOTRAVEL))
  {
  	send_to_char("No Can Do.\n\r", ch);
  	return;
  }
  if ( room_is_private(victim->in_room ) )
  {
    send_to_char( "That room is private right now.\n\r", ch );
    return;
  }
  if ( !IS_NPC(victim) && !IS_IMMUNE(victim, IMM_SUMMON) )
  { 
    send_to_char( "They are hiding from you.\n\r", ch );
    return;
  }
  if (victim->in_room == ch->in_room)
  {
    send_to_char("But you're already there!\n\r",ch);
    return;
  }

  act("#cYou #Cblink #cout of reality, and #Cte#Glepo#Crt #cto #P$N!#n", ch, NULL, victim, TO_CHAR);
  act("#c$n #Cblink #cout of reality in a #yflash #cof #Cenergy!#n", ch, NULL, victim, TO_ROOM);
  char_from_room(ch);
  char_to_room(ch,victim->in_room);
  act("#c$n #Cteleports into the room next to #P$N #Cin a #yflash #Cof #yenergy!#n", ch, NULL, victim, TO_NOTVICT);
  act("#c$n #Cteleports into the room in a #yflash #Cof #yenergy!#n", ch, NULL, victim, TO_VICT);
  do_look(ch,"auto");
  WAIT_STATE(ch, 12);
  return;
}

void do_mageslow(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim = NULL;
	argument = one_argument (argument, arg);
	if (IS_NPC(victim)) {stc("You can only use that on the smart creatures.\n\r",ch);return;}
	if (arg[0] == '\0') {stc("Mageslow has no target check this.",ch);return;}
	
		if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
	if (is_safe(ch, victim))
	{
	stc("You can't use that on them.\n\r",ch);
	return;
	}
	if (IS_SET(victim->sohbits, SOH_SLOW) && !IS_NPC(victim))
	{
	stc("They are already slowed!#n\n\r",ch);
	return;
	}


	act("#C$N #gg#Glow#gs #Ca #od#yull #oy#yellow #Cas their movements begin to #yslow!#n",ch,NULL,victim,TO_CHAR);
	act("#CYou begin to glow a #odull yellow #Cas your movements start to #yslow!#n",ch,NULL,victim,TO_VICT);
	act("#C$N #gg#Gl#yo#Gw#gs #Ca #od#yull #oy#yellow #Cas their movements begin to #yslow!#n",ch,NULL,victim,TO_NOTVICT);
	SET_TIMER(victim, TIMER_SLOW, (ch->pcdata->powers[MAGE_MSU] * 5) );
/*        for (i = 0; i < 10; i ++)
        {
	if (ch->pcdata->powers[MAGE_MSU] > i)
	ADD_TIMER(victim,TIMER_SLOW,2);
 	}
*/
	SET_BIT(victim->sohbits, SOH_SLOW);
	return;
}
	

void do_magehaste(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	argument = one_argument (argument, arg);
	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	

	if (IS_NPC(victim)) {stc("You can only use that on the smart creatures.\n\r",ch);return;}
	if (arg[0] == '\0') {stc("Mageslow has no target check this.",ch);return;}
	if (IS_SET(victim->sohbits, SOH_HASTE) && !IS_NPC(victim))
	{
	stc("They are already hasted!#n\n\r",ch);
	return;
	}
	act("#l$N #Lbegins moving with blinding speed!#n",ch,NULL,victim,TO_CHAR);
	act("#LYou begin to move with blinding speed!#n",ch,NULL,victim,TO_VICT);
	act("#l$N #Lbegins moving with blinding speed!#n",ch,NULL,victim,TO_NOTVICT);
	SET_TIMER(victim, TIMER_HASTE, (ch->pcdata->powers[MAGE_MSU] * 6) );
/*        for (i = 0; i < 10; i ++)
        {
	if (ch->pcdata->powers[MAGE_MSU] > i)
	ADD_TIMER(victim,TIMER_HASTE,2);
 	}
*/
	SET_BIT(victim->sohbits, SOH_HASTE);
	return;
}

void do_mageaccuracy(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim = NULL;
	argument = one_argument (argument, arg);
	
	if (IS_NPC(victim)) {stc("You can only use that on the smart creatures.\n\r",ch);return;}
	if (arg[0] == '\0') {stc("Mageslow has no target check this.",ch);return;}
	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
	
	if (IS_SET(victim->sohbits, SOH_ACCURACY) && !IS_NPC(victim))
	{
	stc("Their accuracy has already been magically enhanced!#n\n\r",ch);
	return;
	}

	act("#g$N #Gbegins to #yglow #Ga light #gg#Gr#ye#Ge#gn #Gcolor.#n",ch,NULL,victim,TO_CHAR);
	act("#GYou begin to #yglow #Ga light #gg#Gr#ye#Ge#gn!#n",ch,NULL,victim,TO_VICT);
	act("#g$N #Gbegins to #yglow #Ga light #gg#Gr#ye#Ge#gn #Gcolor.#n",ch,NULL,victim,TO_NOTVICT);	
	SET_TIMER(victim, TIMER_ACCURACY, (ch->pcdata->powers[MAGE_MSU] * 6) );
/*
        for (i = 0; i < 10; i ++)
        {
	if (ch->pcdata->powers[MAGE_NSU] > i)
	ADD_TIMER(victim,TIMER_ACCURACY,2);
 	}
*/
	SET_BIT(victim->sohbits, SOH_ACCURACY);
	victim->hitroll += 200;
	return;
}

void do_magemight(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim = NULL;
	argument = one_argument (argument, arg);
	
	if (IS_NPC(victim)) {stc("You can only use that on the smart creatures.\n\r",ch);return;}
	if (arg[0] == '\0') {stc("Magemight has no target check this.",ch);return;}
	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
	
	if (IS_SET(victim->sohbits, SOH_MIGHT) && !IS_NPC(victim))
	{
	stc("#RTheir might has already been magically enhanced!#n\n\r",ch);
	return;
	}

	act("#0$N #Rbegins to #yglow #0a #ybright #rr#Re#rd c#Ro#rl#Ro#rr#R!#n",ch,NULL,victim,TO_CHAR);
	act("#0You begin to #yglow #0a #ybright #rr#Re#rd c#Ro#rl#Ro#rr#R!#n",ch,NULL,victim,TO_VICT);
	act("#0$N #Rbegins to #yglow #0a #ybright #rr#Re#rd c#Ro#rl#Ro#rr#R!#n",ch,NULL,victim,TO_NOTVICT);	
	SET_TIMER(victim, TIMER_MIGHT, (ch->pcdata->powers[MAGE_MSU] * 6)	);
/*
        for (i = 0; i < 10; i ++)
        {
	if (ch->pcdata->powers[MAGE_NSU] > i)
	ADD_TIMER(victim,TIMER_MIGHT,2);
 	}
*/
	SET_BIT(victim->sohbits, SOH_MIGHT);
	victim->damroll += 200;
	return;
}

void do_mageshards(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim = NULL;
	argument = one_argument (argument, arg);
	
	if (IS_NPC(victim)) {stc("You can only use that on the smart creatures.\n\r",ch);return;}
	if (arg[0] == '\0') {stc("Mageshards has no target check this.",ch);return;}
		if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
	
	if (IS_SET(victim->sohbits, SOH_SHARDS) && !IS_NPC(victim))
	{
	stc("#CThey are already magically protected!#n\n\r",ch);
	return;
	}

	act("#0$N #Cis surrounded by a #7cr#Cys#7ta#Cli#7ne #cforce shield!#n",ch,NULL,victim,TO_CHAR);
	act("#CYou are surrounded by a #7cr#Cys#7ta#Cli#7ne #cforce shield!#n",ch,NULL,victim,TO_VICT);
	act("#0$N #Cis surrounded by a #7cr#Cys#7ta#Cli#7ne #cforce shield!#n",ch,NULL,victim,TO_NOTVICT);
	SET_TIMER(victim, TIMER_SHARDS, (ch->pcdata->powers[MAGE_MSU] * 6)	);
/*
        for (i = 0; i < 10; i ++)
        {
	if (ch->pcdata->powers[MAGE_NSU] > i)
	ADD_TIMER(victim,TIMER_SHARDS,1);
 	}
*/
	SET_BIT(victim->sohbits, SOH_SHARDS);
	victim->armor -= 200;
	return;
}

void do_mageheal(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	int lowamt;
	int highamt;
	int amt;

	argument = one_argument (argument, arg);
	
	lowamt = ch->pcdata->powers[MAGE_NSU] * 300;
	highamt = ch->pcdata->powers[MAGE_NSU] * 600;
	amt = number_range(highamt,lowamt);
		if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	

	if (IS_NPC(victim)) {stc("You can only use that on the smart creatures.\n\r",ch);return;}
	if (arg[0] == '\0') {stc("Mageheal has no target check this.",ch);return;}


	act("#cA #Cglowing #Wwhite #7light #Csinks into #c$N!#n",ch,NULL,victim,TO_CHAR);
	act("#cA #Cglowing #Wwhite #7light #Csinks into you!#n",ch,NULL,victim,TO_VICT);
	act("#cA #Cglowing #Wwhite #7light #Csinks into #c$N!#n",ch,NULL,victim,TO_NOTVICT);	
	victim->hit += amt;
	if (victim->hit > victim->max_hit)
	{
	victim->hit = victim->max_hit;
	}
	return;
}

void do_mageregen(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	argument = one_argument (argument, arg);
		if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
	
	if (IS_NPC(victim)) {stc("You can only use that on the smart creatures.\n\r",ch);return;}
	if (arg[0] == '\0') {stc("Mageregen has no target check this.",ch);return;}
	if (IS_SET(victim->sohbits, SOH_REGEN) && !IS_NPC(victim))
	{
	stc("#CThey are already magically regenerating!#n\n\r",ch);
	return;
	}
        
	act("#C$N #cbegins to #yglow #Gbright #gg#Gree#gn, #Cand they start to #gr#Gegenerate!#n",ch,NULL,victim,TO_CHAR);
	act("#CYou #cbegin to #yglow #Gbright #gg#Gree#gn, #Cand start to #gr#Gegenerate!#n",ch,NULL,victim,TO_VICT);
	act("#C$N #cbegins to #yglow #Gbright #gg#Gree#gn, #Cand they start to #gr#Gegenerate!#n",ch,NULL,victim,TO_NOTVICT);	
	SET_TIMER(victim, TIMER_REGEN, (ch->pcdata->powers[MAGE_MSU] * 3) );
/*
        for (i = 0; i < 10; i ++)
        {
	if (ch->pcdata->powers[MAGE_NSU] > i)
	ADD_TIMER(victim,TIMER_REGEN,2);
 	}
*/
	SET_BIT(victim->sohbits, SOH_REGEN);
	victim->hit += 100;
	return;
}



void do_nerveblank( CHAR_DATA *ch, char *argument )
{
	CHAR_DATA *vch;
    CHAR_DATA *vch_next;
	int dam;
	int lowdam;
	int highdam;
	char buf[MAX_STRING_LENGTH];

    for ( vch = ch->in_room->people; vch != NULL; vch = vch_next )
    {
	vch_next = vch->next_in_room;
	lowdam = ch->pcdata->powers[MAGE_SSU] * 200;
	highdam = ch->pcdata->powers[MAGE_SSU] * 400;
	
	dam = number_range(lowdam, highdam);
	if (!IS_NPC(vch) && is_safe(ch, vch)) continue;
	if (vch != ch)
	hurt_person(ch, vch, dam);

		if (vch != ch){
	xprintf(buf, "The room sparks and flares with #7white light #Was you feel #rp#Rai#rn #Wshoot through your nerves! #0[#P%d#0]#n\n\r",dam);
	stc(buf, vch);
	xprintf(buf, "#0You cause the room to #Rfl#ya#Rre #0with #Rintense #7w#White #7l#Wight! #0[#P%d#0]#n\n\r", dam);
	stc(buf, ch);	
	}
	
		if (vch != ch)
	stc("#RYou fall to the ground, stunned!\n\r",vch);
	
		if ((vch != ch) && (IS_NPC(vch))){
	xprintf(buf, "#r%s #Rfalls to the ground, stunned!\n\r", vch->short_descr);
	stc(buf, ch);}
	else if (vch != ch)
	{
	xprintf(buf, "#r%s #Rfalls to the ground, stunned!\n\r", vch->name);
	stc(buf, ch);
	}

	if (vch != ch)
	vch->position = POS_STUNNED;

    }

	ch->fight_timer += 5;
	if (number_range(1,10) > 4) WAIT_STATE(ch, 12);
	return;
}

void do_acidarrow( CHAR_DATA *ch, char *argument)
{
		CHAR_DATA *victim;
		ROOM_INDEX_DATA *location;
		char arg[MAX_INPUT_LENGTH];
		char buf[MAX_STRING_LENGTH];
		int dam;
		int highdam;
		int lowdam;

		argument = one_argument( argument, arg );

		lowdam = ch->pcdata->powers[MAGE_SSU] * 300;
		highdam = ch->pcdata->powers[MAGE_SSU] * 600;

		dam = number_range(lowdam, highdam);
		dam += (ch->damcap[DAM_CAP] / 4);

			if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
	
	if ( (location = ch->in_room) == NULL)
	{
	stc("The spell failed.\n\r",ch);
        return;	
	}
        if (IS_SET(ch->in_room->room_flags, ROOM_ASTRAL))
        {
	  stc("The spell fizzled out.\n\r",ch);
	  return;
	}

        if ( ( victim = get_char_world( ch, arg ) ) == NULL )
        {send_to_char("The spell failed.\n\r",ch);return;}

	if (IS_SET(ch->in_room->room_flags, ROOM_NO_TELEPORT) && (ch->in_room != victim->in_room))
	{
	stc("You may not bomb from a no_teleport room!\n\r",ch);
	return;
	}
	
	if (!IS_NPC(victim) && (ch->in_room->area != victim->in_room->area))
	{
	stc("You must be in the same area as your victim, if they are a PC!\n\r",ch);
	return;
	}

	if (is_safe(ch, victim))
	{
	  stc("A powerful force causes your spell to explode before your eyes.\n\r",ch);
	  hurt_person(ch,ch,number_range(1,1000));
	  return;	  
	}
   
		if (victim->position == POS_SLEEPING || victim->position == POS_RESTING)
		dam *= 2.5;
		
		if (IS_NPC(victim))
		{
		dam *= 2.5;
		xprintf(buf,"#0You send forth #0an arrow of #gb#Gub#gbl#Gin#gg #ga#Gc#yi#Gd #0to strike #R$N!  #0[#P%d#0]#n",dam);
        act(buf,ch,NULL,victim,TO_CHAR);
		}

		else if (!IS_NPC(victim))
		{
                if(IS_IMMUNE(victim, IMM_ACID)) dam = dam / 3;
		xprintf(buf,"#0You send forth #0an arrow of #gb#Gub#gbl#Gin#gg #ga#Gc#yi#Gd #0to strike #R$N!  #0[#P%d#0]#n",dam);
		act(buf,ch,NULL,victim,TO_CHAR);
		}

		xprintf(buf,"#C$n #0sends forth an arrow of #gb#Gub#gbl#Gin#gg a#Gc#yi#Gd #0to strike #P$N!#n");
		act(buf,ch,NULL,victim,TO_NOTVICT);		
		xprintf(buf,"#C$n's #ga#Gc#yi#Gd #ga#Gr#gr#Go#gw #0strikes you, #Rcorroding #0flesh!  #0[#P%d#0]#n",dam);
		act(buf,ch,NULL,victim,TO_VICT);

		if (!IS_NPC(victim))
		{
		if (!IS_NPC(victim) && ch->fight_timer <= 18) ch->fight_timer += 6;
		if (!IS_NPC(victim) && victim->fight_timer <= 3) victim->fight_timer += 2;
		victim->fight_timer += number_range(2,4);
		}
		hurt_person(ch, victim, dam);

		if (number_percent() > 65 && victim->hit > 0)
		{
		if (IS_NPC(victim))
		{
		xprintf(buf,"#0You send forth #0an arrow of #gb#Gub#gbl#Gin#gg #ga#Gc#yi#Gd #0to strike #R$N!  #0[#P%d#0]#n",dam);
        act(buf,ch,NULL,victim,TO_CHAR);
		}

		else if (!IS_NPC(victim))
		{
		xprintf(buf,"#0You send forth #0an arrow of #gb#Gub#gbl#Gin#gg #ga#Gc#yi#Gd #0to strike #R$N!  #0[#P%d#0]#n",dam);
		act(buf,ch,NULL,victim,TO_CHAR);
		}

		xprintf(buf,"#C$n #0sends forth an arrow of #gb#Gub#gbl#Gin#gg a#Gc#yi#Gd #0to strike #P$N!#n");
		act(buf,ch,NULL,victim,TO_NOTVICT);		
		xprintf(buf,"#C$n's #ga#Gc#yi#Gd #ga#Gr#gr#Go#gw #0strikes you, #Rcorroding #0flesh!  #0[#P%d#0]#n",dam);
		act(buf,ch,NULL,victim,TO_VICT);
		if (!IS_NPC(victim))
		{
		if (!IS_NPC(victim) && victim->fight_timer <= 18) ch->fight_timer += 6;
		if (!IS_NPC(victim) && victim->fight_timer <= 3) victim->fight_timer += 2;
		}
		hurt_person(ch, victim, dam);
		}

		return;
	}

void do_etherblast( CHAR_DATA *ch, char *argument)
{
		CHAR_DATA *victim;
		char arg[MAX_INPUT_LENGTH];
		char buf[MAX_STRING_LENGTH];
		int dam;
		int highdam;
		int lowdam;
		int highenergy;
		int lowenergy;
		int energy;

		argument = one_argument( argument, arg );
		if (IS_NPC(ch)) return;

		lowdam = (ch->pcdata->powers[MAGE_SSU]+1) * 300;
		highdam = (ch->pcdata->powers[MAGE_SSU]+1) * 500;

		dam = number_range(lowdam, highdam);

		lowenergy = dam - 500;
		highenergy = dam + 2000;
		
		dam += ch->damcap[DAM_CAP]-500;
		energy = number_range(lowenergy, highenergy);
		if (dam < 0) dam = 0;
		if (energy < 0) energy = 1;
	

			if ((victim = get_char_world(ch, arg)) == NULL)
	{
	  send_to_char("The spell failed.\n\r",ch);
	return;
	}	
	    if (is_safe( ch, victim )) return;
		
        if ( ( victim = get_char_world( ch, arg ) ) == NULL )
        {send_to_char("The spell failed.\n\r",ch);return;}

		if (IS_NPC(victim))
		{
		xprintf(buf,"#0You shoot forth a #pb#Polt of #pe#Pther #0at #C$N!  #0[#P%d#0]#n",dam);
        act(buf,ch,NULL,victim,TO_CHAR);
		}

		else if (!IS_NPC(victim))
		{
		xprintf(buf,"#0You shoot forth a #pb#Polt of #pe#Pther #0at #C$N!  #0[#P%d#0]#n",dam);
		act(buf,ch,NULL,victim,TO_CHAR);
		}

		xprintf(buf,"#C$n #0sends forth a #pb#Polt of #pe#Pther #0to strike #P$N!#n");
		act(buf,ch,NULL,victim,TO_NOTVICT);		
		xprintf(buf,"#C$n's #pb#Polt of #pe#Pther #0strikes you, #Rsearing flesh!  #0[#P%d#0]#n",dam);
		act(buf,ch,NULL,victim,TO_VICT);

		hurt_person(ch, victim, dam);
		xprintf(buf,"#0You channel some of the #pe#Pther #0back into your body!  #0[#C%d#0]#n\n\r",energy);
		stc(buf,ch);
		ch->mana += energy;
		if (ch->mana > ch->max_mana) ch->mana = ch->max_mana;
		if (!IS_NPC(victim))
		{
		if (ch->fight_timer < 15)
		ch->fight_timer += 3;
		if (victim->fight_timer < 1)
		victim->fight_timer += 2;
		}
		return;
	}

void do_magesorc4( CHAR_DATA *ch, char *argument)
{
		CHAR_DATA *victim;
		char arg[MAX_INPUT_LENGTH];
		char buf[MAX_STRING_LENGTH];
		int dam;
		int highdam = 0;
		int lowdam = 0;

		argument = one_argument( argument, arg );

	if ( ( victim = get_char_room( ch, NULL, arg ) ) == NULL )
    {
	send_to_char( "#0They aren't here.#n\n\r", ch );
	return;
    }
		
		if ((victim == ch))
		{
		stc("#RYeah ok...\n\r",ch);
		return;
		}
		if (is_safe(ch, victim))
		{
		stc("#RThey are #Wsafe #Rfrom your magic!#n\n\r",ch);
		return;
		}
		if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING))
		{
		lowdam = ch->pcdata->powers[MAGE_SSU] * 700;
		highdam = ch->pcdata->powers[MAGE_SSU] * 1000;
		}

		if (IS_SET(ch->sohbits, SOH_SPECFIRE))
		{
		lowdam = ch->pcdata->powers[MAGE_SSU] * 400;
		highdam = ch->pcdata->powers[MAGE_SSU] * 1200;
		}

		if (IS_SET(ch->sohbits, SOH_SPECICE))
		{
		lowdam = ch->pcdata->powers[MAGE_SSU] * 500;
		highdam = ch->pcdata->powers[MAGE_SSU] * 1100;
		}

		dam = number_range(lowdam, highdam);
		dam += ch->damcap[DAM_CAP];
		dam /= 2;
		
		//if (victim->position == POS_SLEEPING || victim->position == POS_RESTING)
		//dam *= 2.5;

		//if (IS_NPC(victim)) dam *= 3;
		//if (IS_SET(ch->sohbits, SOH_SPECICE) && IS_CLASS(victim, CLASS_DEMON)) dam *= 1.5;
		//if (IS_SET(ch->sohbits, SOH_SPECICE) && IS_CLASS(victim, CLASS_GHOUL)) dam *= .6;
		//if (IS_SET(ch->sohbits, SOH_SPECFIRE) && IS_CLASS(victim, CLASS_GHOUL)) dam *= 1.5;		
		//if (IS_SET(ch->sohbits, SOH_SPECFIRE) && IS_CLASS(victim, CLASS_DEMON)) dam *= .5;		
		//if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING) && IS_CLASS(victim, CLASS_SKYBLADE)) dam *= .8;
		//if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING) && IS_CLASS(victim, CLASS_THIEF)) dam *= 1.3;
		if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING))
		{
                        if(IS_IMMUNE(victim, IMM_LIGHTNING)) dam = dam / 2;
			xprintf(buf,"#0Your #oE#yle#7ct#yro#oB#yol#ot #Rstrikes #P$N, #0sending a shower of #ysp#7a#Wr#yks #0everywhere!  #0[#P%d#0]#n",dam);
			act(buf,ch,NULL,victim,TO_CHAR);
			xprintf(buf,"#C$n's #oE#yle#7ct#yro#oB#yol#ot #Rstrikes #0you, sending a shower of #ysp#7a#Wr#yks #0everywhere!  #0[#P%d#0]#n",dam);
			act(buf,ch,NULL,victim,TO_VICT);
			act("#C$n's #oE#yle#7ct#yro#oB#yol#ot #Rstrikes #P$N, #0sending a shower of #ysp#7a#Wr#yks #0everywhere!#n",ch,NULL,victim,TO_NOTVICT);
		}

		else if (IS_SET(ch->sohbits, SOH_SPECFIRE))
		{
                        if(IS_IMMUNE(victim, IMM_HEAT)) dam = dam / 2;
			xprintf(buf,"#0Your #rD#Re#ym#7o#Rn#rF#Ri#yr#Re #rs#Rco#7rc#Rhe#rs #y$N, #0consuming them in #Rf#yl#Ra#ym#Re#ys#R!  #0[#P%d#0]#n",dam);
			act(buf,ch,NULL,victim,TO_CHAR);
			xprintf(buf,"#y$n's #rD#Re#ym#7o#Rn#rF#Ri#yr#Re #rs#Rco#7rc#Rhe#rs you, #0consuming you in #Rf#yl#Ra#ym#Re#ys#R!  #0[#P%d#0]#n",dam);
			act(buf,ch,NULL,victim,TO_VICT);
			xprintf(buf,"#y$n's #rD#Re#ym#7o#Rn#rF#Ri#yr#Re #rs#Rco#7rc#Rhe#rs #y$N, #0consuming them in #Rf#yl#Ra#ym#Re#ys#R!");
			act(buf,ch,NULL,victim,TO_NOTVICT);
		}

		else if (IS_SET(ch->sohbits, SOH_SPECICE))
		{
                        if(IS_IMMUNE(victim, IMM_COLD)) dam = dam / 2;
			xprintf(buf,"#0Your #cI#Cc#Wy #cC#Ch#Wi#Cl#cl #Lblasts #P$N, #0pelting them with #7snow #0and #Cice!  #0[#P%d#0]#n",dam);
			act(buf,ch,NULL,victim,TO_CHAR);
			xprintf(buf,"#c$n's #cI#Cc#Wy #cC#Ch#Wi#Cl#cl #Lblasts #0you with ungodly force, #0pelting you with #7snow #0and #Cice!  #0[#P%d#0]#n",dam);
			act(buf,ch,NULL,victim,TO_VICT);
			xprintf(buf,"#c$n's #cI#Cc#Wy #cC#Ch#Wi#Cl#cl #Lblasts #0$N with ungodly force, #0pelting them with #7snow #0and #Cice!");
			act(buf,ch,NULL,victim,TO_NOTVICT);
		}

		hurt_person(ch, victim, dam);		
		if (!IS_NPC(victim)) ch->fight_timer += number_range(0,2);
		if (!IS_NPC(victim)) victim->fight_timer += number_range(0,2);
                WAIT_STATE(ch, 9 );
		if (IS_SET(ch->sohbits, SOH_SPECFIRE) && !IS_AFFECTED(victim, AFF_FLAMING) && victim->hit > 0)		
		{
		act("#RYou ignite in #rf#Rl#yam#Re#rs!#n",ch,NULL,victim,TO_VICT);
		act("#R$N #rignites in #rf#Rl#yam#Re#rs!#n",ch,NULL,victim,TO_CHAR);
		act("#R$N #rignites in #rf#Rl#yam#Re#rs!#n",ch,NULL,victim,TO_NOTVICT);
		SET_BIT(victim->affected_by, AFF_FLAMING);
		}
		return;
	}



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

		argument = one_argument( argument, arg );

		
        if ( ( victim = get_char_world( ch, arg ) ) == NULL )
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
	
		
        if ( ( victim = get_char_world( ch, arg ) ) == NULL )
        {send_to_char("The spell failed.\n\r",ch);return;}
		
		if ((victim == ch))
		{
		stc("#RYeah ok...\n\r",ch);
		return;
		}
  	if (is_safe(ch, victim))
	{
	stc("#oThey are safe from you!#n\n\r",ch);
	return;
	}
		if (IS_AFFECTED(victim, AFF_WEBBED))		
		{
		stc("#0They are already #gw#Gebbed!#n\n\r",ch);
		return;
		}

		else if (!IS_AFFECTED(victim, AFF_WEBBED))		
		{
		act("#gW#Geeds #0and #gv#Gines #0spring from the #gearth, e#Gngulfing #0you!",ch,NULL,victim,TO_VICT);
		act("#gW#Geeds #0and #gv#Gines #0spring from the #gearth, e#Gngulfing #c$N!#n",ch,NULL,victim,TO_CHAR);
		act("#gW#Geeds #0and #gv#Gines #0spring from the #gearth, e#Gngulfing #c$N!#n",ch,NULL,victim,TO_NOTVICT);
		SET_BIT(victim->affected_by, AFF_WEBBED);
		WAIT_STATE(victim, number_range(1,12));
		WAIT_STATE(ch, 12);
		}
return;
}

void do_wpnenchant(CHAR_DATA *ch, char *argument)
{
  OBJ_DATA *obj;
  OBJ_DATA *obj2;

  char arg[MAX_INPUT_LENGTH];

  one_argument(argument, arg);

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

  if (obj->item_type != ITEM_WEAPON)
  {
    send_to_char("You can only put this enchant on weapons!\n\r", ch);
    return;
  }

  if (IS_SET(obj->extra_flags, ITEM_ELECENCHANT) || IS_SET(obj->extra_flags, ITEM_ICEENCHANT) || IS_SET(obj->extra_flags, ITEM_FIREENCHANT))
  {
    send_to_char("#rThis item has already been #0Enchanted!#n.\n\r", ch);
    return;
  }

if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING))
{
	if ( (obj2 = get_obj_wear(ch,"lightning rune",TRUE)) == NULL )         
	{
	stc("#cYou don't have the proper rune!#n\n\r",ch);
	return;
	}
	
	SET_BIT(obj->extra_flags, ITEM_ELECENCHANT);
	stc("#yYour weapon suddenly begins to spark!#n\n\r", ch);
	act("#C$n's #0weapon suddenly begins to #yspark!#n",ch,NULL,NULL,TO_ROOM);
	extract_obj( obj2 );
}

else if (IS_SET(ch->sohbits, SOH_SPECFIRE))
{
	if ( (obj2 = get_obj_wear(ch,"fire Rune",TRUE)) == NULL )         
	{
	stc("#cYou don't have the proper rune!#n\n\r",ch);
	return;
	}
	
	SET_BIT(obj->extra_flags, ITEM_FIREENCHANT);
	stc("#RYour weapon suddenly begins to #rf#Rl#ya#Rm#re!#n\n\r", ch);
	act("#C$n's #0weapon suddenly begins to #rf#Rl#ya#Rm#re!#n",ch,NULL,NULL,TO_ROOM);
	extract_obj( obj2 );
}

else if (IS_SET(ch->sohbits, SOH_SPECICE))
{
	if ( (obj2 = get_obj_wear(ch,"ice rune",TRUE)) == NULL )         
	{
	stc("#cYou don't have the proper rune!#n\n\r",ch);
	return;
	}
	
	SET_BIT(obj->extra_flags, ITEM_ICEENCHANT);
	stc("#CYour weapon is suddenly covered in #cf#Cr#Wo#Cs#ct!#n\n\r", ch);
	act("#C$n's #0weapon is suddenly covered in #cf#Cr#Wo#Cs#ct!#n",ch,NULL,NULL,TO_ROOM);
	extract_obj( obj2 );
}

    WAIT_STATE(ch, 15);
	obj->timer = (ch->pcdata->powers[MAGE_SSU] * 3) + dice(1,3);
	return;
}

/*Spell invoking*/
void do_target( CHAR_DATA *ch, char *argument )
{
	CHAR_DATA *victim = NULL;
 	char arg[MAX_INPUT_LENGTH];
	argument = one_argument(argument,arg);
	
	if (IS_NPC(ch)) return;

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

	if (!IS_SET(ch->sohbits, SOH_SPELLREADY))
	{
	stc("#CYou don't have a spell readied!#n\n\r",ch);
	return;
	}
	


	if (IS_SET(ch->sohbits, SOH_SPELLTRUESIGHT))
	{
	REMOVE_BIT(ch->sohbits, SOH_SPELLTRUESIGHT);	
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);	
	do_magesight(ch,"");
	return;
	}

	/*Scry*/
	else if (IS_SET(ch->sohbits,SOH_SPELLSCRY))
	{
/*       char arg [MAX_INPUT_LENGTH];
	
	argument = one_argument( argument, arg );	*/

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

	REMOVE_BIT(ch->sohbits, SOH_SPELLSCRY);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_magescry(ch,arg);
	return;
	}
	/*Slow*/
	else if (IS_SET(ch->sohbits,SOH_SPELLSLOW))
	{
/*    char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	
	argument = one_argument( argument, arg );	*/

    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Invoke #pS#Plow #0on who?#n\n\r", ch );
	return;
    }
    
    if ( ( victim = get_char_room(ch, NULL, arg) ) == NULL)
    {
	stc("They aren't here.\n\r", ch);
	return;
    }
    if (IS_NPC(victim))
    {
    stc("Use that on someone with a brain.\n\r",ch);
    return;
    }	
	if (victim == ch)
	{
	stc("Not on yourself!\n\r",ch);
	return;
	}

	REMOVE_BIT(ch->sohbits, SOH_SPELLSLOW);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_mageslow(ch,arg);
	return;
	}
	
	/*Teleport*/
	else if (IS_SET(ch->sohbits,SOH_SPELLTELEPORT))
	{
/*    char arg [MAX_INPUT_LENGTH];
	
	argument = one_argument( argument, arg );	*/

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

	REMOVE_BIT(ch->sohbits, SOH_SPELLTELEPORT);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_magegoto(ch,arg);
	return;
	}
/*Haste*/
	else if (IS_SET(ch->sohbits,SOH_SPELLHASTE))
	{
/*    char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	
	argument = one_argument( argument, arg );*/

    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Invoke #lH#Laste #0on who?#n\n\r", ch );
	return;
    }
    	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	

    if (IS_NPC(victim))
    {
    stc("Use that on someone with a brain.\n\r",ch);
    return;
    }	

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

	REMOVE_BIT(ch->sohbits, SOH_SPELLHASTE);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_magehaste(ch,arg);
	return;
	}
/*Naturalism Starts Here*/
/*Eagle Eye*/

	else if (IS_SET(ch->sohbits,SOH_SPELLACCURACY))
	{
/*    char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	
	argument = one_argument( argument, arg );	*/

    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Invoke #gE#Gagle #gE#Gye #0on who?#n\n\r", ch );
	return;
    }
    	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	
    
	
	if (IS_NPC(victim))
    {
    stc("Use that on someone with a brain.\n\r",ch);
    return;
    }	
    if ( ( victim = get_char_room(ch, NULL, arg) ) == NULL)
    {
	stc("They aren't here.\n\r", ch);
	return;
    }
	

	REMOVE_BIT(ch->sohbits, SOH_SPELLACCURACY);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_mageaccuracy(ch,arg);
	return;
	}
/*Ogre Might*/
	else if (IS_SET(ch->sohbits,SOH_SPELLMIGHT))
	{
/*    char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	
	argument = one_argument( argument, arg );	*/

    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Invoke #rO#Rgre #rM#Right #0on who?#n\n\r", ch );
	return;
    }
    	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	

	if (IS_NPC(victim))
    {
    stc("Use that on someone with a brain.\n\r",ch);
    return;
    }	
    if ( ( victim = get_char_room(ch, NULL, arg) ) == NULL)
    {
	stc("They aren't here.\n\r", ch);
	return;
    }
	

	REMOVE_BIT(ch->sohbits, SOH_SPELLMIGHT);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_magemight(ch,arg);
	return;
	}

/*Light Shards*/
	else if (IS_SET(ch->sohbits,SOH_SPELLSHARDS))
	{
/*    char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	
	argument = one_argument( argument, arg );	*/

    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Invoke #cL#Ci#7g#Cht #cS#Ch#7a#Crds #0on who?#n\n\r", ch );
	return;
    }
    	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	

	if (IS_NPC(victim))
    {
    stc("Use that on someone with a brain.\n\r",ch);
    return;
    }	
    if ( ( victim = get_char_room(ch, NULL, arg) ) == NULL)
    {
	stc("They aren't here.\n\r", ch);
	return;
    }
	

	REMOVE_BIT(ch->sohbits, SOH_SPELLSHARDS);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_mageshards(ch,arg);
	return;
	}

/*Soul Mend*/
	else if (IS_SET(ch->sohbits,SOH_SPELLHEAL))
	{
/*    char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	
	argument = one_argument( argument, arg );	*/

    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Invoke #lS#Lo#7u#Ll #lM#Le#7n#Ld #0on who?#n\n\r", ch );
	return;
    }
    	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	

	if (IS_NPC(victim))
    {
    stc("Use that on someone with a brain.\n\r",ch);
    return;
    }	
    if ( ( victim = get_char_room(ch, NULL, arg) ) == NULL)
    {
	stc("They aren't here.\n\r", ch);
	return;
    }
	

	REMOVE_BIT(ch->sohbits, SOH_SPELLHEAL);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_mageheal(ch,arg);
	return;
	}

/*Regen*/
	else if (IS_SET(ch->sohbits,SOH_SPELLREGEN))
	{
/*    char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;
	
	argument = one_argument( argument, arg );	*/

    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Imbue #gR#Gegenerate #0into who?#n\n\r", ch );
	return;
    }
    	if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	

	if (IS_NPC(victim))
    {
    stc("Use that on someone with a brain.\n\r",ch);
    return;
    }	
    if ( ( victim = get_char_room(ch, NULL, arg) ) == NULL)
    {
	stc("They aren't here.\n\r", ch);
	return;
    }
	

	REMOVE_BIT(ch->sohbits, SOH_SPELLREGEN);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_mageregen(ch,arg);
	return;
	}
   
	/*Sorcery Starts Here*/
	
	else if (IS_SET(ch->sohbits,SOH_SPELLSORC1))
	{
	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC1);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_nerveblank(ch,"");
	return;
	}

	else if (IS_SET(ch->sohbits,SOH_SPELLSORC2))
	{
    if ( arg[0] == '\0' )
    {
	send_to_char( "#0Launch an #gA#Gcid #gA#Grrow #0at whom?#n\n\r", ch );
	return;
    }
    
	if ((victim == ch))
	{
	stc("#RYeah ok...#n\n\r",ch);
	return;
	}
	
		if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	


	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC2);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_acidarrow(ch,arg);
	return;
	}


	else if (IS_SET(ch->sohbits,SOH_SPELLSORC3))
	{
    if ( arg[0] == '\0' )
    {
	send_to_char( "#pE#Pther #pB#Plast #0who?#n\n\r", ch );
	return;
    }
    
	if ((victim == ch))
	{
	stc("#RYeah ok...#n\n\r",ch);
	return;
	}
	
		if ((victim = get_char_world(ch, arg)) == NULL)
	{
	stc("They arent here.\n\r",ch);
	return;
	}	


	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC3);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_etherblast(ch,arg);
	return;
	}

	else if (IS_SET(ch->sohbits,SOH_SPELLSORC4))
	{

    if ( arg[0] == '\0' )
    {
		if (IS_SET(ch->sohbits, SOH_SPECFIRE))
		send_to_char( "#0Invoke #rD#Remon #rF#Rire #0upon whom?#n\n\r", ch );
		if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING))		
		stc("#0Invoke #oE#yle#7ct#yro#oB#yo#7l#yt#W #0upon whom?#n\n\r",ch);
		if (IS_SET(ch->sohbits, SOH_SPECICE))
		stc("#0Invoke #cI#Cc#7y #cC#Ch#7i#Cl#7l #0upon whom?#n\n\r",ch);
	return;
    }
    

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

	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC4);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_magesorc4(ch,arg);
	return;
	}

	else if (IS_SET(ch->sohbits,SOH_SPELLSORC5))
	{

    if ( arg[0] == '\0' )
    {
	stc("#0Invoke #gE#Gngulf #0on whom?\n\r",ch);
	return;
    }

    

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

	REMOVE_BIT(ch->sohbits, SOH_SPELLSORC5);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_mageweb(ch,arg);
	return;
	}

//Magic Plating  THis one should prove interesting...
	else if (IS_SET(ch->sohbits,SOH_SPELLENCHANT5))
	{
	OBJ_DATA *obj;
	AFFECT_DATA paf;

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


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

  if (obj->item_type != ITEM_ARMOR)
  {
    send_to_char("You can only put this enchant on armor!\n\r", ch);
    return;
  }

  if (IS_SET(obj->quest, QUEST_PLATING))
  {
    send_to_char("#0This item has already been Magically Plated!#n.\n\r", ch);
    return;
  }


  paf.type           = 0;
  paf.duration       = -1;
  paf.location       = APPLY_AC;
  paf.modifier       = -50;
  paf.bitvector      = 0;
  affect_to_obj(obj, &paf);

  paf.type           = 0;
  paf.duration       = -1;
  paf.location       = APPLY_HIT;
  paf.modifier       = 500;
  paf.bitvector      = 0;
  affect_to_obj(obj, &paf);
		
	SET_BIT(obj->quest, QUEST_PLATING);

	act("#0The item is suddenly plated in a magical alloy!#n",ch,NULL,NULL,TO_CHAR);
	act("#0#P$n #0guestures at the object, surrounding it with a magical plating!#n",ch,NULL,NULL,TO_ROOM);

	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT5);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);

    WAIT_STATE(ch, 15);
	return;
	}


//Chaos Rune
	else if (IS_SET(ch->sohbits,SOH_SPELLENCHANT2))
	{
	OBJ_DATA *obj;
	OBJ_DATA *obj2;

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


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

  if (obj->item_type != ITEM_WEAPON && obj->item_type != ITEM_ARMOR)
  {
    send_to_char("You can only put this enchant on weapons or armor!\n\r", ch);
    return;
  }

		if ( obj->value[3] > 0 )
	    {
		send_to_char("That item already has a spell power.\n\r",ch);
		return;
	    }

		if ( (obj2 = get_obj_wear(ch,"clown rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		
		obj->value[3] = 15000;
		extract_obj( obj2 );	
	act("#0You engrave the #Prune #0into the item, surrounding it in a shield of #RC#0h#RA#0o#RS#0!#n",ch,NULL,NULL,TO_CHAR);
	act("#0#P$n #0engraves a #Prune #0into his item, surrounding it in a shield of #RC#0h#RA#0o#RS#0!#n",ch,NULL,NULL,TO_ROOM);

	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT2);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	return;
	}


//Elemental Rune
	else if (IS_SET(ch->sohbits,SOH_SPELLENCHANT1))
	{
	OBJ_DATA *obj;
    OBJ_DATA *obj2;
	char spellarg [MAX_STRING_LENGTH];

    argument = one_argument( argument, spellarg );

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

	if (spellarg[0] == '\0')
	{
	stc("#yShockshield, #gA#Gcid#gS#Ghield, #rF#Rireshiel#rd, #cI#Cce#cS#Chield#n\n\r",ch);
	return;	
	}

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

  if (obj->item_type != ITEM_WEAPON && obj->item_type != ITEM_ARMOR)
  {
    send_to_char("You can only put this enchant on weapons or armor!\n\r", ch);
    return;
  }

	if ( obj->value[3] > 0 )
	    {
		send_to_char("That item already has a spell power.\n\r",ch);
		return;
	    }

	if (!str_cmp( spellarg, "acidshield"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"acid rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		obj->value[3] = 13000;
		extract_obj( obj2 );	
	}

	else if (!str_cmp( spellarg, "fireshield"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"fire Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		obj->value[3] = 11000;
		extract_obj( obj2 );	
	act("#0You engrave the #Prune #0into the item, surrounding it in a #Rshield of flames!#n",ch,NULL,NULL,TO_CHAR);
	act("#0#P$n #0engraves a #Prune #0into his item, surrounding it in a #Rshield of flames!#n",ch,NULL,NULL,TO_ROOM);	
	}

	else if (!str_cmp( spellarg, "shockshield"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"lightning rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		obj->value[3] = 10000;
		extract_obj( obj2 );	
	act("#0You engrave the #Prune #0into the item, surrounding it in a #yshield of lightning!#n",ch,NULL,NULL,TO_CHAR);
	act("#0#P$n #0engraves a #Prune #0into his item, surrounding it in a #yshield of lightning!#n",ch,NULL,NULL,TO_ROOM);	
	}

	else if (!str_cmp( spellarg, "iceshield"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"ice rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		obj->value[3] = 12000;
		extract_obj( obj2 );	
	act("#0You engrave the #Prune #0into the item, surrounding it in a #Cshield of frost!#n",ch,NULL,NULL,TO_CHAR);
	act("#0#P$n #0engraves a #Prune #0into his item, surrounding it in a #Cshield of frost!#n",ch,NULL,NULL,TO_ROOM);
	}

	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT1);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	return;
	}

//Metta Rune Enchants
	else if (IS_SET(ch->sohbits,SOH_SPELLENCHANT3))
	{
	OBJ_DATA *obj;
    OBJ_DATA *obj2;
	char spellarg [MAX_STRING_LENGTH];

    argument = one_argument( argument, spellarg );

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

	if (spellarg[0] == '\0')
	{
    send_to_char("#0Spell affects: #CSeeInvis, #LFly, #RInfravision, #0Invis, #cPassdoor, #rProtection_vs_#0evil, #RProtection_vs_#Ggood, #7Sanct, #0Sneak\n\r",ch);
	return;	
	}

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

  if (obj->item_type != ITEM_WEAPON && obj->item_type != ITEM_ARMOR)
  {
    send_to_char("You can only put this enchant on weapons or armor!\n\r", ch);
    return;
  }

	if ((obj->item_type == ITEM_WEAPON && obj->value[0] > 0) || (obj->item_type == ITEM_ARMOR && obj->value[3] > 0 ))
	    {
		send_to_char("That item already has a spell power.\n\r",ch);
		return;
	    }

	if (!str_cmp( spellarg, "seeinvis"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 2000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 2;
		}
		
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "fly"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 3000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 3;
		}

		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "infravision"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 1000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 1;
		}
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "invis"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 5000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 5;
		}
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "passdoor"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 6000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 6;
		}
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "protection_vs_evil"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 7000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 7;
		}
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "protection_vs_good"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 139000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 139;
		}
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "sanct"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 8000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 8;
		}
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	if (!str_cmp( spellarg, "sneak"        ))
	{
		if ( (obj2 = get_obj_wear(ch,"Zarius Rune",TRUE)) == NULL )         
		{
		stc("#cYou don't have the proper rune!#n\n\r",ch);
		return;
		}
		if (obj->item_type == ITEM_WEAPON)
		{
		obj->value[0] = 9000;
		}

		else if (obj->item_type == ITEM_ARMOR)
		{
		obj->value[3] = 9;
		}
		extract_obj( obj2 );	
	stc("#PYou carve the Metta Rune into the object.#n\n\r",ch);
	}

	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT3);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	return;
	}


	else if (IS_SET(ch->sohbits,SOH_SPELLENCHANT4))
	{
	OBJ_DATA *obj;
    OBJ_DATA *obj2;

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

  if ((obj = get_obj_carry(ch, arg, ch)) == NULL)
  {
    send_to_char("You dont have that item.\n\r",ch);
    return;
  }
	
  if (obj->item_type != ITEM_WEAPON)
  {
    send_to_char("You can only put this enchant on weapons!\n\r", ch);
    return;
  }

  if (IS_SET(obj->extra_flags, ITEM_ELECENCHANT) || IS_SET(obj->extra_flags, ITEM_ICEENCHANT) || IS_SET(obj->extra_flags, ITEM_FIREENCHANT))
  {
    send_to_char("#rThis item has already been #0Enchanted!#n.\n\r", ch);
    return;
  }

	if (IS_SET(ch->sohbits, SOH_SPECICE))		
	{
		if ( (obj2 = get_obj_wear(ch,"ice rune",TRUE)) == NULL )         
		{
		stc("#cYou haven't the proper rune!#n\n\r",ch);
		return;
		}
	}

	else if (IS_SET(ch->sohbits, SOH_SPECFIRE))		
	{
		if ( (obj2 = get_obj_wear(ch,"fire Rune",TRUE)) == NULL )         
		{
		stc("#cYou haven't the proper rune!#n\n\r",ch);
		return;
		}
	}

	else if (IS_SET(ch->sohbits, SOH_SPECLIGHTNING))		
	{
		if ( (obj2 = get_obj_wear(ch,"lightning rune",TRUE)) == NULL )         
		{
		stc("#cYou haven't the proper rune!#n\n\r",ch);
		return;
		}
	}

	REMOVE_BIT(ch->sohbits, SOH_SPELLENCHANT4);
	REMOVE_BIT(ch->sohbits, SOH_SPELLREADY);
	do_wpnenchant(ch,arg);
	return;
	}


	else
    stc("You have no spell to cast!\n\r",ch);
   return;
}