/
roa/
roa/lib/boards/
roa/lib/config/
roa/lib/edits/
roa/lib/help/
roa/lib/misc/
roa/lib/plrobjs/
roa/lib/quests/
roa/lib/socials/
roa/lib/www/
roa/lib/www/LEDSign/
roa/lib/www/LEDSign/fonts/
roa/lib/www/LEDSign/scripts/
roa/src/s_inc/
roa/src/sclient/
roa/src/sclient/binary/
roa/src/sclient/text/
roa/src/util/
/************************************************************************
	Realms of Aurealis 		James Rhone aka Vall of RoA

constants.c			Various constants defined in this file.
				Exp tables, flag strings, racial/class
				combination restrictions, shaman ritual 
				assignments, bardic song assignments, 
				other various constants that RoA needs 
				to function properly.

		******** Heavily modified and expanded ********
		*** BE AWARE OF ALL RIGHTS AND RESERVATIONS ***
		******** Heavily modified and expanded ********
		        All rights reserved henceforth. 

    Please note that no guarantees are associated with any code from
Realms of Aurealis.  All code which has been released to the general
public has been done so with an 'as is' pretense.  RoA is based on both
Diku and CircleMUD and ALL licenses from both *MUST* be adhered to as well
as the RoA license.   *** Read, Learn, Understand, Improve ***
*************************************************************************/

#include "structures.h"
#include "mudlimits.h"
#include "magic.h"
#include "bard.h"
#include "shaman.h"

// reverse direction integers
const int	rev_dir[] = 
{
   2,
   3,
   0,
   1, 	
   5,
   4,
   8,
   9,
   6,
   7
};

// reverse direction strings (for walkins and such)
const char	*rev_dir_str[] = 
{
   "the south",
   "the west",
   "the north",
   "the east",
   "below",
   "above",
   "the southwest",
   "the northwest",
   "the northeast",
   "the southeast"
};

// direction strings (long / normal version)
const char	*dirs[] = 
{
   "north",
   "east",
   "south",
   "west",
   "up",
   "down",
   "northeast",
   "southeast",
   "southwest",
   "northwest",
   "\n"
};

// actual command for dirs, used for keyword searches -roa
const char	*comm_dirs[] = 
{
   "north",
   "east",
   "south",
   "west",
   "up",
   "down",
   "neast",
   "seast",
   "swest",
   "nwest",
   "\n"
};

// short dir strings (for shortx)
const char	*sh_dirs[] = 
{
   "N ",
   "E ",
   "S ",
   "W ",
   "U ",
   "D ",
   "NE ",
   "SE ",
   "SW ",
   "NW ",
   "\n"
};

// how much movement to be lost when moving thru each type of terrain
const int	movement_loss[] = 
{
   1,  /* Inside     */
   2,  /* City       */
   2,  /* Field      */
   3,  /* Forest     */
   5,  /* Hills      */
   7,  /* Mountains  */
   7,  /* Swimming   */
   1,  /* Unswimmable*/
   6,  /* Underwater */
   1,  /* air	     */
};

/* RoA weather strings begin here */
const char	*atmos_names[] = {
  "Calm",
  "Normal",
  "Volatile",
  "\n",
};

// accumulation names
const char	*accum_names[] = {
  "unused",
  "unused",
  "unused",
  "rain",
  "mud",
  "sleet",
  "hail",
  "snow",
  "ice"
};

// general time names for the particular quarter of the day 
const char	*gen_time_names[] = {
  "nighttime",
  "dawn",
  "daytime",
  "dusk"
};

// precip names ending in ING
const char	*precip_names_ing[] = {
  "clear",
  "partly cloudy",
  "cloudy",
  "raining",
  "sleeting",
  "hailing",
  "snowing"
};

// precip names, not ending in ING :)
const char	*precip_names[] = {
  "clear",
  "partly cloudy",
  "cloudy",
  "rain",
  "sleet",
  "hail",
  "snow"
};

/* short common folk name for days */
const char	*shortdays[7] = {
   "Moondras",
   "Tiltrin",
   "Deceponas",
   "Thundras",
   "Freedonas",
   "Rutas",
   "Sundas" 
};

/* long day names, formal and what not */
const char	*longdays[7] = {
   "the Day of the Moon",
   "the Day of Rising Tides",
   "the Day of the Deception",
   "the Day of Thunder",
   "the Day of Freedom",
   "the day of the Great Gods",
   "the Day of the Sun" 
};

// RoA changes here, now 16 months divided in quarters, proceeding as such:
//   1st quarter: spring
//   2nd quarter: summer
//   3rd quarter: fall
//   4th quarter: winter

// names of the 4 seasons (color coded)
const char	*season_names[4] = {
  "%2Spring%0",
  "%1%BSummer%0",
  "%3Autumn%0",
  "%BWinter%0"
};

// 16 months now, 0 - 15
const char	*month_names[16] = {
   "Month of The Glimmer",           /* 0 */
   "Month of Life",
   "Month of the Sun's Return",
   "Month of The Creation",
   "Month of Endless Days",  /* on in to summer */
   "Month of Heat's Grip",
   "Month of Oppression",
   "Month of Summer's End",
   "Month of Fall's Beginning",  /* now for fall */
   "Month of the Colored Leaf",
   "Month of Harvest",
   "Month of the Final Light",
   "Month of the Shadows",  /* winter begins */
   "Month of the Everlasting Gloom",
   "Month of the Ancient Darkness",
   "Month of Rebirth's Eve"
};

// where strings for EQ slots 
// updated for slot revamp
const char	*where[MAX_WEAR] = {
   "<%Bhead%0>          ",
   "<%Bface%0>          ",
   "<%Bright ear%0>     ",
   "<%Bleft ear%0>      ",
   "<%Bneck%0>          ",
   "<%Bneck%0>          ",
   "<%Bbody%0>          ",
   "<%Bwaist%0>         ",
   "<%Babout body%0>    ",
   "<%Barms%0>          ",
   "<%Bright wrist%0>   ",
   "<%Bleft wrist%0>    ",
   "<%Bhands%0>         ",
   "<%Bfinger%0>        ",
   "<%Bfinger%0>        ",
   "<%Bfinger%0>        ",
   "<%Bfinger%0>        ",
   "<%Blegs%0>          ",
   "<%Bfeet%0>          ",
   "<%Bwield%0>         ",
   "<%Bheld%0>          "
};

// for where vectors on char and objs
const char	*wv_bits[] = {
   "Head",
   "Face",
   "Ear R",
   "Ear L",
   "Neck 1",
   "Neck 2",
   "Body",
   "Waist",
   "About",
   "Arms",
   "Wrist R",
   "Wrist L",
   "Hands",
   "Finger R1",
   "Finger R2",
   "Finger L1",
   "Finger L2",
   "Legs",
   "Feet",
   "Wield",
   "Held",
   "\n"
};

