From 673bdae75485d14f759af597c3c62b99601f9a43 Mon Sep 17 00:00:00 2001 From: peterb12 Date: Thu, 21 Jul 2005 02:34:44 +0000 Subject: Initial revision git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3 c06c8d41-db1a-0410-9941-cceddc491573 --- trunk/source/skills2.cc | 2365 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2365 insertions(+) create mode 100644 trunk/source/skills2.cc (limited to 'trunk/source/skills2.cc') diff --git a/trunk/source/skills2.cc b/trunk/source/skills2.cc new file mode 100644 index 0000000000..6eb53d6d53 --- /dev/null +++ b/trunk/source/skills2.cc @@ -0,0 +1,2365 @@ +/* + * File: skills2.cc + * Summary: More skill related functions. + * Written by: Linley Henzell + * + * Change History (most recent first): + * + * 01aug2000 jmf RESTORED TITLES TO THEIR FORMER GLORY! MUA-HA! + * <4> 22Jul2000 GDL added warning for low throwing skill + * Changed a few titles. + * <3> 5/20/99 BWR Changed Trapper titles, avoided + * overflow on the weapon skill + * column. + * <2> -/--/-- WL Extensive mods from Wladimir van der Laan. + * <1> -/--/-- LRH Created + */ + +#include "AppHdr.h" +#include "skills2.h" + +#include +#include +#include + +#ifdef DOS +#include +#endif + +#include "externs.h" +#include "fight.h" +#include "player.h" +#include "randart.h" +#include "religion.h" +#include "stuff.h" +#include "wpn-misc.h" +#include "view.h" + +/* jmf: some references for words I used below: + Peltast http://www.geocities.com/Athens/Aegean/9659/shields_main.htm + Phalangite http://www.users.cts.com/funtv/j/jjartist/EpiroteScenario1.htm + Yeoman: http://snt.student.utwente.nl/campus/sagi/artikel/longbow/longbow.html +*/ + +// Note: Even though %s could be used with most of these, remember that +// the character's race will be listed on the next line. Its only really +// intended for cases where things might be really awkward without it. -- bwr + +const char *skills[50][6] = { + {"Fighting", "Skirmisher", "Grunt", "Veteran", "Warrior", "Slayer"}, // 0 + {"Short Blades", "Stabber", "Cutter", "Knifefighter", "Eviscerator", "Blademaster"}, + {"Long Blades", "Slasher", "Slicer", "Fencer", "Swordfighter", "Swordmaster"}, + {NULL}, // 3- was: great swords {dlb} + {"Axes", "Chopper", "Cleaver", "Hacker", "Severer", "Axe Maniac"}, + {"Maces & Flails", "Basher", "Cudgeler", "Shatterer", "Bludgeoner", "Skullcrusher"}, // 5 + {"Polearms", "Spear-Bearer", "Pike-%s", "Phalangite", "Lancer", "Halberdier"}, + {"Staves", "Twirler", "Cruncher", "Smasher", "Stickfighter", "Skullbreaker"}, + + {"Slings", "Vandal", "Slinger", "Whirler", "Crazy %s", "Very Crazy %s"}, + {"Bows", "Shooter", "Yeoman", "Archer", "Merry %s", "Merry %s"}, + {"Crossbows", "Shooter", "Sharpshooter", "Archer", "%s Ballista", "%s Ballista"}, // 10 + {"Darts", "Dart Thrower", "Hurler", "Hurler, First Class", "%s Darts Champion", "Universal Darts Champion"}, + {"Throwing", "Chucker", "Thrower", "Deadly Accurate", "Hawkeye", "Sniper"}, + + {"Armour", "Covered", "Protected", "Tortoise", "Impregnable", "Invulnerable"}, + {"Dodging", "Ducker", "Dodger", "Nimble", "Spry", "Acrobat"}, + {"Stealth", "Footpad", "Sneak", "Covert", "Unseen", "Imperceptible"}, + {"Stabbing", "Miscreant", "Blackguard", "Backstabber", "Cutthroat", "Politician"}, + {"Shields", "Shield-Bearer", "Blocker", "%s Barricade", "Peltast", "Hoplite"}, + {"Traps & Doors", "Disarmer", "Trapper", "Architect", "Engineer", "Dungeon Master"}, + + // STR based fighters, for DEX/martial arts titles see below + {"Unarmed Combat", "Ruffian", "Grappler", "Brawler", "Wrestler", "Boxer" }, + + {NULL}, // 20- empty + {NULL}, // 21- empty + {NULL}, // 22- empty + {NULL}, // 23- empty + {NULL}, // 24- empty + + {"Spellcasting", "Magician", "Thaumaturge", "Eclecticist", "Sorcerer", "Archmage"}, // 25 + {"Conjurations", "Ruinous", "Conjurer", "Destroyer", "Devastator", "Annihilator"}, + {"Enchantments", "Charm-Maker", "Infuser", "Bewitcher", "Enchanter", "Spellbinder"}, + {"Summonings", "Caller", "Summoner", "Convoker", "Demonologist", "Hellbinder"}, + {"Necromancy", "Grave Robber", "Reanimator", "Necromancer", "Thanatomancer", "%s of Death"}, + {"Translocations", "Jumper", "Blinker", "Shifter", "Portalist", "Plane Walker"}, // 30 + {"Transmigration", "Changer", "Transmogrifier", "Transformer", "Alchemist", "Transmuter"}, + {"Divinations", "Seer", "Soothsayer", "Diviner", "Augur", "Oracle"}, + + {"Fire Magic", "Firebug", "Arsonist", "Scorcher", "Pyromancer", "Infernalist"}, + {"Ice Magic", "Chiller", "Frost Mage", "Ice Mage", "Cryomancer", "Englaciator"}, + {"Air Magic", "Wind Mage", "Cloud Mage", "Air Mage", "Sky Mage", "Storm Mage"}, // 35 + {"Earth Magic", "Digger", "Geomancer", "Earth Mage", "Metallomancer", "Petrodigitator"}, + {"Poison Magic", "Stinger", "Tainter", "Polluter", "Poisoner", "Envenomancer"}, + + {"Invocations", "Believer", "Servant", "Worldly Agent", "Theurge", "Avatar"}, // 38 + {"Evocations", "Charlatan", "Prestidigitator", "Fetichist", "Evocator", "Talismancer"}, // 39 + +/*NOTE: If more skills are added, must change ranges in level_change() in player.cc */ +/*{"", "", "", "", ""}, */ + + {NULL}, // 40- empty + {NULL}, // 41- empty + {NULL}, // 42- empty + {NULL}, // 43- empty + {NULL}, // 44- empty + {NULL}, // 45- empty + {NULL}, // 46- empty + {NULL}, // 47- empty + {NULL}, // 48- empty + {NULL} // 49- empty {end of array} +}; + +const char *martial_arts_titles[6] = + {"Unarmed Combat", "Martial Artist", "Black Belt", "Sensei", "Master", "Grand Master"}; + + +/* Note that this (humans have 100 for all skills) is assumed in the + level_change function in player.cc, if CLASSES is def'd + + 3.10: but it never is, and CLASSES is probably broken now. Anyway, + the Spellcasting skill (25) is actually about 130% of what is shown here. + */ +const int spec_skills[ NUM_SPECIES ][40] = { + { // SP_HUMAN (1) + 100, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 100, // SK_SLINGS + 100, // SK_BOWS + 100, // SK_CROSSBOWS + 100, // SK_DARTS + 100, // SK_THROWING + 100, // SK_ARMOUR + 100, // SK_DODGING + 100, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 100, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_ELF (2) + 120, // SK_FIGHTING + 80, // SK_SHORT_BLADES + 80, // SK_LONG_SWORDS + 110, // SK_UNUSED_1 + 120, // SK_AXES + 130, // SK_MACES_FLAILS + 130, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 60, // SK_BOWS + 100, // SK_CROSSBOWS + 90, // SK_DARTS + 80, // SK_THROWING + 120, // SK_ARMOUR + 80, // SK_DODGING + 80, // SK_STEALTH + 100, // SK_STABBING + 120, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 110, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 80, // SK_SPELLCASTING + 105, // SK_CONJURATIONS + 70, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 120, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 70, // SK_AIR_MAGIC + 130, // SK_EARTH_MAGIC + 110, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 80, // SK_EVOCATIONS + }, + + { // SP_HIGH_ELF (3) + 100, // SK_FIGHTING + 70, // SK_SHORT_BLADES + 70, // SK_LONG_SWORDS + 115, // SK_UNUSED_1 + 130, // SK_AXES + 150, // SK_MACES_FLAILS + 150, // SK_POLEARMS + 100, // SK_STAVES + 140, // SK_SLINGS + 60, // SK_BOWS + 100, // SK_CROSSBOWS + 90, // SK_DARTS + 80, // SK_THROWING + 110, // SK_ARMOUR + 90, // SK_DODGING + 90, // SK_STEALTH + 110, // SK_STABBING + 110, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 130, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 70, // SK_SPELLCASTING + 90, // SK_CONJURATIONS + 70, // SK_ENCHANTMENTS + 110, // SK_SUMMONINGS + 130, // SK_NECROMANCY + 90, // SK_TRANSLOCATIONS + 90, // SK_TRANSMIGRATION + 110, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 70, // SK_AIR_MAGIC + 130, // SK_EARTH_MAGIC + 130, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_GREY_ELF (4) + 140, // SK_FIGHTING + 90, // SK_SHORT_BLADES + 95, // SK_LONG_SWORDS + 120, // SK_UNUSED_1 + 140, // SK_AXES + 160, // SK_MACES_FLAILS + 160, // SK_POLEARMS + 100, // SK_STAVES + 130, // SK_SLINGS + 70, // SK_BOWS + 100, // SK_CROSSBOWS + 90, // SK_DARTS + 80, // SK_THROWING + 140, // SK_ARMOUR + 75, // SK_DODGING + 70, // SK_STEALTH + 100, // SK_STABBING + 140, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 130, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 60, // SK_SPELLCASTING + 90, // SK_CONJURATIONS + 50, // SK_ENCHANTMENTS + 90, // SK_SUMMONINGS + 130, // SK_NECROMANCY + 80, // SK_TRANSLOCATIONS + 80, // SK_TRANSMIGRATION + 80, // SK_DIVINATIONS + 90, // SK_FIRE_MAGIC + 90, // SK_ICE_MAGIC + 60, // SK_AIR_MAGIC + 150, // SK_EARTH_MAGIC + 110, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 90, // SK_EVOCATIONS + }, + + { // SP_DEEP_ELF (5) + 150, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 105, // SK_LONG_SWORDS + 120, // SK_UNUSED_1 + 150, // SK_AXES + 165, // SK_MACES_FLAILS + 165, // SK_POLEARMS + 100, // SK_STAVES + 135, // SK_SLINGS + 74, // SK_BOWS + 75, // SK_CROSSBOWS + 75, // SK_DARTS + 80, // SK_THROWING + 140, // SK_ARMOUR + 70, // SK_DODGING + 65, // SK_STEALTH + 80, // SK_STABBING + 140, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 130, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 55, // SK_SPELLCASTING + 80, // SK_CONJURATIONS + 50, // SK_ENCHANTMENTS + 80, // SK_SUMMONINGS + 70, // SK_NECROMANCY + 75, // SK_TRANSLOCATIONS + 75, // SK_TRANSMIGRATION + 75, // SK_DIVINATIONS + 90, // SK_FIRE_MAGIC + 90, // SK_ICE_MAGIC + 80, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 80, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 90, // SK_EVOCATIONS + }, + + { // SP_SLUDGE_ELF (6) + 80, // SK_FIGHTING + 110, // SK_SHORT_BLADES + 110, // SK_LONG_SWORDS + 110, // SK_UNUSED_1 + 130, // SK_AXES + 140, // SK_MACES_FLAILS + 140, // SK_POLEARMS + 100, // SK_STAVES + 100, // SK_SLINGS + 100, // SK_BOWS + 100, // SK_CROSSBOWS + 100, // SK_DARTS + 70, // SK_THROWING + 140, // SK_ARMOUR + 70, // SK_DODGING + 75, // SK_STEALTH + 100, // SK_STABBING + 130, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 80, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 70, // SK_SPELLCASTING + 130, // SK_CONJURATIONS + 130, // SK_ENCHANTMENTS + 90, // SK_SUMMONINGS + 90, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 60, // SK_TRANSMIGRATION + 130, // SK_DIVINATIONS + 80, // SK_FIRE_MAGIC + 80, // SK_ICE_MAGIC + 80, // SK_AIR_MAGIC + 80, // SK_EARTH_MAGIC + 80, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 110, // SK_EVOCATIONS + }, + + { // SP_HILL_DWARF (7) + 70, // SK_FIGHTING + 80, // SK_SHORT_BLADES + 80, // SK_LONG_SWORDS + 90, // SK_UNUSED_1 + 60, // SK_AXES + 70, // SK_MACES_FLAILS + 110, // SK_POLEARMS + 130, // SK_STAVES + 130, // SK_SLINGS + 150, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 70, // SK_ARMOUR + 120, // SK_DODGING + 150, // SK_STEALTH + 140, // SK_STABBING + 70, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 160, // SK_SPELLCASTING + 120, // SK_CONJURATIONS + 150, // SK_ENCHANTMENTS + 150, // SK_SUMMONINGS + 160, // SK_NECROMANCY + 150, // SK_TRANSLOCATIONS + 120, // SK_TRANSMIGRATION + 130, // SK_DIVINATIONS + 80, // SK_FIRE_MAGIC + 120, // SK_ICE_MAGIC + 150, // SK_AIR_MAGIC + 70, // SK_EARTH_MAGIC + 130, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 60, // SK_EVOCATIONS + }, + + { // SP_MOUNTAIN_DWARF (8) + 70, // SK_FIGHTING + 90, // SK_SHORT_BLADES + 90, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 70, // SK_AXES + 70, // SK_MACES_FLAILS + 110, // SK_POLEARMS + 120, // SK_STAVES + 125, // SK_SLINGS + 140, // SK_BOWS + 100, // SK_CROSSBOWS + 120, // SK_DARTS + 115, // SK_THROWING + 60, // SK_ARMOUR + 110, // SK_DODGING + 140, // SK_STEALTH + 130, // SK_STABBING + 70, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 140, // SK_SPELLCASTING + 115, // SK_CONJURATIONS + 135, // SK_ENCHANTMENTS + 150, // SK_SUMMONINGS + 160, // SK_NECROMANCY + 150, // SK_TRANSLOCATIONS + 120, // SK_TRANSMIGRATION + 130, // SK_DIVINATIONS + 70, // SK_FIRE_MAGIC + 130, // SK_ICE_MAGIC + 150, // SK_AIR_MAGIC + 70, // SK_EARTH_MAGIC + 130, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 70, // SK_EVOCATIONS + }, + + { // SP_HALFLING (9) + 120, // SK_FIGHTING + 60, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 130, // SK_UNUSED_1 + 120, // SK_AXES + 150, // SK_MACES_FLAILS + 160, // SK_POLEARMS + 130, // SK_STAVES + 50, // SK_SLINGS + 70, // SK_BOWS + 90, // SK_CROSSBOWS + 50, // SK_DARTS + 60, // SK_THROWING + 150, // SK_ARMOUR + 70, // SK_DODGING + 60, // SK_STEALTH + 70, // SK_STABBING + 130, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 140, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 130, // SK_SPELLCASTING + 130, // SK_CONJURATIONS + 100, // SK_ENCHANTMENTS + 120, // SK_SUMMONINGS + 150, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 150, // SK_TRANSMIGRATION + 140, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 90, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 120, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 90, // SK_EVOCATIONS + }, + + { // SP_HILL_ORC (10) + 70, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 80, // SK_LONG_SWORDS + 70, // SK_UNUSED_1 + 70, // SK_AXES + 80, // SK_MACES_FLAILS + 80, // SK_POLEARMS + 110, // SK_STAVES + 130, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 130, // SK_DARTS + 130, // SK_THROWING + 90, // SK_ARMOUR + 140, // SK_DODGING + 150, // SK_STEALTH + 100, // SK_STABBING + 80, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 90, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 150, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 120, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 150, // SK_TRANSLOCATIONS + 160, // SK_TRANSMIGRATION + 160, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 150, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 110, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_KOBOLD (11) + 80, // SK_FIGHTING + 60, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 120, // SK_UNUSED_1 + 110, // SK_AXES + 140, // SK_MACES_FLAILS + 150, // SK_POLEARMS + 110, // SK_STAVES + 70, // SK_SLINGS + 80, // SK_BOWS + 90, // SK_CROSSBOWS + 50, // SK_DARTS + 60, // SK_THROWING + 140, // SK_ARMOUR + 70, // SK_DODGING + 60, // SK_STEALTH + 70, // SK_STABBING + 130, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 110, // SK_SPELLCASTING + 110, // SK_CONJURATIONS + 110, // SK_ENCHANTMENTS + 105, // SK_SUMMONINGS + 105, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 110, // SK_TRANSMIGRATION + 130, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 80, // SK_EVOCATIONS + }, + + { // SP_MUMMY (12) + 100, // SK_FIGHTING + 140, // SK_SHORT_BLADES + 140, // SK_LONG_SWORDS + 140, // SK_UNUSED_1 + 140, // SK_AXES + 140, // SK_MACES_FLAILS + 140, // SK_POLEARMS + 140, // SK_STAVES + 140, // SK_SLINGS + 140, // SK_BOWS + 140, // SK_CROSSBOWS + 140, // SK_DARTS + 140, // SK_THROWING + 140, // SK_ARMOUR + 140, // SK_DODGING + 140, // SK_STEALTH + 140, // SK_STABBING + 140, // SK_SHIELDS + 140, // SK_TRAPS_DOORS + 140, // SK_UNARMED_COMBAT + 140, // undefined + 140, // undefined + 140, // undefined + 140, // undefined + 140, // undefined + 100, // SK_SPELLCASTING + 140, // SK_CONJURATIONS + 140, // SK_ENCHANTMENTS + 140, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 140, // SK_TRANSLOCATIONS + 140, // SK_TRANSMIGRATION + 140, // SK_DIVINATIONS + 140, // SK_FIRE_MAGIC + 140, // SK_ICE_MAGIC + 140, // SK_AIR_MAGIC + 140, // SK_EARTH_MAGIC + 140, // SK_POISON_MAGIC + 140, // SK_INVOCATIONS + 140, // SK_EVOCATIONS + }, + + { // SP_NAGA (13) + 100, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 120, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 150, // SK_ARMOUR + 150, // SK_DODGING + 40, // SK_STEALTH + 100, // SK_STABBING + 140, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 100, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 60, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_GNOME (14) + 100, // SK_FIGHTING + 75, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 130, // SK_UNUSED_1 + 100, // SK_AXES + 130, // SK_MACES_FLAILS + 140, // SK_POLEARMS + 130, // SK_STAVES + 80, // SK_SLINGS + 100, // SK_BOWS + 90, // SK_CROSSBOWS + 60, // SK_DARTS + 100, // SK_THROWING + 150, // SK_ARMOUR + 70, // SK_DODGING + 70, // SK_STEALTH + 80, // SK_STABBING + 120, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 110, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 120, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 100, // SK_ENCHANTMENTS + 110, // SK_SUMMONINGS + 130, // SK_NECROMANCY + 130, // SK_TRANSLOCATIONS + 120, // SK_TRANSMIGRATION + 120, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 170, // SK_AIR_MAGIC + 60, // SK_EARTH_MAGIC + 130, // SK_POISON_MAGIC + 120, // SK_INVOCATIONS + 60, // SK_EVOCATIONS + }, + + { // SP_OGRE (15) + 100, // SK_FIGHTING + 140, // SK_SHORT_BLADES + 120, // SK_LONG_SWORDS + 110, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 110, // SK_POLEARMS + 120, // SK_STAVES + 150, // SK_SLINGS + 150, // SK_BOWS + 180, // SK_CROSSBOWS + 150, // SK_DARTS + 100, // SK_THROWING + 140, // SK_ARMOUR + 150, // SK_DODGING + 200, // SK_STEALTH + 150, // SK_STABBING + 110, // SK_SHIELDS + 200, // SK_TRAPS_DOORS + 130, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 220, // SK_SPELLCASTING + 180, // SK_CONJURATIONS + 220, // SK_ENCHANTMENTS + 200, // SK_SUMMONINGS + 150, // SK_NECROMANCY + 200, // SK_TRANSLOCATIONS + 200, // SK_TRANSMIGRATION + 200, // SK_DIVINATIONS + 150, // SK_FIRE_MAGIC + 150, // SK_ICE_MAGIC + 200, // SK_AIR_MAGIC + 120, // SK_EARTH_MAGIC + 150, // SK_POISON_MAGIC + 130, // SK_INVOCATIONS + 170, // SK_EVOCATIONS + }, + + { // SP_TROLL (16) + 140, // SK_FIGHTING + 150, // SK_SHORT_BLADES + 150, // SK_LONG_SWORDS + 150, // SK_UNUSED_1 + 150, // SK_AXES + 130, // SK_MACES_FLAILS + 150, // SK_POLEARMS + 150, // SK_STAVES + 180, // SK_SLINGS + 180, // SK_BOWS + 180, // SK_CROSSBOWS + 180, // SK_DARTS + 130, // SK_THROWING + 150, // SK_ARMOUR + 130, // SK_DODGING + 250, // SK_STEALTH + 150, // SK_STABBING + 150, // SK_SHIELDS + 200, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 200, // SK_SPELLCASTING + 160, // SK_CONJURATIONS + 200, // SK_ENCHANTMENTS + 160, // SK_SUMMONINGS + 150, // SK_NECROMANCY + 160, // SK_TRANSLOCATIONS + 160, // SK_TRANSMIGRATION + 200, // SK_DIVINATIONS + 160, // SK_FIRE_MAGIC + 160, // SK_ICE_MAGIC + 200, // SK_AIR_MAGIC + 120, // SK_EARTH_MAGIC + 160, // SK_POISON_MAGIC + 150, // SK_INVOCATIONS + 180, // SK_EVOCATIONS + }, + + { // SP_OGRE_MAGE (17) + 100, // SK_FIGHTING + 110, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 150, // SK_SLINGS + 150, // SK_BOWS + 150, // SK_CROSSBOWS + 150, // SK_DARTS + 150, // SK_THROWING + 170, // SK_ARMOUR + 130, // SK_DODGING + 100, // SK_STEALTH + 130, // SK_STABBING + 150, // SK_SHIELDS + 150, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 70, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 80, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_RED_DRACONIAN (18) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 70, // SK_FIRE_MAGIC + 150, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_WHITE_DRACONIAN (19) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 150, // SK_FIRE_MAGIC + 70, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_GREEN_DRACONIAN (20) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 70, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_YELLOW_DRACONIAN (21) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_GREY_DRACONIAN (22) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_BLACK_DRACONIAN (23) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 70, // SK_AIR_MAGIC + 150, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_PURPLE_DRACONIAN (24) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 70, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 90, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 90, // SK_EVOCATIONS + }, + + { // SP_MOTTLED_DRACONIAN (25) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 80, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_PALE_DRACONIAN (26) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 90, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 90, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 90, // SK_EVOCATIONS + }, + + { // SP_UNK0_DRACONAIN (27) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_UNK1_DRACONIAN (28) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_UNK2_DRACONIAN (29) + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_CENTAUR (30) + 100, // SK_FIGHTING + 120, // SK_SHORT_BLADES + 110, // SK_LONG_SWORDS + 110, // SK_UNUSED_1 + 110, // SK_AXES + 110, // SK_MACES_FLAILS + 110, // SK_POLEARMS + 110, // SK_STAVES + 75, // SK_SLINGS + 60, // SK_BOWS + 85, // SK_CROSSBOWS + 80, // SK_DARTS + 60, // SK_THROWING + 180, // SK_ARMOUR + 170, // SK_DODGING + 200, // SK_STEALTH + 170, // SK_STABBING + 180, // SK_SHIELDS + 150, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 140, // SK_SPELLCASTING + 120, // SK_CONJURATIONS + 110, // SK_ENCHANTMENTS + 120, // SK_SUMMONINGS + 120, // SK_NECROMANCY + 120, // SK_TRANSLOCATIONS + 120, // SK_TRANSMIGRATION + 130, // SK_DIVINATIONS + 120, // SK_FIRE_MAGIC + 120, // SK_ICE_MAGIC + 120, // SK_AIR_MAGIC + 120, // SK_EARTH_MAGIC + 130, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 130, // SK_EVOCATIONS + }, + + { // SP_DEMIGOD (31) + 110, // SK_FIGHTING + 110, // SK_SHORT_BLADES + 110, // SK_LONG_SWORDS + 110, // SK_UNUSED_1 + 110, // SK_AXES + 110, // SK_MACES_FLAILS + 110, // SK_POLEARMS + 110, // SK_STAVES + 110, // SK_SLINGS + 110, // SK_BOWS + 110, // SK_CROSSBOWS + 110, // SK_DARTS + 110, // SK_THROWING + 110, // SK_ARMOUR + 110, // SK_DODGING + 110, // SK_STEALTH + 110, // SK_STABBING + 110, // SK_SHIELDS + 110, // SK_TRAPS_DOORS + 110, // SK_UNARMED_COMBAT + 110, // undefined + 110, // undefined + 110, // undefined + 110, // undefined + 110, // undefined + 110, // SK_SPELLCASTING + 110, // SK_CONJURATIONS + 110, // SK_ENCHANTMENTS + 110, // SK_SUMMONINGS + 110, // SK_NECROMANCY + 110, // SK_TRANSLOCATIONS + 110, // SK_TRANSMIGRATION + 110, // SK_DIVINATIONS + 110, // SK_FIRE_MAGIC + 110, // SK_ICE_MAGIC + 110, // SK_AIR_MAGIC + 110, // SK_EARTH_MAGIC + 110, // SK_POISON_MAGIC + 110, // SK_INVOCATIONS + 110, // SK_EVOCATIONS + }, + + { // SP_SPRIGGAN (32) + 150, // SK_FIGHTING + 90, // SK_SHORT_BLADES + 140, // SK_LONG_SWORDS + 160, // SK_UNUSED_1 + 150, // SK_AXES + 160, // SK_MACES_FLAILS + 180, // SK_POLEARMS + 150, // SK_STAVES + 70, // SK_SLINGS + 70, // SK_BOWS + 100, // SK_CROSSBOWS + 70, // SK_DARTS + 90, // SK_THROWING + 170, // SK_ARMOUR + 50, // SK_DODGING + 50, // SK_STEALTH + 50, // SK_STABBING + 180, // SK_SHIELDS + 60, // SK_TRAPS_DOORS + 130, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 60, // SK_SPELLCASTING + 160, // SK_CONJURATIONS + 50, // SK_ENCHANTMENTS + 150, // SK_SUMMONINGS + 120, // SK_NECROMANCY + 50, // SK_TRANSLOCATIONS + 60, // SK_TRANSMIGRATION + 70, // SK_DIVINATIONS + 140, // SK_FIRE_MAGIC + 140, // SK_ICE_MAGIC + 120, // SK_AIR_MAGIC + 120, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 130, // SK_INVOCATIONS + 70, // SK_EVOCATIONS + }, + + { // SP_MINOTAUR (33) + 70, // SK_FIGHTING + 70, // SK_SHORT_BLADES + 70, // SK_LONG_SWORDS + 70, // SK_UNUSED_1 + 70, // SK_AXES + 70, // SK_MACES_FLAILS + 70, // SK_POLEARMS + 70, // SK_STAVES + 90, // SK_SLINGS + 90, // SK_BOWS + 90, // SK_CROSSBOWS + 90, // SK_DARTS + 90, // SK_THROWING + 80, // SK_ARMOUR + 80, // SK_DODGING + 130, // SK_STEALTH + 100, // SK_STABBING + 80, // SK_SHIELDS + 120, // SK_TRAPS_DOORS + 80, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 180, // SK_SPELLCASTING + 170, // SK_CONJURATIONS + 170, // SK_ENCHANTMENTS + 170, // SK_SUMMONINGS + 170, // SK_NECROMANCY + 170, // SK_TRANSLOCATIONS + 170, // SK_TRANSMIGRATION + 170, // SK_DIVINATIONS + 170, // SK_FIRE_MAGIC + 170, // SK_ICE_MAGIC + 170, // SK_AIR_MAGIC + 170, // SK_EARTH_MAGIC + 170, // SK_POISON_MAGIC + 130, // SK_INVOCATIONS + 170, // SK_EVOCATIONS + }, + + { // SP_DEMONSPAN (34) + 100, // SK_FIGHTING + 110, // SK_SHORT_BLADES + 110, // SK_LONG_SWORDS + 110, // SK_UNUSED_1 + 110, // SK_AXES + 110, // SK_MACES_FLAILS + 110, // SK_POLEARMS + 110, // SK_STAVES + 110, // SK_SLINGS + 110, // SK_BOWS + 110, // SK_CROSSBOWS + 110, // SK_DARTS + 110, // SK_THROWING + 110, // SK_ARMOUR + 110, // SK_DODGING + 110, // SK_STEALTH + 110, // SK_STABBING + 110, // SK_SHIELDS + 110, // SK_TRAPS_DOORS + 110, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 110, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 90, // SK_NECROMANCY + 110, // SK_TRANSLOCATIONS + 110, // SK_TRANSMIGRATION + 110, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 110, // SK_ICE_MAGIC + 110, // SK_AIR_MAGIC + 110, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 80, // SK_INVOCATIONS + 110, // SK_EVOCATIONS + }, + + { // SP_GHOUL (35) + 80, // SK_FIGHTING + 110, // SK_SHORT_BLADES + 110, // SK_LONG_SWORDS + 110, // SK_UNUSED_1 + 110, // SK_AXES + 110, // SK_MACES_FLAILS + 110, // SK_POLEARMS + 110, // SK_STAVES + 130, // SK_SLINGS + 130, // SK_BOWS + 130, // SK_CROSSBOWS + 130, // SK_DARTS + 130, // SK_THROWING + 110, // SK_ARMOUR + 110, // SK_DODGING + 80, // SK_STEALTH + 100, // SK_STABBING + 110, // SK_SHIELDS + 120, // SK_TRAPS_DOORS + 80, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 120, // SK_SPELLCASTING + 130, // SK_CONJURATIONS + 130, // SK_ENCHANTMENTS + 120, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 120, // SK_TRANSLOCATIONS + 120, // SK_TRANSMIGRATION + 120, // SK_DIVINATIONS + 150, // SK_FIRE_MAGIC + 90, // SK_ICE_MAGIC + 150, // SK_AIR_MAGIC + 90, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 110, // SK_INVOCATIONS + 130, // SK_EVOCATIONS + }, + + { // SP_KENKU (36) + 100, // SK_FIGHTING + 75, // SK_SHORT_BLADES + 75, // SK_LONG_SWORDS + 75, // SK_UNUSED_1 + 75, // SK_AXES + 75, // SK_MACES_FLAILS + 75, // SK_POLEARMS + 75, // SK_STAVES + 100, // SK_SLINGS + 80, // SK_BOWS + 80, // SK_CROSSBOWS + 90, // SK_DARTS + 90, // SK_THROWING + 90, // SK_ARMOUR + 90, // SK_DODGING + 100, // SK_STEALTH + 80, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 80, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 60, // SK_CONJURATIONS + 160, // SK_ENCHANTMENTS + 70, // SK_SUMMONINGS + 80, // SK_NECROMANCY + 150, // SK_TRANSLOCATIONS + 150, // SK_TRANSMIGRATION + 180, // SK_DIVINATIONS + 90, // SK_FIRE_MAGIC + 120, // SK_ICE_MAGIC + 90, // SK_AIR_MAGIC + 120, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 160, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + { // SP_MERFOLK (37) + 80, // SK_FIGHTING + 70, // SK_SHORT_BLADES + 90, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 140, // SK_AXES + 150, // SK_MACES_FLAILS + 50, // SK_POLEARMS + 130, // SK_STAVES + 150, // SK_SLINGS + 140, // SK_BOWS + 140, // SK_CROSSBOWS + 100, // SK_DARTS + 100, // SK_THROWING + 160, // SK_ARMOUR + 60, // SK_DODGING + 90, // SK_STEALTH + 70, // SK_STABBING + 100, // SK_SHIELDS + 120, // SK_TRAPS_DOORS + 90, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 140, // SK_CONJURATIONS + 90, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 150, // SK_NECROMANCY + 140, // SK_TRANSLOCATIONS + 60, // SK_TRANSMIGRATION + 80, // SK_DIVINATIONS + 160, // SK_FIRE_MAGIC + 80, // SK_ICE_MAGIC + 150, // SK_AIR_MAGIC + 150, // SK_EARTH_MAGIC + 80, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + + + +/* ****************************************************** + +// base draconian + { + 90, // SK_FIGHTING + 100, // SK_SHORT_BLADES + 100, // SK_LONG_SWORDS + 100, // SK_UNUSED_1 + 100, // SK_AXES + 100, // SK_MACES_FLAILS + 100, // SK_POLEARMS + 100, // SK_STAVES + 120, // SK_SLINGS + 120, // SK_BOWS + 120, // SK_CROSSBOWS + 120, // SK_DARTS + 120, // SK_THROWING + 200, // SK_ARMOUR + 120, // SK_DODGING + 120, // SK_STEALTH + 100, // SK_STABBING + 100, // SK_SHIELDS + 100, // SK_TRAPS_DOORS + 100, // SK_UNARMED_COMBAT + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // undefined + 100, // SK_SPELLCASTING + 100, // SK_CONJURATIONS + 120, // SK_ENCHANTMENTS + 100, // SK_SUMMONINGS + 100, // SK_NECROMANCY + 100, // SK_TRANSLOCATIONS + 100, // SK_TRANSMIGRATION + 100, // SK_DIVINATIONS + 100, // SK_FIRE_MAGIC + 100, // SK_ICE_MAGIC + 100, // SK_AIR_MAGIC + 100, // SK_EARTH_MAGIC + 100, // SK_POISON_MAGIC + 100, // SK_INVOCATIONS + 100, // SK_EVOCATIONS + }, + +****************************************************** */ + +}; + + + + +/* ************************************************************* + +// these were unimplemented "level titles" for two classes {dlb} + +JOB_PRIEST + "Preacher"; + "Priest"; + "Evangelist"; + "Pontifex"; + +JOB_PALADIN: + "Holy Warrior"; + "Holy Crusader"; + "Paladin"; + "Scourge of Evil"; + +************************************************************* */ + +void show_skills(void) +{ + int i; + int x; + char lcount; + + const int num_lines = get_number_of_lines(); + +#ifdef DOS_TERM + window(1, 1, 80, 25); + char buffer[4600]; + + gettext(1, 1, 80, 25, buffer); +#endif + + clrscr(); + + reprint_stuff: + lcount = 'a'; + + gotoxy(1, 1); + textcolor(LIGHTGREY); + +#if DEBUG_DIAGNOSTICS + cprintf( "You have %d points of unallocated experience (cost lvl %d; total %d)." EOL EOL, + you.exp_available, you.skill_cost_level, you.total_skill_points ); +#else + cprintf(" You have %d points of unallocated experience." EOL EOL, + you.exp_available ); +#endif + + char scrln = 3, scrcol = 1; + + // Don't want the help line to appear too far down a big window. + int bottom_line = ((num_lines > 30) ? 30 : num_lines); + + for (x = 0; x < NUM_SKILLS; x++) + { + /* spells in second column */ + if ((x == SK_SPELLCASTING && scrcol != 40) || scrln > bottom_line - 3) + { + scrln = 3; + scrcol = 40; + } + + gotoxy(scrcol, scrln); + +#if DEBUG_DIAGNOSTICS + // In diagnostic mode we show skills at 0, but only real skills + if (x != SK_UNUSED_1 && (x <= SK_UNARMED_COMBAT || x >= SK_SPELLCASTING)) +#else + if (you.skills[x] > 0) +#endif + { + if (you.practise_skill[x] == 0 || you.skills[x] == 0) + textcolor(DARKGREY); + else + textcolor(LIGHTGREY); + + if (you.skills[x] == 27) + textcolor(YELLOW); + +#if DEBUG_DIAGNOSTICS + if (you.skills[x] == 0) + putch(' '); + else + { + putch(lcount); + if (lcount == 'z') + lcount = 'A'; + else + lcount++; + } +#else + putch(lcount); + if (lcount == 'z') + lcount = 'A'; + else + lcount++; +#endif + + cprintf( " %c %-14s Skill %2d", + (you.skills[x] == 0) ? ' ' : + (you.practise_skill[x] == 0) ? '-' : '+', + skills[x][0], you.skills[x] ); + + textcolor(BLUE); + +#if DEBUG_DIAGNOSTICS + cprintf( " %5d", you.skill_points[x] ); +#endif + + if (you.skills[x] < 27) + { + const int needed = skill_exp_needed(you.skills[x] + 2); + const int prev_needed = skill_exp_needed(you.skills[x] + 1); + const int spec_abil = species_skills(x, you.species); + + cprintf( " (%d)", + (((needed * spec_abil) / 100 - you.skill_points[x]) * 10) / + (((needed - prev_needed) * spec_abil) / 100) ); + } + + scrln++; + } + + /* Extra CR between classes of weapons and such things */ + if (x == SK_STAVES || x == SK_THROWING || x == SK_TRAPS_DOORS + || x == SK_UNARMED_COMBAT || x == SK_POISON_MAGIC) + { + scrln++; + } + } + + // if any more skills added, must adapt letters to go into caps + gotoxy(1, bottom_line); + textcolor(LIGHTGREY); + cprintf("Press the letter of a skill to choose whether you want to practise it."); + + char get_thing; + + get_thing = getch(); + + if (get_thing == 0) + getch(); + else + { + if ((get_thing >= 'a' && get_thing <= 'z') + || (get_thing >= 'A' && get_thing <= 'Z')) + { + lcount = 'a'; // toggle skill practise + + for (i = 0; i < 50; i++) + { + if (you.skills[i] == 0) + continue; + + if (get_thing == lcount) + { + you.practise_skill[i] = (you.practise_skill[i]) ? 0 : 1; + break; + } + + if (lcount == 'z') + lcount = 'A'; + else + lcount++; + } + + goto reprint_stuff; + } + } + +#ifdef DOS_TERM + puttext(1, 1, 80, 25, buffer); +#endif + return; +} + + +const char *skill_name(unsigned char which_skill) +{ + return (skills[which_skill][0]); +} // end skill_name() + + +const char *skill_title( unsigned char best_skill, unsigned char skill_lev, + int species, int str, int dex, int god ) +{ + unsigned char skill_rank; + const char *tempstr = NULL; + + static char title_buff[80]; + + // paranoia + if (best_skill == SK_UNUSED_1 + || (best_skill > SK_UNARMED_COMBAT && best_skill < SK_SPELLCASTING) + || best_skill >= NUM_SKILLS) + { + return ("Adventurer"); + } + + if (species == -1) + species = you.species; + + if (str == -1) + str = you.strength; + + if (dex == -1) + dex = you.dex; + + if (god == -1) + god = you.religion; + + // translate skill level into skill ranking {dlb}: + // increment rank by one to "skip" skill name in array {dlb}: + skill_rank = ((skill_lev <= 7) ? 1 : + (skill_lev <= 14) ? 2 : + (skill_lev <= 20) ? 3 : + (skill_lev <= 26) ? 4 + /* level 27 */ : 5); + + if (best_skill < NUM_SKILLS) + { + // Note that ghosts default to (dex == str) and god == no_god, due + // to a current lack of that information... the god case is probably + // suitable for most cases (TSO/Zin/Ely at the very least). -- bwr + switch (best_skill) + { + case SK_UNARMED_COMBAT: + tempstr = (dex >= str) ? martial_arts_titles[skill_rank] + : skills[best_skill][skill_rank]; + + break; + + case SK_INVOCATIONS: + if (god == GOD_NO_GOD) + tempstr = "Godless"; + else + tempstr = skills[best_skill][skill_rank]; + break; + + default: + tempstr = skills[best_skill][skill_rank]; + break; + } + } + + const char *const ptr = strchr( tempstr, '%' ); + const bool species_found = (ptr != NULL); + + if (species_found) + { + // need species name + snprintf( title_buff, sizeof(title_buff), tempstr, + species_name(species, 0, true, + (ptr == tempstr && best_skill != SK_NECROMANCY)) ); + // The above code only capitalises start-of-string racenames + tempstr = title_buff; + } + + return ((tempstr == NULL) ? "Invalid Title" : tempstr); +} // end skill_title() + +const char *player_title( void ) +{ + const unsigned char best = best_skill( SK_FIGHTING, (NUM_SKILLS - 1), 99 ); + + return (skill_title( best, you.skills[ best ] )); +} // end player_title() + +unsigned char best_skill( unsigned char min_skill, unsigned char max_skill, + unsigned char excl_skill ) +{ + unsigned char ret = SK_FIGHTING; + unsigned int best_skill_level = 0; + unsigned int best_position = 1000; + + for (int i = min_skill; i <= max_skill; i++) // careful!!! + { + if (i == excl_skill + || i == SK_UNUSED_1 + || (i > SK_UNARMED_COMBAT && i < SK_SPELLCASTING)) + { + continue; + } + + if (you.skills[i] > best_skill_level) + { + ret = i; + best_skill_level = you.skills[i]; + best_position = you.skill_order[i]; + + } + else if (you.skills[i] == best_skill_level + && you.skill_order[i] < best_position) + { + ret = i; + best_position = you.skill_order[i]; + } + } + + return (ret); +} // end best_skill() + +// Calculate the skill_order array from scratch. +// +// The skill order array is used for breaking ties in best_skill. +// This is done by ranking each skill by the order in which it +// has attained its current level (the values are the number of +// skills at or above that level when the current skill reached it). +// +// In this way, the skill which has been at a level for the longest +// is judged to be the best skill (thus, nicknames are sticky)... +// other skills will have to attain the next level higher to be +// considered a better skill (thus, the first skill to reach level 27 +// becomes the characters final nickname). +// +// As for other uses of best_skill: this method is still appropriate +// in that there is no additional advantage anywhere else in the game +// for partial skill levels. Besides, its probably best if the player +// isn't able to micromanage at that level. -- bwr +void init_skill_order( void ) +{ + for (int i = SK_FIGHTING; i < NUM_SKILLS; i++) + { + if (i == SK_UNUSED_1 + || (i > SK_UNARMED_COMBAT && i < SK_SPELLCASTING)) + { + you.skill_order[i] = MAX_SKILL_ORDER; + continue; + } + + const int i_diff = species_skills( i, you.species ); + const unsigned int i_points = (you.skill_points[i] * 100) / i_diff; + + you.skill_order[i] = 0; + + for (int j = SK_FIGHTING; j < NUM_SKILLS; j++) + { + if (i == j + || j == SK_UNUSED_1 + || (j > SK_UNARMED_COMBAT && j < SK_SPELLCASTING)) + { + continue; + } + + const int j_diff = species_skills( j, you.species ); + const unsigned int j_points = (you.skill_points[j] * 100) / j_diff; + + if (you.skills[j] == you.skills[i] + && (j_points > i_points + || (j_points == i_points && j > i))) + { + you.skill_order[i]++; + } + } + } +} + +int calc_hp(void) +{ + int hitp; + + hitp = (you.base_hp - 5000) + (you.base_hp2 - 5000); + hitp += (you.experience_level * you.skills[SK_FIGHTING]) / 5; + + // being berserk makes you resistant to damage. I don't know why. + if (you.berserker) + { + hitp *= 15; + hitp /= 10; + } + + // some transformations give you extra hp + switch (you.attribute[ATTR_TRANSFORMATION]) + { + case TRAN_STATUE: + hitp *= 15; + hitp /= 10; + break; + case TRAN_ICE_BEAST: + hitp *= 12; + hitp /= 10; + break; + case TRAN_DRAGON: + hitp *= 16; + hitp /= 10; + break; + } + + // frail and robust mutations + hitp *= (10 + you.mutation[MUT_ROBUST] - you.mutation[MUT_FRAIL]); + hitp /= 10; + + you.hp_max = hitp; + + deflate_hp( you.hp_max, false ); + + return (hitp); +} // end calc_hp() + + +int calc_mp(void) +{ + int enp; + + // base_magic_points2 accounts for species and magic potions + enp = (you.base_magic_points2 - 5000); + + int spell_extra = (you.experience_level * you.skills[SK_SPELLCASTING]) / 4; + int invoc_extra = (you.experience_level * you.skills[SK_INVOCATIONS]) / 6; + int evoc_extra = (you.experience_level * you.skills[SK_EVOCATIONS]) / 6; + + if (spell_extra > invoc_extra && spell_extra > evoc_extra) + enp += spell_extra; + else if (invoc_extra > evoc_extra) + enp += invoc_extra; + else + enp += evoc_extra; + + you.max_magic_points = stepdown_value( enp, 9, 18, 45, 100 ); + + // this is our "rotted" base (applied after scaling): + you.max_magic_points += (you.base_magic_points - 5000); + + // Yes, we really do want this duplication... this is so the stepdown + // doesn't truncate before we apply the rotted base. We're doing this + // the nice way. -- bwr + if (you.max_magic_points > 50) + you.max_magic_points = 50; + + // now applied after scaling so that power items are more useful -- bwr + you.max_magic_points += player_magical_power(); + + if (you.max_magic_points > 50) + you.max_magic_points = 50 + ((you.max_magic_points - 50) / 2); + + if (you.max_magic_points < 0) + you.max_magic_points = 0; + + if (you.magic_points > you.max_magic_points) + you.magic_points = you.max_magic_points; + + you.redraw_magic_points = 1; + + return (you.max_magic_points); +} // end calc_mp() + + +unsigned int skill_exp_needed(int lev) +{ + lev--; + switch (lev) + { + case 0: + return 0; // old: 0 + case 1: + return 200; // old: 20 + case 2: + return 300; // old: 30 + case 3: + return 500; // old: 50 + case 4: + return 750; // old: 75 + case 5: + return 1050; // old: 105 + case 6: + return 1350; // old: 145 + case 7: + return 1700; // old: 200 + case 8: + return 2100; // old: 275 + case 9: + return 2550; // old: 355 + case 10: + return 3150; // old: 440 + case 11: + return 3750; // old: 560 + case 12: + return 4400; // old: 680 + case 13: + return 5250; // old: 850 + default: + return 6200 + 1800 * (lev - 14); + // old: 1100 + 300 * (lev - 14) + // older: 1200 * (lev - 11) + ((lev - 11) * (lev - 11));// * (lev - 11)) + } + + return 0; +} + + +int species_skills(char skill, char species) +{ + // Spellcasting is more expensive, invocations and evocations are cheaper + if (skill == SK_SPELLCASTING) + return (spec_skills[species - 1][skill] * 130) / 100; + else if (skill == SK_INVOCATIONS || skill == SK_EVOCATIONS) + return (spec_skills[species - 1][skill] * 75) / 100; + else + return (spec_skills[species - 1][skill]); +} // end species_skills() + +// new: inform player if they need more throwing skill (GDL) +void wield_warning(bool newWeapon) +{ + // hold weapon name + char wepstr[ITEMNAME_SIZE]; + char wepstr2[ITEMNAME_SIZE]; + + // early out - no weapon + if (you.equip[EQ_WEAPON] == -1) + return; + + if (newWeapon) + strcpy(wepstr, "this "); + else + strcpy(wepstr, "your "); + + int wepType = you.inv[you.equip[EQ_WEAPON]].sub_type; + + // early out - don't warn for non-weapons + if (you.inv[you.equip[EQ_WEAPON]].base_type != OBJ_WEAPONS) + return; + + // put the standard wep name in. + standard_name_weap(wepType, wepstr2); + strcat(wepstr, wepstr2); + + // only warn about str/dex for non-launcher weapons + if (!launches_things(wepType)) + { +#ifdef USE_NEW_COMBAT_STATS + const int stat_bonus = effective_stat_bonus(); + + if (stat_bonus <= -4) + { + if (you.strength < you.dex) + { + if (you.strength < 11) + snprintf( info, INFO_SIZE, "You have %strouble swinging %s.", + (you.strength < 7)?"":"a little ", wepstr); + else + snprintf( info, INFO_SIZE, "You'd be more effective with " + "%s if you were stronger.", wepstr); + } + else + { + if (you.dex < 11) + { + snprintf( info, INFO_SIZE, "Wielding %s is %s awkward.", + wepstr, (you.dex < 7) ? "fairly" : "a little" ); + } + else + { + snprintf( info, INFO_SIZE, "You'd be more effective with " + "%s if you were nimbler.", wepstr ); + } + } + + mpr( info, MSGCH_WARN ); + } +#endif + return; + } + + // must be a launcher + int effSkill = you.skills[SK_THROWING] * 2 + 1; + int shoot_skill = 0; + + switch (wepType) + { + case WPN_SLING: + shoot_skill = you.skills[SK_SLINGS]; + break; + case WPN_BOW: + shoot_skill = you.skills[SK_BOWS]; + break; + case WPN_CROSSBOW: + case WPN_HAND_CROSSBOW: + shoot_skill = you.skills[SK_CROSSBOWS]; + break; + case WPN_BLOWGUN: + shoot_skill = you.skills[SK_DARTS]; + break; + default: + shoot_skill = 0; + break; + } + + if (shoot_skill > effSkill) + { + strcpy( info, "Your low throwing skill limits the effectiveness of "); + strcat( info, wepstr ); + mpr( info, MSGCH_WARN ); + } +} -- cgit v1.2.3-54-g00ecf