GmudV33/
GmudV33/player/
GmudV33/public_html/
GmudV33/public_html/IMAGES/_VTI_CNF/
GmudV33/src_linux/Debug/
GmudV33/text/clans/
/***************************************************************************
 * (c) 2000 TAKA and the GHOST DANCER MUD PROJECT TEAM
 *
 * You may use this code provided you accept it's usage agreements
 *
 *  Usage agreement
 *  1) Is that you do not remove or modify this comment block.
 *  2) You must give due credit in the help files
 *  3) You email me at a_ghost_dancer@excite.com
 *     this helps me judge what snippets are popular and i welcome
 *     any ideas and if i find them worthy i may decide to code them
 *     for GHOST and distribute them on our page.
 *  4) You must abid by all other ROM and MERC licences
 *  5) Finally any improvements/bugs you find or make please share them
 *     so we can continue to put out quality snippets.
 *
 *  Last thank you to all the ROM amd MERC folks for this wounderful code
 *  base know as ROM.
 *
 *          The Ghost Dancer MUD Project Team and me TAKA thank you
 *          for your interest.
 *
 *          You can email me at:
 *          TAKA
 *          a_ghost_dancer@excite.com
 *
 * All these Spells are by Taka of Ghost Dancer MUD Project team!
 ***************************************************************************/


/***************************************************************************
 *  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.                                               *
 *                                                                         *
 *  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.                                                  *
 ***************************************************************************/

/***************************************************************************
*	ROM 2.4 is copyright 1993-1998 Russ Taylor			   *
*	ROM has been brought to you by the ROM consortium		   *
*	    Russ Taylor (rtaylor@hypercube.org)				   *
*	    Gabrielle Taylor (gtaylor@hypercube.org)			   *
*	    Brian Moore (zump@rom.org)					   *
*	By using this code, you have agreed to follow the terms of the	   *
*	ROM license, in the file Rom24/doc/rom.license			   *
***************************************************************************/

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "interp.h"
#include "magic.h"
#include "recycle.h"

/* SPELLS BY TAKA     */
/* Stone Meld */
void spell_stone_meld( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin is already as hard as a rock.\n\r",ch);
	else
	  act("$N is already as hard as can be.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -40;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin melds into stone.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin melds into stone.\n\r", victim );
    return;
}

/* smoke screen */
void spell_screen( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
		if (victim == ch)
			send_to_char("Your are surrounded by a wall of smoke.\n\r",ch);
		else
			act("$N is already surrounded by smoke.",ch,NULL,victim,TO_CHAR);
		return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = (-20 * (level / 26));
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n is hidden in smoke screen.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your are hidden in a smoke screen.\n\r", victim );
    return;
}