// armor strings for 'armor' command (also OLCable at some point)
// updated 5/28/98 for slot revamp -jrhone
const char	*armor_where[MAX_WEAR] = {
   "Head       :",
   "Face       :",
   "Ear        :",
   "Ear        :",
   "Neck       :",
   "Neck       :",
   "Body       :",
   "Waist      :",
   "About Body :",
   "Arms       :",
   "Wrist      :",
   "Wrist      :",
   "Hands      :",
   "Finger     :",
   "Finger     :",
   "Finger     :",
   "Finger     :",
   "Legs       :",
   "Feet       :",
   "Wield      :",
   "Held       :"
};

// keywords for liquid containers (OLCable at some point)
const char	*drinks[] = 
{
   "water",
   "beer",
   "wine",
   "ale",
   "dark ale",
   "whisky",
   "lemonade",
   "firebreather",
   "local speciality",
   "slime mold juice",
   "milk",
   "tea",
   "coffee",
   "blood",
   "salt water",
   "clear water",
   "pure poison",
   "\n"
};

// actual names of the drinks in the containers
const char	*drinknames[] = 
{
   "water",
   "beer",
   "wine",
   "ale",
   "ale",
   "whisky",
   "lemonade",
   "firebreather",
   "local",
   "juice",
   "milk",
   "tea",
   "coffee",
   "blood",
   "salt",
   "water"
};

// the affection that each drink has on each hunger/thirst/drunk attribute
// OLCABLE at some near point
const int	drink_aff[][3] = {
//   D  H  T
   { 0, 1, 10 },
   { 3, 2, 5 },
   { 5, 2, 5 },
   { 2, 2, 5 },
   { 1, 2, 5 },
   { 6, 1, 4 },
   { 0, 1, 8 },
   { 10, 0, 0 },
   { 3, 3, 3 },
   { 0, 4, -8 },
   { 0, 3, 6 },
   { 0, 1, 6 },
   { 0, 1, 6 },
   { 0, 2, -1 },
   { 0, 1, -2 },
   { 0, 0, 13 }
};

// what color are each liquid types
const char	*color_liquid[] = 
{
   "clear",
   "brown",
   "clear",
   "brown",
   "dark",
   "golden",
   "red",
   "green",
   "clear",
   "light green",
   "white",
   "brown",
   "black",
   "red",
   "clear",
   "crystal clear",
   "%4dark%0"
};

// how full is a container
const char	*fullness[] = 
{
   "less than half ",
   "about half ",
   "more than half ",
   ""
};

// gender strings
const char	*genders[] =
{
   "neutral",
   "male",
   "female",
   "random",
   "\n"
};

