/***************************************************************************
 *  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.                                                  *
 ***************************************************************************/

/***************************************************************************
*	ROM 2.4 is copyright 1993-1998 Russ Taylor			   *
*	ROM has been brought to you by the ROM consortium		   *
*	    Russ Taylor (rtaylor@hypercube.org)				   *
*	    Gabrielle Taylor (gtaylor@hypercube.org)			   *
*	    Brian Moore (zump@rom.org)					   *
*	By using this code, you have agreed to follow the terms of the	   *
*	ROM license, in the file Rom24/doc/rom.license			   *
***************************************************************************/

#include <sys/types.h>
#include <stdio.h>
#include <time.h>
#include "merc.h"
#include "magic.h"
#include "interp.h"

/* item type list */
const struct item_type item_table[] = {
    {ITEM_LIGHT, "light"},
    {ITEM_SCROLL, "scroll"},
    {ITEM_WAND, "wand"},
    {ITEM_STAFF, "staff"},
    {ITEM_WEAPON, "weapon"},
    {ITEM_TREASURE, "treasure"},
    {ITEM_ARMOR, "armor"},
    {ITEM_POTION, "potion"},
    {ITEM_CLOTHING, "clothing"},
    {ITEM_FURNITURE, "furniture"},
    {ITEM_TRASH, "trash"},
    {ITEM_CONTAINER, "container"},
    {ITEM_DRINK_CON, "drink"},
    {ITEM_KEY, "key"},
    {ITEM_FOOD, "food"},
    {ITEM_MONEY, "money"},
    {ITEM_BOAT, "boat"},
    {ITEM_CORPSE_NPC, "npc_corpse"},
    {ITEM_CORPSE_PC, "pc_corpse"},
    {ITEM_FOUNTAIN, "fountain"},
    {ITEM_PILL, "pill"},
    {ITEM_PROTECT, "protect"},
    {ITEM_MAP, "map"},
    {ITEM_PORTAL, "portal"},
    {ITEM_WARP_STONE, "warp_stone"},
    {ITEM_ROOM_KEY, "room_key"},
    {ITEM_GEM, "gem"},
    {ITEM_JEWELRY, "jewelry"},
    {ITEM_JUKEBOX, "jukebox"},
    {0, NULL}
};

/* weapon selection table */
const struct weapon_type weapon_table[] = {
    {"sword", OBJ_VNUM_SCHOOL_SWORD, WEAPON_SWORD, &gsn_sword},
    {"mace", OBJ_VNUM_SCHOOL_MACE, WEAPON_MACE, &gsn_mace},
    {"dagger", OBJ_VNUM_SCHOOL_DAGGER, WEAPON_DAGGER, &gsn_dagger},
    {"axe", OBJ_VNUM_SCHOOL_AXE, WEAPON_AXE, &gsn_axe},
    {"staff", OBJ_VNUM_SCHOOL_STAFF, WEAPON_SPEAR, &gsn_spear},
    {"flail", OBJ_VNUM_SCHOOL_FLAIL, WEAPON_FLAIL, &gsn_flail},
    {"whip", OBJ_VNUM_SCHOOL_WHIP, WEAPON_WHIP, &gsn_whip},
    {"polearm", OBJ_VNUM_SCHOOL_POLEARM, WEAPON_POLEARM, &gsn_polearm},
    {NULL, 0, 0, NULL}
};

/* wiznet table and prototype for future flag setting */
const struct wiznet_type wiznet_table[] = {
    {"on", WIZ_ON, IM},
    {"prefix", WIZ_PREFIX, IM},
    {"ticks", WIZ_TICKS, IM},
    {"logins", WIZ_LOGINS, IM},
    {"sites", WIZ_SITES, L4},
    {"links", WIZ_LINKS, L7},
    {"newbies", WIZ_NEWBIE, IM},
    {"spam", WIZ_SPAM, L5},
    {"deaths", WIZ_DEATHS, IM},
    {"resets", WIZ_RESETS, L4},
    {"mobdeaths", WIZ_MOBDEATHS, L4},
    {"flags", WIZ_FLAGS, L5},
    {"penalties", WIZ_PENALTIES, L5},
    {"saccing", WIZ_SACCING, L5},
    {"levels", WIZ_LEVELS, IM},
    {"load", WIZ_LOAD, L2},
    {"restore", WIZ_RESTORE, L2},
    {"snoops", WIZ_SNOOPS, L2},
    {"switches", WIZ_SWITCHES, L2},
    {"secure", WIZ_SECURE, L1},
    {"bugs", WIZ_BUGS, L3},
    {NULL, 0, 0}
};

/* attack table  -- not very organized :( */
const struct attack_type attack_table[MAX_DAMAGE_MESSAGE] = {
    {"none", "hit", -1},        /*  0 */
    {"slice", "slice", DAM_SLASH},
    {"stab", "stab", DAM_PIERCE},
    {"slash", "slash", DAM_SLASH},
    {"whip", "whip", DAM_SLASH},
    {"claw", "claw", DAM_SLASH},    /*  5 */
    {"blast", "blast", DAM_BASH},
    {"pound", "pound", DAM_BASH},
    {"crush", "crush", DAM_BASH},
    {"grep", "grep", DAM_SLASH},
    {"bite", "bite", DAM_PIERCE},   /* 10 */
    {"pierce", "pierce", DAM_PIERCE},
    {"suction", "suction", DAM_BASH},
    {"beating", "beating", DAM_BASH},
    {"digestion", "digestion", DAM_ACID},
    {"charge", "charge", DAM_BASH}, /* 15 */
    {"slap", "slap", DAM_BASH},
    {"punch", "punch", DAM_BASH},
    {"wrath", "wrath", DAM_ENERGY},
    {"magic", "magic", DAM_ENERGY},
    {"divine", "divine power", DAM_HOLY},   /* 20 */
    {"cleave", "cleave", DAM_SLASH},
    {"scratch", "scratch", DAM_PIERCE},
    {"peck", "peck", DAM_PIERCE},
    {"peckb", "peck", DAM_BASH},
    {"chop", "chop", DAM_SLASH},    /* 25 */
    {"sting", "sting", DAM_PIERCE},
    {"smash", "smash", DAM_BASH},
    {"shbite", "shocking bite", DAM_LIGHTNING},
    {"flbite", "flaming bite", DAM_FIRE},
    {"frbite", "freezing bite", DAM_COLD},  /* 30 */
    {"acbite", "acidic bite", DAM_ACID},
    {"chomp", "chomp", DAM_PIERCE},
    {"drain", "life drain", DAM_NEGATIVE},
    {"thrust", "thrust", DAM_PIERCE},
    {"slime", "slime", DAM_ACID},
    {"shock", "shock", DAM_LIGHTNING},
    {"thwack", "thwack", DAM_BASH},
    {"flame", "flame", DAM_FIRE},
    {"chill", "chill", DAM_COLD},
    {NULL, NULL, 0}
};