/* adrenaline spell */
void spell_adrenaline(int sn, int level, CHAR_DATA *ch, void *vo,int target)
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if (is_affected(victim,sn) || IS_AFFECTED(victim,AFF_BERSERK))
    {
	if (victim == ch)
	  send_to_char("You are already in a pumped up.\n\r",ch);
	else
	  act("$N is already in a pumped up.",ch,NULL,victim,TO_CHAR);
	return;
    }

    if (is_affected(victim,skill_lookup("calm")))
    {
	if (victim == ch)
	  send_to_char("Why don't you just relax for a while?\n\r",ch);
	else
	  act("$N doesn't look like $e wants to fight anymore.",
	      ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type 	 = sn;
    af.level	 = level;
    af.duration	 = level / 3;
    af.modifier  = level / 6;
    af.bitvector = 0;

    af.location  = APPLY_HITROLL;
    affect_to_char(victim,&af);

    af.location  = APPLY_DAMROLL;
    affect_to_char(victim,&af);

    af.modifier  = 10 * (level / 36);
    af.location  = APPLY_AC;
    affect_to_char(victim,&af);

    send_to_char("You are pumped up!\n\r",victim);
    act("$n gets a wild look in $s eyes!",victim,NULL,NULL,TO_ROOM);
}

/* quench thirst */
void spell_quench( int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;

	if ( IS_NPC(ch) )
		return;

	ch->pcdata->condition[COND_THIRST] = 40;
	ch->pcdata->condition[COND_FULL] += 20;
	send_to_char( "{RYou are no longer thirsty.{x\n\r", victim );
	return;
}

/* Eat as a spell satisfy hunger */
void spell_sate( int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;

	if ( IS_NPC(ch) )
		return;

	ch->pcdata->condition[COND_HUNGER] = 40;
	ch->pcdata->condition[COND_FULL] += 20;
	send_to_char( "{RYou are no longer hungery.{x\n\r", victim );
	return;
}


/*
 * acid rain spell by TAKA     ghost dancer
 */

void spell_acidrain( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	int        dam, i;

	for(i = 1; i < 8; i++)
	{
		dam = dice( level, 8 );

		if ( saves_spell( level, victim, DAM_ACID ) )
			dam /= 2;

		if ( victim->in_room == ch->in_room )
		{
			act("{RDrops of {Dacid {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_ROOM);
			act("{RDrops of {Dacid {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_CHAR);
			damage( ch, victim, dam, sn, DAM_ACID,TRUE );
		}
	}
	return;
}

/*
 * ice rain spell by TAKA     ghost dancer
 */

void spell_icerain( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	int        dam, i;

	for(i = 1; i < 8; i++)
	{
		dam = dice( level, 8 );

		if ( saves_spell( level, victim, DAM_COLD ) )
			dam /= 2;

		if ( victim->in_room == ch->in_room )
		{
			act("{RDrops of {Dice {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_ROOM);
			act("{RDrops of {Dice {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_CHAR);
			damage( ch, victim, dam, sn, DAM_COLD,TRUE );
		}
	}
	return;
}


/*
 * fire rain spell by TAKA     ghost dancer
 */

void spell_firerain( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	int        dam, i;

	for(i = 1; i < 8; i++)
	{
		dam = dice( level, 8 );

		if ( saves_spell( level, victim, DAM_FIRE ) )
			dam /= 2;

		if ( victim->in_room == ch->in_room )
		{
			act("{RDrops of {rfire {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_ROOM);
			act("{RDrops of {rfire {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_CHAR);
			damage( ch, victim, dam, sn, DAM_FIRE,TRUE );
		}
	}
	return;
}

/*
 * acid storm spell by TAKA     ghost dancer
 */

void spell_acidstorm( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	int        dam, i;

	for(i = 1; i < 4; i++)
	{
		dam = dice( (level / 2), 8 );

		if ( saves_spell( level, victim, DAM_ACID ) )
			dam /= 2;

		if ( victim->in_room == ch->in_room )
		{
			act("{RDrops of {Dacid {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_ROOM);
			act("{RDrops of {Dacid {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_CHAR);
			damage( ch, victim, dam, sn, DAM_ACID,TRUE );
		}
	}
	return;
}

/*
 * ice storm spell by TAKA     ghost dancer
 */

void spell_icestorm( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	int        dam, i;

	for(i = 1; i < 4; i++)
	{
		dam = dice( (level / 2), 8 );

		if ( saves_spell( level, victim, DAM_COLD ) )
			dam /= 2;

		if ( victim->in_room == ch->in_room )
		{
			act("{RDrops of {Dice {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_ROOM);
			act("{RDrops of {Dice {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_CHAR);
			damage( ch, victim, dam, sn, DAM_COLD,TRUE );
		}
	}
	return;
}


/*
 * fire storm spell by TAKA     ghost dancer
 */

void spell_firestorm( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	int        dam, i;

	for(i = 1; i < 4; i++)
	{
		dam = dice( (level / 2), 8 );

		if ( saves_spell( level, victim, DAM_FIRE ) )
			dam /= 2;

		if ( victim->in_room == ch->in_room )
		{
			act("{RDrops of {rfire {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_ROOM);
			act("{RDrops of {rfire {Brain {Rshower down upon {W$N!{x",ch,NULL,victim,TO_CHAR);
			damage( ch, victim, dam, sn, DAM_FIRE,TRUE );
		}
	}
	return;
}

/*
	skin spells by TAKA
 */

void spell_mud_skin( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin is already as mud.\n\r",ch);
	else
	  act("$N already has the texture of mud.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -10;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin turns to mud.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin turns to mud.\n\r", victim );
    return;
}

void spell_moss_skin( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin is already covered in moss.\n\r",ch);
	else
	  act("$N already has the texture of moss.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -15;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin turns to moss.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin turns to moss.\n\r", victim );
    return;
}

void spell_bark_skin( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin is already covered in bark.\n\r",ch);
	else
	  act("$N is already as the texture of bark.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -20;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin is covered by bark.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin is covered by bark.\n\r", victim );
    return;
}

void spell_steel_skin( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin is already protected by steel.\n\r",ch);
	else
	  act("$N is already protected by steel.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -50;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin is covered by steel.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin is covered by steel.\n\r", victim );
    return;
}

void spell_emerald_skin( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin already has a green glow.\n\r",ch);
	else
	  act("$N already has a green glow.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -60;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin is protected by a greenish arua.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin is protected by a greenish aura.\n\r", victim );
    return;
}

void spell_ruby_skin( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin already has a red glow.\n\r",ch);
	else
	  act("$N already has a red glow.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -70;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin is protected by a redish arua.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin is protected by a redish aura.\n\r", victim );
    return;
}

void spell_diamond_skin( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if (victim == ch)
	  send_to_char("Your skin already has a brilliant glow.\n\r",ch);
	else
	  act("$N already has a brilliant glow.",ch,NULL,victim,TO_CHAR);
	return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_AC;
    af.modifier  = -80;
    af.bitvector = 0;
    affect_to_char( victim, &af );
    act( "$n's skin is protected by a brilliant arua.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your skin is protected by a brilliant aura.\n\r", victim );
    return;
}


void spell_hit( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
	AFFECT_DATA af;
	CHAR_DATA *victim = (CHAR_DATA *) vo;

   	if ( is_affected( victim, sn ) )
	{
		send_to_char("They already hit more often.\n\r", ch);
      	return;
	}

   af.type = sn;
   af.duration = level / 30;
   af.location = APPLY_HITROLL;
   af.modifier = 3;
   af.bitvector = 0;
   affect_to_char( victim, &af );
   send_to_char( "You are luckier.\n\r", ch );
   return;
}

void spell_damage( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
	AFFECT_DATA af;
	CHAR_DATA *victim = (CHAR_DATA *) vo;

	if ( is_affected( victim, sn ) )
	{
		send_to_char("They already do more damage.\n\r", ch);
		return;
	}

	af.type = sn;
	af.duration = level / 30;
	af.location = APPLY_DAMROLL;
	af.modifier = 3;
	af.bitvector = 0;
	affect_to_char( victim, &af );
	send_to_char( "You are more powerful.\n\r", ch );
	return;
}


void spell_ego_whip( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   int dam;
   CHAR_DATA *victim = (CHAR_DATA *) vo;

   if ( victim == ch )
   {
		send_to_char("That would be dumb!", ch);
		return;
   }

   dam = 50 + ( 40 * ( level / 25));

   if ( saves_spell( level, victim, DAM_MENTAL ) )
         dam /= 2;

   damage( ch, victim, dam, sn, DAM_MENTAL, TRUE );
   return;
}


void spell_mind_flail( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   int dam;
   CHAR_DATA *victim = (CHAR_DATA *) vo;

   if ( victim == ch )
   {
		send_to_char("That would be dumb!", ch);
		return;
   }


   dam = 5 + ( 10 * (( level / 25) + 1) );

   if ( saves_spell( level, victim, DAM_MENTAL ) )
         dam /= 2;


   damage( ch, victim, dam, sn, DAM_MENTAL, TRUE );
   return;
}

void spell_psychic_thrust( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   int dam;
   CHAR_DATA *victim = (CHAR_DATA *) vo;

   if ( victim == ch )
   {
		send_to_char("That would be dumb!", ch);
		return;
   }


   dam = 5 + ( 20 * (( level / 25) + 1) );

   if ( saves_spell( level, victim, DAM_MENTAL ) )
         dam /= 2;

   damage( ch, victim, dam, sn, DAM_MENTAL, TRUE );

   return;
}


void spell_psychic_crush( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   int dam;
   CHAR_DATA *victim = (CHAR_DATA *) vo;

   if ( victim == ch )
   {
		send_to_char("That would be dumb!", ch);
		return;
   }


   dam = (level / 2) + ( 30 * (( level / 25)+1) );

   if ( saves_spell( level, victim, DAM_MENTAL ) )
         dam /= 2;

   damage( ch, victim, dam, sn, DAM_MENTAL, TRUE );
   return;
}

void spell_mystic_armor( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   CHAR_DATA *victim = (CHAR_DATA *) vo;
   AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
	{
		send_to_char("They are already armored", ch);
         return;
	}

    af.type      = sn;
    af.duration  = 4 + (level/3);
    af.location  = APPLY_AC;
    af.modifier  = -10 - (level / 8);
    af.bitvector = 0;
    affect_to_char( victim, &af );

	if ( ch != victim )
	{
		act( "$n is surrounded by $N's mystic armour.", victim, NULL, ch, TO_ROOM );
		act( "$N is surrounded by your mystic armour.", ch, NULL, victim, TO_CHAR );
		act( "You are surrounded by $N's mystic armour.", victim, NULL, ch, TO_CHAR );
	}
	else
	{
		act( "$n is surrounded by a mystic armour.", victim, NULL, ch, TO_ROOM );
		send_to_char("You are protected by a mystic armor!", ch);
	}
	return;
}

void spell_bloody_tears( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   	CHAR_DATA *victim = (CHAR_DATA *) vo;

    if ( IS_AFFECTED(victim, AFF_BLIND)
		|| saves_spell( level, victim, DAM_OTHER )
		|| is_affected( ch, sn ) )
	{
		send_to_char("You Failed!", ch);
		return;
	}

    act ( "$n's eyes start bleeding!", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your eyes start bleeding!\n\r", victim );
    spell_blindness( skill_lookup( "blindness"), (level / 10), ch, vo, TARGET_CHAR );

    damage( ch, victim, (level/2), sn, DAM_MENTAL, FALSE );		/* -1 = no dam message */

	spell_blindness(gsn_blindness, level / 3, ch, (void *) victim,TARGET_CHAR);

	return;
}


void spell_mind_bolt( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
   CHAR_DATA *victim = (CHAR_DATA *) vo;
   int cnt, foo, dam;


   cnt = ( level / 20 ) + 1;
   for ( foo = 0; foo < cnt; foo++)
   {
      if ( number_range( 0,99 ) < 20 )
        continue;

      dam = number_range( level/4, level * 2/3 );

      if ( saves_spell( level, victim, DAM_MENTAL) )
         dam /= 2;

      damage( ch, victim, dam, sn, DAM_MENTAL, TRUE );		/* -1 = no dam message */

   }
   return;
}

void spell_fighting_trance( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if (is_affected( victim, sn )
    	|| ((level * 2/3) > victim->level
		&& !IS_IMMORTAL( ch )) )
		{
			send_to_char("You failed!", ch);
			return;
		}

    af.type      = sn;
    af.duration  = 6 + ( level / 20 );
    af.location  = APPLY_HITROLL;
    af.modifier  = level / 10;
    af.bitvector = AFF_SANCTUARY;
    affect_to_char( victim, &af );

    af.location  = APPLY_SAVING_SPELL;
    af.modifier  = 0 - level / 8;
    affect_to_char( victim, &af );

    af.location = APPLY_DAMROLL;
    af.modifier = level / 10;
    affect_to_char( victim, &af );

    af.location = APPLY_AC;
    af.modifier = -10 - (level / 10);
    affect_to_char( victim, &af );

    send_to_char( "You feel ready for battle.\n\r", victim );
    act( "$n looks ready for battle.", victim, NULL, NULL, TO_ROOM );

/*    if ( ch != victim )
		send_to_char( "You are ready for battle.\n\r", ch ); */

    return;
}


void spell_ice_bolt( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;

    dam = 150 + dice( level/4, 12 );

    if ( saves_spell( level, victim, DAM_COLD ) )
      dam = (dam * 100) / 120;

	act( "$N struck in the chest by a bolt of ice from $n!", ch, NULL, ch, TO_NOTVICT );
	send_to_char( "You strike $n with a large bolt of ice!\n\r", ch );

    damage( ch, victim, dam, sn, DAM_COLD, TRUE );

    return;
}

void spell_fire_bolt( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;

    dam = 150 + dice( level/4, 12 );

    if ( saves_spell( level, victim, DAM_FIRE ) )
      dam = (dam * 100) / 120;

	act( "$N struck in the chest by a bolt of fire from $n!", ch, NULL, ch, TO_NOTVICT );
	send_to_char( "You strike $n with a large bolt of fire!\n\r", ch );

    damage( ch, victim, dam, sn, DAM_FIRE, TRUE );

    return;
}

void spell_gas_bolt( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;

    dam = 150 + dice( level/4, 12 );

    if ( saves_spell( level, victim, DAM_OTHER ) )
      dam = (dam * 100) / 120;

	act( "$N struck in the chest by a bolt of gas from $n!", ch, NULL, ch, TO_NOTVICT );
	send_to_char( "You strike $n with a large bolt of gas!\n\r", ch );

    damage( ch, victim, dam, sn, DAM_OTHER, TRUE );

    return;
}

void spell_lightning_bolt( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;

    dam = 150 + dice( level/4, 12 );

    if ( saves_spell( level, victim, DAM_LIGHTNING ) )
      dam = (dam * 100) / 120;

	act( "$N struck in the chest by a bolt of lightning from $n!", ch, NULL, ch, TO_NOTVICT );
	send_to_char( "You strike $n with a large bolt of lightning!\n\r", ch );

    damage( ch, victim, dam, sn, DAM_LIGHTNING, TRUE );

    return;
}

void spell_acid_bolt( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;

    dam = 150 + dice( level/4, 12 );

    if ( saves_spell( level, victim, DAM_ACID ) )
      dam = (dam * 100) / 120;

	act( "$N struck in the chest by a bolt of acid from $n!", ch, NULL, ch, TO_NOTVICT );
	send_to_char( "You strike $n with a large bolt of acid!\n\r", ch );

    damage( ch, victim, dam, sn, DAM_ACID, TRUE );

    return;
}

void spell_holy_bolt( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;

    dam = 150 + dice( level/4, 12 );

    if ( saves_spell( level, victim, DAM_HOLY ) && saves_spell( level, victim, DAM_LIGHTNING))
      dam = (dam * 100) / 120;

	act( "$N struck in the chest by a bolt of holy light from $n!", ch, NULL, ch, TO_NOTVICT );
	send_to_char( "You strike $n with a large bolt of holy light!\n\r", ch );

    damage( ch, victim, dam, sn, DAM_HOLY, TRUE );

    return;
}




void spell_fireblast( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;


      dam         = ( level /2 )
                    +dice( ( level/6 ), 10 )
                    +dice( ( level/6 ), 10 );
      act( "A blast of fire flies from $n's hands!", ch, NULL, NULL, TO_ROOM );
      send_to_char( "A blast of fire flies from your hands!\n\r", ch );

    if ( saves_spell( level, victim, DAM_FIRE ) )
  		dam /= 2;

    act( "$n is struck by the blast of fire!!", victim, NULL, NULL, TO_ROOM );
    send_to_char( "You are struck by the fire blast!!\n\r", victim );

    damage( ch, victim, dam, sn, DAM_FIRE, TRUE );

    return;
}


void spell_iceblast( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
	int dam;


      dam         = ( level /2 )
                    +dice( ( level/6 ), 10 )
                    +dice( ( level/6 ), 10 );
      act( "A blast of ice flies from $n's hands!", ch, NULL, NULL, TO_ROOM );
      send_to_char( "A blast of ice flies from your hands!\n\r", ch );

    if ( saves_spell( level, victim, DAM_COLD ) )
  		dam /= 2;

    act( "$n is struck by the blast of ice!!", victim, NULL, NULL, TO_ROOM );
    send_to_char( "You are struck by the ice blast!!\n\r", victim );

    damage( ch, victim, dam, sn, DAM_COLD, TRUE );

    return;
}

void spell_gasblast( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
	int dam;


      dam         = ( level /2 )
                    +dice( ( level/6 ), 10 )
                    +dice( ( level/6 ), 10 );
      act( "A blast of gas flies from $n's hands!", ch, NULL, NULL, TO_ROOM );
      send_to_char( "A blast of gas flies from your hands!\n\r", ch );

    if ( saves_spell( level, victim, DAM_OTHER ) )
  		dam /= 2;

    act( "$n is struck by the blast of gas!!", victim, NULL, NULL, TO_ROOM );
    send_to_char( "You are struck by the gas blast!!\n\r", victim );

    damage( ch, victim, dam, sn, DAM_OTHER, TRUE );

    return;
}

void spell_electricblast( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
	int dam;


      dam         = ( level /2 )
                    +dice( ( level/6 ), 10 )
                    +dice( ( level/6 ), 10 );
      act( "A blast of electricity flies from $n's hands!", ch, NULL, NULL, TO_ROOM );
      send_to_char( "A blast of electricity flies from your hands!\n\r", ch );

    if ( saves_spell( level, victim, DAM_SHOCK ) )
  		dam /= 2;

    act( "$n is struck by the blast of electricity!!", victim, NULL, NULL, TO_ROOM );
    send_to_char( "You are struck by the electric blast!!\n\r", victim );

    damage( ch, victim, dam, sn, DAM_SHOCK, TRUE );

    return;
}

void spell_lightningblast( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
	int dam;


      dam         = ( level /2 )
                    +dice( ( level/6 ), 10 )
                    +dice( ( level/6 ), 10 );
      act( "A blast of lightning flies from $n's hands!", ch, NULL, NULL, TO_ROOM );
      send_to_char( "A blast of lightning flies from your hands!\n\r", ch );

    if ( saves_spell( level, victim, DAM_LIGHTNING ) )
  		dam /= 2;

    act( "$n is struck by the blast of lightning!!", victim, NULL, NULL, TO_ROOM );
    send_to_char( "You are struck by the lightning blast!!\n\r", victim );

    damage( ch, victim, dam, sn, DAM_LIGHTNING, TRUE );

    return;
}

void spell_holyblast( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
	int dam;


      dam         = ( level /2 )
                    +dice( ( level/6 ), 10 )
                    +dice( ( level/6 ), 10 );
      act( "A blast of holy light flies from $n's hands!", ch, NULL, NULL, TO_ROOM );
      send_to_char( "A blast of holy light flies from your hands!\n\r", ch );

    if ( saves_spell( level, victim, DAM_HOLY ) )
  		dam /= 2;

    act( "$n is struck by the blast of holy light!!", victim, NULL, NULL, TO_ROOM );
    send_to_char( "You are struck by the blast of holy light!!\n\r", victim );

    damage( ch, victim, dam, sn, DAM_HOLY, TRUE );

    return;
}

void spell_more_xp( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
		if (victim == ch)
	  		send_to_char("You feel mor experienced.\n\r",ch);
		else
	  		act("$N already has hightened experience.",ch,NULL,victim,TO_CHAR);
		return;
    }

    af.where     = TO_AFFECTS;
    af.type      = sn;
    af.level     = level;
    af.duration  = level;
    af.location  = APPLY_EXP;
    af.modifier  = 0;
    af.bitvector = 0;
    affect_to_char( victim, &af );

    act( "$n's experience becomes greater.", victim, NULL, NULL, TO_ROOM );
    send_to_char( "Your experience becomes greater.\n\r", victim );

    return;
}

void spell_acid_cloud( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim;
    int dam;

    if ( !IS_NPC(ch)
    &&   ch->level < skill_table[sn].skill_level[ch->class] )
    {
	send_to_char(
	    "You better leave the dragon breaths to the dragons.\n\r", ch );
	return;
    }

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

    if (ch->position == POS_STUNNED)
    {
        send_to_char("You're still a little woozy.\n\r",ch);
        return;
    }

    dam = number_range( ch->level+1, ch->level+1000 );
    WAIT_STATE( ch, skill_table[sn].beats );
    if ( get_skill(ch,sn) > number_percent())
    {
	damage(ch, victim, dam, sn, DAM_ACID,TRUE);
	check_improve(ch,sn,TRUE,1);
    }
    else
    {
	damage( ch, victim, 0, sn, DAM_ACID,TRUE);
	check_improve(ch,sn,FALSE,1);
    }
    return;
}

void spell_fire_cloud( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim;
    int dam;

    if ( !IS_NPC(ch)
    &&   ch->level < skill_table[sn].skill_level[ch->class] )
    {
	send_to_char(
	    "You better leave the dragon breaths to the dragons.\n\r", ch );
	return;
    }

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

    if (ch->position == POS_STUNNED)
    {
        send_to_char("You're still a little woozy.\n\r",ch);
        return;
    }

    dam = number_range( ch->level+1, ch->level+1000 );
    WAIT_STATE( ch, skill_table[sn].beats );
    if ( get_skill(ch,sn) > number_percent())
    {
	damage(ch, victim, dam, sn, DAM_FIRE,TRUE);
	check_improve(ch,sn,TRUE,1);
    }
    else
    {
	damage( ch, victim, 0, sn, DAM_FIRE,TRUE);
	check_improve(ch,sn,FALSE,1);
    }
    return;
}

void spell_frost_cloud( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim;
    int dam;

    if ( !IS_NPC(ch)
    &&   ch->level < skill_table[sn].skill_level[ch->class] )
    {
	send_to_char(
	    "You better leave the dragon breaths to the dragons.\n\r", ch );
	return;
    }

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

    if (ch->position == POS_STUNNED)
    {
        send_to_char("You're still a little woozy.\n\r",ch);
        return;
    }

    dam = number_range( ch->level+1, ch->level+1000 );
    WAIT_STATE( ch, skill_table[sn].beats );
    if ( get_skill(ch,sn) > number_percent())
    {
	damage(ch, victim, dam, sn, DAM_COLD,TRUE);
	check_improve(ch,sn,TRUE,1);
    }
    else
    {
	damage( ch, victim, 0, sn, DAM_COLD,TRUE);
	check_improve(ch,sn,FALSE,1);
    }
    return;
}

void spell_gas_cloud( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim;
    int dam;

    if ( !IS_NPC(ch)
    &&   ch->level < skill_table[sn].skill_level[ch->class] )
    {
	send_to_char(
	    "You better leave the dragon breaths to the dragons.\n\r", ch );
	return;
    }

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

    if (ch->position == POS_STUNNED)
    {
        send_to_char("You're still a little woozy.\n\r",ch);
        return;
    }

    dam = number_range( ch->level+1, ch->level+1000 );
    WAIT_STATE( ch, skill_table[sn].beats );
    if ( get_skill(ch,sn) > number_percent())
    {
	damage(ch, victim, dam, sn, DAM_OTHER,TRUE);
	check_improve(ch,sn,TRUE,1);
    }
    else
    {
	damage( ch, victim, 0, sn, DAM_OTHER,TRUE);
	check_improve(ch,sn,FALSE,1);
    }
    return;
}

void spell_lightning_cloud( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim;
    int dam;

    if ( !IS_NPC(ch)
    &&   ch->level < skill_table[sn].skill_level[ch->class] )
    {
	send_to_char(
	    "You better leave the dragon breaths to the dragons.\n\r", ch );
	return;
    }

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

    if (ch->position == POS_STUNNED)
    {
        send_to_char("You're still a little woozy.\n\r",ch);
        return;
    }

    dam = number_range( ch->level+1, ch->level+1000 );
    WAIT_STATE( ch, skill_table[sn].beats );
    if ( get_skill(ch,sn) > number_percent())
    {
	damage(ch, victim, dam, sn, DAM_LIGHTNING,TRUE);
	check_improve(ch,sn,TRUE,1);
    }
    else
    {
	damage( ch, victim, 0, sn, DAM_LIGHTNING,TRUE);
	check_improve(ch,sn,FALSE,1);
    }
    return;
}

void spell_bite( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
    CHAR_DATA *victim;
    int dam;

    if ( !IS_NPC(ch)
    &&   ch->level < skill_table[sn].skill_level[ch->class] )
    {
	send_to_char(
	    "You better leave the dragon breaths to the dragons.\n\r", ch );
	return;
    }

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

    if (ch->position == POS_STUNNED)
    {
        send_to_char("You're still a little woozy.\n\r",ch);
        return;
    }

    dam = number_range( ch->level+1, ch->level+1000 );
    WAIT_STATE( ch, skill_table[sn].beats );
    if ( get_skill(ch,sn) > number_percent())
    {
	damage(ch, victim, dam, sn, DAM_PIERCE,TRUE);
	check_improve(ch,sn,TRUE,1);
    }
    else
    {
	damage( ch, victim, 0, sn, DAM_PIERCE,TRUE);
	check_improve(ch,sn,FALSE,1);
    }
    return;
}