merc22/
merc22/log/
merc22/player/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <time.h>
#include "merc.h"



/*
 * Class table.
 */
const struct class_type class_table[MAX_CLASS] = {
   {
    "Mag", APPLY_INT, OBJ_VNUM_SCHOOL_DAGGER,
    3018, 95, 18, 10, 6, 8, TRUE},

   {
    "Cle", APPLY_WIS, OBJ_VNUM_SCHOOL_MACE,
    3003, 95, 18, 12, 7, 10, TRUE},

   {
    "Thi", APPLY_DEX, OBJ_VNUM_SCHOOL_DAGGER,
    3028, 85, 18, 8, 8, 13, FALSE},

   {
    "War", APPLY_STR, OBJ_VNUM_SCHOOL_SWORD,
    3022, 85, 18, 6, 11, 15, FALSE}
};

#define CLASS_MAGE       0
#define CLASS_CLERIC     1
#define CLASS_THIEF      2
#define CLASS_WARRIOR    3

/*
 * Titles.
 */
char *const title_table[MAX_CLASS][MAX_LEVEL + 1][2] = {
   {
    {"Man", "Woman"},

    {"Apprentice of Magic", "Apprentice of Magic"},
    {"Spell Student", "Spell Student"},
    {"Scholar of Magic", "Scholar of Magic"},
    {"Delver in Spells", "Delveress in Spells"},
    {"Medium of Magic", "Medium of Magic"},

    {"Scribe of Magic", "Scribess of Magic"},
    {"Seer", "Seeress"},
    {"Sage", "Sage"},
    {"Illusionist", "Illusionist"},
    {"Abjurer", "Abjuress"},

    {"Invoker", "Invoker"},
    {"Enchanter", "Enchantress"},
    {"Conjurer", "Conjuress"},
    {"Magician", "Witch"},
    {"Creator", "Creator"},

    {"Savant", "Savant"},
    {"Magus", "Craftess"},
    {"Wizard", "Wizard"},
    {"Warlock", "War Witch"},
    {"Sorcerer", "Sorceress"},

    {"Elder Sorcerer", "Elder Sorceress"},
    {"Grand Sorcerer", "Grand Sorceress"},
    {"Great Sorcerer", "Great Sorceress"},
    {"Golem Maker", "Golem Maker"},
    {"Greater Golem Maker", "Greater Golem Maker"},

    {"Maker of Stones", "Maker of Stones",},
    {"Maker of Potions", "Maker of Potions",},
    {"Maker of Scrolls", "Maker of Scrolls",},
    {"Maker of Wands", "Maker of Wands",},
    {"Maker of Staves", "Maker of Staves",},

    {"Demon Summoner", "Demon Summoner"},
    {"Greater Demon Summoner", "Greater Demon Summoner"},
    {"Dragon Charmer", "Dragon Charmer"},
    {"Greater Dragon Charmer", "Greater Dragon Charmer"},
    {"Master of all Magic", "Master of all Magic"},

    {"Mage Hero", "Mage Heroine"},
    {"Angel of Magic", "Angel of Magic"},
    {"Deity of Magic", "Deity of Magic"},
    {"Supremity of Magic", "Supremity of Magic"},
    {"Implementor", "Implementress"}
    },

   {
    {"Man", "Woman"},

    {"Believer", "Believer"},
    {"Attendant", "Attendant"},
    {"Acolyte", "Acolyte"},
    {"Novice", "Novice"},
    {"Missionary", "Missionary"},

    {"Adept", "Adept"},
    {"Deacon", "Deaconess"},
    {"Vicar", "Vicaress"},
    {"Priest", "Priestess"},
    {"Minister", "Lady Minister"},

    {"Canon", "Canon"},
    {"Levite", "Levitess"},
    {"Curate", "Curess"},
    {"Monk", "Nun"},
    {"Healer", "Healess"},

    {"Chaplain", "Chaplain"},
    {"Expositor", "Expositress"},
    {"Bishop", "Bishop"},
    {"Arch Bishop", "Arch Lady of the Church"},
    {"Patriarch", "Matriarch"},

    {"Elder Patriarch", "Elder Matriarch"},
    {"Grand Patriarch", "Grand Matriarch"},
    {"Great Patriarch", "Great Matriarch"},
    {"Demon Killer", "Demon Killer"},
    {"Greater Demon Killer", "Greater Demon Killer"},

    {"Cardinal of the Sea", "Cardinal of the Sea"},
    {"Cardinal of the Earth", "Cardinal of the Earth"},
    {"Cardinal of the Air", "Cardinal of the Air"},
    {"Cardinal of the Ether", "Cardinal of the Ether"},
    {"Cardinal of the Heavens", "Cardinal of the Heavens"},

    {"Avatar of an Immortal", "Avatar of an Immortal"},
    {"Avatar of a Deity", "Avatar of a Deity"},
    {"Avatar of a Supremity", "Avatar of a Supremity"},
    {"Avatar of an Implementor", "Avatar of an Implementor"},
    {"Master of all Divinity", "Mistress of all Divinity"},

    {"Holy Hero", "Holy Heroine"},
    {"Angel", "Angel"},
    {"Deity", "Deity"},
    {"Supreme Master", "Supreme Mistress"},
    {"Implementor", "Implementress"}
    },

   {
    {"Man", "Woman"},

    {"Pilferer", "Pilferess"},
    {"Footpad", "Footpad"},
    {"Filcher", "Filcheress"},
    {"Pick-Pocket", "Pick-Pocket"},
    {"Sneak", "Sneak"},

    {"Pincher", "Pincheress"},
    {"Cut-Purse", "Cut-Purse"},
    {"Snatcher", "Snatcheress"},
    {"Sharper", "Sharpress"},
    {"Rogue", "Rogue"},

    {"Robber", "Robber"},
    {"Magsman", "Magswoman"},
    {"Highwayman", "Highwaywoman"},
    {"Burglar", "Burglaress"},
    {"Thief", "Thief"},

    {"Knifer", "Knifer"},
    {"Quick-Blade", "Quick-Blade"},
    {"Killer", "Murderess"},
    {"Brigand", "Brigand"},
    {"Cut-Throat", "Cut-Throat"},

    {"Spy", "Spy"},
    {"Grand Spy", "Grand Spy"},
    {"Master Spy", "Master Spy"},
    {"Assassin", "Assassin"},
    {"Greater Assassin", "Greater Assassin"},

    {"Master of Vision", "Mistress of Vision"},
    {"Master of Hearing", "Mistress of Hearing"},
    {"Master of Smell", "Mistress of Smell"},
    {"Master of Taste", "Mistress of Taste"},
    {"Master of Touch", "Mistress of Touch"},

    {"Crime Lord", "Crime Mistress"},
    {"Infamous Crime Lord", "Infamous Crime Mistress"},
    {"Greater Crime Lord", "Greater Crime Mistress"},
    {"Master Crime Lord", "Master Crime Mistress"},
    {"Godfather", "Godmother"},

    {"Assassin Hero", "Assassin Heroine"},
    {"Angel of Death", "Angel of Death"},
    {"Deity of Assassins", "Deity of Assassins"},
    {"Supreme Master", "Supreme Mistress"},
    {"Implementor", "Implementress"}
    },

   {
    {"Man", "Woman"},

    {"Swordpupil", "Swordpupil"},
    {"Recruit", "Recruit"},
    {"Sentry", "Sentress"},
    {"Fighter", "Fighter"},
    {"Soldier", "Soldier"},

    {"Warrior", "Warrior"},
    {"Veteran", "Veteran"},
    {"Swordsman", "Swordswoman"},
    {"Fencer", "Fenceress"},
    {"Combatant", "Combatess"},

    {"Hero", "Heroine"},
    {"Myrmidon", "Myrmidon"},
    {"Swashbuckler", "Swashbuckleress"},
    {"Mercenary", "Mercenaress"},
    {"Swordmaster", "Swordmistress"},

    {"Lieutenant", "Lieutenant"},
    {"Champion", "Lady Champion"},
    {"Dragoon", "Lady Dragoon"},
    {"Cavalier", "Lady Cavalier"},
    {"Knight", "Lady Knight"},

    {"Grand Knight", "Grand Knight"},
    {"Master Knight", "Master Knight"},
    {"Paladin", "Paladin"},
    {"Grand Paladin", "Grand Paladin"},
    {"Demon Slayer", "Demon Slayer"},

    {"Greater Demon Slayer", "Greater Demon Slayer"},
    {"Dragon Slayer", "Dragon Slayer"},
    {"Greater Dragon Slayer", "Greater Dragon Slayer"},
    {"Underlord", "Underlord"},
    {"Overlord", "Overlord"},

    {"Baron of Thunder", "Baroness of Thunder"},
    {"Baron of Storms", "Baroness of Storms"},
    {"Baron of Tornadoes", "Baroness of Tornadoes"},
    {"Baron of Hurricanes", "Baroness of Hurricanes"},
    {"Baron of Meteors", "Baroness of Meteors"},

    {"Knight Hero", "Knight Heroine"},
    {"Angel of War", "Angel of War"},
    {"Deity of War", "Deity of War"},
    {"Supreme Master of War", "Supreme Mistress of War"},
    {"Implementor", "Implementress"}
    }
};