/* race table */
const struct race_type race_table[] = {
/*
    {
	name,		pc_race?,
	act bits,	aff_by bits,	off bits,
	imm,		res,		vuln,
	form,		parts 
    },
*/
    {"unique", FALSE, 0, 0, 0, 0, 0, 0, 0, 0},

    {
     "human", TRUE,
     0, 0, 0,
     0, 0, 0,
     FORM_EDIBLE | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE},

    {
     "elf", TRUE,
     0, AFF_INFRARED, 0,
     0, RES_CHARM, VULN_IRON,
     FORM_EDIBLE | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE},

    {
     "dwarf", TRUE,
     0, AFF_INFRARED, 0,
     0, RES_POISON | RES_DISEASE, VULN_DROWNING,
     FORM_EDIBLE | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE},

    {
     "giant", TRUE,
     0, 0, 0,
     0, RES_FIRE | RES_COLD, VULN_MENTAL | VULN_LIGHTNING,
     FORM_EDIBLE | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE},

    {
     "bat", FALSE,
     0, AFF_FLYING | AFF_DARK_VISION, OFF_DODGE | OFF_FAST,
     0, 0, VULN_LIGHT,
     FORM_EDIBLE | FORM_ANIMAL | FORM_MAMMAL,
     PART_HEAD | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS | PART_EAR |
     PART_EYE | PART_WINGS},

    {
     "bear", FALSE,
     0, 0, OFF_CRUSH | OFF_DISARM | OFF_BERSERK,
     0, RES_BASH | RES_COLD, 0,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_FEET | PART_EAR | PART_EYE | PART_CLAWS},

    {
     "cat", FALSE,
     0, AFF_DARK_VISION, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_FEET | PART_EAR | PART_EYE | PART_CLAWS},

    {
     "centipede", FALSE,
     0, AFF_DARK_VISION, 0,
     0, RES_PIERCE | RES_COLD, VULN_BASH,
     FORM_EDIBLE | FORM_POISON | FORM_ANIMAL | FORM_INSECT,
     PART_HEAD | PART_LEGS | PART_EYE},

    {
     "dog", FALSE,
     0, 0, OFF_FAST,
     0, 0, 0,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_FEET | PART_EAR | PART_EYE | PART_CLAWS},

    {
     "doll", FALSE,
     0, 0, 0,
     IMM_COLD | IMM_POISON | IMM_HOLY | IMM_NEGATIVE | IMM_MENTAL |
     IMM_DISEASE | IMM_DROWNING, RES_BASH | RES_LIGHT,
     VULN_SLASH | VULN_FIRE | VULN_ACID | VULN_LIGHTNING | VULN_ENERGY,
     FORM_OTHER | FORM_CONSTRUCT | FORM_BIPED | FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HANDS | PART_FEET | PART_EYE},

    {"dragon", FALSE,
     0, AFF_INFRARED | AFF_FLYING, 0,
     0, RES_FIRE | RES_BASH | RES_CHARM,
     VULN_PIERCE | VULN_COLD,
     FORM_EDIBLE | FORM_SENTIENT | FORM_DRAGON,
     PART_HEAD | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS | PART_HANDS
     | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE | PART_WINGS | PART_TAIL
     | PART_CLAWS | PART_FANGS | PART_HORNS | PART_SCALES},

    {
     "fido", FALSE,
     0, 0, OFF_DODGE | ASSIST_RACE,
     0, 0, VULN_MAGIC,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_FEET | PART_EAR | PART_EYE | PART_CLAWS},

    {
     "fox", FALSE,
     0, AFF_DARK_VISION, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_FEET | PART_EAR | PART_EYE | PART_CLAWS},

    {
     "goblin", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_DISEASE, VULN_MAGIC,
     FORM_EDIBLE | FORM_POISON | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL |
     FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE |
     PART_CLAWS | PART_TUSKS | PART_HORNS},

    {
     "hobgoblin", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_DISEASE | RES_POISON, 0,
     FORM_EDIBLE | FORM_POISON | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL |
     FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE |
     PART_CLAWS | PART_TUSKS | PART_HORNS},

    {
     "kobold", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_POISON, VULN_MAGIC,
     FORM_EDIBLE | FORM_POISON | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL |
     FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE |
     PART_CLAWS | PART_TUSKS | PART_HORNS},

    {
     "lizard", FALSE,
     0, 0, 0,
     0, RES_POISON, VULN_COLD,
     FORM_EDIBLE | FORM_ANIMAL | FORM_REPTILE | FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE |
     PART_LONG_TONGUE | PART_TAIL | PART_CLAWS},

    {
     "modron", FALSE,
     0, AFF_INFRARED, ASSIST_RACE | ASSIST_ALIGN,
     IMM_CHARM | IMM_DISEASE | IMM_MENTAL | IMM_HOLY | IMM_NEGATIVE,
     RES_FIRE | RES_COLD | RES_ACID, 0,
     FORM_SENTIENT,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HANDS | PART_FEET | PART_EAR |
     PART_EYE},

    {
     "orc", FALSE,
     0, AFF_INFRARED, 0,
     0, RES_DISEASE, VULN_LIGHT,
     FORM_EDIBLE | FORM_POISON | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL |
     FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE |
     PART_CLAWS | PART_TUSKS | PART_HORNS},

    {
     "pig", FALSE,
     0, 0, 0,
     0, 0, 0,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS | PART_FEET
     | PART_EAR | PART_EYE | PART_TAIL},

    {
     "rabbit", FALSE,
     0, 0, OFF_DODGE | OFF_FAST,
     0, 0, 0,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS | PART_FEET
     | PART_EAR | PART_EYE},

    {
     "school monster", FALSE,
     ACT_NOALIGN, 0, 0,
     IMM_CHARM | IMM_SUMMON, 0, VULN_MAGIC,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS | PART_FEET
     | PART_EAR | PART_EYE | PART_TAIL | PART_CLAWS},

    {
     "snake", FALSE,
     0, 0, 0,
     0, RES_POISON, VULN_COLD,
     FORM_EDIBLE | FORM_ANIMAL | FORM_REPTILE | FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE |
     PART_LONG_TONGUE | PART_TAIL | PART_CLAWS},

    {
     "song bird", FALSE,
     0, AFF_FLYING, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     FORM_EDIBLE | FORM_ANIMAL | FORM_BIRD,
     PART_HEAD | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS | PART_FEET
     | PART_EYE | PART_WINGS},

    {
     "troll", FALSE,
     0, AFF_REGENERATION | AFF_INFRARED | AFF_DETECT_HIDDEN,
     OFF_BERSERK,
     0, RES_CHARM | RES_BASH, VULN_FIRE | VULN_ACID,
     FORM_EDIBLE | FORM_POISON | FORM_SENTIENT | FORM_BIPED | FORM_MAMMAL |
     FORM_COLD_BLOOD,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_FINGERS | PART_EAR | PART_EYE |
     PART_CLAWS | PART_TUSKS | PART_HORNS},

    {
     "water fowl", FALSE,
     0, AFF_SWIM | AFF_FLYING, 0,
     0, RES_DROWNING, 0,
     FORM_EDIBLE | FORM_ANIMAL | FORM_BIRD,
     PART_HEAD | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS | PART_FEET
     | PART_EYE | PART_WINGS},

    {
     "wolf", FALSE,
     0, AFF_DARK_VISION, OFF_FAST | OFF_DODGE,
     0, 0, 0,
     FORM_ANIMAL | FORM_MAMMAL | FORM_BIPED,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_FEET | PART_EAR | PART_EYE | PART_CLAWS},

    {
     "wyvern", FALSE,
     0, AFF_FLYING | AFF_DETECT_INVIS | AFF_DETECT_HIDDEN,
     OFF_BASH | OFF_FAST | OFF_DODGE,
     IMM_POISON, 0, VULN_LIGHT,
     FORM_EDIBLE | FORM_POISON | FORM_ANIMAL | FORM_DRAGON,
     PART_HEAD | PART_ARMS | PART_LEGS | PART_HEART | PART_BRAINS | PART_GUTS
     | PART_HANDS | PART_FEET | PART_EAR | PART_EYE | PART_TAIL | PART_FANGS |
     PART_SCALES},

    {
     "unique", FALSE,
     0, 0, 0,
     0, 0, 0,
     0, 0},

    {
     NULL, 0, 0, 0, 0, 0, 0}
};