/* EXPERIENCE TABLE FOR CLASSES ... (5 levels per line) */
const  int exp_table[NUM_CLASSES][MAX_LEVELS] = {
 /* Mage */  
    { 0, 1, 2500, 5000, 10000, 20000,   /* 0-5 */
      40000, 60000, 90000, 135000, 250000,  /* 6-10 */
      375000, 750000, 1125000, 1500000, 1875000, /* 11-15 */
      2250000, 2625000, 3125000, 3625000, 4125000, /* 16-20 */
      4625000, 5125000, 5625000, 6125000, 6625000, /* 21-25 */
      7375000, 8125000, 8875000, 9425000, 10225000,/*26-30*/
      11125000, 12025000, 12825000, 13625000, 14525000,/*31-35*/
      15425000, 16325000, 17225000, 18125000, 19025000,/*36-40*/
      20000000, 21000000, 22000000, 23000000, 24000000,/*41-45*/
      25500000, 27000000, 28500000, 30000000, 32000000,/*46-50*/
      34000000, 36000000, 39000000, 42000000, 47000000,/*51-55*/
      52000000, 60000000, 69000000, 79000000, 90000000,/*56-60*/
      115000000, 135000000, 160000000, 185000000, 215000000,/*61-65*/
      245000000, 275000000, 315000000, 350000000, 400000000,/*66-70*/
      500000000, 600000000, 700000000, 800000000, 900000000 /*71-75*/
    },
/* Cleric */
    {  0, 1, 1500, 3000, 6000, 13000, /* - 5 */
       27500, 55000, 110000, 225000, 450000, /* - 10 */
       675000, 900000, 1225000, 1550000, 1950000,
       2350000, 2750000, 3150000, 3550000, 4000000,
       4500000, 5000000, 5550000, 6075000, 6650000,
       7250000, 8000000, 8800000, 9600000, 10400000 ,
       11225000, 12025000, 12825000, 13625000, 14525000,
       15425000, 16325000, 17225000, 18125000, 19025000,
       20000000, 21000000, 22000000, 23000000, 24000000,
       25500000, 27000000, 28500000, 30000000, 32000000,
       34000000, 36000000, 39000000, 42000000, 47000000,
       52000000, 60000000, 69000000, 79000000, 90000000,
       115000000, 135000000, 160000000, 185000000, 215000000,
       245000000, 275000000, 315000000, 350000000, 400000000, 
       500000000, 600000000, 700000000, 800000000, 900000000
    },
/* Thief */
    {  0, 1, 1250, 2500, 5000, 10000,
       20000, 30000, 70000, 110000, 160000,
       220000, 440000, 660000, 880000, 1100000,
       1400000, 1750000, 2150000, 2500000, 3100000,
       3700000,       4300000,       4950000,       5700000,       6450000,
       7200000,       8050000,       8850000,       9650000,/*30*/ 10450000,
       11225000,       12025000,       12825000,       13625000,       14525000,
       15425000,       16325000,       17225000,       18125000,/*40*/ 19025000,
       20000000,       21000000,       22000000,       23000000,       24000000,
       25500000,       27000000,       28500000,       30000000,/*50*/ 32000000,
       34000000,       36000000,       39000000,       42000000,       47000000,
       52000000,       60000000,       69000000,       79000000,/*60*/ 90000000,
       115000000, 135000000, 160000000, 185000000, 215000000,
       245000000, 275000000, 315000000, 350000000, 400000000,
       500000000, 600000000, 700000000, 800000000, 900000000 
    },
/* Warrior */
    {  0 ,       1 ,       2000 ,       4000 ,       8000 ,       16000 ,
       32000 ,      64000,       125000 ,       250000,/*10*/ 500000,
       750000,       1000000,       1250000,       1500000,       1850000,
       2250000,       2650000,       3050000,       3500000,/*20*/ 3950000,
       4400000,       4850000,       5350000,       5950000,       6600000,
       7300000,       8000000,       8750000,       9550000,/*30*/ 10350000,
       11225000,       12025000,       12825000,       13625000,       14525000,
       15425000,       16325000,       17225000,       18125000,/*40*/ 19025000,
       20000000,       21000000,       22000000,       23000000,       24000000,
       25500000,       27000000,       28500000,       30000000,/*50*/ 32000000,
       34000000,       36000000,       39000000,       42000000,       47000000,
       52000000,       60000000,       69000000,       79000000,/*60*/ 90000000,
       115000000, 135000000, 160000000, 185000000, 215000000,
       245000000, 275000000, 315000000, 350000000, 400000000,
       500000000, 600000000, 700000000, 800000000, 900000000
    },
/* SHAMAN */  
    {  0,      1 ,       2500,       5000,       10000,       20000,
       40000,       60000,       90000,       135000,/*10*/ 250000,
       375000,      750000,       1125000,       1500000,       1875000,
       2250000,       2625000,       3125000,       3625000,/*20*/ 4125000,
       4625000,       5125000,       5625000,       6125000,       6625000,
       7375000,       8125000,       8875000,       9425000,/*30*/ 10225000,
       11125000,       12025000,       12825000,       13625000,       14525000,
       15425000,       16325000,       17225000,       18125000,/*40*/ 19025000,
       20000000,       21000000,       22000000,       23000000,       24000000,
       25500000,       27000000,       28500000,       30000000,/*50*/ 32000000,
       34000000,       36000000,       39000000,       42000000,       47000000,
       52000000,       60000000,       69000000,       79000000,/*60*/ 90000000,
       115000000, 135000000, 160000000, 185000000, 215000000,
       245000000, 275000000, 315000000, 350000000, 400000000,
       500000000, 600000000, 700000000, 800000000, 900000000
    },
/* ranger */  
    {  0,      1,       2500,       5000,       10000,       20000,
       40000,       60000,       90000,       135000,/*10*/ 250000,
       375000,      750000,       1125000,       1500000,       1875000,
       2250000,       2625000,       3125000,       3625000,/*20*/ 4125000,
       4625000,       5125000,       5625000,       6125000,       6625000,
       7375000,       8125000,       8875000,       9425000,/*30*/ 10225000,
       11125000,       12025000,       12825000,       13625000,       14525000,
       15425000,       16325000,       17225000,       18125000,/*40*/ 19025000,
       20000000,       21000000,       22000000,       23000000,       24000000,
       25500000,       27000000,       28500000,       30000000,/*50*/ 32000000,
       34000000,       36000000,       39000000,       42000000,       47000000,
       52000000,       60000000,       69000000,       79000000,/*60*/ 90000000,
       115000000,       135000000,       160000000,       185000000, 215000000,
       245000000,       275000000,       315000000,       350000000, 400000000,
       500000000,       600000000,       700000000,       800000000, 900000000 
    },
/* Bard */  
    { 0 , 1, 1750, 3500, 7000, 12000,
      22000, 32000, 72000, 130000, 180000,
      240000, 470000, 690000, 920000, 1500000,
      1800000, 2200000, 2500000, 3100000, 3700000,
      4300000, 4950000, 5700000, 6450000, 7200000,
      8050000, 8850000, 9650000, 10450000, 11225000,
      12025000, 12825000, 13625000, 14525000, 15425000,
      16325000, 17225000, 18125000, 19025000, 20000000,
      21000000, 22000000, 23000000, 24000000, 25500000,
      27000000, 28500000, 30000000, 32000000, 34000000,
      36000000, 39000000, 42000000, 47000000, 52000000,
      60000000, 69000000, 79000000, 90000000, 115000000,
      135000000, 160000000, 185000000, 215000000, 245000000,
      275000000, 315000000, 350000000, 400000000, 500000000,
      600000000, 700000000, 800000000, 900000000, 990000000 
    },
/* Warlock */  
    {  0, 1, 2500, 5000, 10000, 20000,
       40000, 60000, 90000, 135000, 250000,
       375000, 750000, 1125000, 1500000, 1875000,
       2250000, 2625000, 3125000, 3625000, 4125000,
       4625000, 5125000, 5625000, 6125000, 6625000,
       7375000, 8125000, 8875000, 9425000, 10225000,
       11125000, 12025000, 12825000, 13625000, 14525000,
       15425000, 16325000, 17225000, 18125000, 19025000,
       20000000, 21000000, 22000000, 23000000, 24000000,
       25500000, 27000000, 28500000, 30000000, 32000000,
       34000000, 36000000, 39000000, 42000000, 47000000,
       52000000, 60000000, 69000000, 79000000, 90000000,      
       115000000, 135000000, 160000000, 185000000, 215000000,
       245000000, 275000000, 315000000, 350000000, 400000000,
       500000000, 600000000, 700000000, 800000000, 900000000
    },
/* Monk */
    {  0, 1, 1500, 3000, 6000, 13000, /* - 5 */
       27500, 55000, 110000, 225000, 450000, /* - 10 */
       675000, 900000, 1225000, 1550000, 1950000,  /* 15 */
       2350000, 2750000, 3150000, 3550000, 4000000,
       4500000, 5000000, 5550000, 6075000, 6650000,
       7250000, 8000000, 8800000, 9600000, 10400000 ,
       11225000, 12025000, 12825000, 13625000, 14525000,
       15425000, 16325000, 17225000, 18125000, 19025000,
       20000000, 21000000, 22000000, 23000000, 24000000,
       25500000, 27000000, 28500000, 30000000, 32000000,
       34000000, 36000000, 39000000, 42000000, 47000000,
       52000000, 60000000, 69000000, 79000000, 91000000,  /* 60 */
       111000000, 135000000, 160000000, 185000000, 215000000,
       245000000, 275000000, 315000000, 350000000, 400000000, /* 70 */
       500000000, 600000000, 700000000, 800000000, 900000000  /* 75 */
    },
 /* Madept */  
    { 0, 1, 2500, 5000, 10000, 20000,   /* 0-5 */
      40000, 60000, 90000, 135000, 250000,  /* 6-10 */
      375000, 750000, 1125000, 1500000, 1875000, /* 11-15 */
      2250000, 2625000, 3125000, 3625000, 4125000, /* 16-20 */
      4625000, 5125000, 5625000, 6125000, 6625000, /* 21-25 */
      7375000, 8125000, 8875000, 9425000, 10225000,/*26-30*/
      11125000, 12025000, 12825000, 13625000, 14525000,/*31-35*/
      15425000, 16325000, 17225000, 18125000, 19025000,/*36-40*/
      20000000, 21000000, 22000000, 23000000, 24000000,/*41-45*/
      25500000, 27000000, 28500000, 30000000, 32000000,/*46-50*/
      34000000, 36000000, 39000000, 42000000, 47000000,/*51-55*/
      52000000, 60000000, 69000000, 79000000, 90000000,/*56-60*/
      115000000, 135000000, 160000000, 185000000, 215000000,/*61-65*/
      245000000, 275000000, 315000000, 350000000, 400000000,/*66-70*/
      500000000, 600000000, 700000000, 800000000, 900000000 /*71-75*/
    },
 /* Druid */  
    { 0, 1, 2500, 5000, 10000, 20000,   /* 0-5 */
      40000, 60000, 90000, 135000, 250000,  /* 6-10 */
      375000, 750000, 1125000, 1500000, 1875000, /* 11-15 */
      2250000, 2625000, 3125000, 3625000, 4125000, /* 16-20 */
      4625000, 5125000, 5625000, 6125000, 6625000, /* 21-25 */
      7375000, 8125000, 8875000, 9425000, 10225000,/*26-30*/
      11125000, 12025000, 12825000, 13625000, 14525000,/*31-35*/
      15425000, 16325000, 17225000, 18125000, 19025000,/*36-40*/
      20000000, 21000000, 22000000, 23000000, 24000000,/*41-45*/
      25500000, 27000000, 28500000, 30000000, 32000000,/*46-50*/
      34000000, 36000000, 39000000, 42000000, 47000000,/*51-55*/
      52000000, 60000000, 69000000, 79000000, 90000000,/*56-60*/
      115000000, 135000000, 160000000, 185000000, 215000000,/*61-65*/
      245000000, 275000000, 315000000, 350000000, 400000000,/*66-70*/
      500000000, 600000000, 700000000, 800000000, 900000000 /*71-75*/
    }
};