/*
 * Attribute bonus tables.
 */
const struct str_app_type str_app[26] = {
   {-5, -4, 0, 0},   /* 0  */
   {-5, -4, 3, 1},   /* 1  */
   {-3, -2, 3, 2},
   {-3, -1, 10, 3},  /* 3  */
   {-2, -1, 25, 4},
   {-2, -1, 55, 5},  /* 5  */
   {-1, 0, 80, 6},
   {-1, 0, 90, 7},
   {0, 0, 100, 8},
   {0, 0, 100, 9},
   {0, 0, 115, 10},  /* 10  */
   {0, 0, 115, 11},
   {0, 0, 140, 12},
   {0, 0, 140, 13},  /* 13  */
   {0, 1, 170, 14},
   {1, 1, 170, 15},  /* 15  */
   {1, 2, 195, 16},
   {2, 3, 220, 22},
   {2, 4, 250, 25},  /* 18  */
   {3, 5, 400, 30},
   {3, 6, 500, 35},  /* 20  */
   {4, 7, 600, 40},
   {5, 7, 700, 45},
   {6, 8, 800, 50},
   {8, 10, 900, 55},
   {10, 12, 999, 60} /* 25   */
};



const struct int_app_type int_app[26] = {
   {3},  /*  0 */
   {5},  /*  1 */
   {7},
   {8},  /*  3 */
   {9},
   {10}, /*  5 */
   {11},
   {12},
   {13},
   {15},
   {17}, /* 10 */
   {19},
   {22},
   {25},
   {28},
   {31}, /* 15 */
   {34},
   {37},
   {40}, /* 18 */
   {44},
   {49}, /* 20 */
   {55},
   {60},
   {70},
   {85},
   {99}  /* 25 */
};



