/* ************************************************************************
* file: spells1.c , handling of magic. Part of DIKUMUD *
* Usage : Procedures handling all offensive magic. *
* Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */
#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 functions */
void spell_burning_hands(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_morphia(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_chill_touch(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_shocking_grasp(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_colour_spray(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_earthquake(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_energy_drain(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_fireball(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_harm(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_barf(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_lightning_bolt(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_magic_missile(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_sunburst(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_radiation(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_cyclone(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_nova(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_slime(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void spell_gas(short level, struct char_data *ch,
struct char_data *victim, struct obj_data *obj);
void cast_burning_hands( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_burning_hands(level, ch, victim, 0);
break;
default :
log("Serious screw-up in burning hands!");
break;
}
}
void cast_morphia(short level,struct char_data *ch,char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_morphia(level, ch, victim, 0);
break;
default :
log("Serious screw-up in morphia!");
break;
}
}
void cast_slime(short level,struct char_data *ch,char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_slime(level, ch, victim, 0);
break;
case SPELL_TYPE_WAND:
if(victim)
spell_slime(level, ch, victim, 0);
break;
default :
log("Serious screw-up in slime!");
break;
}
}
void cast_gas(short level,struct char_data *ch,char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_gas(level, ch, victim, 0);
break;
case SPELL_TYPE_WAND:
if(victim)
spell_gas(level, ch, victim, 0);
break;
default :
log("Serious screw-up in gas!");
break;
}
}
void cast_chill_touch( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_chill_touch(level, ch, victim, 0);
break;
default :
log("Serious screw-up in chill touch!");
break;
}
}
void cast_shocking_grasp( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_shocking_grasp(level, ch, victim, 0);
break;
default :
log("Serious screw-up in shocking grasp!");
break;
}
}
void cast_colour_spray( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
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("Serious screw-up in colour spray!");
break;
}
}
void cast_earthquake( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
case SPELL_TYPE_SCROLL:
case SPELL_TYPE_STAFF:
spell_earthquake(level, ch, 0, 0);
break;
default :
log("Serious screw-up in earthquake!");
break;
}
}
void cast_energy_drain( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
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("Serious screw-up in energy drain!");
break;
}
}
void cast_sunburst( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch(type) {
case SPELL_TYPE_SPELL:
spell_sunburst(level,ch,victim,0);
break;
case SPELL_TYPE_STAFF:
for (victim = world[ch->in_room].people ;
victim ; victim = victim->next_in_room )
if(ch == victim->specials.fighting)
spell_sunburst(level, ch, victim, 0);
break;
default:
log("Serious screw-up in sunburst!");
break;
}
}
void cast_doppelganger( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch(type) {
case SPELL_TYPE_SPELL:
spell_doppelganger(level,ch,victim,0);
break;
case SPELL_TYPE_STAFF:
for (victim = world[ch->in_room].people ;
victim ; victim = victim->next_in_room )
if(ch == victim->specials.fighting)
spell_doppelganger(level, ch, victim, 0);
break;
default:
log("Serious screw-up in doppelganger!");
break;
}
}
void cast_jingle( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch(type) {
case SPELL_TYPE_SPELL:
if(!ch->specials.fighting)
spell_jingle(level,ch,victim,0);
else
for(victim = world[ch->in_room].people ;
victim ; victim = victim->next_in_room )
if(ch == victim->specials.fighting)
spell_jingle(level, ch, victim, 0);
break;
default:
log("Serious screw-up in doppelganger!");
break;
}
}
void cast_fireball( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
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("Serious screw-up in fireball!");
break;
}
}
void cast_harm( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
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("Serious screw-up in harm!");
break;
}
}
void cast_barf( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_barf(level, ch, victim, 0);
break;
default :
log("Serious screw-up in barf!");
break;
}
}
void cast_lightning_bolt( short level, struct char_data *ch, char *arg,
int type, struct char_data *victim, struct obj_data *tar_obj )
{
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("Serious screw-up in lightning bolt!");
break;
}
}
void cast_magic_missile( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
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("Serious screw-up in magic missile!");
break;
}
}
void cast_clone( short level, struct char_data *ch, char *arg, int type,
struct char_data *tar_ch, struct obj_data *tar_obj )
{
spell_clone(level, ch, tar_ch, tar_obj);
}
void cast_cyclone( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
case SPELL_TYPE_STAFF:
spell_cyclone(level, ch, 0, 0);
break;
default :
log("Serious screw-up in cyclone!");
break;
}
}
void cast_radiation( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
case SPELL_TYPE_STAFF:
case SPELL_TYPE_WAND:
spell_radiation(level, ch, 0, 0);
break;
default :
log("Serious screw-up in radiation!");
break;
}
}
void cast_nova( short level, struct char_data *ch, char *arg, int type,
struct char_data *victim, struct obj_data *tar_obj )
{
switch (type) {
case SPELL_TYPE_SPELL:
spell_nova(level, ch, victim, 0);
break;
default :
log("Serious screw-up in nova!");
break;
}
}