const struct pc_race_type pc_race_table[] = {
    {"null race", "", 0, {100, 100, 100, 100},
     {""}, {13, 13, 13, 13, 13}, {18, 18, 18, 18, 18}, 0},

/*
    {
	"race name", 	short name, 	points,	{ class multipliers },
	{ bonus skills },
	{ base stats },		{ max stats },		size 
    },
*/
    {
     "human", "Human", 0, {100, 100, 100, 100},
     {""},
     {13, 13, 13, 13, 13}, {18, 18, 18, 18, 18}, SIZE_MEDIUM},

    {
     "elf", " Elf ", 5, {100, 125, 100, 120},
     {"sneak", "hide"},
     {12, 14, 13, 15, 11}, {16, 20, 18, 21, 15}, SIZE_SMALL},

    {
     "dwarf", "Dwarf", 8, {150, 100, 125, 100},
     {"berserk"},
     {14, 12, 14, 10, 15}, {20, 16, 19, 14, 21}, SIZE_MEDIUM},

    {
     "giant", "Giant", 6, {200, 150, 150, 105},
     {"bash", "fast healing"},
     {16, 11, 13, 11, 14}, {22, 15, 18, 15, 20}, SIZE_LARGE}
};

/*
 * Class table.
 */
const struct class_type class_table[MAX_CLASS] = {
    {
     "mage", "Mag", STAT_INT, OBJ_VNUM_SCHOOL_DAGGER,
     {3018, 9618}, 75, 20, 6, 6, 8, TRUE,
     "mage basics", "mage default"},

    {
     "cleric", "Cle", STAT_WIS, OBJ_VNUM_SCHOOL_MACE,
     {3003, 9619}, 75, 20, 2, 7, 10, TRUE,
     "cleric basics", "cleric default"},

    {
     "thief", "Thi", STAT_DEX, OBJ_VNUM_SCHOOL_DAGGER,
     {3028, 9639}, 75, 20, -4, 8, 13, FALSE,
     "thief basics", "thief default"},

    {
     "warrior", "War", STAT_STR, OBJ_VNUM_SCHOOL_SWORD,
     {3022, 9633}, 75, 20, -10, 11, 15, FALSE,
     "warrior basics", "warrior default"}
};

/*
 * 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"},

     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},

     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},

     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},
     {"Master Mage", "Master Mage"},

     {"Mage Hero", "Mage Heroine"},
     {"Avatar of Magic", "Avatar of Magic"},
     {"Angel of Magic", "Angel of Magic"},
     {"Demigod of Magic", "Demigoddess of Magic"},
     {"Immortal of Magic", "Immortal of Magic"},
     {"God of Magic", "Goddess of Magic"},
     {"Deity of Magic", "Deity of Magic"},
     {"Supremity of Magic", "Supremity of Magic"},
     {"Creator", "Creator"},
     {"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"},

     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},

     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},

     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},
     {"Master Cleric", "Master Cleric"},

     {"Holy Hero", "Holy Heroine"},
     {"Holy Avatar", "Holy Avatar"},
     {"Angel", "Angel"},
     {"Demigod", "Demigoddess",},
     {"Immortal", "Immortal"},
     {"God", "Goddess"},
     {"Deity", "Deity"},
     {"Supreme Master", "Supreme Mistress"},
     {"Creator", "Creator"},
     {"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"},

     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},

     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},

     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},
     {"Master Thief", "Master Thief"},

     {"Assassin Hero", "Assassin Heroine"},
     {"Avatar of Death", "Avatar of Death",},
     {"Angel of Death", "Angel of Death"},
     {"Demigod of Assassins", "Demigoddess of Assassins"},
     {"Immortal Assasin", "Immortal Assassin"},
     {"God of Assassins", "God of Assassins",},
     {"Deity of Assassins", "Deity of Assassins"},
     {"Supreme Master", "Supreme Mistress"},
     {"Creator", "Creator"},
     {"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"},

     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},

     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},

     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},
     {"Master Warrior", "Master Warrior"},

     {"Knight Hero", "Knight Heroine"},
     {"Avatar of War", "Avatar of War"},
     {"Angel of War", "Angel of War"},
     {"Demigod of War", "Demigoddess of War"},
     {"Immortal Warlord", "Immortal Warlord"},
     {"God of War", "God of War"},
     {"Deity of War", "Deity of War"},
     {"Supreme Master of War", "Supreme Mistress of War"},
     {"Creator", "Creator"},
     {"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, 130, 12},
    {0, 0, 130, 13},            /* 13  */
    {0, 1, 140, 14},
    {1, 1, 150, 15},            /* 15  */
    {1, 2, 165, 16},
    {2, 3, 180, 22},
    {2, 3, 200, 25},            /* 18  */
    {3, 4, 225, 30},
    {3, 5, 250, 35},            /* 20  */
    {4, 6, 300, 40},
    {4, 6, 350, 45},
    {5, 7, 400, 50},
    {5, 8, 450, 55},
    {6, 9, 500, 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},
    {80},
    {85}                        /* 25 */
};