/* MobChart TABLE FOR estimating correct level of mobiles */
/* HP, AC, HITROLL, AVG DMG, EXP, GOLD */
const struct chart_type mob_chart[MAX_LEVELS] = {
/*0*/	{ 0, 0, 0, 0.0, 0, 0},
	{18, 100, 1, 2.0, 100, 5},
	{30, 92, 1, 2.5, 200, 10},
	{43, 84, 2, 3.0, 400, 15},
	{55, 76, 2, 3.5, 500, 20},
	{68, 68, 3, 4.0, 750, 25},
	{80, 60, 3, 4.5, 1000, 30},
	{98, 52, 4, 5.0, 1250, 50},
	{115, 44, 4, 5.5, 1500, 70},
	{133, 36, 5, 6.0, 1750, 90},
	{163, 28, 5, 6.5, 2000, 110},  /* level 10 */
	{193, 20, 6, 7.0, 2500, 150},
	{223, 12, 6, 7.5, 3000, 200},
	{253, 4, 7, 8.0, 3500, 250},
	{283, -4, 7, 8.5, 4000, 300},
	{313, -12, 8, 9.0, 4500, 350},
	{343, -20, 8, 9.5, 5000, 400},
	{373, -28, 9, 10.0, 5500, 450},
	{403, -36, 9, 10.5, 6000, 500},
	{433, -44, 10, 11.0, 6500, 550},
	{463, -52, 10, 11.5, 7000, 600}, /* level 20 */
	{493, -60, 11, 12.0, 8000, 700},
	{523, -68, 11, 12.5, 9000, 800},
	{553, -76, 12, 13.0, 10000, 900},
	{583, -84, 12, 13.5, 11000, 1000},
	{613, -92, 13, 14.0, 12000, 1100},
	{643, -100, 13, 14.5, 13000, 1200},
	{656, -108, 14, 15.0, 14000, 1300},
	{694, -116, 14, 15.5, 15000, 1400},
	{758, -124, 15, 16.0, 16000, 1500},
	{847, -132, 15, 16.5, 17000, 1600}, /* level 30 */
	{962, -140, 16, 17.5, 19500, 1750},
	{1102, -148, 16, 18.5, 21000, 1900},
	{1268, -156, 17, 19.5, 22500, 2050},
	{1459, -164, 17, 20.5, 24000, 2200},
	{1676, -172, 18, 21.0, 25500, 2350},
	{1918, -180, 18, 21.5, 27000, 2500},
	{2186, -188, 19, 22.0, 28500, 2650},
	{2479, -196, 19, 22.5, 30000, 2800},
	{2798, -204, 20, 23.0, 31500, 2950},
	{3142, -212, 20, 23.5, 33000, 3100}, /* level 40 */
	{3512, -220, 21, 24.0, 36000, 3300},
	{3907, -228, 21, 24.5, 39000, 3500},
	{4328, -232, 22, 25.0, 42000, 3700},
	{4774, -244, 22, 25.5, 45000, 3900},
	{5246, -252, 23, 26.0, 48000, 4100},
	{5743, -260, 23, 26.5, 51000, 4300},
	{6278, -268, 24, 27.0, 54000, 4500},
	{6814, -276, 24, 27.5, 57000, 4700},
	{7388, -284, 25, 28.0, 60000, 4900},
	{7987, -292, 25, 28.5, 63000, 5100}, /* level 50 */
	{8612, -300, 26, 29.0, 66000, 5300},
	{9262, -308, 26, 29.5, 69000, 5500},
	{9938, -316, 27, 30.0, 72000, 5700},
	{10639, -324, 27, 30.5, 75000, 5900},
	{11366, -332, 28, 31.5, 78000, 6100},
	{12118, -340, 28, 32.5, 81000, 6300},
	{12896, -348, 29, 33.5, 84000, 6500},
	{13699, -356, 29, 34.5, 87000, 6700},
	{14528, -364, 30, 35.5, 90000, 6900},
	{15382, -370, 30, 36.5, 93000, 7100}, /* level 60 */
	{16262, -378, 31, 37.5, 96000, 7300},
	{17167, -386, 31, 38.5, 100000, 7600},
	{18098, -394, 32, 39.5, 104000, 7900},
	{19054, -402, 32, 40.5, 108000, 8200},
	{20036, -410, 33, 41.5, 112000, 8500},
	{21043, -418, 33, 42.5, 116000, 8700},
	{22076, -426, 34, 43.5, 120000, 9000},
	{23134, -434, 34, 44.5, 124000, 9300},
	{24192, -442, 35, 45.5, 128000, 9600},
	{25250, -450, 36, 46.5, 132000, 9900}, /* level 70 */
	{26308, -458, 37, 47.5, 136000, 10200},
	{27366, -466, 38, 48.5, 140000, 10600},
	{28424, -474, 39, 49.5, 144000, 10900},
	{30000, -482, 40, 50.0, 147000, 11200},
	{31181, -490, 40, 50.0, 150000, 11500}   /* level 75 */
};

// strings for item type flags
const char	*item_types[] = {
   "UNDEFINED",
   "Light source",
   "Scroll",
   "Wand",
   "Staff",
   "Weapon",
   "*Ranged",
   "*Ointment",
   "Treasure",
   "Armor",      /* 10 */
   "Potion",
   "*Board",
   "Other",
   "Trash",
   "*Trap",
   "Container",
   "Note",
   "Liquid container",
   "Key",
   "Food",     /* 20 */
   "Money",
   "Pen",
   "Boat",
   "Fountain",
   "Portal",
   "Gate",
   "Gem",
   "Tome",
   "\n"
};

/* for obj materials */
const char	*material_types[] = {
   "an unknown substance",
   "paper",
   "cloth",
   "glass",
   "pottery",
   "wood",
   "crystal",
   "leather",
   "gold",
   "brass",
   "bronze",
   "silver",
   "platinum",
   "iron",
   "steel",
   "mithril",
   "adamantine",
   "force",
   "shell",
   "rope",
   "bone",
   "stone",
   "some type of gemstone",
   "diamond",
   "food",
   "copper",
   "an organic material",
   "\n"
};

/* for obj materials' hits! */
const int	material_hits[] = {
   0,
   50,
   100,
   150,
   200,
   250,
   300,
   500,
   700,
   900,
   1100,
   1300,
   1500,
   2000,
   4000,
   6000,
   8000,
   -1,
   225,
   275,
   1200,
   1400,
   3000,
   5000,
   1,
   1000,
   20
};

/* room alter types RoA */
const char *alter_types[] = {
  "increase",
  "decrease",
  "\n"
};

