/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <time.h> #include "merc.h" /* * Class table. */ const struct class_type class_table[MAX_CLASS] = { { "Mag", APPLY_INT, OBJ_VNUM_SCHOOL_DAGGER, 3018, 95, 18, 10, 6, 8, TRUE}, { "Cle", APPLY_WIS, OBJ_VNUM_SCHOOL_MACE, 3003, 95, 18, 12, 7, 10, TRUE}, { "Thi", APPLY_DEX, OBJ_VNUM_SCHOOL_DAGGER, 3028, 85, 18, 8, 8, 13, FALSE}, { "War", APPLY_STR, OBJ_VNUM_SCHOOL_SWORD, 3022, 85, 18, 6, 11, 15, FALSE} }; #define CLASS_MAGE 0 #define CLASS_CLERIC 1 #define CLASS_THIEF 2 #define CLASS_WARRIOR 3 /* * Titles. */ char *const title_table[MAX_CLASS][MAX_LEVEL + 1][2] = { { {"Man", "Woman"}, {"Apprentice of Magic", "Apprentice of Magic"}, {"Spell Student", "Spell Student"}, {"Scholar of Magic", "Scholar of Magic"}, {"Delver in Spells", "Delveress in Spells"}, {"Medium of Magic", "Medium of Magic"}, {"Scribe of Magic", "Scribess of Magic"}, {"Seer", "Seeress"}, {"Sage", "Sage"}, {"Illusionist", "Illusionist"}, {"Abjurer", "Abjuress"}, {"Invoker", "Invoker"}, {"Enchanter", "Enchantress"}, {"Conjurer", "Conjuress"}, {"Magician", "Witch"}, {"Creator", "Creator"}, {"Savant", "Savant"}, {"Magus", "Craftess"}, {"Wizard", "Wizard"}, {"Warlock", "War Witch"}, {"Sorcerer", "Sorceress"}, {"Elder Sorcerer", "Elder Sorceress"}, {"Grand Sorcerer", "Grand Sorceress"}, {"Great Sorcerer", "Great Sorceress"}, {"Golem Maker", "Golem Maker"}, {"Greater Golem Maker", "Greater Golem Maker"}, {"Maker of Stones", "Maker of Stones",}, {"Maker of Potions", "Maker of Potions",}, {"Maker of Scrolls", "Maker of Scrolls",}, {"Maker of Wands", "Maker of Wands",}, {"Maker of Staves", "Maker of Staves",}, {"Demon Summoner", "Demon Summoner"}, {"Greater Demon Summoner", "Greater Demon Summoner"}, {"Dragon Charmer", "Dragon Charmer"}, {"Greater Dragon Charmer", "Greater Dragon Charmer"}, {"Master of all Magic", "Master of all Magic"}, {"Mage Hero", "Mage Heroine"}, {"Angel of Magic", "Angel of Magic"}, {"Deity of Magic", "Deity of Magic"}, {"Supremity of Magic", "Supremity of Magic"}, {"Implementor", "Implementress"} }, { {"Man", "Woman"}, {"Believer", "Believer"}, {"Attendant", "Attendant"}, {"Acolyte", "Acolyte"}, {"Novice", "Novice"}, {"Missionary", "Missionary"}, {"Adept", "Adept"}, {"Deacon", "Deaconess"}, {"Vicar", "Vicaress"}, {"Priest", "Priestess"}, {"Minister", "Lady Minister"}, {"Canon", "Canon"}, {"Levite", "Levitess"}, {"Curate", "Curess"}, {"Monk", "Nun"}, {"Healer", "Healess"}, {"Chaplain", "Chaplain"}, {"Expositor", "Expositress"}, {"Bishop", "Bishop"}, {"Arch Bishop", "Arch Lady of the Church"}, {"Patriarch", "Matriarch"}, {"Elder Patriarch", "Elder Matriarch"}, {"Grand Patriarch", "Grand Matriarch"}, {"Great Patriarch", "Great Matriarch"}, {"Demon Killer", "Demon Killer"}, {"Greater Demon Killer", "Greater Demon Killer"}, {"Cardinal of the Sea", "Cardinal of the Sea"}, {"Cardinal of the Earth", "Cardinal of the Earth"}, {"Cardinal of the Air", "Cardinal of the Air"}, {"Cardinal of the Ether", "Cardinal of the Ether"}, {"Cardinal of the Heavens", "Cardinal of the Heavens"}, {"Avatar of an Immortal", "Avatar of an Immortal"}, {"Avatar of a Deity", "Avatar of a Deity"}, {"Avatar of a Supremity", "Avatar of a Supremity"}, {"Avatar of an Implementor", "Avatar of an Implementor"}, {"Master of all Divinity", "Mistress of all Divinity"}, {"Holy Hero", "Holy Heroine"}, {"Angel", "Angel"}, {"Deity", "Deity"}, {"Supreme Master", "Supreme Mistress"}, {"Implementor", "Implementress"} }, { {"Man", "Woman"}, {"Pilferer", "Pilferess"}, {"Footpad", "Footpad"}, {"Filcher", "Filcheress"}, {"Pick-Pocket", "Pick-Pocket"}, {"Sneak", "Sneak"}, {"Pincher", "Pincheress"}, {"Cut-Purse", "Cut-Purse"}, {"Snatcher", "Snatcheress"}, {"Sharper", "Sharpress"}, {"Rogue", "Rogue"}, {"Robber", "Robber"}, {"Magsman", "Magswoman"}, {"Highwayman", "Highwaywoman"}, {"Burglar", "Burglaress"}, {"Thief", "Thief"}, {"Knifer", "Knifer"}, {"Quick-Blade", "Quick-Blade"}, {"Killer", "Murderess"}, {"Brigand", "Brigand"}, {"Cut-Throat", "Cut-Throat"}, {"Spy", "Spy"}, {"Grand Spy", "Grand Spy"}, {"Master Spy", "Master Spy"}, {"Assassin", "Assassin"}, {"Greater Assassin", "Greater Assassin"}, {"Master of Vision", "Mistress of Vision"}, {"Master of Hearing", "Mistress of Hearing"}, {"Master of Smell", "Mistress of Smell"}, {"Master of Taste", "Mistress of Taste"}, {"Master of Touch", "Mistress of Touch"}, {"Crime Lord", "Crime Mistress"}, {"Infamous Crime Lord", "Infamous Crime Mistress"}, {"Greater Crime Lord", "Greater Crime Mistress"}, {"Master Crime Lord", "Master Crime Mistress"}, {"Godfather", "Godmother"}, {"Assassin Hero", "Assassin Heroine"}, {"Angel of Death", "Angel of Death"}, {"Deity of Assassins", "Deity of Assassins"}, {"Supreme Master", "Supreme Mistress"}, {"Implementor", "Implementress"} }, { {"Man", "Woman"}, {"Swordpupil", "Swordpupil"}, {"Recruit", "Recruit"}, {"Sentry", "Sentress"}, {"Fighter", "Fighter"}, {"Soldier", "Soldier"}, {"Warrior", "Warrior"}, {"Veteran", "Veteran"}, {"Swordsman", "Swordswoman"}, {"Fencer", "Fenceress"}, {"Combatant", "Combatess"}, {"Hero", "Heroine"}, {"Myrmidon", "Myrmidon"}, {"Swashbuckler", "Swashbuckleress"}, {"Mercenary", "Mercenaress"}, {"Swordmaster", "Swordmistress"}, {"Lieutenant", "Lieutenant"}, {"Champion", "Lady Champion"}, {"Dragoon", "Lady Dragoon"}, {"Cavalier", "Lady Cavalier"}, {"Knight", "Lady Knight"}, {"Grand Knight", "Grand Knight"}, {"Master Knight", "Master Knight"}, {"Paladin", "Paladin"}, {"Grand Paladin", "Grand Paladin"}, {"Demon Slayer", "Demon Slayer"}, {"Greater Demon Slayer", "Greater Demon Slayer"}, {"Dragon Slayer", "Dragon Slayer"}, {"Greater Dragon Slayer", "Greater Dragon Slayer"}, {"Underlord", "Underlord"}, {"Overlord", "Overlord"}, {"Baron of Thunder", "Baroness of Thunder"}, {"Baron of Storms", "Baroness of Storms"}, {"Baron of Tornadoes", "Baroness of Tornadoes"}, {"Baron of Hurricanes", "Baroness of Hurricanes"}, {"Baron of Meteors", "Baroness of Meteors"}, {"Knight Hero", "Knight Heroine"}, {"Angel of War", "Angel of War"}, {"Deity of War", "Deity of War"}, {"Supreme Master of War", "Supreme Mistress of War"}, {"Implementor", "Implementress"} } }; /* * Attribute bonus tables. */ const struct str_app_type str_app[26] = { {-5, -4, 0, 0}, /* 0 */ {-5, -4, 3, 1}, /* 1 */ {-3, -2, 3, 2}, {-3, -1, 10, 3}, /* 3 */ {-2, -1, 25, 4}, {-2, -1, 55, 5}, /* 5 */ {-1, 0, 80, 6}, {-1, 0, 90, 7}, {0, 0, 100, 8}, {0, 0, 100, 9}, {0, 0, 115, 10}, /* 10 */ {0, 0, 115, 11}, {0, 0, 140, 12}, {0, 0, 140, 13}, /* 13 */ {0, 1, 170, 14}, {1, 1, 170, 15}, /* 15 */ {1, 2, 195, 16}, {2, 3, 220, 22}, {2, 4, 250, 25}, /* 18 */ {3, 5, 400, 30}, {3, 6, 500, 35}, /* 20 */ {4, 7, 600, 40}, {5, 7, 700, 45}, {6, 8, 800, 50}, {8, 10, 900, 55}, {10, 12, 999, 60} /* 25 */ }; const struct int_app_type int_app[26] = { {3}, /* 0 */ {5}, /* 1 */ {7}, {8}, /* 3 */ {9}, {10}, /* 5 */ {11}, {12}, {13}, {15}, {17}, /* 10 */ {19}, {22}, {25}, {28}, {31}, /* 15 */ {34}, {37}, {40}, /* 18 */ {44}, {49}, /* 20 */ {55}, {60}, {70}, {85}, {99} /* 25 */ }; const struct wis_app_type wis_app[26] = { {0}, /* 0 */ {0}, /* 1 */ {0}, {0}, /* 3 */ {0}, {1}, /* 5 */ {1}, {1}, {1}, {2}, {2}, /* 10 */ {2}, {2}, {2}, {2}, {3}, /* 15 */ {3}, {4}, {4}, /* 18 */ {5}, {5}, /* 20 */ {6}, {7}, {7}, {7}, {8} /* 25 */ }; const struct dex_app_type dex_app[26] = { {60}, /* 0 */ {50}, /* 1 */ {50}, {40}, {30}, {20}, /* 5 */ {10}, {0}, {0}, {0}, {0}, /* 10 */ {0}, {0}, {0}, {0}, {-10}, /* 15 */ {-15}, {-20}, {-30}, {-40}, {-50}, /* 20 */ {-65}, {-75}, {-90}, {-105}, {-120} /* 25 */ }; const struct con_app_type con_app[26] = { {-4, 20}, /* 0 */ {-3, 25}, /* 1 */ {-2, 30}, {-2, 35}, /* 3 */ {-1, 40}, {-1, 45}, /* 5 */ {-1, 50}, {0, 55}, {0, 60}, {0, 65}, {0, 70}, /* 10 */ {0, 75}, {0, 80}, {0, 85}, {0, 88}, {1, 90}, /* 15 */ {2, 95}, {2, 97}, {3, 99}, /* 18 */ {3, 99}, {4, 99}, /* 20 */ {4, 99}, {5, 99}, {6, 99}, {7, 99}, {8, 99} /* 25 */ }; /* * Liquid properties. * Used in world.obj. */ const struct liq_type liq_table[LIQ_MAX] = { {"water", "clear", {0, 1, 10}}, /* 0 */ {"beer", "amber", {3, 2, 5}}, {"wine", "rose", {5, 2, 5}}, {"ale", "brown", {2, 2, 5}}, {"dark ale", "dark", {1, 2, 5}}, {"whisky", "golden", {6, 1, 4}}, /* 5 */ {"lemonade", "pink", {0, 1, 8}}, {"firebreather", "boiling", {10, 0, 0}}, {"local specialty", "everclear", {3, 3, 3}}, {"slime mold juice", "green", {0, 4, -8}}, {"milk", "white", {0, 3, 6}}, /* 10 */ {"tea", "tan", {0, 1, 6}}, {"coffee", "black", {0, 1, 6}}, {"blood", "red", {0, 2, -1}}, {"salt water", "clear", {0, 1, -2}}, {"cola", "cherry", {0, 1, 5}} /* 15 */ }; /* * The skill and spell table. * Slot numbers must never be changed as they appear in #OBJECTS sections. */ #define SLOT(n) n const struct skill_type skill_table[MAX_SKILL] = { /* * Magic spells. */ { "reserved", {99, 99, 99, 99}, 0, TAR_IGNORE, POS_STANDING, NULL, SLOT( 0 ), 0, 0, "", ""}, { "acid blast", {20, 37, 37, 37}, spell_acid_blast, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 70 ), 20, 12, "acid blast", "!Acid Blast!"}, { "armor", {5, 1, 37, 37}, spell_armor, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 1 ), 5, 12, "", "You feel less protected."}, { "bless", {37, 5, 37, 37}, spell_bless, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 3 ), 5, 12, "", "You feel less righteous."}, { "blindness", {8, 5, 37, 37}, spell_blindness, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_blindness, SLOT( 4 ), 5, 12, "", "You can see again."}, { "burning hands", {5, 37, 37, 37}, spell_burning_hands, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 5 ), 15, 12, "burning hands", "!Burning Hands!"}, { "call lightning", {37, 12, 37, 37}, spell_call_lightning, TAR_IGNORE, POS_FIGHTING, NULL, SLOT( 6 ), 15, 12, "lightning bolt", "!Call Lightning!"}, { "cause critical", {37, 9, 37, 37}, spell_cause_critical, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 63 ), 20, 12, "spell", "!Cause Critical!"}, { "cause light", {37, 1, 37, 37}, spell_cause_light, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 62 ), 15, 12, "spell", "!Cause Light!"}, { "cause serious", {37, 5, 37, 37}, spell_cause_serious, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 64 ), 17, 12, "spell", "!Cause Serious!"}, { "change sex", {37, 37, 37, 37}, spell_change_sex, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT( 82 ), 15, 12, "", "Your body feels familiar again."}, { "charm person", {14, 37, 37, 37}, spell_charm_person, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_charm_person, SLOT( 7 ), 5, 12, "", "You feel more self-confident."}, { "chill touch", {3, 37, 37, 37}, spell_chill_touch, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 8 ), 15, 12, "chilling touch", "You feel less cold."}, { "colour spray", {11, 37, 37, 37}, spell_colour_spray, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 10 ), 15, 12, "colour spray", "!Colour Spray!"}, { "continual light", {4, 2, 37, 37}, spell_continual_light, TAR_IGNORE, POS_STANDING, NULL, SLOT( 57 ), 7, 12, "", "!Continual Light!"}, { "control weather", {10, 13, 37, 37}, spell_control_weather, TAR_IGNORE, POS_STANDING, NULL, SLOT( 11 ), 25, 12, "", "!Control Weather!"}, { "create food", {37, 3, 37, 37}, spell_create_food, TAR_IGNORE, POS_STANDING, NULL, SLOT( 12 ), 5, 12, "", "!Create Food!"}, { "create spring", {10, 37, 37, 37}, spell_create_spring, TAR_IGNORE, POS_STANDING, NULL, SLOT( 80 ), 20, 12, "", "!Create Spring!"}, { "create water", {37, 2, 37, 37}, spell_create_water, TAR_OBJ_INV, POS_STANDING, NULL, SLOT( 13 ), 5, 12, "", "!Create Water!"}, { "cure blindness", {37, 4, 37, 37}, spell_cure_blindness, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT( 14 ), 5, 12, "", "!Cure Blindness!"}, { "cure critical", {37, 9, 37, 37}, spell_cure_critical, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT( 15 ), 20, 12, "", "!Cure Critical!"}, { "cure light", {37, 1, 37, 37}, spell_cure_light, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT( 16 ), 10, 12, "", "!Cure Light!"}, { "cure poison", {37, 9, 37, 37}, spell_cure_poison, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 43 ), 5, 12, "", "!Cure Poison!"}, { "cure serious", {37, 5, 37, 37}, spell_cure_serious, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT( 61 ), 15, 12, "", "!Cure Serious!"}, { "curse", {12, 12, 37, 37}, spell_curse, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_curse, SLOT( 17 ), 20, 12, "curse", "The curse wears off."}, { "detect evil", {37, 4, 37, 37}, spell_detect_evil, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT( 18 ), 5, 12, "", "The red in your vision disappears."}, { "detect hidden", {37, 7, 37, 37}, spell_detect_hidden, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT( 44 ), 5, 12, "", "You feel less aware of your suroundings."}, { "detect invis", {2, 5, 37, 37}, spell_detect_invis, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT( 19 ), 5, 12, "", "You no longer see invisible objects."}, { "detect magic", {2, 3, 37, 37}, spell_detect_magic, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT( 20 ), 5, 12, "", "The detect magic wears off."}, { "detect poison", {37, 5, 37, 37}, spell_detect_poison, TAR_OBJ_INV, POS_STANDING, NULL, SLOT( 21 ), 5, 12, "", "!Detect Poison!"}, { "dispel evil", {37, 10, 37, 37}, spell_dispel_evil, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 22 ), 15, 12, "dispel evil", "!Dispel Evil!"}, { "dispel magic", {26, 31, 37, 37}, spell_dispel_magic, TAR_CHAR_OFFENSIVE, POS_STANDING, NULL, SLOT( 59 ), 15, 12, "", "!Dispel Magic!"}, { "earthquake", {37, 7, 37, 37}, spell_earthquake, TAR_IGNORE, POS_FIGHTING, NULL, SLOT( 23 ), 15, 12, "earthquake", "!Earthquake!"}, { "enchant weapon", {12, 37, 37, 37}, spell_enchant_weapon, TAR_OBJ_INV, POS_STANDING, NULL, SLOT( 24 ), 100, 24, "", "!Enchant Weapon!"}, { "energy drain", {13, 37, 37, 37}, spell_energy_drain, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 25 ), 35, 12, "energy drain", "!Energy Drain!"}, { "faerie fire", {4, 2, 37, 37}, spell_faerie_fire, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 72 ), 5, 12, "faerie fire", "The pink aura around you fades away."}, { "faerie fog", {10, 14, 37, 37}, spell_faerie_fog, TAR_IGNORE, POS_STANDING, NULL, SLOT( 73 ), 12, 12, "faerie fog", "!Faerie Fog!"}, { "fireball", {15, 37, 37, 37}, spell_fireball, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 26 ), 15, 12, "fireball", "!Fireball!"}, { "flamestrike", {37, 13, 37, 37}, spell_flamestrike, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 65 ), 20, 12, "flamestrike", "!Flamestrike!"}, { "fly", {7, 12, 37, 37}, spell_fly, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 56 ), 10, 18, "", "You slowly float to the ground."}, { "gate", {37, 37, 37, 37}, spell_gate, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT( 83 ), 50, 12, "", "!Gate!"}, { "giant strength", {7, 37, 37, 37}, spell_giant_strength, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 39 ), 20, 12, "", "You feel weaker."}, { "harm", {37, 15, 37, 37}, spell_harm, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 27 ), 35, 12, "harm spell", "!Harm!"}, { "heal", {37, 14, 37, 37}, spell_heal, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT( 28 ), 50, 12, "", "!Heal!"}, { "identify", {10, 10, 37, 37}, spell_identify, TAR_OBJ_INV, POS_STANDING, NULL, SLOT( 53 ), 12, 24, "", "!Identify!"}, { "infravision", {6, 9, 37, 37}, spell_infravision, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 77 ), 5, 18, "", "You no longer see in the dark."}, { "invis", {4, 37, 37, 37}, spell_invis, TAR_CHAR_DEFENSIVE, POS_STANDING, &gsn_invis, SLOT( 29 ), 5, 12, "", "You are no longer invisible."}, { "know alignment", {8, 5, 37, 37}, spell_know_alignment, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 58 ), 9, 12, "", "!Know Alignment!"}, { "lightning bolt", {9, 37, 37, 37}, spell_lightning_bolt, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 30 ), 15, 12, "lightning bolt", "!Lightning Bolt!"}, { "locate object", {6, 10, 37, 37}, spell_locate_object, TAR_IGNORE, POS_STANDING, NULL, SLOT( 31 ), 20, 18, "", "!Locate Object!"}, { "magic missile", {1, 37, 37, 37}, spell_magic_missile, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 32 ), 15, 12, "magic missile", "!Magic Missile!"}, { "mass invis", {15, 17, 37, 37}, spell_mass_invis, TAR_IGNORE, POS_STANDING, &gsn_mass_invis, SLOT( 69 ), 20, 24, "", "!Mass Invis!"}, { "pass door", {18, 37, 37, 37}, spell_pass_door, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT( 74 ), 20, 12, "", "You feel solid again."}, { "poison", {37, 8, 37, 37}, spell_poison, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_poison, SLOT( 33 ), 10, 12, "poison", "You feel less sick."}, { "protection", {37, 6, 37, 37}, spell_protection, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT( 34 ), 5, 12, "", "You feel less protected."}, { "refresh", {5, 3, 37, 37}, spell_refresh, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 81 ), 12, 18, "refresh", "!Refresh!"}, { "remove curse", {37, 12, 37, 37}, spell_remove_curse, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 35 ), 5, 12, "", "!Remove Curse!"}, { "sanctuary", {37, 13, 37, 37}, spell_sanctuary, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 36 ), 75, 12, "", "The white aura around your body fades."}, { "shield", {13, 37, 37, 37}, spell_shield, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 67 ), 12, 18, "", "Your force shield shimmers then fades away."}, { "shocking grasp", {7, 37, 37, 37}, spell_shocking_grasp, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 37 ), 15, 12, "shocking grasp", "!Shocking Grasp!"}, { "sleep", {14, 37, 37, 37}, spell_sleep, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_sleep, SLOT( 38 ), 15, 12, "", "You feel less tired."}, { "stone skin", {17, 37, 37, 37}, spell_stone_skin, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT( 66 ), 12, 18, "", "Your skin feels soft again."}, { "summon", {37, 8, 37, 37}, spell_summon, TAR_IGNORE, POS_STANDING, NULL, SLOT( 40 ), 50, 12, "", "!Summon!"}, { "teleport", {8, 37, 37, 37}, spell_teleport, TAR_CHAR_SELF, POS_FIGHTING, NULL, SLOT( 2 ), 35, 12, "", "!Teleport!"}, { "ventriloquate", {1, 37, 37, 37}, spell_ventriloquate, TAR_IGNORE, POS_STANDING, NULL, SLOT( 41 ), 5, 12, "", "!Ventriloquate!"}, { "weaken", {7, 37, 37, 37}, spell_weaken, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 68 ), 20, 12, "spell", "You feel stronger."}, { "word of recall", {37, 37, 37, 37}, spell_word_of_recall, TAR_CHAR_SELF, POS_RESTING, NULL, SLOT( 42 ), 5, 12, "", "!Word of Recall!"}, /* * Dragon breath */ { "acid breath", {33, 37, 37, 37}, spell_acid_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 200 ), 0, 4, "blast of acid", "!Acid Breath!"}, { "fire breath", {34, 37, 37, 37}, spell_fire_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 201 ), 0, 4, "blast of flame", "!Fire Breath!"}, { "frost breath", {31, 37, 37, 37}, spell_frost_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 202 ), 0, 4, "blast of frost", "!Frost Breath!"}, { "gas breath", {35, 37, 37, 37}, spell_gas_breath, TAR_IGNORE, POS_FIGHTING, NULL, SLOT( 203 ), 0, 4, "blast of gas", "!Gas Breath!"}, { "lightning breath", {32, 37, 37, 37}, spell_lightning_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 204 ), 0, 4, "blast of lightning", "!Lightning Breath!"}, /* * Fighter and thief skills. */ { "backstab", {37, 37, 1, 37}, spell_null, TAR_IGNORE, POS_STANDING, &gsn_backstab, SLOT( 0 ), 0, 24, "backstab", "!Backstab!"}, { "disarm", {37, 37, 10, 37}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_disarm, SLOT( 0 ), 0, 24, "", "!Disarm!"}, { "dodge", {37, 37, 1, 37}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_dodge, SLOT( 0 ), 0, 0, "", "!Dodge!"}, { "enhanced damage", {37, 37, 37, 1}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_enhanced_damage, SLOT( 0 ), 0, 0, "", "!Enhanced Damage!"}, { "hide", {37, 37, 1, 37}, spell_null, TAR_IGNORE, POS_RESTING, &gsn_hide, SLOT( 0 ), 0, 12, "", "!Hide!"}, { "kick", {37, 37, 37, 1}, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_kick, SLOT( 0 ), 0, 8, "kick", "!Kick!"}, { "parry", {37, 37, 37, 1}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_parry, SLOT( 0 ), 0, 0, "", "!Parry!"}, { "peek", {37, 37, 1, 37}, spell_null, TAR_IGNORE, POS_STANDING, &gsn_peek, SLOT( 0 ), 0, 0, "", "!Peek!"}, { "pick lock", {37, 37, 1, 37}, spell_null, TAR_IGNORE, POS_STANDING, &gsn_pick_lock, SLOT( 0 ), 0, 12, "", "!Pick!"}, { "rescue", {37, 37, 37, 1}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_rescue, SLOT( 0 ), 0, 12, "", "!Rescue!"}, { "second attack", {37, 37, 1, 1}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_second_attack, SLOT( 0 ), 0, 0, "", "!Second Attack!"}, { "sneak", {37, 37, 1, 37}, spell_null, TAR_IGNORE, POS_STANDING, &gsn_sneak, SLOT( 0 ), 0, 12, "", NULL}, { "steal", {37, 37, 1, 37}, spell_null, TAR_IGNORE, POS_STANDING, &gsn_steal, SLOT( 0 ), 0, 24, "", "!Steal!"}, { "third attack", {37, 37, 37, 1}, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_third_attack, SLOT( 0 ), 0, 0, "", "!Third Attack!"}, /* * Spells for mega1.are from Glop/Erkenbrand. */ { "general purpose", {37, 37, 37, 37}, spell_general_purpose, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 205 ), 0, 12, "general purpose ammo", "!General Purpose Ammo!"}, { "high explosive", {37, 37, 37, 37}, spell_high_explosive, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 206 ), 0, 12, "high explosive ammo", "!High Explosive Ammo!"} };