const struct wis_app_type wis_app[26] = {
    {0},                        /*  0 */
    {0},                        /*  1 */
    {0},
    {0},                        /*  3 */
    {0},
    {1},                        /*  5 */
    {1},
    {1},
    {1},
    {1},
    {1},                        /* 10 */
    {1},
    {1},
    {1},
    {1},
    {2},                        /* 15 */
    {2},
    {2},
    {3},                        /* 18 */
    {3},
    {3},                        /* 20 */
    {3},
    {4},
    {4},
    {4},
    {5}                         /* 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[] = {
/*    name			color	proof, full, thirst, food, ssize */
    {"water", "clear", {0, 1, 10, 0, 16}},
    {"beer", "amber", {12, 1, 8, 1, 12}},
    {"red wine", "burgundy", {30, 1, 8, 1, 5}},
    {"ale", "brown", {15, 1, 8, 1, 12}},
    {"dark ale", "dark", {16, 1, 8, 1, 12}},

    {"whisky", "golden", {120, 1, 5, 0, 2}},
    {"lemonade", "pink", {0, 1, 9, 2, 12}},
    {"firebreather", "boiling", {190, 0, 4, 0, 2}},
    {"local specialty", "clear", {151, 1, 3, 0, 2}},
    {"slime mold juice", "green", {0, 2, -8, 1, 2}},

    {"milk", "white", {0, 2, 9, 3, 12}},
    {"tea", "tan", {0, 1, 8, 0, 6}},
    {"coffee", "black", {0, 1, 8, 0, 6}},
    {"blood", "red", {0, 2, -1, 2, 6}},
    {"salt water", "clear", {0, 1, -2, 0, 1}},

    {"coke", "brown", {0, 2, 9, 2, 12}},
    {"root beer", "brown", {0, 2, 9, 2, 12}},
    {"elvish wine", "green", {35, 2, 8, 1, 5}},
    {"white wine", "golden", {28, 1, 8, 1, 5}},
    {"champagne", "golden", {32, 1, 8, 1, 5}},

    {"mead", "honey-colored", {34, 2, 8, 2, 12}},
    {"rose wine", "pink", {26, 1, 8, 1, 5}},
    {"benedictine wine", "burgundy", {40, 1, 8, 1, 5}},
    {"vodka", "clear", {130, 1, 5, 0, 2}},
    {"cranberry juice", "red", {0, 1, 9, 2, 12}},

    {"orange juice", "orange", {0, 2, 9, 3, 12}},
    {"absinthe", "green", {200, 1, 4, 0, 2}},
    {"brandy", "golden", {80, 1, 5, 0, 4}},
    {"aquavit", "clear", {140, 1, 5, 0, 2}},
    {"schnapps", "clear", {90, 1, 5, 0, 2}},

    {"icewine", "purple", {50, 2, 6, 1, 5}},
    {"amontillado", "burgundy", {35, 2, 8, 1, 5}},
    {"sherry", "red", {38, 2, 7, 1, 5}},
    {"framboise", "red", {50, 1, 7, 1, 5}},
    {"rum", "amber", {151, 1, 4, 0, 2}},

    {"cordial", "clear", {100, 1, 5, 0, 2}},
    {NULL, NULL, {0, 0, 0, 0, 0}}
};