/* ritual names NON CAP for searchblock */
/* NOTE, these follow the DELAY_ order in structures.h, not the skil nums
	 in magic.h -jtrhone*/
const char  *ritual_names[] = {
  "UNDEF",
  "purification",
  "elusion",
  "fortitude",
  "bearstrength",
  "protection",
  "truesight",
  "eagleeyes",
  "stone",
  "snakefire",
  "endurance",
  "healing",
  "cougarclaws",
  "truce",
  "location",
  "fang",
  "crow",
  "wolf",
  "\n"
};

// shaman ritual definitions for each ritual
/* skillnum, spirit, self, targ, obj, group, combat, special */
const struct ritual_type ritual_specs[] = {
  {-1, "UNDEF", 0, 0, 0, 0, 0, 0},
  {SKILL_PURGE,       "snake",     1, 1, 1, 1, 0, 0, do_ritual_purge},
  {SKILL_ELUSION,     "weasel",    1, 1, 0, 1, 0, 0, do_ritual_elusion},
  {SKILL_FORTITUDE,   "herdbeast", 1, 1, 0, 1, 0, 0, do_ritual_fortitude},
  {SKILL_SP_STRENGTH, "bear",      1, 1, 0, 1, 0, 0, do_ritual_sp_strength},
  {SKILL_PROTECTION,  "tortise",   1, 1, 0, 1, 0, 0, do_ritual_protection},
  {SKILL_TRUESIGHT,   "hawk",      1, 1, 0, 1, 0, 0, do_ritual_truesight},
  {SKILL_EAGLE_EYES,  "eagle",     1, 1, 0, 1, 0, 0, do_ritual_eagle_eyes},
  {SKILL_STONE,       "mountain",  1, 1, 0, 1, 0, 0, do_ritual_stone},
  {SKILL_SNAKE_FIRE,  "snake",     0, 1, 0, 0, 1, 0, do_ritual_snakefire},
  {SKILL_ENDURANCE,   "earth",     1, 1, 0, 0, 0, 0, do_ritual_endurance},
  {SKILL_HEAL,	      "snake",     1, 1, 0, 1, 0, 0, do_ritual_heal},
  {SKILL_CLAWS,	      "cougar",    1, 1, 0, 1, 1, 0, do_ritual_claws},
  {SKILL_TRUCE,	      "frog",      1, 1, 0, 0, 0, 0, do_ritual_truce},
  {SKILL_LOCATION,    "lynx",      0, 0, 0, 0, 0, 0, do_ritual_location},
  {SKILL_FANG,	      "snake",     0, 1, 0, 0, 1, 0, do_ritual_fang},
  {SKILL_CROW,	      "crow",      1, 1, 0, 1, 0, 0, do_ritual_crow},
  {SKILL_WOLF,	      "wolf",      1, 1, 0, 0, 1, 0, do_ritual_wolf}
};

/* bard inst names */
const char *inst_names[] = {
	"lute", 
	"harp", 
	"guitar", 
	"mandolin", 
	"zither", 
	"lyre", 
	"glockenspiel", 
	"dulcimer",
        "lyra",
	"\n"
};

/* bard songs, names CAPITALIZED */
const char  *song_names_cap[] = {
  "none",
  "Gullem's Shelter",
  "Sylune's Sling",
  "Spirit Eyes",
  "Glad Revelations",
  "The Hound's Nose",  /* 5 */
  "Inner Spirit",
  "Sunset Serenade",
  "Serpent's Gaze",
  "Azurel's Balm",
  "Harsh Dissonance",  /* 10 */
  "Hero's Feast",
  "Winter's Storm",
  "Shades Seclusion",
  "Storm Shielded",
  "Calypso's Lullaby",  /* 15 */
  "God's Favor",
  "Spring's Tempest",
  "Bog March",
  "Trial's Transfer",
  "Baan's Beguiling",  /* 20 */
  "Amitar's Asylum",
  "Triumph of Heroes",
  "Tortured Soul",
  "Goddess' Balm",
  "Jemidon's Pact",
  "Song of Creation",
  "\n"
};

/* bard songs, names NON CAPITALIZED for search block */
const char  *song_names[] = {
  "none",
  "gullem's shelter",
  "sylune's sling",
  "spirit eyes",
  "glad revelations",
  "the hound's nose",
  "inner spirit",
  "sunset serenade",
  "serpent's gaze",
  "azurel's balm",
  "harsh dissonance",
  "hero's feast",
  "winter's storm",
  "shades seclusion",
  "storm shielded",
  "calypso's lullaby",
  "god's favor",
  "spring's tempest",
  "bog march",
  "trial's transfer",
  "baan's beguiling",
  "amitar's asylum",
  "triumph of heroes",
  "tortured soul",
  "goddess' balm",
  "jemidon's pact",
  "song of creation",
  "\n"
};

/*  Found in bard.h  RoA */
const struct song_type song_types[] = {
  {0, 0, 0, 0, 0, 0, 0, 0, 0, NULL},
  {2, 2, 1, 1, 1, 0, 5, 0, 0, do_gullems},
  {3, 2, 0, 1, 0, 0, 10, 0, 1, do_sylunes},
  {4, 2, 1, 1, 0, 0, 10, 0, 0, do_spirit},
  {5, 1, 0, 1, 0, 1, 20, 0, 1, do_glad},
  {6, 2, 1, 1, 1, 0, 20, 0, 1, do_hounds},
  {7, 4, 1, 1, 0, 0, 25, 5, 0, do_inner},
  {8, 2, 0, 1, 0, 0, 15, 2, 1, do_sunset},
  {9, 2, 0, 1, 0, 0, 25, 0, 1, do_serpent},
  {10, 1, 1, 1, 0, 0, 15, 0, 1, do_azurels},
  {11, 3, 0, 1, 0, 0, 30, 20, 1, do_harsh},
  {12, 3, 1, 1, 1, 0, 15, 0, 0, do_heroes},
  {13, 2, 0, 1, 0, 0, 25, 0, 1, do_winters},
  {14, 1, 1, 0, 0, 0, 20, 10, 1, do_shades},
  {15, 3, 1, 1, 1, 0, 10, 5, 0, do_storm},
  {16, 2, 0, 1, 0, 0, 25, 20, 1, do_calys},
  {17, 2, 1, 1, 0, 0, 75, 0, 0, do_gods},
  {18, 2, 0, 1, 0, 0, 30, 0, 1, do_springs},
  {20, 4, 0, 1, 0, 0, 10, 5, 1, do_bog},
  {24, 2, 0, 1, 0, 0, 25, 15, 1, do_trials},
  {28, 2, 0, 1, 0, 0, 50, 25, 0, do_baans},
  {30, 4, 1, 0, 0, 0, 60, 40, 0, do_amitars},
  {35, 5, 1, 1, 0, 0, 75, 50, 0, do_triumph},
  {40, 5, 0, 1, 0, 0, 100, 75, 1, do_tortured},
  {55, 5, 1, 0, 0, 0, 100, 90, 0, do_goddess},
  {60, 5, 0, 1, 0, 0, 120, 90, 1, do_jemidon},
  {70, 10, 1, 0, 0, 0, 500, 0, 0, do_creation}
};

