/
Archipelago/
Archipelago/doc/
Archipelago/lib/misc/
Archipelago/lib/plrobjs/
Archipelago/lib/plrobjs/P-T/
Archipelago/lib/world/mob/
Archipelago/lib/world/obj/
Archipelago/lib/world/shp/
Archipelago/lib/world/wld/
Archipelago/lib/world/zon/
Archipelago/slave/
/* ************************************************************************
*   File: spells.c                                      Part of CircleMUD *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993 by the Trustees of the Johns Hopkins University     *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */
/* Archipelago changes by Alastair J. Neil Copyright (C) 1993, 94, 95, 96 */

#include <stdio.h>

#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "db.h"
#include "interpreter.h"
#include "spells.h"
#include "handler.h"


/* Global data */
extern struct room_data *world;
extern struct char_data *character_list;
extern struct spell_info_type spell_info[MAX_SPL_LIST];
extern struct obj_data *object_list;



/* extern functions */
int     spell_lev(struct char_data *caster, int spell);
void	say_spell( struct char_data *ch, int si );
bool saves_spell(struct char_data *ch, sh_int spell, int versus_lev);
int	add_follower(struct char_data *ch, struct char_data *victim);


ACASTN(cast_quench_thirst)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_quench_thirst(spell_no, level, ch, 0, tar_obj);
      break;
   case SPELL_TYPE_CANTRIP:
      spell_quench_thirst(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_SCROLL:
      spell_quench_thirst(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_WAND:
      spell_quench_thirst(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;
   case SPELL_TYPE_ROD:
      spell_quench_thirst(spell_no, 0-number(15,45), ch, 0, tar_obj);
      break;      
   default :
      logg("SYSERR: Serious screw-up in quench thirst!");
      break;
   }
}
ACASTN(cast_enchant1)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_enchant1(spell_no, level, ch, 0, tar_obj);
      break;
   case SPELL_TYPE_CANTRIP:
      spell_enchant1(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_SCROLL:
      spell_enchant1(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_WAND:
      spell_enchant1(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;
   case SPELL_TYPE_ROD:
      spell_enchant1(spell_no, 0-number(15,45), ch, 0, tar_obj);
      break;      
   default :
      logg("SYSERR: Serious screw-up in Edge of the Razor!");
      break;
   }
}
ACASTN(cast_detect_magic1)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_detect_magic1(spell_no, level, ch, 0, tar_obj);
      break;
   case SPELL_TYPE_CANTRIP:
      spell_detect_magic1(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_SCROLL:
      spell_detect_magic1(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_WAND:
      spell_detect_magic1(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;
   case SPELL_TYPE_ROD:
      spell_detect_magic1(spell_no, 0-number(15,45), ch, 0, tar_obj);
      break;      
   default :
      logg("SYSERR: Serious screw-up in Sense the Nature of Vis!");
      break;
   }
}
ACASTN(cast_detect_magic2)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_detect_magic2(spell_no, level, ch, 0, tar_obj);
      break;
   case SPELL_TYPE_CANTRIP:
      spell_detect_magic2(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_SCROLL:
      spell_detect_magic2(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_WAND:
      spell_detect_magic2(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;
   case SPELL_TYPE_ROD:
      spell_detect_magic2(spell_no, 0-number(15,45), ch, 0, tar_obj);
      break;      
   default :
      logg("SYSERR: Serious screw-up in Scales of the Magical Weight!");
      break;
   }
}
ACASTN(cast_detect_magic3)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_detect_magic3(spell_no, level, ch, 0, 0);
      break;
   case SPELL_TYPE_CANTRIP:
      spell_detect_magic3(spell_no, 0-number(0,30), ch, 0, 0);
      break;      
   case SPELL_TYPE_SCROLL:
      spell_detect_magic3(spell_no, 0-number(0,30), ch, 0, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_detect_magic3(spell_no, 0-number(0,30), ch, 0, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_detect_magic3(spell_no, 0-number(15,45), ch, 0, 0);
      break;      
   default :
      logg("SYSERR: Serious screw-up in Perceive Scent of Magic!");
      break;
   }
}
ACASTN(cast_feast_for_five)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_feast_for_five(spell_no, level, ch, 0, tar_obj);
      break;
   case SPELL_TYPE_CANTRIP:
      spell_feast_for_five(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_SCROLL:
      spell_feast_for_five(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_WAND:
      spell_feast_for_five(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;
   case SPELL_TYPE_ROD:
      spell_feast_for_five(spell_no, 0-number(15,45), ch, 0, tar_obj);
      break;      
   default :
      logg("SYSERR: Serious screw-up in feast for five men!");
      break;
   }
}
ACASTN(cast_walking_corpse)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_walking_corpse(spell_no, level, ch, 0, tar_obj);
      break;
   case SPELL_TYPE_CANTRIP:
      spell_walking_corpse(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_SCROLL:
      spell_walking_corpse(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;      
   case SPELL_TYPE_WAND:
      spell_walking_corpse(spell_no, 0-number(0,30), ch, 0, tar_obj);
      break;
   case SPELL_TYPE_ROD:
      spell_walking_corpse(spell_no, 0-number(15,45), ch, 0, tar_obj);
      break;      
   default :
      logg("SYSERR: Serious screw-up in the walking corpse!");
      break;
   }
}
ACASTN(cast_bind_wounds)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_bind_wounds(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_bind_wounds(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_bind_wounds(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_bind_wounds(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_bind_wounds(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_bind_wounds(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_bind_wounds(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_bind_wounds(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in bind wounds!");
      break;
   }
}
ACASTN(cast_lungs_ot_fish)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_lungs_ot_fish(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_lungs_ot_fish(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_lungs_ot_fish(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_lungs_ot_fish(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_lungs_ot_fish(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_lungs_ot_fish(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_lungs_ot_fish(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_lungs_ot_fish(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in lungs of the fish!");
      break;
   }
}
ACASTN(cast_dispel_invis)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_dispel_invis(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_dispel_invis(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_dispel_invis(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_dispel_invis(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_dispel_invis(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_dispel_invis(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_dispel_invis(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_dispel_invis(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in Restoration of the Lost Image!");
      break;
   }
}
ACASTN(cast_detect_invis)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_detect_invis(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_detect_invis(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_detect_invis(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_detect_invis(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_detect_invis(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_detect_invis(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_detect_invis(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_detect_invis(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in Discern Image of Truth and Falsehood!");
      break;
   }
}
ACASTN(cast_invis1)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_invis1(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_invis1(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_invis1(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_invis1(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_invis1(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_invis1(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_invis1(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_invis1(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in Invis of the Standing Wizard!");
      break;
   }
}
ACASTN(cast_invis2)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_invis2(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_invis2(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_invis2(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_invis2(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_invis2(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_invis2(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_invis2(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_invis2(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in Chamber of invisibility!");
      break;
   }
}
ACASTN(cast_invis3)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_invis3(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_invis3(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_invis3(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_invis3(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_invis3(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_invis3(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_invis3(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_invis3(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in Veil of Invisibility!");
      break;
   }
}

ACASTN(cast_gift_of_vigour)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   return;
      spell_gift_of_vigour(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_gift_of_vigour(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_gift_of_vigour(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_gift_of_vigour(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_gift_of_vigour(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_gift_of_vigour(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_gift_of_vigour(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_gift_of_vigour(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in gift of vigour!");
      break;
   }
}
ACASTN(cast_endurance)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
       spell_endurance(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_endurance(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_endurance(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_endurance(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_endurance(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_endurance(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_endurance(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_endurance(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in endurance of the beserker!");
      break;
   }
}
ACASTN(cast_healing_touch)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
       spell_healing_touch(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_healing_touch(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_healing_touch(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_healing_touch(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_healing_touch(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_healing_touch(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_healing_touch(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_healing_touch(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in healing touch!");
      break;
   }
}
ACASTN(cast_soothe_pains_ot_beast)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
       spell_soothe_pains_ot_beast(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_soothe_pains_ot_beast(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_soothe_pains_ot_beast(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_soothe_pains_ot_beast(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_soothe_pains_ot_beast(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_soothe_pains_ot_beast(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_soothe_pains_ot_beast(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_healing_touch(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in soothe the pains of the beast!");
      break;
   }
}
ACASTN(cast_body_made_whole)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
       spell_body_made_whole(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_body_made_whole(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_body_made_whole(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_body_made_whole(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_body_made_whole(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_body_made_whole(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_body_made_whole(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_body_made_whole(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in BODY_MADE_WHOLE!");
      break;
   }
}
ACASTN(cast_lightning_swordsman)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
       spell_lightning_swordsman(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_lightning_swordsman(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_lightning_swordsman(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_lightning_swordsman(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_lightning_swordsman(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_fortitude_ot_bear(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_lightning_swordsman(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      break;
   default :
      logg("SYSERR: Serious screw-up in Grip of the Lightning Swordsman!");
      break;
   }
}
ACASTN(cast_fortitude_ot_bear)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
       spell_fortitude_ot_bear(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_fortitude_ot_bear(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_fortitude_ot_bear(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_fortitude_ot_bear(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_fortitude_ot_bear(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_fortitude_ot_bear(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_fortitude_ot_bear(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      break;
   default :
      logg("SYSERR: Serious screw-up in fortitude of the bear!");
      break;
   }
}
ACASTN(cast_spasm)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
      spell_spasm(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_spasm(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_spasm(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_spasm(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_spasm(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_spasm(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_spasm(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_spasm(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in spasm of the trembling hand!");
      break;
   }
}
ACASTN(cast_restoration)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_restoration(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_restoration(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_restoration(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_restoration(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_restoration(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_restoration(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_restoration(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_restoration(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in restoration!");
      break;
   }
}
ACASTN(cast_blacksmith_might)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_blacksmith_might(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_blacksmith_might(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_blacksmith_might(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_blacksmith_might(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_blacksmith_might(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_blacksmith_might(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_blacksmith_might(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_blacksmith_might(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in blacksmith might!");
      break;
   }
}
ACASTN(cast_youthful_beauty)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_youthful_beauty(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_youthful_beauty(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_youthful_beauty(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_youthful_beauty(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_youthful_beauty(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_youthful_beauty(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_youthful_beauty(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_youthful_beauty(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in youthful beauty!");
      break;
   }
}
ACASTN(cast_nimble_cat)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_nimble_cat(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_nimble_cat(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_nimble_cat(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_nimble_cat(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_nimble_cat(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_nimble_cat(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_nimble_cat(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_nimble_cat(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in nimble cat!");
      break;
   }
}
ACASTN(cast_hearty_health)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_hearty_health(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_hearty_health(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_hearty_health(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	   victim = ch;
      spell_hearty_health(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_hearty_health(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_hearty_health(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_hearty_health(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_hearty_health(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in hearty health!");
      break;
   }
}
ACASTN(cast_breath_of_vigor)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (victim == ch)
	   return;
      spell_breath_of_vigor(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_breath_of_vigor(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_breath_of_vigor(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	 victim == ch;
      spell_breath_of_vigor(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_breath_of_vigor(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_breath_of_vigor(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_breath_of_vigor(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
	   victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_breath_of_vigor(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in breath of vigor!");
      break;
   }
}
ACASTN(cast_invok_ot_milky_eyes)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (victim == ch)
	   return;
      spell_invok_ot_milky_eyes(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_invok_ot_milky_eyes(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_invok_ot_milky_eyes(spell_no, 15-number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
       if (!victim)
	 victim == ch;
      spell_invok_ot_milky_eyes(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_SCROLL:
       if (!victim)
	   victim = ch;
      spell_invok_ot_milky_eyes(spell_no, 0-number(0,30), ch, victim, 0);
      break;      
   case SPELL_TYPE_WAND:
      spell_invok_ot_milky_eyes(spell_no, 0-number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      spell_invok_ot_milky_eyes(spell_no, 0-number(15,45), ch, victim, 0);
      break;      
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
	   victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_invok_ot_milky_eyes(spell_no,-15 - number(0,30), ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in incantation of the milky eyes!");
      break;
   }
}
ACASTN(cast_lamp_wo_flame)
{
    switch (type) {
    case SPELL_TYPE_SPELL:
	if (tar_obj) {
	  if ( IS_SET(tar_obj->obj_flags.extra_flags, ITEM_GLOW) ){
	      send_to_char("Nothing new seems to happen.\r\n", ch);
	      break;}
	}
	spell_lamp_wo_flame(spell_no,level, ch, 0, tar_obj);
	break;
    case SPELL_TYPE_PHILTRE:
     break;
    case SPELL_TYPE_CANTRIP:
      if (tar_obj) {
	if (!(IS_SET(tar_obj->obj_flags.extra_flags, ITEM_GLOW)) )
	  spell_lamp_wo_flame(spell_no,0 - number(0,30), ch, 0, tar_obj);
      } 
     break;
    case SPELL_TYPE_POTION:
	break;
    case SPELL_TYPE_SCROLL:
	if (tar_obj) {
	    if (!(IS_SET(tar_obj->obj_flags.extra_flags, ITEM_GLOW)) )
	      spell_lamp_wo_flame(spell_no,0 - number(15,45), ch, 0, tar_obj);
	} 
	break;
    case SPELL_TYPE_WAND:
	if (tar_obj) {
	    if (!(IS_SET(tar_obj->obj_flags.extra_flags, ITEM_GLOW)) )
		spell_lamp_wo_flame(spell_no,0 - number(0,30), ch, 0, tar_obj);
	} 
	break;
    case SPELL_TYPE_ROD:
	if (tar_obj) {
	    if (!(IS_SET(tar_obj->obj_flags.extra_flags, ITEM_GLOW)) )
	      spell_lamp_wo_flame(spell_no,0 - number(15,45), ch, 0, tar_obj);
	} 
	break;	
    case SPELL_TYPE_STAFF:
	break;
    default :
	logg("SYSERR: Serious screw-up in lamp without flame!");
	break;
    }
}
ACASTN(cast_leap)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_leap(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_leap(spell_no,0 - number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_leap(spell_no,15 - number(0,30), ch, ch, 0);
      break;      
   case SPELL_TYPE_CANTRIP:
      if (tar_obj)
	 return;
      if (victim)
	  if (GET_LEVEL(victim) > LEVEL_BUILDER && victim != ch){
	      act("$N laughs at your feeble magic.",TRUE,ch,0,victim,TO_CHAR);
	      act("$n just tried to recall you..",TRUE,ch,0,victim,TO_VICT);
	      break;
	  }		  
      if (!victim)
	 victim = ch;
      spell_leap(spell_no, 0 - number(0,30) , ch, victim, 0);
      break;
   case SPELL_TYPE_SCROLL:
      if (tar_obj)
	 return;
      if (victim)
	  if (GET_LEVEL(victim) > LEVEL_BUILDER && victim != ch){
	      act("$N laughs at your feeble magic.",TRUE,ch,0,victim,TO_CHAR);
	      act("$n just tried to recall you..",TRUE,ch,0,victim,TO_VICT);
	      break;
	  }		  
      if (!victim)
	 victim = ch;
      spell_leap(spell_no, 0 - number(15,45) , ch, victim, 0);
      break;
   case SPELL_TYPE_WAND:
      if (tar_obj)
	 return;
      spell_leap(spell_no, 0 - number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      if (tar_obj)
	 return;
      spell_leap(spell_no, 0 - number(15,45), ch, victim, 0);
      break;
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_leap(spell_no,-15-number(0,30) , ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in Leap of Homecoming!");
      break;
   }
}
ACASTN(cast_seven_league)
{
   switch (type) {
   case SPELL_TYPE_SPELL:
       if (!victim)
	   victim = ch;
      spell_seven_league(spell_no,level, ch, victim, 0);
      break;
   case SPELL_TYPE_PHILTRE:
      spell_seven_league(spell_no,15 - number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_POTION:
      spell_seven_league(spell_no,0 - number(0,30), ch, ch, 0);
      break;
   case SPELL_TYPE_CANTRIP:
      if (tar_obj)
	 return;
      if (victim)
	  if (GET_LEVEL(victim) > LEVEL_BUILDER && victim != ch){
	      act("$N laughs at your feeble magic.",TRUE,ch,0,victim,TO_CHAR);
	      break;
	  }		  
      if (!victim)
	 victim = ch;
      spell_seven_league(spell_no, 0 - number(0,30) , ch, victim, 0);
      break;
   case SPELL_TYPE_SCROLL:
      if (tar_obj)
	 return;
      if (victim)
	  if (GET_LEVEL(victim) > LEVEL_BUILDER && victim != ch){
	      act("$N laughs at your feeble magic.",TRUE,ch,0,victim,TO_CHAR);
	      break;
	  }		  
      if (!victim)
	 victim = ch;
      spell_seven_league(spell_no, 0 - number(15,45) , ch, victim, 0);
      break;
   case SPELL_TYPE_WAND:
      if (tar_obj)
	 return;
      spell_seven_league(spell_no, 0 - number(0,30), ch, victim, 0);
      break;
   case SPELL_TYPE_ROD:
      if (tar_obj)
	 return;
      spell_seven_league(spell_no, 0 - number(15,45), ch, victim, 0);
      break;
   case SPELL_TYPE_STAFF:
      for (victim = world[ch->in_room].people ; 
          victim ; victim = victim->next_in_room)
	 if (victim != ch)
	    spell_seven_league(spell_no,-15-number(0,30) , ch, victim, 0);
      break;
   default :
      logg("SYSERR: Serious screw-up in Seven League Stride!");
      break;
   }
}
ACASTN(cast_gen_dam){
    switch(type){
    case SPELL_TYPE_SPELL:
	spell_gen_dam(spell_no, level, ch, victim, 0);
	break;
    case SPELL_TYPE_PHILTRE:
	spell_gen_dam(spell_no,15-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_POTION:
	spell_gen_dam(spell_no,0-number(0,30), ch, victim, 0);
	break;	
    case SPELL_TYPE_CANTRIP:
	spell_gen_dam(spell_no,15-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_SCROLL:
	spell_gen_dam(spell_no,0-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_WAND:
	spell_gen_dam(spell_no,0-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_ROD:
	spell_gen_dam(spell_no,0-number(15,45), ch, victim, 0);
	break;	
    case SPELL_TYPE_STAFF:
      	spell_gen_dam(spell_no,0-number(30,60), ch, victim, 0);
	break;
    default:
	logg("SYSERR: Serious screw-up in general damage!");
	break;		
    }
    return;
}
ACASTN(cast_encase_in_ice){

    switch(type){
    case SPELL_TYPE_SPELL:
	spell_encase_in_ice(spell_no, level, ch, victim, 0);
	break;
    case SPELL_TYPE_PHILTRE:
	spell_encase_in_ice(spell_no,15-number(0,30), ch, ch, 0);
	break;
    case SPELL_TYPE_POTION:
	spell_encase_in_ice(spell_no,0-number(0,30), ch, ch, 0);
	break;	
    case SPELL_TYPE_CANTRIP:
	spell_encase_in_ice(spell_no,15-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_SCROLL:
	spell_encase_in_ice(spell_no,0-number(0,30), ch, victim, 0);
	break;	
    case SPELL_TYPE_WAND:
	spell_encase_in_ice(spell_no,0-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_ROD:
	spell_encase_in_ice(spell_no,0-number(15,45), ch, victim, 0);
	break;
    case SPELL_TYPE_STAFF:
	spell_encase_in_ice(spell_no,0-number(30,60), ch, victim, 0);
	break;
    default:
	logg("SYSERR: Serious screw-up in encase in ice!");
	break;	
    }
    return;
}
ACASTN(cast_web){

    switch(type){
    case SPELL_TYPE_SPELL:
	spell_web(spell_no, level, ch, victim, 0);
	break;
    case SPELL_TYPE_PHILTRE:
	spell_web(spell_no,15-number(0,30), ch, ch, 0);
	break;
    case SPELL_TYPE_POTION:
	spell_web(spell_no,0-number(0,30), ch, ch, 0);
	break;	
    case SPELL_TYPE_CANTRIP:
	spell_web(spell_no,15-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_SCROLL:
	spell_web(spell_no,0-number(0,30), ch, victim, 0);
	break;	
    case SPELL_TYPE_WAND:
	spell_web(spell_no,0-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_ROD:
	spell_web(spell_no,0-number(15,45), ch, victim, 0);
	break;
    case SPELL_TYPE_STAFF:
	spell_web(spell_no,0-number(30,60), ch, victim, 0);
	break;
    default:
	logg("SYSERR: Serious screw-up in web spell!");
	break;	
    }
    return;
}
ACASTN(cast_footstep_slippery){
    switch(type){
    case SPELL_TYPE_SPELL:
	spell_footstep_slippery(spell_no, level, ch, victim, 0);
	break;
    case SPELL_TYPE_PHILTRE:
    case SPELL_TYPE_POTION:      
	break;
    case SPELL_TYPE_CANTRIP:
	spell_footstep_slippery(spell_no,15-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_SCROLL:
	spell_footstep_slippery(spell_no,0-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_WAND:
	spell_footstep_slippery(spell_no,0-number(0,30), ch, victim, 0);
	break;
    case SPELL_TYPE_ROD:
	spell_footstep_slippery(spell_no,0-number(15,45), ch, victim, 0);
	break;
    case SPELL_TYPE_STAFF:
	spell_footstep_slippery(spell_no,0-number(30,60), ch, victim, 0);
	break;
    default:
	logg("SYSERR: Serious screw-up in slippery oil!");
	break;	
    }
    return;
}