/* ************************************************************************
* File: spells1.c Part of CircleMUD *
* Usage: step 1 implementation of offensive magic (step 2 in magic.c) *
* *
* 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. *
************************************************************************ */
#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;
ACAST(cast_burning_hands)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_burning_hands(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in burning hands!");
break;
}
}
ACAST(cast_call_lightning)
{
switch (type) {
case SPELL_TYPE_SPELL:
if (OUTSIDE(ch) && (weather_info.sky >= SKY_RAINING)) {
spell_call_lightning(level, ch, victim, 0);
} else {
send_to_char("You fail to call upon the lightning from the sky!\n\r", ch);
}
break;
case SPELL_TYPE_POTION:
if (OUTSIDE(ch) && (weather_info.sky >= SKY_RAINING)) {
spell_call_lightning(level, ch, ch, 0);
}
break;
case SPELL_TYPE_SCROLL:
if (OUTSIDE(ch) && (weather_info.sky >= SKY_RAINING)) {
if (victim)
spell_call_lightning(level, ch, victim, 0);
else if (!tar_obj)
spell_call_lightning(level, ch, ch, 0);
}
break;
case SPELL_TYPE_STAFF:
if (OUTSIDE(ch) && (weather_info.sky >= SKY_RAINING)) {
for (victim = world[ch->in_room].people ;
victim ; victim = victim->next_in_room )
if (victim != ch)
spell_call_lightning(level, ch, victim, 0);
}
break;
default :
log("SYSERR: Serious screw-up in call lightning!");
break;
}
}
ACAST(cast_chill_touch)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_chill_touch(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in chill touch!");
break;
}
}
ACAST(cast_shocking_grasp)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_shocking_grasp(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in shocking grasp!");
break;
}
}
ACAST(cast_colour_spray)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_colour_spray(level, ch, victim, 0);
break;
case SPELL_TYPE_SCROLL:
if (victim)
spell_colour_spray(level, ch, victim, 0);
else if (!tar_obj)
spell_colour_spray(level, ch, ch, 0);
break;
case SPELL_TYPE_WAND:
if (victim)
spell_colour_spray(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in colour spray!");
break;
}
}
ACAST(cast_earthquake)
{
switch (type) {
case SPELL_TYPE_SPELL:
case SPELL_TYPE_SCROLL:
case SPELL_TYPE_STAFF:
spell_earthquake(level, ch, 0, 0);
break;
default :
log("SYSERR: Serious screw-up in earthquake!");
break;
}
}
ACAST(cast_energy_drain)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_energy_drain(level, ch, victim, 0);
break;
case SPELL_TYPE_POTION:
spell_energy_drain(level, ch, ch, 0);
break;
case SPELL_TYPE_SCROLL:
if (victim)
spell_energy_drain(level, ch, victim, 0);
else if (!tar_obj)
spell_energy_drain(level, ch, ch, 0);
break;
case SPELL_TYPE_WAND:
if (victim)
spell_energy_drain(level, 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_energy_drain(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in energy drain!");
break;
}
}
ACAST(cast_fireball)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_fireball(level, ch, victim, 0);
break;
case SPELL_TYPE_SCROLL:
if (victim)
spell_fireball(level, ch, victim, 0);
else if (!tar_obj)
spell_fireball(level, ch, ch, 0);
break;
case SPELL_TYPE_WAND:
if (victim)
spell_fireball(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in fireball!");
break;
}
}
ACAST(cast_harm)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_harm(level, ch, victim, 0);
break;
case SPELL_TYPE_POTION:
spell_harm(level, ch, ch, 0);
break;
case SPELL_TYPE_STAFF:
for (victim = world[ch->in_room].people ;
victim ; victim = victim->next_in_room )
if (victim != ch)
spell_harm(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in harm!");
break;
}
}
ACAST(cast_lightning_bolt)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_lightning_bolt(level, ch, victim, 0);
break;
case SPELL_TYPE_SCROLL:
if (victim)
spell_lightning_bolt(level, ch, victim, 0);
else if (!tar_obj)
spell_lightning_bolt(level, ch, ch, 0);
break;
case SPELL_TYPE_WAND:
if (victim)
spell_lightning_bolt(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in lightning bolt!");
break;
}
}
ACAST(cast_magic_missile)
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_magic_missile(level, ch, victim, 0);
break;
case SPELL_TYPE_SCROLL:
if (victim)
spell_magic_missile(level, ch, victim, 0);
else if (!tar_obj)
spell_magic_missile(level, ch, ch, 0);
break;
case SPELL_TYPE_WAND:
if (victim)
spell_magic_missile(level, ch, victim, 0);
break;
default :
log("SYSERR: Serious screw-up in magic missile!");
break;
}
}