/*************************************************************************** * 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. * ***************************************************************************/ /*************************************************************************** * God Wars Mud originally written by KaVir aka Richard Woolcock. * * Changes done to the code done by Sage aka Walter Howard, this mud is * * for the public, however if you run this code it means you agree * * to the license.low, license.gw, and license.merc have fun. :) * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <time.h> #include "merc.h" /* * 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] = { { 1 }, /* 0 */ { 1 }, /* 1 */ { 1 }, { 1 }, /* 3 */ { 1 }, { 1 }, /* 5 */ { 1 }, { 1 }, { 1 }, { 1 }, { 1 }, /* 10 */ { 1 }, { 1 }, { 2 }, { 2 }, { 2 }, /* 15 */ { 2 }, { 3 }, { 3 }, /* 18 */ { 3 }, { 4 }, /* 20 */ { 4 }, { 4 }, { 6 }, { 6 }, { 5 } /* 25 */ }; const struct wis_app_type wis_app [26] = { { 0 }, /* 0 */ { 0 }, /* 1 */ { 0 }, { 0 }, /* 3 */ { 0 }, { 1 }, /* 5 */ { 1 }, { 1 }, { 1 }, { 2 }, { 2 }, /* 10 */ { 2 }, { 2 }, { 2 }, { 2 }, { 3 }, /* 15 */ { 3 }, { 4 }, { 5 }, /* 18 */ { 5 }, { 5 }, /* 20 */ { 6 }, { 6 }, { 6 }, { 6 }, { 7 } /* 25 */ }; const struct dex_app_type dex_app [26] = { { 60 }, /* 0 */ { 50 }, /* 1 */ { 50 }, { 40 }, { 30 }, { 20 }, /* 5 */ { 10 }, { 0 }, { 0 }, { 0 }, { 0 }, /* 10 */ { 0 }, { 0 }, { 0 }, { 0 }, { - 10 }, /* 15 */ { - 15 }, { - 20 }, { - 30 }, { - 40 }, { - 50 }, /* 20 */ { - 60 }, { - 75 }, { - 90 }, { -105 }, { -120 } /* 25 */ }; const struct con_app_type con_app [26] = { { -4, 20 }, /* 0 */ { -3, 25 }, /* 1 */ { -2, 30 }, { -2, 35 }, /* 3 */ { -1, 40 }, { -1, 45 }, /* 5 */ { -1, 50 }, { 0, 55 }, { 0, 60 }, { 0, 65 }, { 0, 70 }, /* 10 */ { 0, 75 }, { 0, 80 }, { 0, 85 }, { 0, 88 }, { 1, 90 }, /* 15 */ { 2, 95 }, { 2, 97 }, { 3, 99 }, /* 18 */ { 3, 99 }, { 4, 99 }, /* 20 */ { 4, 99 }, { 5, 99 }, { 6, 99 }, { 7, 99 }, { 8, 99 } /* 25 */ }; /* * Liquid properties. * Used in world.obj. */ const struct liq_type liq_table [LIQ_MAX] = { { "water", "clear", { 0, 1, 10 } }, /* 0 */ { "beer", "amber", { 3, 2, 5 } }, { "wine", "rose", { 5, 2, 5 } }, { "ale", "brown", { 2, 2, 5 } }, { "dark ale", "dark", { 1, 2, 5 } }, { "whisky", "golden", { 6, 1, 4 } }, /* 5 */ { "lemonade", "pink", { 0, 1, 8 } }, { "firebreather", "boiling", { 10, 0, 0 } }, { "local specialty", "everclear", { 3, 3, 3 } }, { "slime mold juice", "green", { 0, 4, -8 } }, { "milk", "white", { 0, 3, 6 } }, /* 10 */ { "tea", "tan", { 0, 1, 6 } }, { "coffee", "black", { 0, 1, 6 } }, { "blood", "red", { 0, 0, 5 } }, { "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, 0, TAR_IGNORE, POS_STANDING, NULL, SLOT( 0), 0, 0, "", "" }, { "acid blast", 2, spell_acid_blast, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(70), 20, 12, "acid blast", "!Acid Blast!" }, { "armor", 1, spell_armor, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 1), 5, 12, "", "You feel less protected." }, { "bless", 1, spell_bless, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 3), 5, 12, "", "You feel less righteous." }, { "blindness", 1, spell_blindness, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_blindness, SLOT( 4), 5, 12, "", "You can see again." }, { "burning hands", 2, spell_burning_hands, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 5), 15, 12, "burning hands", "!Burning Hands!" }, { "call lightning", 2, spell_call_lightning, TAR_IGNORE, POS_FIGHTING, NULL, SLOT( 6), 15, 12, "lightning bolt", "!Call Lightning!" }, { "cause critical", 2, spell_cause_critical, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(63), 20, 12, "spell", "!Cause Critical!" }, { "cause light", 2, spell_cause_light, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(62), 15, 12, "spell", "!Cause Light!" }, { "cause serious", 2, spell_cause_serious, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(64), 17, 12, "spell", "!Cause Serious!" }, { "change sex", 2, spell_change_sex, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT(82), 15, 12, "", "Your body feels familiar again." }, { "charm person", 1, spell_charm_person, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_charm_person, SLOT( 7), 5, 12, "", "You feel more self-confident." }, { "chill touch", 2, spell_chill_touch, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT( 8), 15, 12, "chilling touch", "You feel less cold." }, { "colour spray", 2, spell_colour_spray, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(10), 15, 12, "colour spray", "!Colour Spray!" }, { "continual light", 1, spell_continual_light, TAR_IGNORE, POS_STANDING, NULL, SLOT(57), 7, 12, "", "!Continual Light!" }, { "control weather", 2, spell_control_weather, TAR_IGNORE, POS_STANDING, NULL, SLOT(11), 25, 12, "", "!Control Weather!" }, { "create food", 1, spell_create_food, TAR_IGNORE, POS_STANDING, NULL, SLOT(12), 5, 12, "", "!Create Food!" }, { "create spring", 1, spell_create_spring, TAR_IGNORE, POS_STANDING, NULL, SLOT(80), 20, 12, "", "!Create Spring!" }, { "create water", 2, spell_create_water, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(13), 5, 12, "", "!Create Water!" }, { "cure blindness", 1, spell_cure_blindness, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT(14), 5, 12, "", "!Cure Blindness!" }, { "cure critical", 2, spell_cure_critical, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT(15), 20, 12, "", "!Cure Critical!" }, { "cure light", 2, spell_cure_light, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT(16), 10, 12, "", "!Cure Light!" }, { "cure poison", 1, spell_cure_poison, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(43), 5, 12, "", "!Cure Poison!" }, { "cure serious", 2, spell_cure_serious, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT(61), 15, 12, "", "!Cure Serious!" }, { "curse", 1, spell_curse, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_curse, SLOT(17), 20, 12, "curse", "The curse wears off." }, { "detect evil", 2, spell_detect_evil, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(18), 5, 12, "", "The red in your vision disappears." }, { "detect hidden", 1, spell_detect_hidden, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(44), 5, 12, "", "You feel less aware of your suroundings." }, { "detect invis", 1, spell_detect_invis, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(19), 5, 12, "", "You no longer see invisible objects." }, { "detect magic", 2, spell_detect_magic, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(20), 5, 12, "", "The detect magic wears off." }, { "detect poison", 2, spell_detect_poison, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(21), 5, 12, "", "!Detect Poison!" }, { "dispel evil", 2, spell_dispel_evil, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(22), 15, 12, "dispel evil", "!Dispel Evil!" }, { "dispel magic", 1, spell_dispel_magic, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(59), 15, 12, "", "!Dispel Magic!" }, { "earthquake", 2, spell_earthquake, TAR_IGNORE, POS_FIGHTING, NULL, SLOT(23), 15, 12, "earthquake", "!Earthquake!" }, { "enchant weapon", 1, spell_enchant_weapon, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(24), 100, 24, "", "!Enchant Weapon!" }, { "energy drain", 1, spell_energy_drain, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(25), 35, 12, "energy drain", "!Energy Drain!" }, { "faerie fire", 2, spell_faerie_fire, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(72), 5, 12, "faerie fire", "The pink aura around you fades away." }, { "faerie fog", 2, spell_faerie_fog, TAR_IGNORE, POS_STANDING, NULL, SLOT(73), 12, 12, "faerie fog", "!Faerie Fog!" }, { "fireball", 1, spell_fireball, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(26), 15, 12, "fireball", "!Fireball!" }, { "flamestrike", 2, spell_flamestrike, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(65), 20, 12, "flamestrike", "!Flamestrike!" }, { "fly", 1, spell_fly, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(56), 10, 18, "", "You slowly float to the ground." }, { "gate", 12, spell_gate, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT(83), 50, 12, "", "!Gate!" }, { "giant strength", 1, spell_giant_strength, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(39), 20, 12, "", "You feel weaker." }, { "harm", 1, spell_harm, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(27), 35, 12, "harm spell", "!Harm!" }, { "heal", 1, spell_heal, TAR_CHAR_DEFENSIVE, POS_FIGHTING, NULL, SLOT(28), 50, 12, "", "!Heal!" }, { "identify", 1, spell_identify, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(53), 12, 24, "", "!Identify!" }, { "infravision", 1, spell_infravision, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(77), 5, 18, "", "You no longer see in the dark." }, { "invis", 1, spell_invis, TAR_CHAR_DEFENSIVE, POS_STANDING, &gsn_invis, SLOT(29), 5, 12, "", "You are no longer invisible." }, { "know alignment", 2, spell_know_alignment, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(58), 9, 12, "", "!Know Alignment!" }, { "lightning bolt", 2, spell_lightning_bolt, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(30), 15, 12, "lightning bolt", "!Lightning Bolt!" }, { "locate object", 1, spell_locate_object, TAR_IGNORE, POS_STANDING, NULL, SLOT(31), 20, 18, "", "!Locate Object!" }, { "magic missile", 2, spell_magic_missile, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(32), 15, 4, "magic missile", "!Magic Missile!" }, { "mass invis", 1, spell_mass_invis, TAR_IGNORE, POS_STANDING, &gsn_mass_invis, SLOT(69), 20, 24, "", "!Mass Invis!" }, { "pass door", 1, spell_pass_door, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(74), 20, 12, "", "You feel solid again." }, { "poison", 1, spell_poison, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_poison, SLOT(33), 10, 12, "poison", "You feel less sick." }, { "protection", 1, spell_protection, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(34), 5, 12, "", "You feel less protected." }, { "refresh", 2, spell_refresh, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(81), 12, 18, "refresh", "!Refresh!" }, { "remove curse", 2, spell_remove_curse, TAR_IGNORE, POS_STANDING, NULL, SLOT(35), 5, 12, "", "!Remove Curse!" }, { "sanctuary", 1, spell_sanctuary, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(36), 75, 12, "", "The white aura around your body fades." }, { "shield", 1, spell_shield, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(67), 12, 18, "", "Your force shield shimmers then fades away." }, { "shocking grasp", 2, spell_shocking_grasp, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(37), 15, 12, "shocking grasp", "!Shocking Grasp!" }, { "sleep", 2, spell_sleep, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_sleep, SLOT(38), 15, 12, "", "You feel less tired." }, { "stone skin", 1, spell_stone_skin, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(66), 12, 18, "", "Your skin feels soft again." }, { "summon", 2, spell_summon, TAR_IGNORE, POS_STANDING, NULL, SLOT(40), 50, 12, "", "!Summon!" }, { "teleport", 2, spell_teleport, TAR_CHAR_SELF, POS_FIGHTING, NULL, SLOT( 2), 35, 12, "", "!Teleport!" }, { "ventriloquate", 2, spell_ventriloquate, TAR_IGNORE, POS_STANDING, NULL, SLOT(41), 5, 12, "", "!Ventriloquate!" }, { "weaken", 2, spell_weaken, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(68), 20, 12, "spell", "You feel stronger." }, { "word of recall", 9, spell_word_of_recall, TAR_CHAR_SELF, POS_RESTING, NULL, SLOT(42), 5, 12, "", "!Word of Recall!" }, /* * Dragon breath */ { "acid breath", 1, spell_acid_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(200), 50, 12, "blast of acid", "!Acid Breath!" }, { "fire breath", 1, spell_fire_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(201), 50, 12, "blast of flame", "A huge ball of fire engulfes you" }, { "frost breath", 1, spell_frost_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(202), 50, 12, "blast of frost", "!Frost Breath!" }, { "gas breath", 1, spell_gas_breath, TAR_IGNORE, POS_FIGHTING, NULL, SLOT(203), 50, 12, "blast of gas", "!Gas Breath!" }, { "lightning breath", 1, spell_lightning_breath, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(204), 50, 12, "blast of lightning", "!Lightning Breath!" }, /* * Fighter and thief skills. */ { "backstab", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_backstab, SLOT( 0), 0, 24, "backstab", "!Backstab!" }, { "garotte", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_garotte, SLOT( 0), 0, 24, "garotte", "!Garotte!" }, { "spiderform", 99, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_spiderform, SLOT(0), 0, 0, "spidery arm", "!Spiderform!" }, { "disarm", 1, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_disarm, SLOT( 0), 0, 24, "", "!Disarm!" }, { "hide", 1, spell_null, TAR_IGNORE, POS_RESTING, &gsn_hide, SLOT( 0), 0, 12, "", "!Hide!" }, { "hurl", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_hurl, SLOT( 0), 0, 24, "", "!Hurl!" }, { "spirit kiss", 99, spell_spiritkiss, TAR_IGNORE, POS_STANDING, NULL, SLOT( 520), 15, 12, "", "Your spirit blessing wears off." }, { "lunas blessing", 99, spell_lunasblessing, TAR_IGNORE, POS_STANDING, NULL, SLOT( 521), 15, 12, "", "You feel Luna's Blessing slip away." }, { "greater bless", 99, spell_greaterbless, TAR_IGNORE, POS_STANDING, NULL, SLOT( 522), 15, 12, "", "Your Greater Bless fades away." }, { "holy aura", 99, spell_holyaura, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT( 523), 15, 12, "", "Your Holy Aura fades away." }, { "kick", 1, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_kick, SLOT( 0), 0, 8, "kick", "!Kick!" }, { "circle", 99, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_circle, SLOT(0), 0, 24, "swift circle attack", "!Circle!" }, { "gham", 99, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_gham, SLOT(0), 0, 8, "godly hammer", "!GodHammer!" }, { "talon", 99, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_talon, SLOT( 0), 0, 8, "talon", "!Talon!" }, { "peek", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_peek, SLOT( 0), 0, 0, "", "!Peek!" }, { "pick lock", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_pick_lock, SLOT( 0), 0, 12, "", "!Pick!" }, { "rescue", 1, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_rescue, SLOT( 0), 0, 12, "", "!Rescue!" }, { "sneak", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_sneak, SLOT( 0), 0, 12, "", "Your footsteps are no longer so quiet." }, { "steal", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_steal, SLOT( 0), 0, 24, "", "!Steal!" }, /* * Spells for mega1.are from Glop/Erkenbrand. */ { "general purpose", 7, spell_general_purpose, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(501), 0, 12, "general purpose ammo", "!General Purpose Ammo!" }, /* Disabled for Shiroken { "high explosive", 7, spell_high_explosive, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(502), 0, 12, "high explosive ammo", "!High Explosive Ammo!" }, */ /* Ninja Shiroken */ { "shiroken", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_shiroken, SLOT( 0), 0, 24, "shiroken", "!Shiroken!" }, /* * Spells added by KaVir. */ { "guardian", 1, spell_guardian, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(600), 100, 12, "", "!Guardian!" }, { "soulblade", 1, spell_soulblade, TAR_IGNORE, POS_STANDING, NULL, SLOT(601), 100, 12, "", "!Soulblade!" }, { "mana", 1, spell_mana, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(602), 0, 12, "", "!Mana!" }, { "frenzy", 1, spell_frenzy, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(603), 20, 12, "", "Your bloodlust subsides." }, { "darkblessing", 1, spell_darkblessing, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(604), 20, 12, "", "You feel less wicked." }, { "portal", 1, spell_portal, TAR_IGNORE, POS_STANDING, NULL, SLOT(604), 50, 12, "", "!Portal!" }, { "energyflux", 2, spell_energyflux, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(605), 0, 12, "", "!EnergyFlux!" }, /* { "voodoo", 1, spell_voodoo, TAR_IGNORE, POS_STANDING, NULL, SLOT(606), 100, 12, "", "!Voodoo!" }, */ { "transport", 1, spell_transport, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(607), 12, 24, "", "!Transport!" }, { "regenerate", 1, spell_regenerate, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(608), 100, 12, "", "!Regenerate!" }, { "clot", 1, spell_clot, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(609), 50, 12, "", "!Clot!" }, { "mend", 1, spell_mend, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(610), 50, 12, "", "!Mend!" }, { "punch", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_punch, SLOT( 0), 0, 24, "punch", "!Punch!" }, { "elbow", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_elbow, SLOT( 0), 0, 24, "elbow", "!Elbow!" }, { "fangs", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_fangs, SLOT( 0), 0, 24, "fangs", "!Fangs!" }, { "buffet", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_buffet, SLOT( 0), 0, 24, "buffet", "!Buffet!" }, { "quills", 13, spell_null, TAR_IGNORE, POS_STANDING, &gsn_quills, SLOT( 0), 0, 24, "razor quills", "!quills!" }, { "shards", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_shards, SLOT( 0), 0, 24, "shards", "!Shards!" }, { "claws", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_claws, SLOT( 0), 0, 24, "claw", "!Claw!" }, { "waspt", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_waspt, SLOT( 0), 0, 24, "wasp talons", "!Wasptalons!" }, { "magma", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_spiket, SLOT( 0), 0, 24, "blast of magma", "!Magmablast!" }, { "spiket", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_spiket, SLOT( 0), 0, 24, "tail spike", "!Tailspike!" }, { "venomt", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_venomt, SLOT( 0), 0, 24, "venomous tongue", "!Venomt!" }, { "headbutt", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_headbutt, SLOT( 0), 0, 24, "headbutt", "!Headbutt!" }, { "tail", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_tail, SLOT( 0), 0, 24, "tail", "!Tail!" }, { "inferno", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_inferno, SLOT( 0), 0, 24, "blazing flames", "!INFERNO!" }, { "blinky", 9, spell_null, TAR_IGNORE, POS_STANDING, &gsn_blinky, SLOT( 0), 0, 24, "surprise attack", "!blinky!" }, { "joust", 99, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_joust, SLOT( 0), 0, 8, "joust", "!Joust!" }, { "sweep", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_sweep, SLOT( 0), 0, 24, "sweep", "!Sweep!" }, { "jumpkick", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_jumpkick, SLOT( 0), 0, 24, "jump kick", "!JUMPKICK!" }, { "spinkick", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_spinkick, SLOT( 0), 0, 24, "spin kick", "!SPINKICK!" }, { "monksweep", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_monksweep, SLOT( 0), 0, 24, "foot sweep", "!MONKSWEEEP!" }, { "thrust kick", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_thrustkick, SLOT( 0), 0, 24, "thrust kick", "!THRUST KICK!" }, { "backfist", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_backfist, SLOT( 0), 0, 24, "backfist", "backfist!" }, { "elbow", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_elbow, SLOT( 0), 0, 24, "elbow strike", "!Elbow!" }, { "shinkick", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_shinkick, SLOT( 0), 0, 24, "shin kick", "lala" }, { "palm strike", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_palmstrike, SLOT( 0), 0, 24, "palm strike", "lala" }, { "lightning kick", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_lightningkick, SLOT( 0), 0, 24, "lightning kick", "lala" }, { "tornado kick", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_tornadokick, SLOT( 0), 0, 24, "tornado kick", "poop" }, { "rfangs", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_rfangs, SLOT(0), 0, 24, "razor fangs", "!Rfangs!" }, { "knee", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_knee, SLOT( 0), 0, 24, "knee strike", "!Knee!" }, { "knee", 99, spell_null, TAR_IGNORE, POS_STANDING, &gsn_knee, SLOT( 0), 0, 24, "knee", "!Knee!" }, { "quest", 2, spell_quest, TAR_IGNORE, POS_STANDING, NULL, SLOT(611), 500, 12, "", "!Quest!" }, { "minor creation", 1, spell_minor_creation, TAR_IGNORE, POS_STANDING, NULL, SLOT(612), 500, 12, "", "!MinorCreation!" }, { "brew", 1, spell_brew, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(613), 100, 12, "", "!Brew!" }, { "scribe", 1, spell_scribe, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(614), 100, 12, "", "!Scribe!" }, { "carve", 1, spell_carve, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(615), 200, 12, "", "!Carve!" }, { "engrave", 1, spell_engrave, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(616), 300, 12, "", "!Engrave!" }, { "bake", 1, spell_bake, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(617), 100, 12, "", "!Bake!" }, { "mount", 2, spell_mount, TAR_CHAR_DEFENSIVE, POS_STANDING, NULL, SLOT(618), 100, 12, "", "!Mount!" }, { "berserk", 2, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_berserk, SLOT( 0), 0, 24, "", "!Berserk!" }, { "fastdraw", 1, spell_null, TAR_IGNORE, POS_FIGHTING, &gsn_fastdraw, SLOT( 0), 0, 0, "", "!Fastdraw!" }, { "scan", 1, spell_scan, TAR_IGNORE, POS_STANDING, NULL, SLOT(619), 6, 24, "", "!Scan!" }, { "repair", 2, spell_repair, TAR_IGNORE, POS_STANDING, NULL, SLOT(620), 100, 24, "", "!Repair!" }, { "spellproof", 2, spell_spellproof, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(621), 50, 12, "", "!Spellproof!" }, { "preserve", 2, spell_preserve, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(550), 12, 24, "", "!Preserve!" }, { "track", 1, spell_null, TAR_IGNORE, POS_STANDING, &gsn_track, SLOT( 0), 0, 0, "", "!Track!" }, { "major creation", 4, spell_major_creation, TAR_IGNORE, POS_STANDING, NULL, SLOT(551), 100, 12, "", "!MajorCreation!" }, { "copy", 4, spell_copy, TAR_IGNORE, POS_STANDING, NULL, SLOT(552), 100, 12, "", "!Copy!" }, { "insert page", 4, spell_insert_page, TAR_IGNORE, POS_STANDING, NULL, SLOT(553), 10, 12, "", "!InsertPage!" }, { "purple sorcery", 99, spell_null, TAR_IGNORE, POS_STANDING, NULL, SLOT(554), 100, 12, "", "The purple spell on you fades away." }, { "red sorcery", 99, spell_null, TAR_IGNORE, POS_STANDING, NULL, SLOT(555), 100, 12, "", "The red spell on you fades away." }, { "blue sorcery", 99, spell_null, TAR_IGNORE, POS_STANDING, NULL, SLOT(556), 100, 12, "", "The blue spell on you fades away." }, { "green sorcery", 99, spell_null, TAR_IGNORE, POS_STANDING, NULL, SLOT(557), 100, 12, "", "The green spell on you fades away." }, { "yellow sorcery", 99, spell_null, TAR_IGNORE, POS_STANDING, NULL, SLOT(558), 100, 12, "", "The yellow spell on you fades away." }, { "chaos blast", 99, spell_chaos_blast, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(559), 20, 12, "chaos blast", "!Chaos Blast!" }, { "resistance", 1, spell_resistance, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(560), 50, 12, "", "!Resistance!" }, { "web", 99, spell_web, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_web, SLOT(561), 100, 12, "", "The web surrounding you breaks away." }, { "drowfire", 99, spell_drowfire, TAR_CHAR_OFFENSIVE, POS_STANDING, &gsn_drowfire, SLOT(570), 100, 12, "", "The drowfire fades away." }, { "llothbless", 99, spell_llothbless, TAR_CHAR_SELF, POS_STANDING, &gsn_llothbless, SLOT(580), 100, 12, "", "The blessing fades away." }, { "polymorph", 4, spell_polymorph, TAR_IGNORE, POS_STANDING, &gsn_polymorph, SLOT(562), 50, 12, "", "You resume your normal form." }, { "birth control", 99, spell_contraception, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(563), 20, 12, "", "" }, { "remove page", 4, spell_remove_page, TAR_IGNORE, POS_STANDING, NULL, SLOT(564), 10, 12, "", "!RemovePage!" }, { "find familiar", 4, spell_find_familiar, TAR_IGNORE, POS_STANDING, NULL, SLOT(565), 100, 12, "", "" }, { "improve", 1, spell_improve, TAR_OBJ_INV, POS_STANDING, NULL, SLOT(566), 1500, 12, "", "!Improve!" }, { "darkness", 99, spell_darkness, TAR_CHAR_SELF, POS_STANDING, &gsn_darkness, SLOT( 91), 5, 12, NULL, "Your globe of darkness fades." }, { "paradox", 10, spell_null, TAR_CHAR_SELF, POS_STANDING, &gsn_paradox, SLOT( 90), 5, 12, NULL, "Your paradox fades." }, { "drow poison", 10, spell_null, TAR_CHAR_OFFENSIVE, POS_STANDING, NULL, SLOT(92), 10, 12, "poison", "You feel less sick." }, { "levitation", 10, spell_null, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(93), 10, 12, "poison", "!Levitation!" }, { "disquiet", 99, spell_null, TAR_CHAR_SELF, POS_STANDING, NULL, SLOT(623), 100, 12, "", "You feel stronger." }, { "meteor swarm", 4, spell_meteor_swarm, TAR_CHAR_OFFENSIVE, POS_FIGHTING, NULL, SLOT(624), 100, 12, "meteors", "!mete!" }, { "critical hit", 12, spell_null, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_critical, SLOT(0), 0, 0, "critical hit", "!critical hit!" }, { "godbless", 12, spell_null, TAR_CHAR_SELF, POS_STANDING, &gsn_godbless, SLOT(0), 0, 0, "", "The gods favor has left you." }, { "warmth", 1, spell_warmth, TAR_CHAR_SELF, POS_FIGHTING, NULL, SLOT(625), 15, 12, "", "!warmth!" }, { "totalblind", 99, spell_totalblind, TAR_CHAR_OFFENSIVE, POS_FIGHTING, &gsn_totalblind, SLOT( 606 ), 15, 12, "", "The darkness lifts." }, { "manashield", 99, spell_null, TAR_CHAR_SELF, POS_STANDING, &gsn_manashield, SLOT( 0 ) , 12, 12, "", "The blue glow surrounding your body leaves." } }; const struct room_aff_type room_aff_table [MAX_ROOM_AFF] = { /* Name, Off_msg, Msg to Room, Msg to Caster, dmg_msg, damage */ { "con_circle", "The circle drawn protecting this room has faded away.", "A circle drawn on the grown here protects this room from violence.", "%s is no longer being protected.", "", ROOM_SAFE }, { "reina", "The peaceful harmony in the air gradually fades away to nothing.", "The peaceful harmony of the room is overwelming.", "%s is no longer so peaceful.", "", ROOM_SAFE }, { "silence", "The overwelming silence breaks finally.", "", "The silence in %s has finally broken.", "", ROOM_SILENCE }, { "total_darkness", "The darkness in the room gradually fades away to nothing.", "No light is able to be shown in this room.", "Light finally breaks through in %s.", "", ROOM_TOTAL_DARKNESS }, { "neutral", "The neutral guard of the room dispurses.", "The neutral guard of the room is overwelming.", "%s las lost its neutral guard.", "", ROOM_SAFE } }; char * const percent_hit [] = { "slaughtered", "massacred", "bloodied", "beaten", "hurt", "slighted", "bruised", "scratched", "grazed", "fine", "fine" }; char * const percent_tired [] = { "exhausted", "beat", "tired", "weary", "haggard", "fatigued", "worked", "winded", "rested", "fresh", "fresh" }; /* * Damage Verb Table */ const struct damage_message dam_table [] = { { 0, "misses" }, { 20, "scratches" }, { 50, "annoys" }, { 80, "{ysmacks{n" }, { 120, "{ywhacks{n" }, { 150, "{ystings{n" }, { 200, "{ybruises{n" }, { 250, "{yinjures{n" }, { 300, "{rill-treats{n" }, { 360, "{rconcusses{n" }, { 420, "{rhurts{n" }, { 480, "{rwounds{n" }, { 550, "{rtorments{n" }, { 630, "{yDECIMATES{n" }, { 720, "{yDEVASTATES{n" }, { 810, "{rDISFIGURES{n" }, { 900, "{rDISEMBOWELS{n" }, { 1000, "{r-{yWASTES{r-{n" }, { 1120, "{r--{yWASTES{r--{n" }, { 1250, "{r---{yWASTES{r---{n" }, { 1410, "{r){yMAULS{r({n" }, { 1560, "{r)){yMAULS{r(({n" }, { 1740, "{r))){yMAULS{r((({n" }, { 2000, "{y*{rMAIMS{y*{n" }, { 2270, "{y**{rMAIMS{y**{n" }, { 2700, "{y***{rMAIMS{y***{n" }, { 3000, "{y*{r){RBRUTALISES{r({y*{n" }, { 3300, "{y*{r){y*{r){RBRUTALISES{r({y*{r({y*{n" }, { 3690, "{y*{r){y*{r){y*{r){RBRUTALISES{r({y*{r({y*{r({y*{n" }, { 4200, "{r=] {MRAVAGES{r [={n" }, { 4740, "{r=]=] {MRAVAGES{r [=[={n" }, { 5440, "{r=]=]=] {MRAVAGES{r [=[=[={n" }, { 6500, "{r<| {YCRIPPLES{r |>{n" }, { 7800, "{r<<| {YCRIPPLES{r |>>{n" }, { 8800, "{r<<<| {YCRIPPLES{r |>>>{n" }, { 10000, "{m-=>{RMANGLES{n{m<=-{n" }, { 12000, "{m--==>{RMANGLES{n{m<==--{n" }, { 16600, "{m---===>{RMANGLES{n{m<==---{n" }, { 20000, "{b-{c+{b>{cMASHES{n{b<{c+{b-{n" }, { 25000, "{b-{c+{b>{c+{b>{cMASHES{n{b<{c+{b<{c+{b-{n" }, { 35000, "{b-{c+{b>{c+{b>{c+{b>{cMASHES{n{b<{c+{b<{c+{b<{c+{b-{n" }, { 50000, "{m. {Mvaporizes{m .{n" }, { 72000, "{m.. {Mvaporizes{m ..{n" }, { 99999, "{m... {Mvaporizes{m ...{n" }, { -1, "guts" } }; const int stat_train [ 8 ] = { 20, 40, 60, 80, 100, 100, 100, 100 }; const struct base_dam_cap damcap_type [ MAX_BASE_DAMCAP ] = { /* exp, cps, qps */ { 17000000, 15000, 0 }, { 18000000, 17500, 100 }, { 19000000, 110000, 150 }, { 20000000, 112500, 200 }, { 25000000, 115000, 300 }, /* 5 */ { 30000000, 120000, 500 }, { 35000000, 125000, 550 }, { 40000000, 127500, 600 }, { 45000000, 130000, 750 }, { 50000000, 132500, 800 }, /* 10 */ { 55000000, 135000, 850 }, { 60000000, 140000, 900 }, { 65000000, 145000, 950 }, { 70000000, 150000, 1000 }, { 75000000, 155000, 1050 }, /* 15 */ { 80000000, 160000, 1500 }, { 85000000, 165000, 1550 }, { 90000000, 170000, 1600 }, { 95000000, 175000, 1650 }, { 100000000, 180000, 1700 }, /* 20 */ { 200000000, 190000, 2000 }, { 300000000, 1100000, 2100 }, { 400000000, 1110000, 2200 }, { 500000000, 1120000, 2300 }, { 600000000, 1130000, 2400 }, /* 25 */ { 700000000, 1140000, 2500 }, { 800000000, 1150000, 2600 }, { 900000000, 1160000, 2700 }, { 1000000000, 1170000, 2800 }, { 1100000000, 1200000, 3000 }, /* 30 */ { 1200000000, 1210000, 3100 }, { 1300000000, 1220000, 3200 }, { 1400000000, 1230000, 3300 }, { 1500000000, 1240000, 3400 }, { 1600000000, 1250000, 3500 }, /* 35 */ { 1700000000, 1210000, 3600 }, { 1800000000, 1220000, 3700 }, { 1900000000, 1230000, 3800 }, { 2000000000, 1240000, 3900 }, { 2100000000, 1250000, 4000 } /* 40 */ }; const int maxQuestItem = 271; const sh_int quest_selection[ 271 ] = { 102, 9201, 9225, 605, 1329, 2276, 5112, 6513, 6517, 6519, 5001, 5005, 5011, 5012, 5013, 2902, 1352, 2348, 2361,31008, 5011, 5012, 5013, 2902, 1352, 2348, 2361,31008, 300, 303, 307, 7216, 1100, 100,30315, 5110, 6001, 3050, 301, 5230,30302, 663, 7303, 2915, 2275, 8600, 8601, 8602, 8603, 5030, 9321, 6010, 1304, 1307, 1332, 1333, 1342, 1356, 1361, 2304, 2322, 2331, 2382, 27706, 8005, 5300, 5302, 5309, 5310, 5311, 4000, 601, 664, 900, 906, 923, 311, 7203, 7206, 1101, 5214, 5223, 5228, 2804, 1612, 5207, 9302, 5301, 5224, 7801, 9313, 6304, 2003, 3425, 3423, 608, 1109,30319, 8903, 9317, 9307, 4050, 911, 2204, 4100, 3428, 310, 5113, 3402, 5319, 6512, 5114, 913,30316, 2106, 8007, 6601, 2333, 3610, 2015, 5022, 1394, 2202, 1401, 6005, 1614, 647, 1388, 9311, 3604, 4701, 30325, 6106, 2003, 7190, 9322, 1384, 3412, 2342, 1374, 2210, 2332, 2901, 7200, 7824, 3410, 2013, 1510, 8306, 3414, 2005, 11007,11008,11012,11015,11101,11104,11107,11111,11114,11117, 11120,11121,11122,11123,11124,11125, 3000, 3001, 3002, 3003, 3004, 3032, 3033, 1345, 2905, 2911, 3002, 3005, 3425, 3611, 4706, 5003, 5228, 6000, 6509, 6600, 6646, 7223, 7310, 7704, 7714, 8119, 9105, 9211, 9213, 9218, 9228, 9231, 9302, 9306, 31106,31108,31109,31116,31118,31119,31126,31128,31129,31136, 31138,31139,31140,11106,11108,11109,11116,11118,11119,11126, 11128,11129,11136,11138,11139,11140,11144, 7700, 7703, 7712, 7718, 8000, 5237, 5239, 5251, 5310, 5312, 5235, 6007, 6308, 6502, 6511, 6512, 2271, 2299, 2300, 2301, 2302, 2306, 2307, 2310, 2311, 2317, 2318, 2319, 2324, 2340, 2345, 2357, 2358, 1311, 666, 1307, 2456, 1313, 304, 6811, 19208, 7718, 9108 };