const struct wis_app_type wis_app[26] = {
   {0},  /*  0 */
   {0},  /*  1 */
   {0},
   {0},  /*  3 */
   {0},
   {1},  /*  5 */
   {1},
   {1},
   {1},
   {2},
   {2},  /* 10 */
   {2},
   {2},
   {2},
   {2},
   {3},  /* 15 */
   {3},
   {4},
   {4},  /* 18 */
   {5},
   {5},  /* 20 */
   {6},
   {7},
   {7},
   {7},
   {8}   /* 25 */
};



const struct dex_app_type dex_app[26] = {
   {60}, /* 0 */
   {50}, /* 1 */
   {50},
   {40},
   {30},
   {20}, /* 5 */
   {10},
   {0},
   {0},
   {0},
   {0},  /* 10 */
   {0},
   {0},
   {0},
   {0},
   {-10},   /* 15 */
   {-15},
   {-20},
   {-30},
   {-40},
   {-50},   /* 20 */
   {-65},
   {-75},
   {-90},
   {-105},
   {-120}   /* 25 */
};



const struct con_app_type con_app[26] = {
   {-4, 20},   /*  0 */
   {-3, 25},   /*  1 */
   {-2, 30},
   {-2, 35},   /*  3 */
   {-1, 40},
   {-1, 45},   /*  5 */
   {-1, 50},
   {0, 55},
   {0, 60},
   {0, 65},
   {0, 70}, /* 10 */
   {0, 75},
   {0, 80},
   {0, 85},
   {0, 88},
   {1, 90}, /* 15 */
   {2, 95},
   {2, 97},
   {3, 99}, /* 18 */
   {3, 99},
   {4, 99}, /* 20 */
   {4, 99},
   {5, 99},
   {6, 99},
   {7, 99},
   {8, 99}  /* 25 */
};



