deltamud/deltamud/
deltamud/deltamud/bin/
deltamud/deltamud/cnf/
deltamud/deltamud/lib/
deltamud/deltamud/lib/etc/
deltamud/deltamud/lib/misc/
deltamud/deltamud/lib/plrobjs/
deltamud/deltamud/lib/text/
deltamud/deltamud/lib/text/help/
deltamud/deltamud/lib/world/
deltamud/deltamud/lib/world/trg/
/* ************************************************************************
*   File: spells.h                                      Part of CircleMUD *
*  Usage: header file: constants and fn prototypes for spell system       *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */

#define DEFAULT_STAFF_LVL	12
#define DEFAULT_WAND_LVL	12

#define MAG_DAMAGE	(1 << 0)
#define MAG_AFFECTS	(1 << 1)
#define MAG_UNAFFECTS	(1 << 2)
#define MAG_POINTS	(1 << 3)
#define MAG_ALTER_OBJS	(1 << 4)
#define MAG_GROUPS	(1 << 5)
#define MAG_MASSES	(1 << 6)
#define MAG_AREAS	(1 << 7)
#define MAG_SUMMONS	(1 << 8)
#define MAG_CREATIONS	(1 << 9)
#define MAG_MANUAL	(1 << 10)


#define TYPE_UNDEFINED               -1
#define SPELL_RESERVED_DBC            0  /* SKILL NUMBER ZERO -- RESERVED */

/* PLAYER SPELLS -- Numbered from 1 to MAX_SPELLS */

#define SPELL_ARMOR                   1 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_TELEPORT                2 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_BLESS                   3 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_BLINDNESS               4 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CHARM                   5 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CLONE                   6 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CONTROL_WEATHER         7 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CREATE_FOOD             8 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CREATE_WATER            9 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURE_BLIND             10 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURE_CRITIC            11 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURE_LIGHT             12 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_CURSE                  13 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_ALIGN           14 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_INVIS           15 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_MAGIC           16 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_DETECT_POISON          17 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_EARTHQUAKE             18 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_ENCHANT_WEAPON         19 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_HEAL                   20 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_INVISIBLE              21 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_LOCATE_OBJECT          22 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_POISON                 23 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_REMOVE_CURSE           24 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SANCTUARY              25 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SLEEP                  26 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_STRENGTH               27 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SUMMON                 28 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_WORD_OF_RECALL         29 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_REMOVE_POISON          30 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_SENSE_LIFE             31 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_ANIMATE_DEAD	     32 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_GROUP_ARMOR	     33 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_GROUP_HEAL	     34 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_GROUP_RECALL	     35 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_INFRAVISION	     36 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_WATERWALK		     37 /* Reserved Skill[] DO NOT CHANGE */
#define SPELL_STONE_SKIN  	     38 /* Implemented by Mulder */
#define SPELL_FEAR                   39 /* Implemented by Mulder */
#define SPELL_RECHARGE               40 /* Implemented by Mulder */
#define SPELL_PORTAL                 41 /* Implemented by Mulder */
#define SPELL_GROUP_STONE_SKIN       42 /* Implemented by Mulder */
#define SPELL_LOCATE_TARGET          43 /* Implemented by Mulder */
#define SPELL_CONVERGENCE            44 /* Implemented by Thargor */
#define SPELL_AUTUS                  45 /* Implemented by Thargor */
#define SPELL_RESIST_PORTAL          46 /* Implemented by Mulder */
#define SPELL_REGEN_MANA             47 /* Implemented by Thargor */
#define SPELL_HOME                   48 /* Implemented by Thargor */
#define SPELL_WORD_OF_RETREAT        49 /* Implemented by Mulder */
#define SKILL_CHAIN_FOOTING          50 /* Implemented by Storm - This skill is here because it gives -player- an affect and is not a *normal* skill, heh. */
#define SPELL_REDIRECT_CHARGE	     51 /* Implemented by Storm */

/* Insert new spells here, up to MAX_SPELLS */
#define MAX_SPELLS		    500

