mud/lua/
mud/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
    }
};



/*
 * 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 },
    { 5 },	/* 18 */
    { 5 },
    { 5 },	/* 20 */
    { 6 },
    { 6 },
    { 6 },
    { 6 },
    { 7 }	/* 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 */
    { - 60 },
    { - 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_STANDING,
        &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",		{ 11, 16, 37, 37 },
        spell_dispel_magic,	TAR_CHAR_OFFENSIVE,	POS_FIGHTING,
        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(501),	0,	12,
        "general purpose ammo",	"!General Purpose Ammo!"
    },

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

};