// what levels do monks lose the ability to wear each
// updated 5/28/98 -jtrhone for slot revamp
const int monk_restricts[MAX_WEAR] = {
   5, /* armor head */
   5, /* armor face */
   76, /* ear 1 */
   76, /* ear 2 */
   76,  /* neck 1 */
   76,  /* neck 2 */
   5, /* armor body */
   76, /* armor waiste */
   76, /* armor about */
   9, /* armor arms */
   76, /* armor wrist 1 */
   76, /* armor wrist 2 */
   76, /* armor hands */
   15, /* ring 1 */
   15, /* ring 2 */
   15, /* ring 3 */
   15, /* ring 4 */
   9, /* armor legs */
   76, /* armor feet */
   7, /* weapon wield */
   76, /* hold spot */
};

/* For the grant command, for stat. */
// grant strings 
const char   *grant_bits[] = {
   "VNUM",
   "VSTAT",
   "LOAD",
   "FREEZE",
   "THAW",
   "SNOOP",
   "AT",
   "SWITCH",
   "MOWSAVE",
   "SET",
   "ASSASSIN",
   "BAN",
   "UNBAN",
   "SHUTDOWN",
   "REBOOT",
   "GECHO",
   "PAGE",
   "MOBEDIT", 
   "OBJEDIT",
   "ROOMEDIT",
   "OLC",
   "TELEPORT",
   "TRANS",
   "PURGE",
   "AWARD",
   "WAREDIT",
   "WARDEL",
   "SOCEDIT",
   "SOCDEL",
   "ZOPCLO",
   "HELPED",
   "\n"
};

// eq wear strings
// updated 5/28/98 -jtrhone
const char	*wear_bits[] = {
   "Take",
   "Fingers",
   "Neck",
   "Body",
   "Head",
   "Legs",
   "Feet",
   "Hands",
   "Arms",
   "Face",
   "About",
   "Waist",
   "Wrist",
   "Wield",
   "Hold",
   "Ears",
   "\n"
};

// object extra flag strings
const char	*extra_bits[] = {
   "Glowing",
   "*UNUSED",
   "!Locate",
   "*UNUSED",
   "Evil",
   "Invisible",
   "Magical",
   "!Drop",
   "Blessed",
   "!Good",
   "!Evil",
   "!Neutral",
   "!Rent",
   "!Donate",
   "!Invis",
   "SpellEq",
   "Recharge",
   "!Mage",
   "!Cleric",
   "!Warrior",
   "!Thief",
   "!Bard",
   "Thief_Hold",
   "!Shaman",
   "Buoyant",
   "Waterproof",
   "!Ranger",
   "Instrument",
   "Anchored",
   "!Warlock",
   "!Monshai",
   "\n"
};

// objects second bitvector of strings
const char	*extra_bits2[] = {
   "!Human",
   "!Elf",
   "!Half_Elf",
   "!Orc",
   "!Ogre",
   "!Drow",
   "!Dwarf",
   "!Pixie",
   "!Nixie",
   "!Drakyn",
   "Bank",
   "!Auction",
   "Throwable",
   "!Madept",
   "!Druid",
   "!Assassin",
   "Assassin",
   "RemortOnly",
   "\n"
};

/* The following defs are for zone_flags  RoA*/
const char	*zone_bits[] = {
  "Arena",
  "Testing",
  "Immortal",
  "*OnQueue",
  "*Closed",
  "*Locked",
  "*Idle",
  "+System",
  "Hidden",
  "*Freed",
  "*TStorm",
  "*Blizzard",
  "*ExitGenAll",
  "*ExitGenLat",
  "*DescGen",
  "\n"
};

// room flag strings
const char	*room_bits[] = {
   "Dark",
   "Death",
   "!Mob",
   "!Weather",
   "Good",
   "Neutral",
   "Evil",
   "!Magic",
   "RoomProc",
   "Private",
   "God Room",
   "*",
   "Fly_Death",
   "Peaceful",
   "!Recall",
   "Flight",
   "Underwater",
   "AlterMana",
   "!Mage",
   "!Bard",
   "!Ranger",
   "!Warrior",
   "!Cleric",
   "!Shaman",
   "!Thief",
   "Windy",
   "!Teleport",
   "Random",
   "Portal",
   "AlterHit",
   "AlterMove",
   "\n"
};

// room flags (2) strings
const char	*room_bits2[] = {
   "!Human",
   "!Elf",
   "!Half_Elf",
   "!Orc",
   "!Ogre",
   "!Drow",
   "!Dwarf",
   "!Pixie",
   "!Nixie",
   "!Drakyn",
   "*House",
   "*HouseCrash",
   "*SvRmCrash",
   "Donation",
   "Soundproof",
   "Transport",
   "Dump",
   "!Warlock",
   "!Monshai",
   "!Track",
   "Confusion",
   "Source",
   "!AutoGen",
   "+Save Room",
   "!Summon",
   "!Madept",
   "!Druid",
   "Wall of Fog",
   "!Snare",
   "Htown Portal",
   "DoubleTime",
   "\n"
};

// strings for exit flags
const char	*exit_bits[] = {
   "IsDoor",
   "IsClosed",
   "IsLocked",
   "IsSecret",
   "IsJammed",
   "!Pick",
   "AutoShut",
   "!AutoGen",
   "AutoLock",
   "!DoorBash",
   "!Knock",
   "!Trap",
   "!Jam",
   "!Obscure",
   "\n"
};

// strings for exit flags
const char	*container_bits[] = {
   "CLOSEABLE",
   "!PICK",
   "ISCLOSED",
   "ISLOCKED",
   "*TRAP_POISONED", 
   "*TRAP_EXPLOSION",
   "\n" 
};


// terrain type strings
const char	*terrain_types[] = {
   "Inside",
   "City",
   "Field",
   "Forest",
   "Hills",
   "Mountains",
   "Water Swim",
   "Water NoSwim",
   "Underwater",
   "Air",
   "\n"
};

// strings for character aff_ flags
const char	*affected_bits[] = 
{
   "Blinded",
   "Invisible",
   "Detect Evil",
   "Detect Invis",
   "Detect Magic",
   "Sense Life",
   "*Held",
   "Sanctified",
   "*Grouped",
   "Cursed",
   "Hit Regen",
   "Poisoned",
   "Prot-Evil",
   "Mana Regen",
   "Parry",
   "Move Regen",
   "Sleeping",
   "Dodging",
   "Sneaking",
   "Hidden",
   "Afraid",
   "*Charmed",
   "*Follow",
   "Wimpy",
   "Infra",
   "Hasted",
   "Gills",
   "Winged",
   "Heartsight",
   "Truce",
   "Prot-Good",
   "\n"
};

// strings for character aff2_ flags
const char	*affected2_bits[] = {
   "Claws",
   "Crow",
   "Wolf",
   "Light",
   "Stoneskin",
   "Calm",
   "Illuminate",
   "*Switched",
   "*RSnooping",
   "\n"
};

