/************************************************************************ 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 */ };