summaryrefslogtreecommitdiffstats
path: root/stone_soup/crawl-ref/source/skills2.cc
diff options
context:
space:
mode:
Diffstat (limited to 'stone_soup/crawl-ref/source/skills2.cc')
-rw-r--r--stone_soup/crawl-ref/source/skills2.cc2366
1 files changed, 0 insertions, 2366 deletions
diff --git a/stone_soup/crawl-ref/source/skills2.cc b/stone_soup/crawl-ref/source/skills2.cc
deleted file mode 100644
index b4a0cbca9f..0000000000
--- a/stone_soup/crawl-ref/source/skills2.cc
+++ /dev/null
@@ -1,2366 +0,0 @@
-/*
- * File: skills2.cc
- * Summary: More skill related functions.
- * Written by: Linley Henzell
- *
- * Modified for Crawl Reference by $Author$ on $Date$
- *
- * 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 <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#ifdef DOS
-#include <conio.h>
-#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"},
- {"Ranged Combat", "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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT
- 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_RANGED_COMBAT || 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(int 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()
-
-int best_skill( int min_skill, int max_skill, int excl_skill )
-{
- int 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;
-
- if (spell_extra > invoc_extra)
- enp += spell_extra;
- else
- enp += invoc_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(int skill, int 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;
- }
-
- // [dshaligram] No more annoying throwing skill warnings.
-#ifdef OBSOLETE_THROW_SKILL_WARNING
- // must be a launcher
- int effSkill = you.skills[SK_RANGED_COMBAT] * 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 );
- }
-#endif
-}