/************************************************************************** * # # # ## # # ### ## ## ### http://www.lyonesse.it * * # # # # # ## # # # # # * * # # # # # ## ## # # ## ## ## # # ## * * # # # # # ## # # # # # # # # # # # * * ### # ## # # ### ## ## ### # # #### ## Ver. 1.0 * * * * -Based on CircleMud & Smaug- Copyright (c) 2001-2002 by Mithrandir * * * * ********************************************************************** */ /* ************************************************************************ * 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 CAST_UNDEFINED -1 #define CAST_SPELL 0 #define CAST_POTION 1 #define CAST_WAND 2 #define CAST_STAFF 3 #define CAST_SCROLL 4 #define CAST_OBJ 5 #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 MAG_ROOM (1 << 11) #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 #define SPELL_TELEPORT 2 #define SPELL_BLESS 3 #define SPELL_BLINDNESS 4 #define SPELL_BURNING_HANDS 5 #define SPELL_CALL_LIGHTNING 6 #define SPELL_CHARM 7 #define SPELL_CHILL_TOUCH 8 #define SPELL_CLONE 9 #define SPELL_COLOR_SPRAY 10 #define SPELL_CONTROL_WEATHER 11 #define SPELL_CREATE_FOOD 12 #define SPELL_CREATE_WATER 13 #define SPELL_CURE_BLIND 14 #define SPELL_CURE_CRITIC 15 #define SPELL_CURE_LIGHT 16 #define SPELL_CURSE 17 #define SPELL_DETECT_ALIGN 18 #define SPELL_DETECT_INVIS 19 #define SPELL_DETECT_MAGIC 20 #define SPELL_DETECT_POISON 21 #define SPELL_DISPEL_EVIL 22 #define SPELL_EARTHQUAKE 23 #define SPELL_ENCHANT_WEAPON 24 #define SPELL_ENERGY_DRAIN 25 #define SPELL_FIREBALL 26 #define SPELL_HARM 27 #define SPELL_HEAL 28 #define SPELL_INVISIBLE 29 #define SPELL_LIGHTNING_BOLT 30 #define SPELL_LOCATE_OBJECT 31 #define SPELL_MAGIC_MISSILE 32 #define SPELL_POISON 33 #define SPELL_PROT_FROM_EVIL 34 #define SPELL_REMOVE_CURSE 35 #define SPELL_SANCTUARY 36 #define SPELL_SHOCKING_GRASP 37 #define SPELL_SLEEP 38 #define SPELL_STRENGTH 39 #define SPELL_SUMMON 40 #define SPELL_VENTRILOQUATE 41 #define SPELL_WORD_OF_RECALL 42 #define SPELL_REMOVE_POISON 43 #define SPELL_SENSE_LIFE 44 #define SPELL_ANIMATE_DEAD 45 #define SPELL_DISPEL_GOOD 46 #define SPELL_GROUP_ARMOR 47 #define SPELL_GROUP_HEAL 48 #define SPELL_GROUP_RECALL 49 #define SPELL_INFRAVISION 50 #define SPELL_WATERWALK 51 #define SPELL_WALL_OF_FOG 52 #define SPELL_ROOM_SHIELD 53 #define SPELL_MINOR_TRACK 54 #define SPELL_MAJOR_TRACK 55 #define SPELL_SHIELD 56 #define SPELL_STONE_SKIN 57 #define SPELL_PARALYSIS 58 #define SPELL_REFRESH 59 #define SPELL_INCENDIARY_CLOUD 60 #define SPELL_FIRESHIELD 61 #define SPELL_FLASH 62 #define SPELL_ACID_ARROW 63 #define SPELL_REGENERATION 64 #define SPELL_SHOCKWAVE 65 #define SPELL_FEAR 66 #define LAST_SPELL 66 // REMEMBER TO UPDATE THIS!!! /* Insert new spells up to MAX_SPELLS 500 */ /* PLAYER SKILLS - Numbered from MAX_SPELLS+1 to MAX_SKILLS */ #define SKILL_BACKSTAB 501 #define SKILL_BASH 502 #define SKILL_HIDE 503 #define SKILL_KICK 504 #define SKILL_PICK_LOCK 505 #define SKILL_NAVIGATION 506 #define SKILL_RESCUE 507 #define SKILL_SNEAK 508 #define SKILL_STEAL 509 #define SKILL_TRACK 510 #define SKILL_RIDING 511 #define SKILL_TAME 512 #define SKILL_STUDY 513 #define SKILL_READ_MAGIC 514 #define SKILL_ENCHANT_ITEMS 515 #define SKILL_PRODUCTION 516 #define SKILL_DISARM_TRAPS 517 /* weapon proficiencies */ #define SKILL_WEAPON_BOW 791 #define SKILL_WEAPON_SLING 792 #define SKILL_WEAPON_CROSSBOW 793 #define SKILL_WEAPON_SWORDS 794 #define SKILL_WEAPON_DAGGERS 795 #define SKILL_WEAPON_WHIPS 796 #define SKILL_WEAPON_TALONOUS_ARMS 797 #define SKILL_WEAPON_BLUDGEONS 798 #define SKILL_WEAPON_EXOTICS 799 /* END -- weapon proficiencies */ /* Insert new skills up to MAX_SKILLS 800 */ /* * 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 801 #define SPELL_FIRE_BREATH 802 #define SPELL_GAS_BREATH 803 #define SPELL_FROST_BREATH 804 #define SPELL_ACID_BREATH 805 #define SPELL_LIGHTNING_BREATH 806 #define TOP_SPELL_DEFINE 899 /* NEW NPC/OBJECT SPELLS can be inserted here up to 899 */ /* WEAPON ATTACK TYPES */ #define NUM_ATTACK_TYPES 15 #define TYPE_HIT 900 #define TYPE_STING 901 #define TYPE_WHIP 902 #define TYPE_SLASH 903 #define TYPE_BITE 904 #define TYPE_BLUDGEON 905 #define TYPE_CRUSH 906 #define TYPE_POUND 907 #define TYPE_CLAW 908 #define TYPE_MAUL 909 #define TYPE_THRASH 910 #define TYPE_PIERCE 911 #define TYPE_BLAST 912 #define TYPE_PUNCH 913 #define TYPE_STAB 914 /* new attack types can be added here - up to TYPE_SUFFERING */ #define TYPE_SUFFERING 999 #define SAVING_PARA 0 #define SAVING_ROD 1 #define SAVING_PETRI 2 #define SAVING_BREATH 3 #define SAVING_SPELL 4 /* 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 TAR_IGNORE (1 << 0) #define TAR_CHAR_ROOM (1 << 1) #define TAR_CHAR_WORLD (1 << 2) #define TAR_FIGHT_SELF (1 << 3) #define TAR_FIGHT_VICT (1 << 4) #define TAR_SELF_ONLY (1 << 5) /* Only a check, use with i.e. TAR_CHAR_ROOM */ #define TAR_NOT_SELF (1 << 6) /* Only a check, use with i.e. TAR_CHAR_ROOM */ #define TAR_OBJ_INV (1 << 7) #define TAR_OBJ_ROOM (1 << 8) #define TAR_OBJ_WORLD (1 << 9) #define TAR_OBJ_EQUIP (1 << 10) #define TAR_CHAR_RANGED (1 << 11) 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 */ const char *name; const char *wear_off_msg; }; #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 /* memorized spells */ #define MAX_SAME_SPELL 5 #define MAX_MEM_SPELLS 50 #define MEM_DELAY (20 RL_SEC) typedef struct memorizing_event MEM_EVENT; struct memorizing_event { CHAR_DATA *ch; int spell; sh_int num; }; /* Attacktypes with grammar */ struct attack_hit_type { const char *singular; const char *plural; }; #define ASPELL(spellname) void spellname(int level, CHAR_DATA *ch, CHAR_DATA *victim, 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); /* basic magic calling functions */ int mag_damage(int level, CHAR_DATA *ch, CHAR_DATA *victim, int spellnum, int savetype); void mag_affects(int level, CHAR_DATA *ch, CHAR_DATA *victim, int spellnum, int savetype); void mag_groups(int level, CHAR_DATA *ch, int spellnum, int savetype); void mag_masses(int level, CHAR_DATA *ch, int spellnum, int savetype); void mag_areas(int level, CHAR_DATA *ch, int spellnum, int savetype); void mag_summons(int level, CHAR_DATA *ch, OBJ_DATA *obj, int spellnum, int savetype); void mag_points(int level, CHAR_DATA *ch, CHAR_DATA *victim, int spellnum, int savetype); void mag_unaffects(int level, CHAR_DATA *ch, CHAR_DATA *victim, int spellnum, int type); void mag_alter_objs(int level, CHAR_DATA *ch, OBJ_DATA *obj, int spellnum, int type); void mag_creations(int level, CHAR_DATA *ch, int spellnum); void mag_objectmagic(CHAR_DATA *ch, OBJ_DATA *obj, char *argument); void mag_rooms(int level, CHAR_DATA *ch, int spellnum); int find_skill_num(char *name); int call_magic(CHAR_DATA *caster, CHAR_DATA *cvict, OBJ_DATA *ovict, int spellnum, int level, int casttype); int cast_spell(CHAR_DATA *ch, OBJ_SPELLS_DATA *oSpell, CHAR_DATA *tch, OBJ_DATA *tobj, int spellnum); /* other prototypes */ void spell_level(int spell, int chclass, int level); void init_spell_levels(void); char *get_spell_name(char *argument); const char *skill_name(int num);