/*
 * Liquid properties.
 * Used in world.obj.
 */
const struct liq_type liq_table[LIQ_MAX] = {
   {"water", "clear", {0, 1, 10}},  /*  0 */
   {"beer", "amber", {3, 2, 5}},
   {"wine", "rose", {5, 2, 5}},
   {"ale", "brown", {2, 2, 5}},
   {"dark ale", "dark", {1, 2, 5}},

   {"whisky", "golden", {6, 1, 4}}, /*  5 */
   {"lemonade", "pink", {0, 1, 8}},
   {"firebreather", "boiling", {10, 0, 0}},
   {"local specialty", "everclear", {3, 3, 3}},
   {"slime mold juice", "green", {0, 4, -8}},

   {"milk", "white", {0, 3, 6}}, /* 10 */
   {"tea", "tan", {0, 1, 6}},
   {"coffee", "black", {0, 1, 6}},
   {"blood", "red", {0, 2, -1}},
   {"salt water", "clear", {0, 1, -2}},

   {"cola", "cherry", {0, 1, 5}} /* 15 */
};



/*
 * The skill and spell table.
 * Slot numbers must never be changed as they appear in #OBJECTS sections.
 */
#define SLOT(n)	n

const struct skill_type skill_table[MAX_SKILL] = {

/*
 * Magic spells.
 */

   {
    "reserved", {99, 99, 99, 99},
    0, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 0 ), 0, 0,
    "", ""},

   {
    "acid blast", {20, 37, 37, 37},
    spell_acid_blast, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 70 ), 20, 12,
    "acid blast", "!Acid Blast!"},

   {
    "armor", {5, 1, 37, 37},
    spell_armor, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 1 ), 5, 12,
    "", "You feel less protected."},

   {
    "bless", {37, 5, 37, 37},
    spell_bless, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 3 ), 5, 12,
    "", "You feel less righteous."},

   {
    "blindness", {8, 5, 37, 37},
    spell_blindness, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    &gsn_blindness, SLOT( 4 ), 5, 12,
    "", "You can see again."},

   {
    "burning hands", {5, 37, 37, 37},
    spell_burning_hands, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 5 ), 15, 12,
    "burning hands", "!Burning Hands!"},

   {
    "call lightning", {37, 12, 37, 37},
    spell_call_lightning, TAR_IGNORE, POS_FIGHTING,
    NULL, SLOT( 6 ), 15, 12,
    "lightning bolt", "!Call Lightning!"},

   {
    "cause critical", {37, 9, 37, 37},
    spell_cause_critical, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 63 ), 20, 12,
    "spell", "!Cause Critical!"},

   {
    "cause light", {37, 1, 37, 37},
    spell_cause_light, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 62 ), 15, 12,
    "spell", "!Cause Light!"},

   {
    "cause serious", {37, 5, 37, 37},
    spell_cause_serious, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 64 ), 17, 12,
    "spell", "!Cause Serious!"},

   {
    "change sex", {37, 37, 37, 37},
    spell_change_sex, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
    NULL, SLOT( 82 ), 15, 12,
    "", "Your body feels familiar again."},

   {
    "charm person", {14, 37, 37, 37},
    spell_charm_person, TAR_CHAR_OFFENSIVE, POS_STANDING,
    &gsn_charm_person, SLOT( 7 ), 5, 12,
    "", "You feel more self-confident."},

   {
    "chill touch", {3, 37, 37, 37},
    spell_chill_touch, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 8 ), 15, 12,
    "chilling touch", "You feel less cold."},

   {
    "colour spray", {11, 37, 37, 37},
    spell_colour_spray, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 10 ), 15, 12,
    "colour spray", "!Colour Spray!"},

   {
    "continual light", {4, 2, 37, 37},
    spell_continual_light, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 57 ), 7, 12,
    "", "!Continual Light!"},

   {
    "control weather", {10, 13, 37, 37},
    spell_control_weather, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 11 ), 25, 12,
    "", "!Control Weather!"},

   {
    "create food", {37, 3, 37, 37},
    spell_create_food, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 12 ), 5, 12,
    "", "!Create Food!"},

   {
    "create spring", {10, 37, 37, 37},
    spell_create_spring, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 80 ), 20, 12,
    "", "!Create Spring!"},

   {
    "create water", {37, 2, 37, 37},
    spell_create_water, TAR_OBJ_INV, POS_STANDING,
    NULL, SLOT( 13 ), 5, 12,
    "", "!Create Water!"},

   {
    "cure blindness", {37, 4, 37, 37},
    spell_cure_blindness, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
    NULL, SLOT( 14 ), 5, 12,
    "", "!Cure Blindness!"},

   {
    "cure critical", {37, 9, 37, 37},
    spell_cure_critical, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
    NULL, SLOT( 15 ), 20, 12,
    "", "!Cure Critical!"},

   {
    "cure light", {37, 1, 37, 37},
    spell_cure_light, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
    NULL, SLOT( 16 ), 10, 12,
    "", "!Cure Light!"},

   {
    "cure poison", {37, 9, 37, 37},
    spell_cure_poison, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 43 ), 5, 12,
    "", "!Cure Poison!"},

   {
    "cure serious", {37, 5, 37, 37},
    spell_cure_serious, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
    NULL, SLOT( 61 ), 15, 12,
    "", "!Cure Serious!"},

   {
    "curse", {12, 12, 37, 37},
    spell_curse, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    &gsn_curse, SLOT( 17 ), 20, 12,
    "curse", "The curse wears off."},

   {
    "detect evil", {37, 4, 37, 37},
    spell_detect_evil, TAR_CHAR_SELF, POS_STANDING,
    NULL, SLOT( 18 ), 5, 12,
    "", "The red in your vision disappears."},

   {
    "detect hidden", {37, 7, 37, 37},
    spell_detect_hidden, TAR_CHAR_SELF, POS_STANDING,
    NULL, SLOT( 44 ), 5, 12,
    "", "You feel less aware of your suroundings."},

   {
    "detect invis", {2, 5, 37, 37},
    spell_detect_invis, TAR_CHAR_SELF, POS_STANDING,
    NULL, SLOT( 19 ), 5, 12,
    "", "You no longer see invisible objects."},

   {
    "detect magic", {2, 3, 37, 37},
    spell_detect_magic, TAR_CHAR_SELF, POS_STANDING,
    NULL, SLOT( 20 ), 5, 12,
    "", "The detect magic wears off."},

   {
    "detect poison", {37, 5, 37, 37},
    spell_detect_poison, TAR_OBJ_INV, POS_STANDING,
    NULL, SLOT( 21 ), 5, 12,
    "", "!Detect Poison!"},

   {
    "dispel evil", {37, 10, 37, 37},
    spell_dispel_evil, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 22 ), 15, 12,
    "dispel evil", "!Dispel Evil!"},

   {
    "dispel magic", {26, 31, 37, 37},
    spell_dispel_magic, TAR_CHAR_OFFENSIVE, POS_STANDING,
    NULL, SLOT( 59 ), 15, 12,
    "", "!Dispel Magic!"},

   {
    "earthquake", {37, 7, 37, 37},
    spell_earthquake, TAR_IGNORE, POS_FIGHTING,
    NULL, SLOT( 23 ), 15, 12,
    "earthquake", "!Earthquake!"},

   {
    "enchant weapon", {12, 37, 37, 37},
    spell_enchant_weapon, TAR_OBJ_INV, POS_STANDING,
    NULL, SLOT( 24 ), 100, 24,
    "", "!Enchant Weapon!"},

   {
    "energy drain", {13, 37, 37, 37},
    spell_energy_drain, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 25 ), 35, 12,
    "energy drain", "!Energy Drain!"},

   {
    "faerie fire", {4, 2, 37, 37},
    spell_faerie_fire, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 72 ), 5, 12,
    "faerie fire", "The pink aura around you fades away."},

   {
    "faerie fog", {10, 14, 37, 37},
    spell_faerie_fog, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 73 ), 12, 12,
    "faerie fog", "!Faerie Fog!"},

   {
    "fireball", {15, 37, 37, 37},
    spell_fireball, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 26 ), 15, 12,
    "fireball", "!Fireball!"},

   {
    "flamestrike", {37, 13, 37, 37},
    spell_flamestrike, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 65 ), 20, 12,
    "flamestrike", "!Flamestrike!"},

   {
    "fly", {7, 12, 37, 37},
    spell_fly, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 56 ), 10, 18,
    "", "You slowly float to the ground."},

   {
    "gate", {37, 37, 37, 37},
    spell_gate, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
    NULL, SLOT( 83 ), 50, 12,
    "", "!Gate!"},

   {
    "giant strength", {7, 37, 37, 37},
    spell_giant_strength, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 39 ), 20, 12,
    "", "You feel weaker."},

   {
    "harm", {37, 15, 37, 37},
    spell_harm, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 27 ), 35, 12,
    "harm spell", "!Harm!"},

   {
    "heal", {37, 14, 37, 37},
    spell_heal, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
    NULL, SLOT( 28 ), 50, 12,
    "", "!Heal!"},

   {
    "identify", {10, 10, 37, 37},
    spell_identify, TAR_OBJ_INV, POS_STANDING,
    NULL, SLOT( 53 ), 12, 24,
    "", "!Identify!"},

   {
    "infravision", {6, 9, 37, 37},
    spell_infravision, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 77 ), 5, 18,
    "", "You no longer see in the dark."},

   {
    "invis", {4, 37, 37, 37},
    spell_invis, TAR_CHAR_DEFENSIVE, POS_STANDING,
    &gsn_invis, SLOT( 29 ), 5, 12,
    "", "You are no longer invisible."},

   {
    "know alignment", {8, 5, 37, 37},
    spell_know_alignment, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 58 ), 9, 12,
    "", "!Know Alignment!"},

   {
    "lightning bolt", {9, 37, 37, 37},
    spell_lightning_bolt, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 30 ), 15, 12,
    "lightning bolt", "!Lightning Bolt!"},

   {
    "locate object", {6, 10, 37, 37},
    spell_locate_object, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 31 ), 20, 18,
    "", "!Locate Object!"},

   {
    "magic missile", {1, 37, 37, 37},
    spell_magic_missile, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 32 ), 15, 12,
    "magic missile", "!Magic Missile!"},

   {
    "mass invis", {15, 17, 37, 37},
    spell_mass_invis, TAR_IGNORE, POS_STANDING,
    &gsn_mass_invis, SLOT( 69 ), 20, 24,
    "", "!Mass Invis!"},

   {
    "pass door", {18, 37, 37, 37},
    spell_pass_door, TAR_CHAR_SELF, POS_STANDING,
    NULL, SLOT( 74 ), 20, 12,
    "", "You feel solid again."},

   {
    "poison", {37, 8, 37, 37},
    spell_poison, TAR_CHAR_OFFENSIVE, POS_STANDING,
    &gsn_poison, SLOT( 33 ), 10, 12,
    "poison", "You feel less sick."},

   {
    "protection", {37, 6, 37, 37},
    spell_protection, TAR_CHAR_SELF, POS_STANDING,
    NULL, SLOT( 34 ), 5, 12,
    "", "You feel less protected."},

   {
    "refresh", {5, 3, 37, 37},
    spell_refresh, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 81 ), 12, 18,
    "refresh", "!Refresh!"},

   {
    "remove curse", {37, 12, 37, 37},
    spell_remove_curse, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 35 ), 5, 12,
    "", "!Remove Curse!"},

   {
    "sanctuary", {37, 13, 37, 37},
    spell_sanctuary, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 36 ), 75, 12,
    "", "The white aura around your body fades."},

   {
    "shield", {13, 37, 37, 37},
    spell_shield, TAR_CHAR_DEFENSIVE, POS_STANDING,
    NULL, SLOT( 67 ), 12, 18,
    "", "Your force shield shimmers then fades away."},

   {
    "shocking grasp", {7, 37, 37, 37},
    spell_shocking_grasp, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 37 ), 15, 12,
    "shocking grasp", "!Shocking Grasp!"},

   {
    "sleep", {14, 37, 37, 37},
    spell_sleep, TAR_CHAR_OFFENSIVE, POS_STANDING,
    &gsn_sleep, SLOT( 38 ), 15, 12,
    "", "You feel less tired."},

   {
    "stone skin", {17, 37, 37, 37},
    spell_stone_skin, TAR_CHAR_SELF, POS_STANDING,
    NULL, SLOT( 66 ), 12, 18,
    "", "Your skin feels soft again."},

   {
    "summon", {37, 8, 37, 37},
    spell_summon, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 40 ), 50, 12,
    "", "!Summon!"},

   {
    "teleport", {8, 37, 37, 37},
    spell_teleport, TAR_CHAR_SELF, POS_FIGHTING,
    NULL, SLOT( 2 ), 35, 12,
    "", "!Teleport!"},

   {
    "ventriloquate", {1, 37, 37, 37},
    spell_ventriloquate, TAR_IGNORE, POS_STANDING,
    NULL, SLOT( 41 ), 5, 12,
    "", "!Ventriloquate!"},

   {
    "weaken", {7, 37, 37, 37},
    spell_weaken, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 68 ), 20, 12,
    "spell", "You feel stronger."},

   {
    "word of recall", {37, 37, 37, 37},
    spell_word_of_recall, TAR_CHAR_SELF, POS_RESTING,
    NULL, SLOT( 42 ), 5, 12,
    "", "!Word of Recall!"},

