Pyom.1.00a/
Pyom.1.00a/pysrc/miniboa/
"""
/***************************************************************************
 *  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                         *
***************************************************************************/
/************
 * Ported to Python by Davion of MudBytes.net
 * Using Miniboa https://code.google.com/p/miniboa/
 * Now using Python 3 version https://code.google.com/p/miniboa-py3/
 ************/
"""
from collections import OrderedDict
from merc import *
from magic import *

class race_type:
    def __init__(self, name, pc_race, act, aff, off, imm, res, vuln, form, parts):
        self.name = name
        self.pc_race = pc_race
        self.act=act
        self.aff=aff
        self.off=off
        self.imm=imm
        self.res=res
        self.vuln=vuln
        self.form=form
        self.parts=parts

race_table = OrderedDict()
race_table["unique"] = race_type("unique", False, 0, 0, 0, 0, 0, 0, 0, 0)
race_table["human"] = race_type("human", True, 0, 0, 0, 0, 0, 0, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K)
race_table["elf"] = race_type("elf", True, 0, AFF_INFRARED, 0, 0, RES_CHARM, VULN_IRON, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K)
race_table["dwarf"] = race_type("dwarf", True, 0, AFF_INFRARED, 0, 0, RES_POISON|RES_DISEASE, VULN_DROWNING, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K)
race_table["giant"] = race_type("giant", True, 0, 0, 0, 0, RES_FIRE|RES_COLD, VULN_MENTAL|VULN_LIGHTNING, A|H|M|V,  A|B|C|D|E|F|G|H|I|J|K)
race_table["bat"] = race_type("bat", False, 0, AFF_FLYING|AFF_DARK_VISION, OFF_DODGE|OFF_FAST, 0, 0, VULN_LIGHT, A|G|V, A|C|D|E|F|H|J|K|P)
race_table["bear"] = race_type("bear", False, 0, 0, OFF_CRUSH|OFF_DISARM|OFF_BERSERK, 0, RES_BASH|RES_COLD, 0, A|G|V, A|B|C|D|E|F|H|J|K|U|V)
race_table["cat"] = race_type("cat", False, 0, AFF_DARK_VISION, OFF_FAST|OFF_DODGE, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K|Q|U|V) 
race_table["centipede"] = race_type("centipede", False, 0, AFF_DARK_VISION, 0, 0, RES_PIERCE|RES_COLD, VULN_BASH, A|B|G|O, A|C|K) 
race_table["dog"] = race_type("dog", False, 0, 0, OFF_FAST, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K|U|V) 
race_table["doll"] = race_type("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, E|J|M|cc, A|B|C|G|H|K) 
race_table["dragon"] = race_type("dragon", False, 0, AFF_INFRARED|AFF_FLYING, 0, 0, RES_FIRE|RES_BASH|RES_CHARM, VULN_PIERCE|VULN_COLD, A|H|Z, A|C|D|E|F|G|H|I|J|K|P|Q|U|V|X) 
race_table["fido"] = race_type("fido", False, 0, 0, OFF_DODGE|ASSIST_RACE, 0, 0, VULN_MAGIC, A|B|G|V, A|C|D|E|F|H|J|K|Q|V) 
race_table["fox"] = race_type("fox", False, 0, AFF_DARK_VISION, OFF_FAST|OFF_DODGE, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K|Q|V) 
race_table["goblin"] = race_type("goblin", False, 0, AFF_INFRARED, 0, 0, RES_DISEASE, VULN_MAGIC, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K) 
race_table["hobgoblin"] = race_type("hobgoblin", False, 0, AFF_INFRARED, 0, 0, RES_DISEASE|RES_POISON, 0, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y) 
race_table["kobold"] = race_type("kobold", False, 0, AFF_INFRARED, 0, 0, RES_POISON, VULN_MAGIC, A|B|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Q) 
race_table["lizard"] = race_type("lizard", False, 0, 0, 0, 0, RES_POISON, VULN_COLD, A|G|X|cc, A|C|D|E|F|H|K|Q|V) 
race_table["modron"] = race_type("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, H, A|B|C|G|H|J|K) 
race_table["orc"] = race_type("orc", False, 0, AFF_INFRARED, 0, 0, RES_DISEASE, VULN_LIGHT, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K) 
race_table["pig"] = race_type("pig", False, 0, 0, 0, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K) 
race_table["rabbit"] = race_type("rabbit", False, 0, 0, OFF_DODGE|OFF_FAST, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K)
race_table["school monster"] = race_type("school monster", False, ACT_NOALIGN, 0, 0, IMM_CHARM|IMM_SUMMON, 0, VULN_MAGIC, A|M|V, A|B|C|D|E|F|H|J|K|Q|U) 
race_table["snake"] = race_type("snake", False, 0, 0, 0, 0, RES_POISON, VULN_COLD, A|G|X|Y|cc, A|D|E|F|K|L|Q|V|X)
race_table["song bird"] = race_type("song bird", False, 0, AFF_FLYING, OFF_FAST|OFF_DODGE, 0, 0, 0, A|G|W, A|C|D|E|F|H|K|P) 
race_table["troll"] = race_type("troll", False, 0, AFF_REGENERATION|AFF_INFRARED|AFF_DETECT_HIDDEN, OFF_BERSERK, 0, RES_CHARM|RES_BASH, VULN_FIRE|VULN_ACID, A|B|H|M|V, A|B|C|D|E|F|G|H|I|J|K|U|V) 
race_table["water fowl"] = race_type("water fowl", False, 0, AFF_SWIM|AFF_FLYING, 0, 0, RES_DROWNING, 0, A|G|W, A|C|D|E|F|H|K|P) 
race_table["wolf"] = race_type("wolf", False, 0, AFF_DARK_VISION, OFF_FAST|OFF_DODGE, 0, 0, 0, A|G|V, A|C|D|E|F|J|K|Q|V) 
race_table["wyvern"] = race_type("wyvern", False, 0, AFF_FLYING|AFF_DETECT_INVIS|AFF_DETECT_HIDDEN, OFF_BASH|OFF_FAST|OFF_DODGE, IMM_POISON, 0, VULN_LIGHT, A|B|G|Z, A|C|D|E|F|H|J|K|Q|V|X) 

class pc_race_type:
    def __init__(self, name, who_name, points, class_mult, skills, stats, max_stats, size):
        self.name = name
        self.who_name = who_name
        self.points = points
        self.class_mult = class_mult
        self.skills = skills
        self.stats = stats
        self.max_stats = max_stats
        self.size = size

pc_race_table= OrderedDict()
pc_race_table['human'] = pc_race_type("human", "Human", 0, { 'mage':100, 'cleric':100, 'thief':100, 'warrior':100 }, [ "" ], [13, 13, 13, 13, 13], [18, 18, 18, 18, 18 ], SIZE_MEDIUM)
pc_race_table['elf'] = pc_race_type("elf", " Elf ", 5, { 'mage':100, 'cleric':125, 'thief':100, 'warrior':120 }, ["sneak", "hide"], [12, 14, 13, 15, 11], [16, 20, 18, 21, 15], SIZE_SMALL)
pc_race_table['dwarf'] = pc_race_type("dwarf", "Dwarf", 8, { 'mage':150, 'cleric':100, 'thief':125, 'warrior':100 }, ["berserk"], [14, 12, 14, 10, 15], [20, 16, 19, 14, 21], SIZE_MEDIUM)
pc_race_table['giant'] = pc_race_type("giant", "Giant", 6, { 'mage':200, 'cleric':150, 'thief':150, 'warrior':105 }, ["bash", "fast healing"], [16, 11, 13, 11, 14], [22, 15, 18, 15, 20], SIZE_LARGE)

def SLOT(i):
    return i

class skill_type:
    def __init__(self, name, skill_level, rating, spell_fun, target, minimum_position, pgsn, slot, min_mana, beats, noun_damage, msg_off, msg_obj ):
        self.name = name
        self.skill_level = skill_level
        self.rating = rating
        self.spell_fun = spell_fun
        self.target = target
        self.minimum_position = minimum_position
        self.pgsn = pgsn
        self.slot = slot
        self.min_mana = min_mana
        self.beats = beats
        self.noun_damage = noun_damage
        self.msg_off = msg_off
        self.msg_obj = msg_obj

skill_table =  OrderedDict()
skill_table["reserved"] = skill_type("reserved", { 'mage':99, 'cleric':99, 'thief':99, 'warrior':99 }, { 'mage':99, 'cleric':99, 'thief':99, 'warrior':99 }, 0, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 0, "", "", "")
skill_table["acid blast"] = skill_type("acid blast", { 'mage':28, 'cleric':53, 'thief':35, 'warrior':32 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_acid_blast, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(70), 20, 12, "acid blast", "!Acid Blast!", "")
skill_table["armor"] = skill_type("armor", { 'mage':7, 'cleric':2, 'thief':10, 'warrior':5 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_armor, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT( 1), 5, 12, "", "You feel less armored.", "")
skill_table["bless"] = skill_type("bless", { 'mage':53, 'cleric':7, 'thief':53, 'warrior':8 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_bless, TAR_OBJ_CHAR_DEF, POS_STANDING, None, SLOT( 3), 5, 12, "", "You feel less righteous.", "$p's holy aura fades.")
skill_table["blindness"] = skill_type("blindness", { 'mage':12, 'cleric':8, 'thief':17, 'warrior':15 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_blindness, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT( 4), 5, 12, "", "You can see again.", "")
skill_table["burning hands"] = skill_type("burning hands", { 'mage':7, 'cleric':53, 'thief':10, 'warrior':9 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_burning_hands, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT( 5), 15, 12, "burning hands", "!Burning Hands!", "")
skill_table["call lightning"] = skill_type("call lightning", { 'mage':26, 'cleric':18, 'thief':31, 'warrior':22 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_call_lightning, TAR_IGNORE, POS_FIGHTING, None, SLOT( 6), 15, 12, "lightning bolt", "!Call Lightning!", "")
skill_table["calm"] = skill_type("calm", { 'mage':48, 'cleric':16, 'thief':50, 'warrior':20 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_calm, TAR_IGNORE, POS_FIGHTING, None, SLOT(509), 30, 12, "", "You have lost your peace of mind.", "")
skill_table["cancellation"] = skill_type("cancellation", { 'mage':18, 'cleric':26, 'thief':34, 'warrior':34 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cancellation, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(507), 20, 12, "", "!cancellation!", "")
skill_table["cause critical"] = skill_type("cause critical", { 'mage':53, 'cleric':13, 'thief':53, 'warrior':19 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cause_critical, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(63), 20, 12, "spell", "!Cause Critical!", "")
skill_table["cause light"] = skill_type("cause light", { 'mage':53, 'cleric':1, 'thief':53, 'warrior':3 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cause_light, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(62), 15, 12, "spell", "!Cause Light!", "")
skill_table["cause serious"] = skill_type("cause serious", { 'mage':53, 'cleric':7, 'thief':53, 'warrior':10 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cause_serious, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(64), 17, 12, "spell", "!Cause Serious!", "")
skill_table["chain lightning"] = skill_type("chain lightning", { 'mage':33, 'cleric':53, 'thief':39, 'warrior':36 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_chain_lightning, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(500), 25, 12, "lightning", "!Chain Lightning!", "")
skill_table["change sex"] = skill_type("change sex", { 'mage':53, 'cleric':53, 'thief':53, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_change_sex, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(82), 15, 12, "", "Your body feels familiar again.", "")
skill_table["charm person"] = skill_type("charm person", { 'mage':20, 'cleric':53, 'thief':25, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_charm_person, TAR_CHAR_OFFENSIVE, POS_STANDING, None, SLOT( 7), 5, 12, "", "You feel more self-confident.", "")
skill_table["chill touch"] = skill_type("chill touch", { 'mage':4, 'cleric':53, 'thief':6, 'warrior':6 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_chill_touch, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT( 8), 15, 12, "chilling touch", "You feel less cold.", "")
skill_table["colour spray"] = skill_type("colour spray", { 'mage':16, 'cleric':53, 'thief':22, 'warrior':20 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_colour_spray, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(10), 15, 12, "colour spray", "!Colour Spray!", "")
skill_table["continual light"] = skill_type("continual light", { 'mage':6, 'cleric':4, 'thief':6, 'warrior':9 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_continual_light, TAR_IGNORE, POS_STANDING, None, SLOT(57), 7, 12, "", "!Continual Light!", "")
skill_table["control weather"] = skill_type("control weather", { 'mage':15, 'cleric':19, 'thief':28, 'warrior':22 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_control_weather, TAR_IGNORE, POS_STANDING, None, SLOT(11), 25, 12, "", "!Control Weather!", "")
skill_table["create food"] = skill_type("create food", { 'mage':10, 'cleric':5, 'thief':11, 'warrior':12 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_create_food, TAR_IGNORE, POS_STANDING, None, SLOT(12), 5, 12, "", "!Create Food!", "")
skill_table["create rose"] = skill_type("create rose", { 'mage':16, 'cleric':11, 'thief':10, 'warrior':24 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_create_rose, TAR_IGNORE, POS_STANDING, None, SLOT(511), 30, 12, "", "!Create Rose!", "")
skill_table["create spring"] = skill_type("create spring", { 'mage':14, 'cleric':17, 'thief':23, 'warrior':20 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_create_spring, TAR_IGNORE, POS_STANDING, None, SLOT(80), 20, 12, "", "!Create Spring!", "")
skill_table["create water"] = skill_type("create water", { 'mage':8, 'cleric':3, 'thief':12, 'warrior':11 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_create_water, TAR_OBJ_INV, POS_STANDING, None, SLOT(13), 5, 12, "", "!Create Water!", "")
skill_table["cure blindness"] = skill_type("cure blindness", { 'mage':53, 'cleric':6, 'thief':53, 'warrior':8 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cure_blindness, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(14), 5, 12, "", "!Cure Blindness!", "")
skill_table["cure critical"] = skill_type("cure critical", { 'mage':53, 'cleric':13, 'thief':53, 'warrior':19 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cure_critical, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(15), 20, 12, "", "!Cure Critical!", "")
skill_table["cure disease"] = skill_type("cure disease", { 'mage':53, 'cleric':13, 'thief':53, 'warrior':14 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cure_disease, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(501), 20, 12, "", "!Cure Disease!", "")
skill_table["cure light"] = skill_type("cure light", { 'mage':53, 'cleric':1, 'thief':53, 'warrior':3 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cure_light, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(16), 10, 12, "", "!Cure Light!", "")
skill_table["cure poison"] = skill_type("cure poison", { 'mage':53, 'cleric':14, 'thief':53, 'warrior':16 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cure_poison, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(43), 5, 12, "", "!Cure Poison!", "")
skill_table["cure serious"] = skill_type("cure serious", { 'mage':53, 'cleric':7, 'thief':53, 'warrior':10 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_cure_serious, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(61), 15, 12, "", "!Cure Serious!", "")
skill_table["curse"] = skill_type("curse", { 'mage':18, 'cleric':18, 'thief':26, 'warrior':22 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_curse, TAR_OBJ_CHAR_OFF, POS_FIGHTING, None, SLOT(17), 20, 12, "curse", "The curse wears off.", "$p is no longer impure.")
skill_table["demonfire"] = skill_type("demonfire", { 'mage':53, 'cleric':34, 'thief':53, 'warrior':45 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_demonfire, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(505), 20, 12, "torments", "!Demonfire!", "")
skill_table["detect evil"] = skill_type("detect evil", { 'mage':11, 'cleric':4, 'thief':12, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_detect_evil, TAR_CHAR_SELF, POS_STANDING, None, SLOT(18), 5, 12, "", "The red in your vision disappears.", "")
skill_table["detect good"] = skill_type("detect good", { 'mage':11, 'cleric':4, 'thief':12, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_detect_good, TAR_CHAR_SELF, POS_STANDING, None, SLOT(513), 5, 12, "", "The gold in your vision disappears.", "")
skill_table["detect hidden"] = skill_type("detect hidden", { 'mage':15, 'cleric':11, 'thief':12, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_detect_hidden, TAR_CHAR_SELF, POS_STANDING, None, SLOT(44), 5, 12, "", "You feel less aware of your surroundings.", "")
skill_table["detect invis"] = skill_type("detect invis", { 'mage':3, 'cleric':8, 'thief':6, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_detect_invis, TAR_CHAR_SELF, POS_STANDING, None, SLOT(19), 5, 12, "", "You no longer see invisible objects.", "")
skill_table["detect magic"] = skill_type("detect magic", { 'mage':2, 'cleric':6, 'thief':5, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_detect_magic, TAR_CHAR_SELF, POS_STANDING, None, SLOT(20), 5, 12, "", "The detect magic wears off.", "")
skill_table["detect poison"] = skill_type("detect poison", { 'mage':15, 'cleric':7, 'thief':9, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_detect_poison, TAR_OBJ_INV, POS_STANDING, None, SLOT(21), 5, 12, "", "!Detect Poison!", "")
skill_table["dispel evil"] = skill_type("dispel evil", { 'mage':53, 'cleric':15, 'thief':53, 'warrior':21 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_dispel_evil, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(22), 15, 12, "dispel evil", "!Dispel Evil!", "")
skill_table["dispel good"] = skill_type("dispel good", { 'mage':53, 'cleric':15, 'thief':53, 'warrior':21 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_dispel_good, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(512), 15, 12, "dispel good", "!Dispel Good!", "")
skill_table["dispel magic"] = skill_type("dispel magic", { 'mage':16, 'cleric':24, 'thief':30, 'warrior':30 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_dispel_magic, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(59), 15, 12, "", "!Dispel Magic!", "")
skill_table["earthquake"] = skill_type("earthquake", { 'mage':53, 'cleric':10, 'thief':53, 'warrior':14 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_earthquake, TAR_IGNORE, POS_FIGHTING, None, SLOT(23), 15, 12, "earthquake", "!Earthquake!", "")
skill_table["enchant armor"] = skill_type("enchant armor", { 'mage':16, 'cleric':53, 'thief':53, 'warrior':53 }, { 'mage':2, 'cleric':2, 'thief':4, 'warrior':4 }, spell_enchant_armor, TAR_OBJ_INV, POS_STANDING, None, SLOT(510), 100, 24, "", "!Enchant Armor!", "")
skill_table["enchant weapon"] = skill_type("enchant weapon", { 'mage':17, 'cleric':53, 'thief':53, 'warrior':53 }, { 'mage':2, 'cleric':2, 'thief':4, 'warrior':4 }, spell_enchant_weapon, TAR_OBJ_INV, POS_STANDING, None, SLOT(24), 100, 24, "", "!Enchant Weapon!", "")
skill_table["energy drain"] = skill_type("energy drain", { 'mage':19, 'cleric':22, 'thief':26, 'warrior':23 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_energy_drain, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(25), 35, 12, "energy drain", "!Energy Drain!", "")
skill_table["faerie fire"] = skill_type("faerie fire", { 'mage':6, 'cleric':3, 'thief':5, 'warrior':8 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_faerie_fire, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(72), 5, 12, "faerie fire", "The pink aura around you fades away.", "")
skill_table["faerie fog"] = skill_type("faerie fog", { 'mage':14, 'cleric':21, 'thief':16, 'warrior':24 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_faerie_fog, TAR_IGNORE, POS_STANDING, None, SLOT(73), 12, 12, "faerie fog", "!Faerie Fog!", "")
skill_table["farsight"] = skill_type("farsight", { 'mage':14, 'cleric':16, 'thief':16, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_farsight, TAR_IGNORE, POS_STANDING, None, SLOT(521), 36, 20, "farsight", "!Farsight!", "")
skill_table["fireball"] = skill_type("fireball", { 'mage':22, 'cleric':53, 'thief':30, 'warrior':26 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_fireball, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(26), 15, 12, "fireball", "!Fireball!", "")
skill_table["fireproof"] = skill_type("fireproof", { 'mage':13, 'cleric':12, 'thief':19, 'warrior':18 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_fireproof, TAR_OBJ_INV, POS_STANDING, None, SLOT(523), 10, 12, "", "", "$p's protective aura fades.")
skill_table["flamestrike"] = skill_type("flamestrike", { 'mage':53, 'cleric':20, 'thief':53, 'warrior':27 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_flamestrike, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(65), 20, 12, "flamestrike", "!Flamestrike!", "")
skill_table["fly"] = skill_type("fly", { 'mage':10, 'cleric':18, 'thief':20, 'warrior':22 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_fly, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(56), 10, 18, "", "You slowly float to the ground.", "")
skill_table["floating disc"] = skill_type("floating disc", { 'mage':4, 'cleric':10, 'thief':7, 'warrior':16 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_floating_disc, TAR_IGNORE, POS_STANDING, None, SLOT(522), 40, 24, "", "!Floating disc!", "")
skill_table["frenzy"] = skill_type("frenzy", { 'mage':53, 'cleric':24, 'thief':53, 'warrior':26 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_frenzy, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(504), 30, 24, "", "Your rage ebbs.", "")
skill_table["gate"] = skill_type("gate", { 'mage':27, 'cleric':17, 'thief':32, 'warrior':28 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_gate, TAR_IGNORE, POS_FIGHTING, None, SLOT(83), 80, 12, "", "!Gate!", "")
skill_table["giant strength"] = skill_type("giant strength", { 'mage':11, 'cleric':53, 'thief':22, 'warrior':20 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_giant_strength, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(39), 20, 12, "", "You feel weaker.", "")
skill_table["harm"] = skill_type("harm", { 'mage':53, 'cleric':23, 'thief':53, 'warrior':28 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_harm, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(27), 35, 12, "harm spell", "!Harm!", "")
skill_table["haste"] = skill_type("haste", { 'mage':21, 'cleric':53, 'thief':26, 'warrior':29 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_haste, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(502), 30, 12, "", "You feel yourself slow down.", "")
skill_table["heal"] = skill_type("heal", { 'mage':53, 'cleric':21, 'thief':33, 'warrior':30 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_heal, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(28), 50, 12, "", "!Heal!", "")
skill_table["heat metal"] = skill_type("heat metal", { 'mage':53, 'cleric':16, 'thief':53, 'warrior':23 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_heat_metal, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(516), 25, 18, "spell", "!Heat Metal!", "")
skill_table["holy word"] = skill_type("holy word", { 'mage':53, 'cleric':36, 'thief':53, 'warrior':42 }, { 'mage':2, 'cleric':2, 'thief':4, 'warrior':4 }, spell_holy_word, TAR_IGNORE, POS_FIGHTING, None, SLOT(506), 200, 24, "divine wrath", "!Holy Word!", "")
skill_table["identify"] = skill_type("identify", { 'mage':15, 'cleric':16, 'thief':18, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_identify, TAR_OBJ_INV, POS_STANDING, None, SLOT(53), 12, 24, "", "!Identify!", "")
skill_table["infravision"] = skill_type("infravision", { 'mage':9, 'cleric':13, 'thief':10, 'warrior':16 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_infravision, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(77), 5, 18, "", "You no longer see in the dark.", "")
skill_table["invisibility"] = skill_type("invisibility", { 'mage':5, 'cleric':53, 'thief':9, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_invis, TAR_OBJ_CHAR_DEF, POS_STANDING, None, SLOT(29), 5, 12, "", "You are no longer invisible.", "$p fades into view.")
skill_table["know alignment"] = skill_type("know alignment", { 'mage':12, 'cleric':9, 'thief':20, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_know_alignment, TAR_CHAR_DEFENSIVE, POS_FIGHTING, None, SLOT(58), 9, 12, "", "!Know Alignment!", "")
skill_table["lightning bolt"] = skill_type("lightning bolt", { 'mage':13, 'cleric':23, 'thief':18, 'warrior':16 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_lightning_bolt, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(30), 15, 12, "lightning bolt", "!Lightning Bolt!", "")
skill_table["locate object"] = skill_type("locate object", { 'mage':9, 'cleric':15, 'thief':11, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_locate_object, TAR_IGNORE, POS_STANDING, None, SLOT(31), 20, 18, "", "!Locate Object!", "")
skill_table["magic missile"] = skill_type("magic missile", { 'mage':1, 'cleric':53, 'thief':2, 'warrior':2 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_magic_missile, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(32), 15, 12, "magic missile", "!Magic Missile!", "")
skill_table["mass healing"] = skill_type("mass healing", { 'mage':53, 'cleric':38, 'thief':53, 'warrior':46 }, { 'mage':2, 'cleric':2, 'thief':4, 'warrior':4 }, spell_mass_healing, TAR_IGNORE, POS_STANDING, None, SLOT(508), 100, 36, "", "!Mass Healing!", "")
skill_table["mass invis"] = skill_type("mass invis", { 'mage':22, 'cleric':25, 'thief':31, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_mass_invis, TAR_IGNORE, POS_STANDING, None, SLOT(69), 20, 24, "", "You are no longer invisible.", "")
skill_table["nexus"] = skill_type("nexus", { 'mage':40, 'cleric':35, 'thief':50, 'warrior':45 }, { 'mage':2, 'cleric':2, 'thief':4, 'warrior':4 }, spell_nexus, TAR_IGNORE, POS_STANDING, None, SLOT(520), 150, 36, "", "!Nexus!", "")
skill_table["pass door"] = skill_type("pass door", { 'mage':24, 'cleric':32, 'thief':25, 'warrior':37 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_pass_door, TAR_CHAR_SELF, POS_STANDING, None, SLOT(74), 20, 12, "", "You feel solid again.", "")
skill_table["plague"] = skill_type("plague", { 'mage':23, 'cleric':17, 'thief':36, 'warrior':26 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_plague, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(503), 20, 12, "sickness", "Your sores vanish.", "")
skill_table["poison"] = skill_type("poison", { 'mage':17, 'cleric':12, 'thief':15, 'warrior':21 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_poison, TAR_OBJ_CHAR_OFF, POS_FIGHTING, None, SLOT(33), 10, 12, "poison", "You feel less sick.", "The poison on $p dries up.")
skill_table["portal"] = skill_type("portal", { 'mage':35, 'cleric':30, 'thief':45, 'warrior':40 }, { 'mage':2, 'cleric':2, 'thief':4, 'warrior':4 }, spell_portal, TAR_IGNORE, POS_STANDING, None, SLOT(519), 100, 24, "", "!Portal!", "")
skill_table["protection evil"] = skill_type("protection evil", { 'mage':12, 'cleric':9, 'thief':17, 'warrior':11 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_protection_evil, TAR_CHAR_SELF, POS_STANDING, None, SLOT(34), 5, 12, "", "You feel less protected.", "")
skill_table["protection good"] = skill_type("protection good", { 'mage':12, 'cleric':9, 'thief':17, 'warrior':11 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_protection_good, TAR_CHAR_SELF, POS_STANDING, None, SLOT(514), 5, 12, "", "You feel less protected.", "")
skill_table["ray of truth"] = skill_type("ray of truth", { 'mage':53, 'cleric':35, 'thief':53, 'warrior':47 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_ray_of_truth, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(518), 20, 12, "ray of truth", "!Ray of Truth!", "")
skill_table["recharge"] = skill_type("recharge", { 'mage':9, 'cleric':53, 'thief':53, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_recharge, TAR_OBJ_INV, POS_STANDING, None, SLOT(517), 60, 24, "", "!Recharge!", "")
skill_table["refresh"] = skill_type("refresh", { 'mage':8, 'cleric':5, 'thief':12, 'warrior':9 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_refresh, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(81), 12, 18, "refresh", "!Refresh!", "")
skill_table["remove curse"] = skill_type("remove curse", { 'mage':53, 'cleric':18, 'thief':53, 'warrior':22 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_remove_curse, TAR_OBJ_CHAR_DEF, POS_STANDING, None, SLOT(35), 5, 12, "", "!Remove Curse!", "")
skill_table["sanctuary"] = skill_type("sanctuary", { 'mage':36, 'cleric':20, 'thief':42, 'warrior':30 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_sanctuary, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(36), 75, 12, "", "The white aura around your body fades.", "")
skill_table["shield"] = skill_type("shield", { 'mage':20, 'cleric':35, 'thief':35, 'warrior':40 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_shield, TAR_CHAR_DEFENSIVE, POS_STANDING, None, SLOT(67), 12, 18, "", "Your force shield shimmers then fades away.", "")
skill_table["shocking grasp"] = skill_type("shocking grasp", { 'mage':10, 'cleric':53, 'thief':14, 'warrior':13 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_shocking_grasp, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(53), 15, 12, "shocking grasp", "!Shocking Grasp!", "")
skill_table["sleep"] = skill_type("sleep", { 'mage':10, 'cleric':53, 'thief':11, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_sleep, TAR_CHAR_OFFENSIVE, POS_STANDING, None, SLOT(38), 15, 12, "", "You feel less tired.", "")
skill_table["slow"] = skill_type("slow", { 'mage':23, 'cleric':30, 'thief':29, 'warrior':32 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_slow, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(515), 30, 12, "", "You feel yourself speed up.", "")
skill_table["stone skin"] = skill_type("stone skin", { 'mage':25, 'cleric':40, 'thief':40, 'warrior':45 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_stone_skin, TAR_CHAR_SELF, POS_STANDING, None, SLOT(66), 12, 18, "", "Your skin feels soft again.", "")
skill_table["summon"] = skill_type("summon", { 'mage':24, 'cleric':12, 'thief':29, 'warrior':22 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_summon, TAR_IGNORE, POS_STANDING, None, SLOT(40), 50, 12, "", "!Summon!", "")
skill_table["teleport"] = skill_type("teleport", { 'mage':13, 'cleric':22, 'thief':25, 'warrior':36 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_teleport, TAR_CHAR_SELF, POS_FIGHTING, None, SLOT( 2), 35, 12, "", "!Teleport!", "")
skill_table["ventriloquate"] = skill_type("ventriloquate", { 'mage':1, 'cleric':53, 'thief':2, 'warrior':53 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_ventriloquate, TAR_IGNORE, POS_STANDING, None, SLOT(41), 5, 12, "", "!Ventriloquate!", "")
skill_table["weaken"] = skill_type("weaken", { 'mage':11, 'cleric':14, 'thief':16, 'warrior':17 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_weaken, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(68), 20, 12, "spell", "You feel stronger.", "")
skill_table["word of recall"] = skill_type("word of recall", { 'mage':32, 'cleric':28, 'thief':40, 'warrior':30 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_word_of_recall, TAR_CHAR_SELF, POS_RESTING, None, SLOT(42), 5, 12, "", "!Word of Recall!", "") # * Dragon breath */
skill_table["acid breath"] = skill_type("acid breath", { 'mage':31, 'cleric':32, 'thief':33, 'warrior':34 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_acid_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(200), 100, 24, "blast of acid", "!Acid Breath!", "")
skill_table["fire breath"] = skill_type("fire breath", { 'mage':40, 'cleric':45, 'thief':50, 'warrior':51 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_fire_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(201), 200, 24, "blast of flame", "The smoke leaves your eyes.", "")
skill_table["frost breath"] = skill_type("frost breath", { 'mage':34, 'cleric':36, 'thief':38, 'warrior':40 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_frost_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(202), 125, 24, "blast of frost", "!Frost Breath!", "")
skill_table["gas breath"] = skill_type("gas breath", { 'mage':39, 'cleric':43, 'thief':47, 'warrior':50 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_gas_breath, TAR_IGNORE, POS_FIGHTING, None, SLOT(203), 175, 24, "blast of gas", "!Gas Breath!", "")
skill_table["lightning breath"] = skill_type("lightning breath", { 'mage':37, 'cleric':40, 'thief':43, 'warrior':46 }, { 'mage':1, 'cleric':1, 'thief':2, 'warrior':2 }, spell_lightning_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(204), 150, 24, "blast of lightning", "!Lightning Breath!", "") # * Spells for mega1.are from Glop/Erkenbrand. */
skill_table["general purpose"] = skill_type("general purpose", { 'mage':53, 'cleric':53, 'thief':53, 'warrior':53 }, { 'mage':0, 'cleric':0, 'thief':0, 'warrior':0 }, spell_general_purpose, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(401), 0, 12, "general purpose ammo", "!General Purpose Ammo!", "")
skill_table["high explosive"] = skill_type("high explosive", { 'mage':53, 'cleric':53, 'thief':53, 'warrior':53 }, { 'mage':0, 'cleric':0, 'thief':0, 'warrior':0 }, spell_high_explosive, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT(402), 0, 12, "high explosive ammo", "!High Explosive Ammo!", "") # combat and weapons skills */
skill_table["axe"] = skill_type("axe", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':6, 'cleric':6, 'thief':5, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Axe!", "")
skill_table["dagger"] = skill_type("dagger", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':2, 'cleric':3, 'thief':2, 'warrior':2 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Dagger!", "")
skill_table["flail"] = skill_type("flail", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':6, 'cleric':3, 'thief':6, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Flail!", "")
skill_table["mace"] = skill_type("mace", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':5, 'cleric':2, 'thief':3, 'warrior':3 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Mace!", "")
skill_table["polearm"] = skill_type("polearm", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':6, 'cleric':6, 'thief':6, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Polearm!", "")
skill_table["shield block"] = skill_type("shield block", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':6, 'cleric':4, 'thief':6, 'warrior':2 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT(0), 0, 0, "", "!Shield!", "")
skill_table["spear"] = skill_type("spear", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':4, 'cleric':4, 'thief':4, 'warrior':3 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Spear!", "")
skill_table["sword"] = skill_type("sword", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':5, 'cleric':6, 'thief':3, 'warrior':2 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!sword!", "")
skill_table["whip"] = skill_type("whip", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':6, 'cleric':5, 'thief':5, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Whip!", "")
skill_table["backstab"] = skill_type("backstab", { 'mage':53, 'cleric':53, 'thief':1, 'warrior':53 }, { 'mage':0, 'cleric':0, 'thief':5, 'warrior':0 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 24, "backstab", "!Backstab!", "")
skill_table["bash"] = skill_type("bash", { 'mage':53, 'cleric':53, 'thief':53, 'warrior':1 }, { 'mage':0, 'cleric':0, 'thief':0, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 24, "bash", "!Bash!", "")
skill_table["berserk"] = skill_type("berserk", { 'mage':53, 'cleric':53, 'thief':53, 'warrior':18 }, { 'mage':0, 'cleric':0, 'thief':0, 'warrior':5 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 24, "", "You feel your pulse slow down.", "")
skill_table["dirt kicking"] = skill_type("dirt kicking", { 'mage':53, 'cleric':53, 'thief':3, 'warrior':3 }, { 'mage':0, 'cleric':0, 'thief':4, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 24, "kicked dirt", "You rub the dirt out of your eyes.", "")
skill_table["disarm"] = skill_type("disarm", { 'mage':53, 'cleric':53, 'thief':12, 'warrior':11 }, { 'mage':0, 'cleric':0, 'thief':6, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 24, "", "!Disarm!", "")
skill_table["dodge"] = skill_type("dodge", { 'mage':20, 'cleric':22, 'thief':1, 'warrior':13 }, { 'mage':8, 'cleric':8, 'thief':4, 'warrior':6 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Dodge!", "")
skill_table["enhanced damage"] = skill_type("enhanced damage", { 'mage':45, 'cleric':30, 'thief':25, 'warrior':1 }, { 'mage':10, 'cleric':9, 'thief':5, 'warrior':3 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Enhanced Damage!", "")
skill_table["envenom"] = skill_type("envenom", { 'mage':53, 'cleric':53, 'thief':10, 'warrior':53 }, { 'mage':0, 'cleric':0, 'thief':4, 'warrior':0 }, spell_null, TAR_IGNORE, POS_RESTING, None, SLOT(0), 0, 36, "", "!Envenom!", "")
skill_table["hand to hand"] = skill_type("hand to hand", { 'mage':25, 'cleric':10, 'thief':15, 'warrior':6 }, { 'mage':8, 'cleric':5, 'thief':6, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Hand to Hand!", "")
skill_table["kick"] = skill_type("kick", { 'mage':53, 'cleric':12, 'thief':14, 'warrior':8 }, { 'mage':0, 'cleric':4, 'thief':6, 'warrior':3 }, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, None, SLOT( 0), 0, 12, "kick", "!Kick!", "")
skill_table["parry"] = skill_type("parry", { 'mage':22, 'cleric':20, 'thief':13, 'warrior':1 }, { 'mage':8, 'cleric':8, 'thief':6, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Parry!", "")
skill_table["rescue"] = skill_type("rescue", { 'mage':53, 'cleric':53, 'thief':53, 'warrior':1 }, { 'mage':0, 'cleric':0, 'thief':0, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 12, "", "!Rescue!", "")
skill_table["trip"] = skill_type("trip", { 'mage':53, 'cleric':53, 'thief':1, 'warrior':15 }, { 'mage':0, 'cleric':0, 'thief':4, 'warrior':8 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 24, "trip", "!Trip!", "")
skill_table["second attack"] = skill_type("second attack", { 'mage':30, 'cleric':24, 'thief':12, 'warrior':5 }, { 'mage':10, 'cleric':8, 'thief':5, 'warrior':3 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Second Attack!", "")
skill_table["third attack"] = skill_type("third attack", { 'mage':53, 'cleric':53, 'thief':24, 'warrior':12 }, { 'mage':0, 'cleric':0, 'thief':10, 'warrior':4 }, spell_null, TAR_IGNORE, POS_FIGHTING, None, SLOT( 0), 0, 0, "", "!Third Attack!", "") # non-combat skills */
skill_table["fast healing"] = skill_type("fast healing", { 'mage':15, 'cleric':9, 'thief':16, 'warrior':6 }, { 'mage':8, 'cleric':5, 'thief':6, 'warrior':4 }, spell_null, TAR_IGNORE, POS_SLEEPING, None, SLOT( 0), 0, 0, "", "!Fast Healing!", "")
skill_table["haggle"] = skill_type("haggle", { 'mage':7, 'cleric':18, 'thief':1, 'warrior':14 }, { 'mage':5, 'cleric':8, 'thief':3, 'warrior':6 }, spell_null, TAR_IGNORE, POS_RESTING, None, SLOT( 0), 0, 0, "", "!Haggle!", "")
skill_table["hide"] = skill_type("hide", { 'mage':53, 'cleric':53, 'thief':1, 'warrior':12 }, { 'mage':0, 'cleric':0, 'thief':4, 'warrior':6 }, spell_null, TAR_IGNORE, POS_RESTING, None, SLOT( 0), 0, 12, "", "!Hide!", "")
skill_table["lore"] = skill_type("lore", { 'mage':10, 'cleric':10, 'thief':6, 'warrior':20 }, { 'mage':6, 'cleric':6, 'thief':4, 'warrior':8 }, spell_null, TAR_IGNORE, POS_RESTING, None, SLOT( 0), 0, 36, "", "!Lore!", "")
skill_table["meditation"] = skill_type("meditation", { 'mage':6, 'cleric':6, 'thief':15, 'warrior':15 }, { 'mage':5, 'cleric':5, 'thief':8, 'warrior':8 }, spell_null, TAR_IGNORE, POS_SLEEPING, None, SLOT( 0), 0, 0, "", "Meditation", "")
skill_table["peek"] = skill_type("peek", { 'mage':8, 'cleric':21, 'thief':1, 'warrior':14 }, { 'mage':5, 'cleric':7, 'thief':3, 'warrior':6 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 0, "", "!Peek!", "")
skill_table["pick lock"] = skill_type("pick lock", { 'mage':25, 'cleric':25, 'thief':7, 'warrior':25 }, { 'mage':8, 'cleric':8, 'thief':4, 'warrior':8 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 12, "", "!Pick!", "")
skill_table["sneak"] = skill_type("sneak", { 'mage':53, 'cleric':53, 'thief':4, 'warrior':10 }, { 'mage':0, 'cleric':0, 'thief':4, 'warrior':6 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 12, "", "You no longer feel stealthy.", "")
skill_table["steal"] = skill_type("steal", { 'mage':53, 'cleric':53, 'thief':5, 'warrior':53 }, { 'mage':0, 'cleric':0, 'thief':4, 'warrior':0 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 24, "", "!Steal!", "")
skill_table["scrolls"] = skill_type("scrolls", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':2, 'cleric':3, 'thief':5, 'warrior':8 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 24, "", "!Scrolls!", "")
skill_table["staves"] = skill_type("staves", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':2, 'cleric':3, 'thief':5, 'warrior':8 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 12, "", "!Staves!", "")
skill_table["wands"] = skill_type("wands", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':2, 'cleric':3, 'thief':5, 'warrior':8 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 12, "", "!Wands!", "")
skill_table["recall"] = skill_type("recall", { 'mage':1, 'cleric':1, 'thief':1, 'warrior':1 }, { 'mage':2, 'cleric':2, 'thief':2, 'warrior':2 }, spell_null, TAR_IGNORE, POS_STANDING, None, SLOT( 0), 0, 12, "", "!Recall!", "")

class group_type:
    def __init__(self, name, rating, spells):
        self.name=name;
        self.rating=rating
        self.spells=spells

group_table =  OrderedDict()
group_table["rom basics"] = group_type("rom basics", { 'mage':0, 'cleric':0, 'thief':0, 'warrior':0 }, ["scrolls", "staves", "wands", "recall"])
group_table["mage basics"] = group_type("mage basics", { 'mage':0, 'cleric':-1, 'thief':-1, 'warrior':-1 }, ["dagger"])
group_table["cleric basics"] = group_type("cleric basics", { 'mage':-1, 'cleric':0, 'thief':-1, 'warrior':-1 }, ["mace"])
group_table["thief basics"] = group_type("thief basics", { 'mage':-1, 'cleric':-1, 'thief':0, 'warrior':-1 }, ["dagger", "steal"])
group_table["warrior basics"] = group_type("warrior basics", { 'mage':-1, 'cleric':-1, 'thief':-1, 'warrior':0 }, ["sword", "second attack"])
group_table["mage default"] = group_type("mage default", { 'mage':40, 'cleric':-1, 'thief':-1, 'warrior':-1 }, ["lore", "beguiling", "combat", "detection", "enhancement", "illusion", "maladictions", "protective", "transportation", "weather"])
group_table["cleric default"] = group_type("cleric default", { 'mage':-1, 'cleric':40, 'thief':-1, 'warrior':-1 }, ["flail", "attack", "creation", "curative", "benedictions", "detection", "healing", "maladictions", "protective", "shield block", "transportation", "weather"])
group_table["thief default"] = group_type("thief default", { 'mage':-1, 'cleric':-1, 'thief':40, 'warrior':-1 }, ["mace", "sword", "backstab", "disarm", "dodge", "second attack", "trip", "hide", "peek", "pick lock", "sneak"])
group_table["warrior default"] = group_type("warrior default", { 'mage':-1, 'cleric':-1, 'thief':-1, 'warrior':40 }, ["weaponsmaster", "shield block", "bash", "disarm", "enhanced damage", "parry", "rescue", "third attack"])
group_table["weaponsmaster"] = group_type("weaponsmaster", { 'mage':40, 'cleric':40, 'thief':40, 'warrior':20 }, ["axe", "dagger", "flail", "mace", "polearm", "spear", "sword","whip"])
group_table["attack"] = group_type("attack", { 'mage':-1, 'cleric':5, 'thief':-1, 'warrior':8 }, ["demonfire", "dispel evil", "dispel good", "earthquake", "flamestrike", "heat metal", "ray of truth"])
group_table["beguiling"] = group_type("beguiling", { 'mage':4, 'cleric':-1, 'thief':6, 'warrior':-1 }, ["calm", "charm person", "sleep"])
group_table["benedictions"] = group_type("benedictions", { 'mage':-1, 'cleric':4, 'thief':-1, 'warrior':8 }, ["bless", "calm", "frenzy", "holy word", "remove curse"])
group_table["combat"] = group_type("combat", { 'mage':6, 'cleric':-1, 'thief':10, 'warrior':9 }, ["acid blast", "burning hands", "chain lightning", "chill touch", "colour spray", "fireball", "lightning bolt", "magic missile", "shocking grasp"])
group_table["creation"] = group_type("creation", { 'mage':4, 'cleric':4, 'thief':8, 'warrior':8 }, ["continual light", "create food", "create spring", "create water", "create rose", "floating disc"])
group_table["curative"] = group_type("curative", { 'mage':-1, 'cleric':4, 'thief':-1, 'warrior':8 }, ["cure blindness", "cure disease", "cure poison"])
group_table["detection"] = group_type("detection", { 'mage':4, 'cleric':3, 'thief':6, 'warrior':-1 }, ["detect evil", "detect good", "detect hidden", "detect invis", "detect magic", "detect poison", "farsight", "identify", "know alignment", "locate object"])
group_table["draconian"] = group_type("draconian", { 'mage':8, 'cleric':-1, 'thief':-1, 'warrior':-1 }, ["acid breath", "fire breath", "frost breath", "gas breath", "lightning breath"])
group_table["enchantment"] = group_type("enchantment", { 'mage':6, 'cleric':-1, 'thief':-1, 'warrior':-1 }, ["enchant armor", "enchant weapon", "fireproof", "recharge"])
group_table["enhancement"] = group_type("enhancement", { 'mage':5, 'cleric':-1, 'thief':9, 'warrior':9 }, ["giant strength", "haste", "infravision", "refresh"])
group_table["harmful"] = group_type("harmful", { 'mage':-1, 'cleric':3, 'thief':-1, 'warrior':6 }, ["cause critical", "cause light", "cause serious", "harm"])
group_table["healing"] = group_type("healing", { 'mage':-1, 'cleric':3, 'thief':-1, 'warrior':6 }, ["cure critical", "cure light", "cure serious", "heal", "mass healing", "refresh"])
group_table["illusion"] = group_type("illusion", { 'mage':4, 'cleric':-1, 'thief':7, 'warrior':-1 }, ["invis", "mass invis", "ventriloquate"])
group_table["maladictions"] = group_type("maladictions", { 'mage':5, 'cleric':5, 'thief':9, 'warrior':9 }, ["blindness", "change sex", "curse", "energy drain", "plague", "poison", "slow", "weaken"])
group_table["protective"] = group_type("protective", { 'mage':4, 'cleric':4, 'thief':7, 'warrior':8 }, ["armor", "cancellation", "dispel magic", "fireproof", "protection evil", "protection good", "sanctuary", "shield", "stone skin"])
group_table["transportation"] = group_type("transportation", { 'mage':4, 'cleric':4, 'thief':8, 'warrior':9 }, ["fly", "gate", "nexus", "pass door", "portal", "summon", "teleport", "word of recall"])
group_table["weather"] = group_type("weather", { 'mage':4, 'cleric':4, 'thief':8, 'warrior':8 }, ["call lightning", "control weather", "faerie fire", "faerie fog", "lightning bolt"])
    
class guild_type:
    def __init__(self, name, who_name, attr_prime, weapon, guild_rooms, skill_adept, thac0_00, thac0_32, hp_min, hp_max, fMana, base_group, default_group):
        self.name=name      # the full name of the class */
        self.who_name=who_name      # Three-letter name for 'who'  */
        self.attr_prime=attr_prime      # Prime attribute      */
        self.weapon=weapon      # First weapon         */
        self.guild_rooms = guild_rooms
        self.skill_adept=skill_adept      # Maximum skill level      */
        self.thac0_00=thac0_00      # Thac0 for level  0       */
        self.thac0_32=thac0_32      # Thac0 for level 32       */
        self.hp_min=hp_min      # Min hp gained on leveling    */
        self.hp_max=hp_max      # Max hp gained on leveling    */
        self.fMana=fMana      # Class gains mana on level    */
        self.base_group=base_group      # base skills gained       */
        self.default_group=default_group      # default skills gained    */

guild_table= OrderedDict()
guild_table["mage"] = guild_type("mage", "Mag", STAT_INT, OBJ_VNUM_SCHOOL_DAGGER, [3018,9618], 75, 20, 6, 6, 8, True, "mage basics", "mage default" )
guild_table["cleric"] = guild_type("cleric", "Cle", STAT_WIS, OBJ_VNUM_SCHOOL_MACE, [3003,9619], 75, 20, 2, 7, 10, True, "cleric basics", "cleric default")
guild_table["thief"] = guild_type("thief", "Thi", STAT_DEX, OBJ_VNUM_SCHOOL_DAGGER, [3028,9639], 75, 20, -4, 8, 13, False, "thief basics", "thief default")
guild_table["warrior"] = guild_type("warrior", "War", STAT_STR, OBJ_VNUM_SCHOOL_SWORD, [3022,9633], 75, 20, -10, 11, 15, False, "warrior basics", "warrior default")

class weapon_type:
    def __init__(self, name, vnum, type, gsn):
        self.name=name
        self.vnum=vnum
        self.type=type
        self.gsn=gsn

weapon_table =  OrderedDict()
weapon_table['sword'] = weapon_type('sword',   OBJ_VNUM_SCHOOL_SWORD,  WEAPON_SWORD, 'sword'  )
weapon_table['mace'] = weapon_type('mace',    OBJ_VNUM_SCHOOL_MACE,   WEAPON_MACE,   'mace'   )
weapon_table['dagger'] = weapon_type('dagger',  OBJ_VNUM_SCHOOL_DAGGER, WEAPON_DAGGER,  'dagger' )
weapon_table['axe'] = weapon_type('axe', OBJ_VNUM_SCHOOL_AXE,    WEAPON_AXE, 'axe'   )
weapon_table['staff'] = weapon_type('staff',   OBJ_VNUM_SCHOOL_STAFF,  WEAPON_SPEAR,   'spear'  )
weapon_table['flail'] = weapon_type('flail',   OBJ_VNUM_SCHOOL_FLAIL,  WEAPON_FLAIL,   'flail'  )
weapon_table['whip'] = weapon_type('whip',    OBJ_VNUM_SCHOOL_WHIP,   WEAPON_WHIP,    'whip'   )
weapon_table['polearm'] = weapon_type('polearm', OBJ_VNUM_SCHOOL_POLEARM,WEAPON_POLEARM, 'polearm'    )

title_table  = {  "mage": [ [ "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" ] ],

                'cleric': [ ["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" ] ],
                'thief':  [ [ "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" ] ],
                'warrior': [[ "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 structures.
class str_app_type:
    def __init__(self, toh, tod, c, w):
        self.tohit = toh
        self.todam = tod
        self.carry = c
        self.wield = w

str_app = OrderedDict()
str_app[0] = str_app_type(-5, -4,   0,  0)
str_app[1] = str_app_type(-5, -4,   3,  1)
str_app[2] = str_app_type(-3, -2,   3,  2)
str_app[3] = str_app_type(-3, -1,  10,  3)
str_app[4] = str_app_type(-2, -1,  25,  4)
str_app[5] = str_app_type(-2, -1,  55,  5)
str_app[6] = str_app_type(-1,  0,  80,  6)
str_app[7] = str_app_type(-1,  0,  90,  7)
str_app[8] = str_app_type(0,  0, 100,  8)
str_app[9] = str_app_type(0,  0, 100,  9)
str_app[10] = str_app_type(0,  0, 115, 10)
str_app[11] = str_app_type(0,  0, 115, 11)
str_app[12] = str_app_type(0,  0, 130, 12)
str_app[13] = str_app_type(0,  0, 130, 13)
str_app[14] = str_app_type(0,  1, 140, 14)
str_app[15] = str_app_type(1,  1, 150, 15)
str_app[16] = str_app_type(1,  2, 165, 16)
str_app[17] = str_app_type(2,  3, 180, 22)
str_app[18] = str_app_type(2,  3, 200, 25)
str_app[19] = str_app_type(3,  4, 225, 30)
str_app[20] = str_app_type(3,  5, 250, 35)
str_app[21] = str_app_type(4,  6, 300, 40)
str_app[22] = str_app_type(4,  6, 350, 45)
str_app[23] = str_app_type(5,  7, 400, 50)
str_app[24] = str_app_type(5,  8, 450, 55)
str_app[25] = str_app_type(6,  9, 500, 60)

class int_app_type:
    def __init__(self, l):
        self.learn = l

int_app = OrderedDict()
int_app[0] = int_app_type(3)
int_app[1] = int_app_type(5)
int_app[2] = int_app_type(7)
int_app[3] = int_app_type(8)
int_app[4] = int_app_type(9)
int_app[5] = int_app_type(10)
int_app[6] = int_app_type(11)
int_app[7] = int_app_type(12)
int_app[8] = int_app_type(13)
int_app[9] = int_app_type(15)
int_app[10] = int_app_type(17)
int_app[11] = int_app_type(19)
int_app[12] = int_app_type(22)
int_app[13] = int_app_type(25)
int_app[14] = int_app_type(28)
int_app[15] = int_app_type(31)
int_app[16] = int_app_type(34)
int_app[17] = int_app_type(37)
int_app[18] = int_app_type(40)
int_app[19] = int_app_type(44)
int_app[20] = int_app_type(49)
int_app[21] = int_app_type(55)
int_app[22] = int_app_type(60)
int_app[23] = int_app_type(70)
int_app[24] = int_app_type(80)
int_app[25] = int_app_type(85)

class wis_app_type:
    def __init__(self, p):
        self.practice = p

wis_app = OrderedDict()
wis_app[0] = wis_app_type(0) #/*  0 */
wis_app[1] = wis_app_type(0) #/*  1 */
wis_app[2] = wis_app_type(0)
wis_app[3] = wis_app_type(0) #/*  3 */
wis_app[4] = wis_app_type(0)
wis_app[5] = wis_app_type(1) #/*  5 */
wis_app[6] = wis_app_type(1)
wis_app[7] = wis_app_type(1)
wis_app[8] = wis_app_type(1)
wis_app[9] = wis_app_type(1)
wis_app[10] = wis_app_type(1) #/* 10 */
wis_app[11] = wis_app_type(1)
wis_app[12] = wis_app_type(1)
wis_app[13] = wis_app_type(1)
wis_app[14] = wis_app_type(1)
wis_app[15] = wis_app_type(2)  #/* 15 */
wis_app[16] = wis_app_type(2)
wis_app[17] = wis_app_type(2)
wis_app[18] = wis_app_type(3)  #/* 18 */
wis_app[19] = wis_app_type(3)
wis_app[20] = wis_app_type(3)  #/* 20 */
wis_app[21] = wis_app_type(3)
wis_app[22] = wis_app_type(4)
wis_app[23] = wis_app_type(4)
wis_app[24] = wis_app_type(4)
wis_app[25] = wis_app_type(5)   #/* 25 */

class dex_app_type:
    def __init__(self, d):
        self.defensive = d

dex_app = OrderedDict()
dex_app[0] = dex_app_type(60)   #/* 0 */
dex_app[1] = dex_app_type(50)   #/* 1 */
dex_app[2] = dex_app_type(50)
dex_app[3] = dex_app_type(40)
dex_app[4] = dex_app_type(30)
dex_app[5] = dex_app_type(20)   #/* 5 */
dex_app[6] = dex_app_type(10)
dex_app[7] = dex_app_type(0)
dex_app[8] = dex_app_type(0)
dex_app[9] = dex_app_type(0)
dex_app[10] = dex_app_type(0)   #/* 10 */
dex_app[11] = dex_app_type(0)
dex_app[12] = dex_app_type(0)
dex_app[13] = dex_app_type(0)
dex_app[14] = dex_app_type(0)
dex_app[15] = dex_app_type(-10)   #/* 15 */
dex_app[16] = dex_app_type(-15)
dex_app[17] = dex_app_type(-20)
dex_app[18] = dex_app_type(-30)
dex_app[19] = dex_app_type(-40)
dex_app[20] = dex_app_type(-50)   #/* 20 */
dex_app[21] = dex_app_type(-60)
dex_app[22] = dex_app_type(-75)
dex_app[23] = dex_app_type(-90)
dex_app[24] = dex_app_type(-105)
dex_app[25] = dex_app_type(-120)    #/* 25 */

class con_app_type:
    def __init__(self, h, s):
        self.hitp = h
        self.shock = s

con_app = OrderedDict()
con_app[0] = con_app_type(-4, 20)   #/*  0 */
con_app[1] = con_app_type(-3, 25)   #/*  1 */
con_app[2] = con_app_type(-2, 30)
con_app[3] = con_app_type(-2, 35)   #/*  3 */
con_app[4] = con_app_type(-1, 40)
con_app[5] = con_app_type(-1, 45)   #/*  5 */
con_app[6] = con_app_type(-1, 50)
con_app[7] = con_app_type(0, 55)
con_app[8] = con_app_type(0, 60)
con_app[9] = con_app_type(0, 65)
con_app[10] = con_app_type(0, 70)   #/* 10 */
con_app[11] = con_app_type(0, 75)
con_app[12] = con_app_type(0, 80)
con_app[13] = con_app_type(0, 85)
con_app[14] = con_app_type(0, 88)
con_app[15] = con_app_type(1, 90)   #/* 15 */
con_app[16] = con_app_type(2, 95)
con_app[17] = con_app_type(2, 97)
con_app[18] = con_app_type(3, 99)   #/* 18 */
con_app[19] = con_app_type(3, 99)
con_app[20] = con_app_type(4, 99)   #/* 20 */
con_app[21] = con_app_type(4, 99)
con_app[22] = con_app_type(5, 99)
con_app[23] = con_app_type(6, 99)
con_app[24] = con_app_type(7, 99)
con_app[25] = con_app_type(8, 99)    #/* 25 */


#/* attack table  -- not very organized :( */
class attack_type:
    def __init__(self, name, noun, damage):
        self.name = name
        self.noun = noun
        self.damage = damage

attack_table = OrderedDict()
attack_table[0] = attack_type("none", "hit", -1)  #  0 */
attack_table[1] = attack_type("slice", "slice", DAM_SLASH)  
attack_table[2] = attack_type("stab", "stab", DAM_PIERCE)
attack_table[3] = attack_type("slash", "slash", DAM_SLASH)
attack_table[4] = attack_type("whip", "whip", DAM_SLASH)
attack_table[5] = attack_type("claw", "claw", DAM_SLASH)  #/*  5 */
attack_table[6] = attack_type("blast", "blast", DAM_BASH)
attack_table[7] = attack_type("pound", "pound", DAM_BASH)
attack_table[8] = attack_type("crush", "crush", DAM_BASH)
attack_table[9] = attack_type("grep", "grep", DAM_SLASH)
attack_table[10] = attack_type("bite", "bite", DAM_PIERCE)  #/* 10 */
attack_table[11] = attack_type("pierce", "pierce", DAM_PIERCE)
attack_table[12] = attack_type("suction", "suction", DAM_BASH)
attack_table[13] = attack_type("beating", "beating", DAM_BASH)
attack_table[14] = attack_type("digestion", "digestion", DAM_ACID)
attack_table[15] = attack_type("charge", "charge", DAM_BASH)  #/* 15 */
attack_table[16] = attack_type("slap", "slap", DAM_BASH)
attack_table[17] = attack_type("punch", "punch", DAM_BASH)
attack_table[18] = attack_type("wrath", "wrath", DAM_ENERGY)
attack_table[19] = attack_type("magic", "magic", DAM_ENERGY)
attack_table[20] = attack_type("divine", "divine power", DAM_HOLY)  #/* 20 */
attack_table[21] = attack_type("cleave", "cleave", DAM_SLASH)
attack_table[22] = attack_type("scratch", "scratch", DAM_PIERCE)
attack_table[23] = attack_type("peck", "peck", DAM_PIERCE)
attack_table[24] = attack_type("peckb", "peck", DAM_BASH)
attack_table[25] = attack_type("chop", "chop", DAM_SLASH)  #/* 25 */
attack_table[26] = attack_type("sting", "sting", DAM_PIERCE)
attack_table[27] = attack_type("smash", "smash", DAM_BASH)
attack_table[28] = attack_type("shbite", "shocking bite", DAM_LIGHTNING)
attack_table[29] = attack_type("flbite", "flaming bite", DAM_FIRE)
attack_table[30] = attack_type("frbite", "freezing bite", DAM_COLD)  #/* 30 */
attack_table[31] = attack_type("acbite", "acidic bite", DAM_ACID)
attack_table[32] = attack_type("chomp", "chomp", DAM_PIERCE)
attack_table[33] = attack_type("drain", "life drain", DAM_NEGATIVE)
attack_table[34] = attack_type("thrust", "thrust", DAM_PIERCE)
attack_table[35] = attack_type("slime", "slime", DAM_ACID)
attack_table[36] = attack_type("shock", "shock", DAM_LIGHTNING)
attack_table[37] = attack_type("thwack", "thwack", DAM_BASH)
attack_table[38] = attack_type("flame", "flame", DAM_FIRE)
attack_table[39] = attack_type("chill", "chill", DAM_COLD)


class wiznet_type:
    def __init__(self, n, f, l):
        self.name = n
        self.flag = f
        self.level = l
wiznet_table = OrderedDict()
wiznet_table["on"] = wiznet_type("on", WIZ_ON, IM)
wiznet_table["prefix"] = wiznet_type("prefix", WIZ_PREFIX, IM)
wiznet_table["ticks"] = wiznet_type("ticks", WIZ_TICKS, IM)
wiznet_table["logins"] = wiznet_type("logins", WIZ_LOGINS, IM)
wiznet_table["sites"] = wiznet_type("sites", WIZ_SITES, L4)
wiznet_table["links"] = wiznet_type("links", WIZ_LINKS, L7)
wiznet_table["newbies"] = wiznet_type("newbies", WIZ_NEWBIE, IM)
wiznet_table["spam"] = wiznet_type("spam", WIZ_SPAM, L5)
wiznet_table["deaths"] = wiznet_type("deaths", WIZ_DEATHS, IM)
wiznet_table["resets"] = wiznet_type("resets", WIZ_RESETS, L4)
wiznet_table["mobdeaths"] = wiznet_type("mobdeaths", WIZ_MOBDEATHS, L4)
wiznet_table["flags"] = wiznet_type("flags", WIZ_FLAGS, L5)
wiznet_table["penalties"] = wiznet_type("penalties", WIZ_PENALTIES, L5)
wiznet_table["saccing"] = wiznet_type("saccing", WIZ_SACCING, L5)
wiznet_table["levels"] = wiznet_type("levels", WIZ_LEVELS, IM)
wiznet_table["load"] = wiznet_type("load", WIZ_LOAD, L2)
wiznet_table["restore"] = wiznet_type("restore", WIZ_RESTORE, L2)
wiznet_table["snoops"] = wiznet_type("snoops", WIZ_SNOOPS, L2)
wiznet_table["switches"] = wiznet_type("switches", WIZ_SWITCHES, L2)
wiznet_table["secure"] = wiznet_type("secure", WIZ_SECURE, L1)