/*
 * 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", {999, 999, 999, 999}, {999, 999, 999, 999},
     0, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 0 ), 0, 0,
     "", "", ""},

    {
     "acid blast", {28, ANGEL, 35, 32}, {1, 1, 2, 2},
     spell_acid_blast, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 70 ), 20, 12,
     "acid blast", "!Acid Blast!"},

    {
     "armor", {7, 2, 10, 5}, {1, 1, 2, 2},
     spell_armor, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 1 ), 5, 12,
     "", "You feel less armored.", ""},

    {
     "bless", {ANGEL, 7, ANGEL, 8}, {1, 1, 2, 2},
     spell_bless, TAR_OBJ_CHAR_DEF, POS_STANDING,
     NULL, SLOT ( 3 ), 5, 12,
     "", "You feel less righteous.",
     "$p's holy aura fades."},

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

    {
     "burning hands", {7, ANGEL, 10, 9}, {1, 1, 2, 2},
     spell_burning_hands, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 5 ), 15, 12,
     "burning hands", "!Burning Hands!", ""},

    {
     "call lightning", {26, 18, 31, 22}, {1, 1, 2, 2},
     spell_call_lightning, TAR_IGNORE, POS_FIGHTING,
     NULL, SLOT ( 6 ), 15, 12,
     "lightning bolt", "!Call Lightning!", ""},

    {"calm", {48, 16, 50, 20}, {1, 1, 2, 2},
     spell_calm, TAR_IGNORE, POS_FIGHTING,
     NULL, SLOT ( 509 ), 30, 12,
     "", "You have lost your peace of mind.", ""},

    {
     "cancellation", {18, 26, 34, 34}, {1, 1, 2, 2},
     spell_cancellation, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 507 ), 20, 12,
     "" "!cancellation!", ""},

    {
     "cause critical", {ANGEL, 13, ANGEL, 19}, {1, 1, 2, 2},
     spell_cause_critical, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 63 ), 20, 12,
     "spell", "!Cause Critical!", ""},

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

    {
     "cause serious", {ANGEL, 7, ANGEL, 10}, {1, 1, 2, 2},
     spell_cause_serious, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 64 ), 17, 12,
     "spell", "!Cause Serious!", ""},

    {
     "chain lightning", {33, ANGEL, 39, 36}, {1, 1, 2, 2},
     spell_chain_lightning, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 500 ), 25, 12,
     "lightning", "!Chain Lightning!", ""},

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

    {
     "charm person", {20, ANGEL, 25, 53}, {1, 1, 2, 2},
     spell_charm_person, TAR_CHAR_OFFENSIVE, POS_STANDING,
     &gsn_charm_person, SLOT ( 7 ), 5, 12,
     "", "You feel more self-confident.", ""},

    {
     "chill touch", {4, ANGEL, 6, 6}, {1, 1, 2, 2},
     spell_chill_touch, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 8 ), 15, 12,
     "chilling touch", "You feel less cold.", ""},

    {
     "colour spray", {16, ANGEL, 22, 20}, {1, 1, 2, 2},
     spell_colour_spray, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 10 ), 15, 12,
     "colour spray", "!Colour Spray!", ""},

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

    {
     "control weather", {15, 19, 28, 22}, {1, 1, 2, 2},
     spell_control_weather, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 11 ), 25, 12,
     "", "!Control Weather!", ""},

    {
     "create food", {10, 5, 11, 12}, {1, 1, 2, 2},
     spell_create_food, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 12 ), 5, 12,
     "", "!Create Food!", ""},

    {
     "create rose", {16, 11, 10, 24}, {1, 1, 2, 2},
     spell_create_rose, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 511 ), 30, 12,
     "", "!Create Rose!", ""},

    {
     "create spring", {14, 17, 23, 20}, {1, 1, 2, 2},
     spell_create_spring, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 80 ), 20, 12,
     "", "!Create Spring!", ""},

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

    {
     "cure blindness", {ANGEL, 6, ANGEL, 8}, {1, 1, 2, 2},
     spell_cure_blindness, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 14 ), 5, 12,
     "", "!Cure Blindness!", ""},

    {
     "cure critical", {ANGEL, 13, ANGEL, 19}, {1, 1, 2, 2},
     spell_cure_critical, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 15 ), 20, 12,
     "", "!Cure Critical!", ""},

    {
     "cure disease", {ANGEL, 13, ANGEL, 14}, {1, 1, 2, 2},
     spell_cure_disease, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 501 ), 20, 12,
     "", "!Cure Disease!", ""},

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

    {
     "cure poison", {ANGEL, 14, ANGEL, 16}, {1, 1, 2, 2},
     spell_cure_poison, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 43 ), 5, 12,
     "", "!Cure Poison!", ""},

    {
     "cure serious", {ANGEL, 7, ANGEL, 10}, {1, 1, 2, 2},
     spell_cure_serious, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 61 ), 15, 12,
     "", "!Cure Serious!", ""},

    {
     "curse", {18, 18, 26, 22}, {1, 1, 2, 2},
     spell_curse, TAR_OBJ_CHAR_OFF, POS_FIGHTING,
     &gsn_curse, SLOT ( 17 ), 20, 12,
     "curse", "The curse wears off.",
     "$p is no longer impure."},

    {
     "demonfire", {ANGEL, 34, ANGEL, 45}, {1, 1, 2, 2},
     spell_demonfire, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 505 ), 20, 12,
     "torments", "!Demonfire!", ""},

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

    {
     "detect good", {11, 4, 12, 53}, {1, 1, 2, 2},
     spell_detect_good, TAR_CHAR_SELF, POS_STANDING,
     NULL, SLOT ( 513 ), 5, 12,
     "", "The gold in your vision disappears.", ""},

    {
     "detect hidden", {15, 11, 12, 53}, {1, 1, 2, 2},
     spell_detect_hidden, TAR_CHAR_SELF, POS_STANDING,
     NULL, SLOT ( 44 ), 5, 12,
     "", "You feel less aware of your surroundings.",
     ""},

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

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

    {
     "detect poison", {15, 7, 9, 53}, {1, 1, 2, 2},
     spell_detect_poison, TAR_OBJ_INV, POS_STANDING,
     NULL, SLOT ( 21 ), 5, 12,
     "", "!Detect Poison!", ""},

    {
     "dispel evil", {ANGEL, 15, ANGEL, 21}, {1, 1, 2, 2},
     spell_dispel_evil, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 22 ), 15, 12,
     "dispel evil", "!Dispel Evil!", ""},

    {
     "dispel good", {ANGEL, 15, ANGEL, 21}, {1, 1, 2, 2},
     spell_dispel_good, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 512 ), 15, 12,
     "dispel good", "!Dispel Good!", ""},

    {
     "dispel magic", {16, 24, 30, 30}, {1, 1, 2, 2},
     spell_dispel_magic, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 59 ), 15, 12,
     "", "!Dispel Magic!", ""},

    {
     "earthquake", {ANGEL, 10, ANGEL, 14}, {1, 1, 2, 2},
     spell_earthquake, TAR_IGNORE, POS_FIGHTING,
     NULL, SLOT ( 23 ), 15, 12,
     "earthquake", "!Earthquake!", ""},

    {
     "enchant armor", {16, ANGEL, ANGEL, 53}, {2, 2, 4, 4},
     spell_enchant_armor, TAR_OBJ_INV, POS_STANDING,
     NULL, SLOT ( 510 ), 100, 24,
     "", "!Enchant Armor!", ""},

    {
     "enchant weapon", {17, ANGEL, ANGEL, 53}, {2, 2, 4, 4},
     spell_enchant_weapon, TAR_OBJ_INV, POS_STANDING,
     NULL, SLOT ( 24 ), 100, 24,
     "", "!Enchant Weapon!", ""},

    {
     "energy drain", {19, 22, 26, 23}, {1, 1, 2, 2},
     spell_energy_drain, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 25 ), 35, 12,
     "energy drain", "!Energy Drain!", ""},

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

    {
     "faerie fog", {14, 21, 16, 24}, {1, 1, 2, 2},
     spell_faerie_fog, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 73 ), 12, 12,
     "faerie fog", "!Faerie Fog!", ""},

    {
     "farsight", {14, 16, 16, 53}, {1, 1, 2, 2},
     spell_farsight, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 521 ), 36, 20,
     "farsight", "!Farsight!", ""},

    {
     "fireball", {22, ANGEL, 30, 26}, {1, 1, 2, 2},
     spell_fireball, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 26 ), 15, 12,
     "fireball", "!Fireball!", ""},

    {
     "fireproof", {13, 12, 19, 18}, {1, 1, 2, 2},
     spell_fireproof, TAR_OBJ_INV, POS_STANDING,
     NULL, SLOT ( 523 ), 10, 12,
     "", "", "$p's protective aura fades."},

    {
     "flamestrike", {ANGEL, 20, ANGEL, 27}, {1, 1, 2, 2},
     spell_flamestrike, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 65 ), 20, 12,
     "flamestrike", "!Flamestrike!", ""},

    {
     "fly", {10, 18, 20, 22}, {1, 1, 2, 2},
     spell_fly, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 56 ), 10, 18,
     "", "You slowly float to the ground.", ""},

    {
     "floating disc", {4, 10, 7, 16}, {1, 1, 2, 2},
     spell_floating_disc, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 522 ), 40, 24,
     "", "!Floating disc!", ""},

    {
     "frenzy", {ANGEL, 24, ANGEL, 26}, {1, 1, 2, 2},
     spell_frenzy, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 504 ), 30, 24,
     "", "Your rage ebbs.", ""},

    {
     "gate", {27, 17, 32, 28}, {1, 1, 2, 2},
     spell_gate, TAR_IGNORE, POS_FIGHTING,
     NULL, SLOT ( 83 ), 80, 12,
     "", "!Gate!", ""},

    {
     "giant strength", {11, ANGEL, 22, 20}, {1, 1, 2, 2},
     spell_giant_strength, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 39 ), 20, 12,
     "", "You feel weaker.", ""},

    {
     "harm", {ANGEL, 23, ANGEL, 28}, {1, 1, 2, 2},
     spell_harm, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 27 ), 35, 12,
     "harm spell", "!Harm!,		" ""},

    {
     "haste", {21, ANGEL, 26, 29}, {1, 1, 2, 2},
     spell_haste, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 502 ), 30, 12,
     "", "You feel yourself slow down.", ""},

    {
     "heal", {ANGEL, 21, 33, 30}, {1, 1, 2, 2},
     spell_heal, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 28 ), 50, 12,
     "", "!Heal!", ""},

    {
     "heat metal", {ANGEL, 16, ANGEL, 23}, {1, 1, 2, 2},
     spell_heat_metal, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 516 ), 25, 18,
     "spell", "!Heat Metal!", ""},

    {
     "holy word", {ANGEL, 36, ANGEL, 42}, {2, 2, 4, 4},
     spell_holy_word, TAR_IGNORE, POS_FIGHTING,
     NULL, SLOT ( 506 ), 200, 24,
     "divine wrath", "!Holy Word!", ""},

    {
     "identify", {15, 16, 18, 53}, {1, 1, 2, 2},
     spell_identify, TAR_OBJ_INV, POS_STANDING,
     NULL, SLOT ( 53 ), 12, 24,
     "", "!Identify!", ""},

    {
     "infravision", {9, 13, 10, 16}, {1, 1, 2, 2},
     spell_infravision, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 77 ), 5, 18,
     "", "You no longer see in the dark.", ""},

    {
     "invisibility", {5, ANGEL, 9, 53}, {1, 1, 2, 2},
     spell_invis, TAR_OBJ_CHAR_DEF, POS_STANDING,
     &gsn_invis, SLOT ( 29 ), 5, 12,
     "", "You are no longer invisible.",
     "$p fades into view."},

    {
     "know alignment", {12, 9, 20, 53}, {1, 1, 2, 2},
     spell_know_alignment, TAR_CHAR_DEFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 58 ), 9, 12,
     "", "!Know Alignment!", ""},

    {
     "lightning bolt", {13, 23, 18, 16}, {1, 1, 2, 2},
     spell_lightning_bolt, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 30 ), 15, 12,
     "lightning bolt", "!Lightning Bolt!", ""},

    {
     "locate object", {9, 15, 11, 53}, {1, 1, 2, 2},
     spell_locate_object, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 31 ), 20, 18,
     "", "!Locate Object!", ""},

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

    {
     "mass healing", {ANGEL, 38, ANGEL, 46}, {2, 2, 4, 4},
     spell_mass_healing, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 508 ), 100, 36,
     "", "!Mass Healing!", ""},

    {
     "mass invis", {22, 25, 31, 53}, {1, 1, 2, 2},
     spell_mass_invis, TAR_IGNORE, POS_STANDING,
     &gsn_mass_invis, SLOT ( 69 ), 20, 24,
     "", "You are no longer invisible.", ""},

    {
     "nexus", {40, 35, 50, 45}, {2, 2, 4, 4},
     spell_nexus, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 520 ), 150, 36,
     "", "!Nexus!", ""},

    {
     "pass door", {24, 32, 25, 37}, {1, 1, 2, 2},
     spell_pass_door, TAR_CHAR_SELF, POS_STANDING,
     NULL, SLOT ( 74 ), 20, 12,
     "", "You feel solid again.", ""},

    {
     "plague", {23, 17, 36, 26}, {1, 1, 2, 2},
     spell_plague, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     &gsn_plague, SLOT ( 503 ), 20, 12,
     "sickness", "Your sores vanish.", ""},

    {
     "poison", {17, 12, 15, 21}, {1, 1, 2, 2},
     spell_poison, TAR_OBJ_CHAR_OFF, POS_FIGHTING,
     &gsn_poison, SLOT ( 33 ), 10, 12,
     "poison", "You feel less sick.",
     "The poison on $p dries up."},

    {
     "portal", {35, 30, 45, 40}, {2, 2, 4, 4},
     spell_portal, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 519 ), 100, 24,
     "", "!Portal!", ""},

    {
     "protection evil", {12, 9, 17, 11}, {1, 1, 2, 2},
     spell_protection_evil, TAR_CHAR_SELF, POS_STANDING,
     NULL, SLOT ( 34 ), 5, 12,
     "", "You feel less protected.", ""},

    {
     "protection good", {12, 9, 17, 11}, {1, 1, 2, 2},
     spell_protection_good, TAR_CHAR_SELF, POS_STANDING,
     NULL, SLOT ( 514 ), 5, 12,
     "", "You feel less protected.", ""},

    {
     "ray of truth", {ANGEL, 35, ANGEL, 47}, {1, 1, 2, 2},
     spell_ray_of_truth, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 518 ), 20, 12,
     "ray of truth", "!Ray of Truth!", ""},

    {
     "recharge", {9, ANGEL, ANGEL, 53}, {1, 1, 2, 2},
     spell_recharge, TAR_OBJ_INV, POS_STANDING,
     NULL, SLOT ( 517 ), 60, 24,
     "", "!Recharge!", ""},

    {
     "refresh", {8, 5, 12, 9}, {1, 1, 2, 2},
     spell_refresh, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 81 ), 12, 18,
     "refresh", "!Refresh!", ""},

    {
     "remove curse", {ANGEL, 18, ANGEL, 22}, {1, 1, 2, 2},
     spell_remove_curse, TAR_OBJ_CHAR_DEF, POS_STANDING,
     NULL, SLOT ( 35 ), 5, 12,
     "", "!Remove Curse!", ""},

    {
     "sanctuary", {36, 20, 42, 30}, {1, 1, 2, 2},
     spell_sanctuary, TAR_CHAR_DEFENSIVE, POS_STANDING,
     &gsn_sanctuary, SLOT ( 36 ), 75, 12,
     "", "The white aura around your body fades.",
     ""},

    {
     "shield", {20, 35, 35, 40}, {1, 1, 2, 2},
     spell_shield, TAR_CHAR_DEFENSIVE, POS_STANDING,
     NULL, SLOT ( 67 ), 12, 18,
     "", "Your force shield shimmers then fades away.",
     ""},

    {
     "shocking grasp", {10, ANGEL, 14, 13}, {1, 1, 2, 2},
     spell_shocking_grasp, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 53 ), 15, 12,
     "shocking grasp", "!Shocking Grasp!", ""},

    {
     "sleep", {10, ANGEL, 11, 53}, {1, 1, 2, 2},
     spell_sleep, TAR_CHAR_OFFENSIVE, POS_STANDING,
     &gsn_sleep, SLOT ( 38 ), 15, 12,
     "", "You feel less tired.", ""},

    {
     "slow", {23, 30, 29, 32}, {1, 1, 2, 2},
     spell_slow, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 515 ), 30, 12,
     "", "You feel yourself speed up.", ""},

    {
     "stone skin", {25, 40, 40, 45}, {1, 1, 2, 2},
     spell_stone_skin, TAR_CHAR_SELF, POS_STANDING,
     NULL, SLOT ( 66 ), 12, 18,
     "", "Your skin feels soft again.", ""},

    {
     "summon", {24, 12, 29, 22}, {1, 1, 2, 2},
     spell_summon, TAR_IGNORE, POS_STANDING,
     NULL, SLOT ( 40 ), 50, 12,
     "", "!Summon!", ""},

    {
     "teleport", {13, 22, 25, 36}, {1, 1, 2, 2},
     spell_teleport, TAR_CHAR_SELF, POS_FIGHTING,
     NULL, SLOT ( 2 ), 35, 12,
     "", "!Teleport!", ""},

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

    {
     "weaken", {11, 14, 16, 17}, {1, 1, 2, 2},
     spell_weaken, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 68 ), 20, 12,
     "spell", "You feel stronger.", ""},

    {
     "word of recall", {32, 28, 40, 30}, {1, 1, 2, 2},
     spell_word_of_recall, TAR_CHAR_SELF, POS_RESTING,
     NULL, SLOT ( 42 ), 5, 12,
     "", "!Word of Recall!", ""},

/*
 * Dragon breath
 */
    {
     "acid breath", {31, 32, 33, 34}, {1, 1, 2, 2},
     spell_acid_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 200 ), 100, 24,
     "blast of acid", "!Acid Breath!", ""},

    {
     "fire breath", {40, 45, 50, 51}, {1, 1, 2, 2},
     spell_fire_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 201 ), 200, 24,
     "blast of flame", "The smoke leaves your eyes.", ""},

    {
     "frost breath", {34, 36, 38, 40}, {1, 1, 2, 2},
     spell_frost_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 202 ), 125, 24,
     "blast of frost", "!Frost Breath!", ""},

    {
     "gas breath", {39, 43, 47, 50}, {1, 1, 2, 2},
     spell_gas_breath, TAR_IGNORE, POS_FIGHTING,
     NULL, SLOT ( 203 ), 175, 24,
     "blast of gas", "!Gas Breath!", ""},

    {
     "lightning breath", {37, 40, 43, 46}, {1, 1, 2, 2},
     spell_lightning_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     NULL, SLOT ( 204 ), 150, 24,
     "blast of lightning", "!Lightning Breath!", ""},

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

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