// for character CHAR_FLAGS
const char	*char_bits[] = {
   "Stunned",
   "Redirected",
   "Hit_DT",
   "Mounted",
   "Shop_Open",
   "Familiar",
   "CharTemp",
   "Bacame",
   "Subdued",
   "GRP",
   "ChatMode",
   "HasBellowed",
   "Eavesdrop",
   "Lowstrike",
   "Bladedance",
   "OneAttack",
   "Sidestep",
   "Disembowel",
   "Hamstrung",
   "LoseAttack",
   "Recording",
   "Playback",
   "\n"
};

// for APPLY_XXXXXX
const char	*apply_types[] = {
   "None.",
   "Strength",
   "Dexterity",
   "Intelligence",
   "Wisdom",
   "Constitution",
   "Sex",
   "Class",
   "Level",
   "Age",
   "Char_Weight",
   "Char_Height",
   "Mana",
   "Hit",
   "Move",
   "Gold",
   "Experience",
   "Armor",
   "Hitroll",
   "Damroll",
   "Save_vs_Heat",
   "Save_vs_Cold",
   "Save_vs_Magic",
   "Save_vs_Poison",
   "Save_vs_Breath",
   "Hit_Regen",
   "Mana_Regen",
   "Move_Regen",
   "Rituals",
   "\n"
};

// strings for mob sizes
const char	*size_types[] = {
   "Enormous",
   "Huge",
   "Large",
   "Medium",
   "Small",
   "Very Small",
   "Tiny",
   "\n"
};

// strings for npc class bits
const char	*npc_class_names[] = {
 "Human",
 "Elven",
 "HalfElven",
 "Drow",
 "Orc",
 "Ogre",
 "Drakyn",
 "Pixie",
 "Nixie",
 "Dragon",
 "Mammal",
 "Avian",
 "Insect",
 "Arachnid",
 "Reptile",
 "Goblinoid",
 "Biped",
 "Quadriped",
 "Aquatic",
 "Crustacean",
 "Vegatation",
 "Ethereal",
 "Magical",
 "Crystalline",
 "Firebased",
 "Icebased",
 "Airbased",
 "Earthbased",
 "Giant",
 "Undead",
 "Dwarven",
 "\n"
};

// strings for SPC_ flags on mobs
const char	*spc_bits[] = {
   "Hunter",
   "Mage",
   "War_Cry",
   "Peace_Man",
   "Pickpocket",
   "Warrior",
   "Cleric",
   "Venomous",
   "Undead",
   "Shopkeeper",
   "!Kill",
   "!Buy",
   "GMaster",
   "Reactor",
   "Random",
   "Fido",
   "Janitor",
   "Healer",
   "Fire Breath",
   "Acid Breath",
   "Gas Breath",
   "Lightning Breath",
   "Frost Breath",
   "Fixer",
   "Mailman",
   "MobProc",
   "Bleeder",
   "Teleporter",
   "Cityguard",
   "DTime",
   "QHunter",
   "\n"
};

// strings for the good ole act bitvector on mobs
// now like MOB_FLAGGED(blah, blah)
const char	*action_bits[] = {
   "Special",
   "Sentinel",
   "Scavenger",
   "IsNPC",
   "Nice-Thief",
   "Aggressive",
   "StayZone",
   "Wimpy",
   "Aggr_Evil",
   "Aggr_Good",
   "Aggr_Neutral",
   "Memory",
   "Helper",
   "2nd_Attack",
   "3rd_Attack",
   "Mega_Attack",
   "Quick Heal",
   "Smart",
   "Mountable",
   "!Summon",
   "Swimmer",
   "Gills",
   "!Charm",
   "!Hold",
   "!Calm",
   "Corpseless",
   "Split Kill",
   "!Blind",
   "!Gate",
   "Quest_Mob",
   "Player Shopkeep",
   "\n"
};

// MOB2_FLAGS 
const char	*mob2_bits[] = {
   "Trainer",
   "Assassin",
   "No_MTarg",
   "\n"
};

// strings for player flags plr_XXX
const char	*player_bits[] = {
   "In_Tag",
   "Tagged",
   "Frozen",
   "DONTSET",
   "Writing",
   "Mailing",
   "Crash Saved",
   "Site Ok",
   "Muted",
   "!Title",
   "Deleted",
   "LoadRoom",
   "!Wizlist",
   "!Delete",
   "Invis Start",
   "Cryo Saved",
   "Force Saved",
   "Building",
   "Ambassador",
   "Ritual",
   "Arena",
   "Line",
   "Trusted",
   "Info Chan",
   "AFK",
   "Refresh",
   "Legend",
   "Log All",
   "ExEdit",
   "!Emote",
   "VT Map",
   "\n"
};

// for PLR2_FLAGS -roa
const char	*player2_bits[] = {
   "*R_MAGE",
   "*R_CLERIC",
   "*R_THIEF",
   "*R_WARRIOR",
   "*R_SHAMAN",
   "*R_RANGER",
   "*R_BARD",
   "*R_WARLOCK",
   "*R_MONK",
   "*R_MADEPT",
   "*R_DRUID",
   "*UNUSED",
   "*UNUSED",
   "*UNUSED",
   "*UNUSED",
   "*UNUSED",
   "*UNUSED",
   "*UNUSED",
   "*UNUSED",
   "*UNUSED",
   "*CLAN_ASS",
   "*IPP",
   "*MENTOR",
   "*CLIEDIT",
   "*CHAT",
   "*CLIWHO",
   "*CLICHAN",
   "*CLIEQ",
   "*CLIINV",
   "*CLIMUTE",
   "*CLISTAT",
   "\n"
};

// strings for player PRF flags
const char	*preference_bits[] = {
   "Brief",
   "Compact",
   "Deaf",
   "!Tell",
   "ShortX",
   "!Question",
   "ClanChan",
   "AssassinChan",
   "!Hassle",
   "Quest",
   "Summonable",
   "!Repeat",
   "HolyLight",
   "Color",
   "ArenaChan",
   "!Wiz",
   "Syslog1",
   "Syslog2",
   "!Auction",
   "!Gossip",
   "!Grats",
   "Roomflags",
   "Autoexits",
   "Incognito",
   "Mortlog",
   "!Music",
   "ReqAssassin",
   "Assassin",
   "AutoGold",
   "AutoLoot",
   "AutoSplit",
   "\n"
};

// for PRF2_FLAGS -roa
const char	*preference2_bits[] = {
   "!Give",
   "!Arena",
   "*HasChosen",
   "\n"
};

// for QFLAGS -roa
const char	*qbits[] = {
  "Activated",
  "Solo Only",
  "Mob ByeBye",
  "Time Limit",
  "One Time",
  "Immed_Reward",
  "Reward Exp",
  "Reward Gold",
  "Reward QPts",
  "Reward Object",
  "Notify Char",
  "Notify World",
  "Notify Zone",
  "Min Level",
  "Max Level",
  "Enemy During",
  "Enemy After",
  "Remains",
  "\n"
};