/*
 * Dragon breath
 */
   {
    "acid breath", {33, 37, 37, 37},
    spell_acid_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 200 ), 0, 4,
    "blast of acid", "!Acid Breath!"},

   {
    "fire breath", {34, 37, 37, 37},
    spell_fire_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 201 ), 0, 4,
    "blast of flame", "!Fire Breath!"},

   {
    "frost breath", {31, 37, 37, 37},
    spell_frost_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 202 ), 0, 4,
    "blast of frost", "!Frost Breath!"},

   {
    "gas breath", {35, 37, 37, 37},
    spell_gas_breath, TAR_IGNORE, POS_FIGHTING,
    NULL, SLOT( 203 ), 0, 4,
    "blast of gas", "!Gas Breath!"},

   {
    "lightning breath", {32, 37, 37, 37},
    spell_lightning_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 204 ), 0, 4,
    "blast of lightning", "!Lightning Breath!"},

/*
 * Fighter and thief skills.
 */
   {
    "backstab", {37, 37, 1, 37},
    spell_null, TAR_IGNORE, POS_STANDING,
    &gsn_backstab, SLOT( 0 ), 0, 24,
    "backstab", "!Backstab!"},

   {
    "disarm", {37, 37, 10, 37},
    spell_null, TAR_IGNORE, POS_FIGHTING,
    &gsn_disarm, SLOT( 0 ), 0, 24,
    "", "!Disarm!"},

   {
    "dodge", {37, 37, 1, 37},
    spell_null, TAR_IGNORE, POS_FIGHTING,
    &gsn_dodge, SLOT( 0 ), 0, 0,
    "", "!Dodge!"},

   {
    "enhanced damage", {37, 37, 37, 1},
    spell_null, TAR_IGNORE, POS_FIGHTING,
    &gsn_enhanced_damage, SLOT( 0 ), 0, 0,
    "", "!Enhanced Damage!"},

   {
    "hide", {37, 37, 1, 37},
    spell_null, TAR_IGNORE, POS_RESTING,
    &gsn_hide, SLOT( 0 ), 0, 12,
    "", "!Hide!"},

   {
    "kick", {37, 37, 37, 1},
    spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    &gsn_kick, SLOT( 0 ), 0, 8,
    "kick", "!Kick!"},

   {
    "parry", {37, 37, 37, 1},
    spell_null, TAR_IGNORE, POS_FIGHTING,
    &gsn_parry, SLOT( 0 ), 0, 0,
    "", "!Parry!"},

   {
    "peek", {37, 37, 1, 37},
    spell_null, TAR_IGNORE, POS_STANDING,
    &gsn_peek, SLOT( 0 ), 0, 0,
    "", "!Peek!"},

   {
    "pick lock", {37, 37, 1, 37},
    spell_null, TAR_IGNORE, POS_STANDING,
    &gsn_pick_lock, SLOT( 0 ), 0, 12,
    "", "!Pick!"},

   {
    "rescue", {37, 37, 37, 1},
    spell_null, TAR_IGNORE, POS_FIGHTING,
    &gsn_rescue, SLOT( 0 ), 0, 12,
    "", "!Rescue!"},

   {
    "second attack", {37, 37, 1, 1},
    spell_null, TAR_IGNORE, POS_FIGHTING,
    &gsn_second_attack, SLOT( 0 ), 0, 0,
    "", "!Second Attack!"},

   {
    "sneak", {37, 37, 1, 37},
    spell_null, TAR_IGNORE, POS_STANDING,
    &gsn_sneak, SLOT( 0 ), 0, 12,
    "", NULL},

   {
    "steal", {37, 37, 1, 37},
    spell_null, TAR_IGNORE, POS_STANDING,
    &gsn_steal, SLOT( 0 ), 0, 24,
    "", "!Steal!"},

   {
    "third attack", {37, 37, 37, 1},
    spell_null, TAR_IGNORE, POS_FIGHTING,
    &gsn_third_attack, SLOT( 0 ), 0, 0,
    "", "!Third Attack!"},

/*
 *  Spells for mega1.are from Glop/Erkenbrand.
*/
   {
    "general purpose", {37, 37, 37, 37},
    spell_general_purpose, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 205 ), 0, 12,
    "general purpose ammo", "!General Purpose Ammo!"},

   {
    "high explosive", {37, 37, 37, 37},
    spell_high_explosive, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
    NULL, SLOT( 206 ), 0, 12,
    "high explosive ammo", "!High Explosive Ammo!"}

};