/* PLAYER SKILLS - Numbered from MAX_SPELLS+1 to MAX_SKILLS */
#define SKILL_BACKSTAB              501 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_BASH                  502 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_HIDE                  503 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_KICK                  504 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_PICK_LOCK             505 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_PUNCH                 506 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_RESCUE                507 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_SNEAK                 508 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_STEAL                 509 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_TRACK		    510 /* Reserved Skill[] DO NOT CHANGE */
#define SKILL_FORAGE                511 /* Implemented by Mulder */
#define SKILL_SCAN                  512 /* Implemented by Mulder */
#define SKILL_BREW                  513 /* Implemented by Mulder */
#define SKILL_FORGE                 514 /* Implemented by Mulder */
#define SKILL_SCRIBE                515 /* Implemented by Mulder */
#define SKILL_SPEED                 516 /* Implemented by Mulder */
#define SKILL_BERSERK               517 /* Implemented by Thargor */
#define SKILL_CAMOUFLAGE            518 /* Implemented by Thargor */
#define SKILL_BLANKET               519 /* Implemented by Thargor */
#define SKILL_RAM_DOOR              520 /* Implemented by Thargor */
#define SKILL_MOUNT                 521 /* Implemented by Mulder */
#define SKILL_RIDING                522 /* Implemented by Mulder */
#define SKILL_TAME                  523 /* Implemented by Mulder */
#define SKILL_SECOND_ATTACK         524 /* Implemented by Mulder */
#define SKILL_THIRD_ATTACK          525 /* Implemented by Mulder */
#define SKILL_LISTEN                526 /* Implemented by Mulder */
#define SKILL_MEDITATE              527 /* Implemented by Thargor */
#define SKILL_REPAIR                528 /* Implemented by Mulder */
#define SKILL_TAN		    529 /* Implemented by Mulder */
#define SKILL_FILLET		    530 /* Implemented by Mulder */
#define SKILL_CARVE		    531 /* Implemented by Mulder */
#define SKILL_DODGE                 532 /* Implemented by Mulder */
#define SKILL_PARRY                 533 /* Implemented by Mulder */
#define SKILL_AVOID                 534 /* Implemented by Mulder */
#define SKILL_RIPOSTE               535 /* Implemented by Mulder */
#define SKILL_CIRCLE                536 /* Implemented by Mulder */  
#define SKILL_TRIP                  537 /* Implemented by Mulder */
#define SKILL_DISARM                538 /* Implemented by Mulder */
#define SKILL_TARGET                539 /* Implemented by Mulder */
#define SKILL_ADRENALINE            540 /* These skills MUST be  */
#define SKILL_BLOODLUST             541 /* in succession to each */
#define SKILL_CARNALRAGE            542 /* other!                */

/* New skills may be added here up to MAX_SKILLS (1000) */

#define AVOID_FACTOR 20

/*
 *  NON-PLAYER AND OBJECT SPELLS AND SKILLS
 *  The practice levels for the spells and skills below are _not_ recorded
 *  in the playerfile; therefore, the intended use is for spells and skills
 *  associated with objects (such as SPELL_IDENTIFY used with scrolls of
 *  identify) or non-players (such as NPC-only spells).
 */

#define SPELL_IDENTIFY               1001
#define SPELL_FIRE_BREATH            1002
#define SPELL_GAS_BREATH             1003
#define SPELL_FROST_BREATH           1004
#define SPELL_ACID_BREATH            1005
#define SPELL_LIGHTNING_BREATH       1006

#define TOP_SPELL_DEFINE	     1099
/* NEW NPC/OBJECT SPELLS can be inserted here up to 1099 */


/* WEAPON ATTACK TYPES */

#define TYPE_HIT                     1100
#define TYPE_STING                   1101
#define TYPE_WHIP                    1102
#define TYPE_SLASH                   1103
#define TYPE_BITE                    1104
#define TYPE_BLUDGEON                1105
#define TYPE_CRUSH                   1106
#define TYPE_POUND                   1107
#define TYPE_CLAW                    1108
#define TYPE_MAUL                    1109
#define TYPE_THRASH                  1110
#define TYPE_PIERCE                  1111
#define TYPE_BLAST		     1112
#define TYPE_PUNCH		     1113
#define TYPE_STAB		     1114