/* combat and weapons skills */

    {
     "axe", {1, 1, 1, 1}, {6, 6, 5, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_axe, SLOT ( 0 ), 0, 0,
     "", "!Axe!", ""},

    {
     "dagger", {1, 1, 1, 1}, {2, 3, 2, 2},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_dagger, SLOT ( 0 ), 0, 0,
     "", "!Dagger!", ""},

    {
     "flail", {1, 1, 1, 1}, {6, 3, 6, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_flail, SLOT ( 0 ), 0, 0,
     "", "!Flail!", ""},

    {
     "mace", {1, 1, 1, 1}, {5, 2, 3, 3},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_mace, SLOT ( 0 ), 0, 0,
     "", "!Mace!", ""},

    {
     "polearm", {1, 1, 1, 1}, {6, 6, 6, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_polearm, SLOT ( 0 ), 0, 0,
     "", "!Polearm!", ""},

    {
     "shield block", {1, 1, 1, 1}, {6, 4, 6, 2},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_shield_block, SLOT ( 0 ), 0, 0,
     "", "!Shield!", ""},

    {
     "spear", {1, 1, 1, 1}, {4, 4, 4, 3},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_spear, SLOT ( 0 ), 0, 0,
     "", "!Spear!", ""},

    {
     "sword", {1, 1, 1, 1}, {5, 6, 3, 2},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_sword, SLOT ( 0 ), 0, 0,
     "", "!sword!", ""},

    {
     "whip", {1, 1, 1, 1}, {6, 5, 5, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_whip, SLOT ( 0 ), 0, 0,
     "", "!Whip!", ""},

    {
     "backstab", {ANGEL, ANGEL, 1, 53}, {0, 0, 5, 0},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_backstab, SLOT ( 0 ), 0, 24,
     "backstab", "!Backstab!", ""},

    {
     "bash", {ANGEL, ANGEL, ANGEL, 1}, {0, 0, 0, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_bash, SLOT ( 0 ), 0, 24,
     "bash", "!Bash!", ""},

    {
     "berserk", {ANGEL, ANGEL, ANGEL, 18}, {0, 0, 0, 5},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_berserk, SLOT ( 0 ), 0, 24,
     "", "You feel your pulse slow down.", ""},

    {
     "dirt kicking", {ANGEL, ANGEL, 3, 3}, {0, 0, 4, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_dirt, SLOT ( 0 ), 0, 24,
     "kicked dirt", "You rub the dirt out of your eyes.", ""},

    {
     "disarm", {ANGEL, ANGEL, 12, 11}, {0, 0, 6, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_disarm, SLOT ( 0 ), 0, 24,
     "", "!Disarm!", ""},

    {
     "dodge", {20, 22, 1, 13}, {8, 8, 4, 6},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_dodge, SLOT ( 0 ), 0, 0,
     "", "!Dodge!", ""},

    {
     "enhanced damage", {45, 30, 25, 1}, {10, 9, 5, 3},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_enhanced_damage, SLOT ( 0 ), 0, 0,
     "", "!Enhanced Damage!", ""},

    {
     "envenom", {ANGEL, ANGEL, 10, 53}, {0, 0, 4, 0},
     spell_null, TAR_IGNORE, POS_RESTING,
     &gsn_envenom, SLOT ( 0 ), 0, 36,
     "", "!Envenom!", ""},

    {
     "hand to hand", {25, 10, 15, 6}, {8, 5, 6, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_hand_to_hand, SLOT ( 0 ), 0, 0,
     "", "!Hand to Hand!", ""},

    {
     "kick", {ANGEL, 12, 14, 8}, {0, 4, 6, 3},
     spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING,
     &gsn_kick, SLOT ( 0 ), 0, 12,
     "kick", "!Kick!", ""},

    {
     "parry", {22, 20, 13, 1}, {8, 8, 6, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_parry, SLOT ( 0 ), 0, 0,
     "", "!Parry!", ""},

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

    {
     "trip", {ANGEL, ANGEL, 1, 15}, {0, 0, 4, 8},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_trip, SLOT ( 0 ), 0, 24,
     "trip", "!Trip!", ""},

    {
     "second attack", {30, 24, 12, 5}, {10, 8, 5, 3},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_second_attack, SLOT ( 0 ), 0, 0,
     "", "!Second Attack!", ""},

    {
     "third attack", {ANGEL, ANGEL, 24, 12}, {0, 0, 10, 4},
     spell_null, TAR_IGNORE, POS_FIGHTING,
     &gsn_third_attack, SLOT ( 0 ), 0, 0,
     "", "!Third Attack!", ""},

/* non-combat skills */

    {
     "fast healing", {15, 9, 16, 6}, {8, 5, 6, 4},
     spell_null, TAR_IGNORE, POS_SLEEPING,
     &gsn_fast_healing, SLOT ( 0 ), 0, 0,
     "", "!Fast Healing!", ""},

    {
     "haggle", {7, 18, 1, 14}, {5, 8, 3, 6},
     spell_null, TAR_IGNORE, POS_RESTING,
     &gsn_haggle, SLOT ( 0 ), 0, 0,
     "", "!Haggle!", ""},

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

    {
     "lore", {10, 10, 6, 20}, {6, 6, 4, 8},
     spell_null, TAR_IGNORE, POS_RESTING,
     &gsn_lore, SLOT ( 0 ), 0, 36,
     "", "!Lore!", ""},

    {
     "meditation", {6, 6, 15, 15}, {5, 5, 8, 8},
     spell_null, TAR_IGNORE, POS_SLEEPING,
     &gsn_meditation, SLOT ( 0 ), 0, 0,
     "", "Meditation", ""},

    {
     "peek", {8, 21, 1, 14}, {5, 7, 3, 6},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_peek, SLOT ( 0 ), 0, 0,
     "", "!Peek!", ""},

    {
     "pick lock", {25, 25, 7, 25}, {8, 8, 4, 8},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_pick_lock, SLOT ( 0 ), 0, 12,
     "", "!Pick!", ""},

    {
     "sneak", {ANGEL, ANGEL, 4, 10}, {0, 0, 4, 6},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_sneak, SLOT ( 0 ), 0, 12,
     "", "You no longer feel stealthy.", ""},

    {
     "steal", {ANGEL, ANGEL, 5, 53}, {0, 0, 4, 0},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_steal, SLOT ( 0 ), 0, 24,
     "", "!Steal!", ""},

    {
     "scrolls", {1, 1, 1, 1}, {2, 3, 5, 8},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_scrolls, SLOT ( 0 ), 0, 24,
     "", "!Scrolls!", ""},

    {
     "staves", {1, 1, 1, 1}, {2, 3, 5, 8},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_staves, SLOT ( 0 ), 0, 12,
     "", "!Staves!", ""},

    {
     "wands", {1, 1, 1, 1}, {2, 3, 5, 8},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_wands, SLOT ( 0 ), 0, 12,
     "", "!Wands!", ""},

    {
     "recall", {1, 1, 1, 1}, {2, 2, 2, 2},
     spell_null, TAR_IGNORE, POS_STANDING,
     &gsn_recall, SLOT ( 0 ), 0, 12,
     "", "!Recall!", ""}
};

const struct group_type group_table[MAX_GROUP] = {

    {
     "rom basics", {0, 0, 0, 0},
     {"scrolls", "staves", "wands", "recall"}
     },

    {
     "mage basics", {0, -1, -1, -1},
     {"dagger"}
     },

    {
     "cleric basics", {-1, 0, -1, -1},
     {"mace"}
     },

    {
     "thief basics", {-1, -1, 0, -1},
     {"dagger", "steal"}
     },

    {
     "warrior basics", {-1, -1, -1, 0},
     {"sword", "second attack"}
     },

    {
     "mage default", {40, -1, -1, -1},
     {"lore", "beguiling", "combat", "detection", "enhancement", "illusion",
      "maladictions", "protective", "transportation", "weather"}
     },

    {
     "cleric default", {-1, 40, -1, -1},
     {"flail", "attack", "creation", "curative", "benedictions",
      "detection", "healing", "maladictions", "protective", "shield block",
      "transportation", "weather"}
     },

    {
     "thief default", {-1, -1, 40, -1},
     {"mace", "sword", "backstab", "disarm", "dodge", "second attack",
      "trip", "hide", "peek", "pick lock", "sneak"}
     },

    {
     "warrior default", {-1, -1, -1, 40},
     {"weaponsmaster", "shield block", "bash", "disarm", "enhanced damage",
      "parry", "rescue", "third attack"}
     },

    {
     "weaponsmaster", {40, 40, 40, 20},
     {"axe", "dagger", "flail", "mace", "polearm", "spear", "sword", "whip"}
     },

    {
     "attack", {-1, 5, -1, 8},
     {"demonfire", "dispel evil", "dispel good", "earthquake",
      "flamestrike", "heat metal", "ray of truth"}
     },

    {
     "beguiling", {4, -1, 6, -1},
     {"calm", "charm person", "sleep"}
     },

    {
     "benedictions", {-1, 4, -1, 8},
     {"bless", "calm", "frenzy", "holy word", "remove curse"}
     },

    {
     "combat", {6, -1, 10, 9},
     {"acid blast", "burning hands", "chain lightning", "chill touch",
      "colour spray", "fireball", "lightning bolt", "magic missile",
      "shocking grasp"}
     },

    {
     "creation", {4, 4, 8, 8},
     {"continual light", "create food", "create spring", "create water",
      "create rose", "floating disc"}
     },

    {
     "curative", {-1, 4, -1, 8},
     {"cure blindness", "cure disease", "cure poison"}
     },

    {
     "detection", {4, 3, 6, -1},
     {"detect evil", "detect good", "detect hidden", "detect invis",
      "detect magic", "detect poison", "farsight", "identify",
      "know alignment", "locate object"}
     },

    {
     "draconian", {8, -1, -1, -1},
     {"acid breath", "fire breath", "frost breath", "gas breath",
      "lightning breath"}
     },

    {
     "enchantment", {6, -1, -1, -1},
     {"enchant armor", "enchant weapon", "fireproof", "recharge"}
     },

    {
     "enhancement", {5, -1, 9, 9},
     {"giant strength", "haste", "infravision", "refresh"}
     },

    {
     "harmful", {-1, 3, -1, 6},
     {"cause critical", "cause light", "cause serious", "harm"}
     },

    {
     "healing", {-1, 3, -1, 6},
     {"cure critical", "cure light", "cure serious", "heal",
      "mass healing", "refresh"}
     },

    {
     "illusion", {4, -1, 7, -1},
     {"invis", "mass invis", "ventriloquate"}
     },

    {
     "maladictions", {5, 5, 9, 9},
     {"blindness", "change sex", "curse", "energy drain", "plague",
      "poison", "slow", "weaken"}
     },

    {
     "protective", {4, 4, 7, 8},
     {"armor", "cancellation", "dispel magic", "fireproof",
      "protection evil", "protection good", "sanctuary", "shield",
      "stone skin"}
     },

    {
     "transportation", {4, 4, 8, 9},
     {"fly", "gate", "nexus", "pass door", "portal", "summon", "teleport",
      "word of recall"}
     },

    {
     "weather", {4, 4, 8, 8},
     {"call lightning", "control weather", "faerie fire", "faerie fog",
      "lightning bolt"}
     }

};