// for GENERIC anti race/class flags (quest, plshops, etc) -roa
const char	*rcbits[] = {
  "!Human",
  "!Elf",
  "!Half-Elf",
  "!Orc",
  "!Ogre",
  "!Drow",
  "!Dwarf",
  "!Pixie",
  "!Nixie",
  "!Drakyn",
  "!Mage",
  "!Bard",
  "!Ranger",
  "!Warrior",
  "!Cleric",
  "!Shaman",
  "!Thief",
  "!Warlock",
  "!Monk",
  "!Madept",
  "!Druid",
  "\n"
};

// strings for character positions
const char	*position_types[] = {
   "Dead",
   "Mortally wounded",
   "Incapacitated",
   "Stunned",
   "Sleeping",
   "Resting",
   "Sitting",
   "Fighting",
   "Standing",
   "Floating",
   "Mounted",
   "\n"
};

// ban types on sites
const char	*ban_types[] = {
   "no",
   "new",
   "select",
   "all",
   "ERROR"
};

// strings for client clpid bitvector
const char	*clpid_bits[] = {
   "POLICIES",
   "TEXTMSG",
   "SOUNDQUERY",
   "SOUNDFILE",
   "EDITREQUEST",
   "\n"
};

const char *trap_types[] = {
  "dart trap",
  "poison trap",
  "room snare",
  "fire trap",
  "lightning trap",
};

const char *trap_bits[] = {
  "Armed",
  "DisArmed",
  "Revealed",
  "RmAffect",
  "AntiRemove",
  "AntiDetect",
  "Timed",
  "\n"
};

/* [ch] true strength apply (all) */
/* hit, damage, carry weight, wield weight */
const struct str_app_type str_app[NUM_STAT_POINTS] = {
   { -5, -4,   0,  0 },  /* strength 0 */
   { -5, -4,   3,  1 },
   { -3, -2,   3,  2 },
   { -3, -1,  10,  3 },
   { -2, -1,  25,  4 },
   { -2, -1,  55,  5 },  /* strength 5 */
   { -1, 0,   80,  6 },
   { -1, 0,   90,  7 },
   { 0, 0,   100,  8 },
   { 0, 0,   100,  9 },
   { 0, 0,   115, 10 }, /* strength 10 */
   { 0, 0,   115, 11 },
   { 0, 0,   140, 12 },
   { 0, 0,   140, 13 },
   { 0, 0,   170, 14 },
   { 0, 0,   170, 15 }, /* strength 15 */
   { 0, 1,   195, 16 },
   { 1, 1,   220, 18 },
   { 1, 2,   255, 20 },
   { 3, 7,   640, 40 },
   { 3, 8,   700, 40 }, /* strength 20 */
   { 4, 9,   810, 40 },
   { 4, 10,  970, 40 },
   { 5, 11, 1130, 40 },
   { 6, 12, 1440, 40 },
   { 7, 14, 1750, 40 }, /* strength 25 */
   { 1, 3,   280, 22 },
   { 2, 3,   305, 24 },
   { 2, 4,   330, 26 },
   { 2, 5,   380, 28 },
   { 3, 6,   480, 30 } /* strength 30 highest true str available now */
};

/* [dex] skill apply (thieves only) */
const struct dex_skill_type dex_app_skill[NUM_STAT_POINTS] = {
   { -99, -99, -90, -99, -60 }, /* dex 0 */
   { -90, -90, -60, -90, -50 },
   { -80, -80, -40, -80, -45 },
   { -70, -70, -30, -70, -40 },
   { -60, -60, -30, -60, -35 },
   { -50, -50, -20, -50, -30 },
   { -40, -40, -20, -40, -25 },
   { -30, -30, -15, -30, -20 },
   { -20, -20, -15, -20, -15 },
   { -15, -10, -10, -20, -10 },
   { -10, -5, -10, -15, -5 },  /* dex 10 */
   { -5,  0, -5, -10,  0 },
   { 0,  0,  0, -5,  0 },
   { 0,  0,  0,  0,  0 },
   { 0,  0,  0,  0,  0 },
   { 0,  0,  0,  0,  0 },
   { 0,  5,  0,  0,  0 },
   { 5, 10,  0,  5,  5 },
   { 10, 15,  5, 10, 10 },
   { 15, 20, 10, 15, 15 },
   { 15, 20, 10, 15, 15 }, /* dex 20 */
   { 20, 25, 10, 15, 20 },
   { 20, 25, 15, 20, 20 },
   { 25, 25, 15, 20, 20 },
   { 25, 30, 15, 25, 25 },
   { 25, 30, 15, 25, 25 },
   { 30, 30, 20, 25, 25 },
   { 30, 30, 20, 25, 25 },
   { 30, 35, 20, 30, 30 },
   { 30, 35, 20, 30, 30 },
   { 35, 35, 25, 30, 30 } /* dex 30 */
};

/* [dex] apply (all) */
/* reaction, miss_att, defensive */
struct dex_app_type dex_app[NUM_STAT_POINTS] = {
   { -7, -7, 6 }, /* dex 0 */
   { -6, -6, 5 },
   { -4, -4, 5 },
   { -3, -3, 4 },
   { -2, -2, 3 },
   { -1, -1, 2 },
   { 0, 0, 1 },
   { 0, 0, 0 },
   { 0, 0, 0 },
   { 0, 0, 0 },
   { 0, 0, 0 }, /* dex 10 */
   { 0, 0, 0 },
   { 0, 0, 0 },
   { 0, 0, 0 },
   { 0, 0, 0 },
   { 0, 0, -1 },
   { 1, 1, -2 },
   { 2, 2, -3 },
   { 2, 2, -4 },
   { 3, 3, -4 },
   { 3, 3, -4 }, /* dex 20 */
   { 4, 4, -5 },
   { 4, 4, -5 },
   { 4, 4, -5 },
   { 5, 5, -6 },
   { 5, 5, -6 },
   { 5, 5, -6 },
   { 5, 5, -6 },
   { 6, 6, -7 },
   { 6, 6, -7 },
   { 6, 6, -7 } /* dex 30 */
};

/* [con] apply (all) */
/* adjust hitp per level, shock? */
struct con_app_type con_app[NUM_STAT_POINTS] = {
   { -9, 1  },  /* 0 con -9 hitp per level, 1% shock cushion */
   { -8, 4  },
   { -7, 7  },
   { -6, 10 },
   { -5, 13 },
   { -4, 16 }, /* 5 con */
   { -3, 19 },
   { -3, 22 },
   { -2, 25 },  /* 8 con, -2 hitp, 25% shock cushion */
   { -2, 28 },
   { -1, 31 }, /* 10 con */
   { -1, 34 },
   { 0, 37 },
   { 0, 40 }, /* 13 con, no bonus hitp, 40 percent shock cushion */
   { 1, 45 },
   { 1, 50 },
   { 2, 55 },
   { 2, 60 },
   { 3, 65 },  /* 18 con, +3 hit per level 65% shock cushion */
   { 4, 70 },
   { 4, 75 }, /* 20 con */
   { 5, 80 },
   { 5, 85 },
   { 5, 90 },
   { 6, 95 },
   { 6, 99 },
   { 6, 100 },
   { 7, 100 },
   { 7, 100 },
   { 8, 100 },
   { 8, 100 } /* 30 con */
};