/* new attack types can be added here - up to SELF_DAMAGE (damages inflicted from the game and not from another player) */
#define SELF_DAMAGE		     1197
#define TYPE_STARVING		     1197
#define TYPE_DROWNING		     1198
#define TYPE_SUFFERING		     1199

#define TAR_IGNORE        1
#define TAR_CHAR_ROOM     2
#define TAR_CHAR_WORLD    4
#define TAR_FIGHT_SELF    8
#define TAR_FIGHT_VICT   16
#define TAR_SELF_ONLY    32 /* Only a check, use with i.e. TAR_CHAR_ROOM */
#define TAR_NOT_SELF     64 /* Only a check, use with i.e. TAR_CHAR_ROOM */
#define TAR_OBJ_INV     128
#define TAR_OBJ_ROOM    256
#define TAR_OBJ_WORLD   512
#define TAR_OBJ_EQUIP  1024

struct spell_info_type {
   byte min_position;	/* Position for caster	 */
   int mana_min;	/* Min amount of mana used by a spell (highest lev) */
   int mana_max;	/* Max amount of mana used by a spell (lowest lev) */
   int mana_change;	/* Change in mana used by spell from lev to lev */

   int min_level[NUM_CLASSES];
   int routines;
   byte violent;
   int targets;         /* See below for use with TAR_XXX  */
};

/* Possible Targets:

   bit 0 : IGNORE TARGET
   bit 1 : PC/NPC in room
   bit 2 : PC/NPC in world
   bit 3 : Object held
   bit 4 : Object in inventory
   bit 5 : Object in room
   bit 6 : Object in world
   bit 7 : If fighting, and no argument, select tar_char as self
   bit 8 : If fighting, and no argument, select tar_char as victim (fighting)
   bit 9 : If no argument, select self, if argument check that it IS self.

*/

#define SPELL_TYPE_SPELL   0
#define SPELL_TYPE_POTION  1
#define SPELL_TYPE_WAND    2
#define SPELL_TYPE_STAFF   3
#define SPELL_TYPE_SCROLL  4


/* Attacktypes with grammar */

struct attack_hit_type {
   char	*singular;
   char	*plural;
};


#define ASPELL(spellname) \
void	spellname(int level, struct char_data *ch, \
		  struct char_data *victim, struct obj_data *obj)

#define MANUAL_SPELL(spellname)	spellname(level, caster, cvict, ovict);

ASPELL(spell_create_water);
ASPELL(spell_recall);
ASPELL(spell_teleport);
ASPELL(spell_summon);
ASPELL(spell_locate_object);
ASPELL(spell_charm);
ASPELL(spell_information);
ASPELL(spell_identify);
ASPELL(spell_enchant_weapon);
ASPELL(spell_detect_poison);
ASPELL(spell_fear);
ASPELL(spell_recharge);
ASPELL(spell_portal);

/* basic magic calling functions */

int find_skill_num(char *name);

void mag_damage(int level, struct char_data *ch, struct char_data *victim,
  int spellnum);

void mag_affects(int level, struct char_data *ch, struct char_data *victim,
  int spellnum);

void mag_group_switch(int level, struct char_data *ch, struct char_data *tch, 
  int spellnum);

void mag_groups(int level, struct char_data *ch, int spellnum);

void mag_masses(int level, struct char_data *ch, int spellnum);

void mag_areas(int level, struct char_data *ch, int spellnum);

void mag_summons(int level, struct char_data *ch, struct obj_data *obj,
 int spellnum);

void mag_points(int level, struct char_data *ch, struct char_data *victim,
 int spellnum);

void mag_unaffects(int level, struct char_data *ch, struct char_data *victim,
  int spellnum);

void mag_alter_objs(int level, struct char_data *ch, struct obj_data *obj,
  int spellnum);

void mag_creations(int level, struct char_data *ch, int spellnum);

int	call_magic(struct char_data *caster, struct char_data *cvict,
  struct obj_data *ovict, int spellnum, int level);

void	mag_objectmagic(struct char_data *ch, struct obj_data *obj,
			char *argument);

int	cast_spell(struct char_data *ch, struct char_data *tch,
  struct obj_data *tobj, int spellnum);


/* other prototypes */
void spell_level(int spell, int class, int level);
void init_spell_levels(void);
char *skill_name(int num);