/* GLOBAL.C:
*
* Global variables.
*
* Copyright (C) 1991, 1992, 1993, 1997 Brooke Paul & Brett Vickers
*
*/
#include "mstruct.h"
#define MIGNORE
#include "mextern.h"
#ifdef DMALLOC
#include "/usr/local/include/dmalloc.h"
#endif
/*****************************************************************
*
* Configurable settings. These are the defaults for setting that
* can be overridden from the mordor.cf file in the BINPATH
*
******************************************************************/
/* DM's name */
char dmname[][20] = {
"Sorahl", "China", "Sandman", "Ugluk", "Darwin", "Tesseract", "Erech"
};
char title[80]="Mordor MUD Server";
char auth_questions_email[80]="";
char questions_to_email[80]="";
char register_questions_email[80]="";
char account_exists[80]="You already have an account here.";
char dm_pass[20]=""; /* No DM creation by default */
char tx_mesg1[80]="The Ithil Express has docked in Parth.";
char tx_mesg2[80]="The Ithil Express has docked in Celduin.";
char sunrise[80]="The sun rises.";
char sunset[80]="The sun disappears over the horizon.";
char earth_trembles[80]="The earth trembles under your feet.";
char heavy_fog[80]="A heavy fog blankets the earth.";
char beautiful_day[80]="It's a beautiful day today.";
char bright_sun[80]="The sun shines brightly across the land.";
char glaring_sun[80]="The glaring sun beats down upon the inhabitants of the world.";
char heat[80]="The heat today is unbearable.";
char still[80]="The air is still and quiet.";
char light_breeze[80]="A light breeze blows from the south.";
char strong_wind[80]="A strong wind blows across the land.";
char wind_gusts[80]="The wind gusts, blowing debris through the streets.";
char gale_force[80]="Gale force winds blow in from the sea.";
char clear_skies[80]="Clear, blue skies cover the land.";
char light_clouds[80]="Light clouds appear over the mountains.";
char thunderheads[80]="Thunderheads roll in from the east.";
char light_rain[80]="A light rain falls quietly.";
char heavy_rain[80]="A heavy rain begins to fall.";
char sheets_rain[80]="Sheets of rain pour down from the skies.";
char torrent_rain[80]="A torrent soaks the ground.";
char no_moon[80]="The sky is dark as pitch.";
char sliver_moon[80]="A sliver of silver can be seen in the night sky.";
char half_moon[80]="Half a moon lights the evening skies.";
char waxing_moon[80]="The night sky is lit by the waxing moon.";
char full_moon[80]="The full moon shines across the land.";
int ANSILINE=0;
int AUTOSHUTDOWN=0;
int CHECKDOUBLE=0;
int EATNDRINK=0;
int GETHOSTBYNAME=0;
int HEAVEN=0;
int ISENGARD=0;
int LASTCOMMAND=0;
int PARANOID=0;
int RECORD_ALL=0;
int RFC1413=0;
int SECURE=0;
int SCHED=0;
int SUICIDE=0;
int PORTNUM=4040;
int CRASHTRAP=0;
int HASHROOMS=0;
int NICEEXP=0;
int SAVEONDROP=0;
/* char ROOMPATH, MONPATH, OBJPATH, PLAYERPATH;
char DOCPATH, POSTPATH, BINPATH, LOGPATH; */
/* end configurable settings */
int Tablesize;
int Cmdnum;
long Time;
long StartTime;
struct lasttime Shutdown;
struct lasttime Weather[5];
int Spy[PMAX];
int Numlockedout;
lockout *Lockout;
struct {
creature *ply;
iobuf *io;
extra *extr;
} Ply[PMAX];
struct {
short hpstart;
short mpstart;
short hp;
short mp;
short ndice;
short sdice;
short pdice;
} class_stats[15] = {
{ 0, 0, 0, 0, 0, 0, 0},
{ 19, 2, 6, 2, 1, 6, 0}, /* assassin */
{ 24, 1, 8, 1, 1, 3, 1}, /* barbarian */
{ 16, 4, 5, 4, 1, 4, 0}, /* cleric */
{ 22, 2, 7, 2, 1, 5, 0}, /* fighter */
{ 14, 5, 4, 5, 1, 3, 0}, /* mage */
{ 19, 3, 6, 3, 1, 4, 0}, /* paladin */
{ 18, 3, 6, 3, 2, 2, 0}, /* ranger */
{ 18, 3, 5, 2, 2, 2, 1}, /* thief */
{ 15, 3, 5, 4, 2, 2, 1}, /* bard */
{ 17, 3, 6, 2, 1, 3, 0}, /* monk */
{ 15, 4, 5, 3, 1, 4, 0}, /* druid */
{ 15, 4, 4, 4, 1, 3, 0}, /* alchemist */
{ 30, 30, 10, 10, 5, 5, 5}, /* caretaker */
{ 30, 30, 10, 10, 5, 5, 5} /* DM */
};
int bonus[35] = { -4, -4, -4, -3, -3, -2, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 };
char class_str[][15] = { "None", "Assassin", "Barbarian", "Cleric",
"Fighter", "Mage", "Paladin", "Ranger", "Thief", "Bard", "Monk",
"Druid", "Alchemist", "Caretaker","Dungeonmaster" };
char race_str[][15] = { "Unknown", "Dwarf", "Elf", "Half-elf", "Halfling",
"Human", "Orc", "Half-giant", "Gnome", "Troll", "Half-orc", "Ogre","Dark-elf", "Goblin" };
char race_adj[][15] = { "Unknown", "Dwarven", "Elven", "Half-elven",
"Halfling", "Mannish", "Orcish", "Half-giant", "Gnomish", "Trollkin",
"Half-orc", "Ogre", "Dark-elf", "Goblin" };
short level_cycle[][10] = {
/* 2 3 4 5 6 7 8 9 10 11 */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ CON, PTY, STR, INT, DEX, INT, DEX, PTY, STR, DEX }, /* assassin */
{ INT, DEX, PTY, CON, STR, CON, DEX, STR, PTY, STR }, /* barbarian */
{ STR, DEX, CON, PTY, INT, PTY, INT, DEX, CON, INT }, /* cleric */
{ PTY, INT, DEX, CON, STR, CON, INT, STR, DEX, STR }, /* fighter */
{ STR, DEX, PTY, CON, INT, CON, INT, DEX, PTY, INT }, /* mage */
{ DEX, INT, CON, STR, PTY, STR, INT, PTY, CON, PTY }, /* paladin */
{ PTY, STR, INT, CON, DEX, CON, DEX, STR, INT, DEX }, /* ranger */
{ INT, CON, PTY, STR, DEX, STR, CON, DEX, PTY, DEX }, /* thief */
{ CON, PTY, STR, INT, DEX, INT, DEX, PTY, STR, DEX }, /* bard */
{ PTY, CON, STR, DEX, INT, CON, INT, PTY, CON, STR }, /* monk */
{ STR, DEX, CON, PTY, INT, CON, INT, DEX, CON, INT }, /* druid */
{ STR, DEX, PTY, CON, INT, CON, INT, CON, PTY, INT }, /* alchemist */
{ STR, DEX, INT, CON, PTY, STR, DEX, INT, CON, PTY }, /* caretaker */
{ STR, DEX, INT, CON, PTY, STR, DEX, INT, CON, PTY } /* DM */
};
short thaco_list[][20] = {
{ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20 },
/*a*/ { 18,18,18,17,17,16,16,15,15,14,14,13,13,12,12,11,10,10, 9, 9 },
/*b*/ { 20,19,18,17,16,15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 3, 2 },
/*c*/ { 20,20,19,18,18,17,16,16,15,14,14,13,13,12,12,11,10,10, 9, 8 },
/*f*/ { 20,19,18,17,16,15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 3, 3 },
/*m*/ { 20,20,19,19,18,18,18,17,17,16,16,16,15,15,14,14,14,13,13,11 },
/*p*/ { 19,19,18,18,17,16,16,15,15,14,14,13,13,12,11,11,10, 9, 8, 7 },
/*r*/ { 19,19,18,17,16,16,15,15,14,14,13,12,12,11,11,10, 9, 9, 8, 7 },
/*t*/ { 20,20,19,19,18,18,17,17,16,16,15,15,14,14,13,13,12,12,11,11 },
/*bd*/ { 18,18,18,17,17,16,16,15,15,14,14,13,12,11,11,10, 9, 9, 8, 7 },
/*mn*/ { 18,18,17,17,16,16,15,15,14,14,13,12,11,11,10,10, 9, 8, 7, 6 },
/*dr*/ { 20,19,19,18,18,17,17,16,15,14,14,13,13,12,12,11,10,10, 9, 8 },
/*al*/ { 20,20,19,19,18,18,17,17,16,16,15,15,15,14,14,13,13,12,11,10 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
long quest_exp[] = {
120, 500, 1000, 1000, 1000, 1000, 125, 125,
1000, 1000, 125, 125, 125, 1000, 2500, 2500,
2500, 5, 5, 5, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125,
125, 125, 125, 125, 125, 125, 125, 125
};
long needed_exp[] = {
/*2 3 4 5 6 7 8 9 10 */
512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 100000,
166410, 277360, 394171, 560992, 757125, 1087504, 1402815,
1739616, 2203457, 2799000, 3505139, 4465120, 5792661, 7319072,
8874375, 15000000};
char lev_title[][8][20] = {
{ "", "", "", "", "", "", "", "" },
{ "Minor Assassin", "Rutterkin", "Killer", "Cutthroat",
"Murderer", "Executioner", "Expert Assassin", "Master Assassin" },
{ "Grunt", "Tribesman", "Savage", "Brutalizer",
"Dragon-slayer", "Barbarian Chief", "Destroyer", "Master Barbarian" },
{ "Acolyte", "Healer", "Adept", "Priest",
"Cardinal", "Lama", "Patriarch", "High Priest" },
{ "Veteran", "Warrior", "Punisher", "Pugilist",
"Myrmidon", "Hero", "Champion", "Lord" },
{ "Apprentice", "Prestidigitator", "Necromancer", "Occultate",
"Thaumaturgist", "Enchanter", "Sorcerer", "Wizard" },
{ "Gallant", "Protector", "Warder", "Guardian",
"Ordained Paladin", "Chevalier", "Justiciar", "Holy Warrior" },
{ "Searcher", "Scout", "Tracker", "Underhillsman",
"Royal Guide", "Pathfinder", "Ranger Knight", "Ranger Lord" },
{ "Rogue", "Footpad", "Dervish", "Burglar",
"Sharper", "Magsman", "High Thief", "Master Thief" },
{ "Jongleur", "Lyrist", "Sonneteer", "Skald",
"Minstrel", "Muse", "Bard", "Master Bard" },
{ "Novice", "Initiate", "Brother", "Disciple", "Immaculate",
"Master", "Superior Master", "Grand Master" },
{ "Aspiriant", "Ovate", "Initiate", "Master Initiate",
"Druid", "Master Druid", "Archdruid", "Great Druid" },
{ "Scholar", "Sage", "Artificer", "Runemaster",
"Alchemist", "Mechanician", "Archeus", "Master Archeus" },
{ "Builder", "Creator", "Slave", "Daemon",
"Addict", "Hero", "Dungeonmaster", "Caretaker" },
{ "Builder", "Creator", "Programmer", "Dungeon Lord",
"Immortal", "Divine Entity", "Addict", "Dungeonmaster" }
};
struct {
char *cmdstr;
int cmdno;
int (*cmdfn)();
} cmdlist[] = {
{ "n", 1, move },
{ "north", 1, move },
{ "s", 1, move },
{ "south", 1, move },
{ "e", 1, move },
{ "east", 1, move },
{ "w", 1, move },
{ "west", 1, move },
{ "northeast", 1, move },
{ "ne", 1, move },
{ "northwest", 1, move },
{ "nw", 1, move },
{ "southeast", 1, move },
{ "se", 1, move },
{ "southwest", 1, move },
{ "sw", 1, move },
{ "u", 1, move },
{ "up", 1, move },
{ "d", 1, move },
{ "down", 1, move },
{ "out", 1, move },
{ "leave", 1, move },
{ "l" , 2, look },
{ "look", 2, look },
{ "consider", 2, look },
{ "examine", 2, look },
{ "quit", 3, quit },
{ "quit", 3, quit },
{ "goodbye", 3, quit },
{ "goodbye", 3, quit },
{ "say", 4, say },
{ "\"", 4, say },
{ "'", 4, say },
{ "get", 5, get },
{ "take", 5, get },
{ "inventory", 6, inventory },
{ "i", 6, inventory },
{ "drop", 7, drop },
{ "put", 7, drop },
{ "who", 8, who },
{ "wear", 9, wear },
{ "remove", 10, remove_obj },
{ "rm", 10, remove_obj },
{ "equipment", 11, equipment },
{ "hold", 12, hold },
{ "wield", 13, ready },
{ "ready", 13, ready },
{ "help", 14, help },
{ "?", 14, help },
{ "health", 15, health },
{ "score", 15, health },
{ "sc", 15, health },
{ "information", 16, info },
{ "send", 17, psend },
{ "sen", 17, psend },
{ "tell", 17, psend },
{ "follow", 18, follow },
{ "lose", 19, lose },
{ "group", 20, group },
{ "party", 20, group },
{ "track", 21, track },
{ "peek", 22, peek },
{ "attack", 23, attack },
{ "kill", 23, attack },
{ "k", 23, attack },
{ "search", 24, search },
{ "emote",25, emote},
{ ":",25, emote},
{ "hide", 26, hide },
{ "set", 27, set },
{ "clear", 28, clear },
{ "yell", 29, yell },
{ "go", 30, go },
{ "enter", 30, go },
{ "open", 31, openexit },
{ "close", 32, closeexit },
{ "shut", 32, closeexit },
{ "unlock", 33, unlock },
{ "lock", 34, lock },
{ "pick", 35, picklock },
{ "steal", 36, steal },
{ "flee", 37, flee },
{ "fl", 37, flee },
{ "run", 37, flee },
{ "c", 38, cast },
{ "cast", 38, cast },
{ "study", 39, study },
{ "learn", 39, study },
{ "read", 40, readscroll },
{ "recite", 40, readscroll },
{ "list", 41, list },
{ "buy", 42, buy },
{ "sell", 43, sell },
{ "value", 44, value },
{ "cost", 44, value },
{ "bs", 45, backstab },
{ "backstab", 45, backstab },
{ "train", 46, train },
{ "give", 47, give },
{ "repair", 48, repair },
{ "fix", 48, repair },
{ "time", 49, prt_time },
{ "circle", 50, circle },
{ "bash", 51, bash },
{ "save", 52, savegame },
{ "sendmail", 53, postsend },
{ "readmail", 54, postread },
{ "deletemail", 55, postdelete },
{ "talk", 56, talk },
{ "ask", 56, talk },
{ "parley", 56, talk },
{ "gtalk",57, gtalk },
{ "drink", 58, drink },
{ "quaff", 58, drink },
{ "broadcast", 59, broadsend },
{ "zap", 60, zap },
{ "welcome", 61, welcome },
{ "turn", 62, turn },
{ "bribe", 63, bribe },
{ "haste", 64, haste },
{ "pray", 65, pray },
{ "prepare", 66, prepare },
{ "use", 67, use },
{ "ignore", 68, ignore },
{ "whois", 69, whois },
{ "sneak", 70, sneak },
{ "teach", 71, teach },
{ "pledge",72, pledge },
{ "rescind",73, rescind },
{ "purchase",74, purchase },
{ "selection",75, selection },
{ "trade",76, trade},
{ "suicide", 77, ply_suicide },
{ "passwd", 78, passwd},
{ "password", 78, passwd },
{ "vote",79,vote},
{ "finger", 80, pfinger},
{ "charm", 81, bard_song2},
{ "meditate", 82, meditate},
{ "touch", 83, touch_of_death},
{ "prep",84,prep_herb },
{ "apply",85,apply_herb },
{ "ingest",86,ingest_herb },
{ "eat",87,eat },
{ "paste",88,paste_herb },
{ "transmute", 89, recharge_wand },
{ "description", 90, describe_me },
{ "enchant", 91, tmp_enchant },
/*
{ "channelemote", 97, channelemote},
{ "chemote", 97, channelemote},
{ "broe", 97, channelemote},
*/
{ "classemote", 98, classemote},
{ "clemote", 98, classemote},
{ "classsend", 99, class_send},
{ "clsend", 99, class_send},
{ "nod", 100, action },
{ "sleep", 100, action },
{ "grab", 100, action },
{ "shove", 100, action },
{ "stand", 100, action },
{ "sit", 100, action },
{ "nervous", 100, action },
{ "bird", 100, action },
{ "ogle", 100, action },
{ "nod", 100, action },
{ "relax", 100, action },
{ "puke", 100, action },
{ "think", 100, action },
{ "cheer", 100, action },
{ "ponder", 100, action },
{ "ack", 100, action },
{ "laugh", 100, action },
{ "burp", 100, action },
{ "frustrate", 100, action },
{ "warm", 100, action},
{ "kick", 100, action },
{ "tackle", 100, action },
{ "knee", 100, action },
{ "pounce", 100, action },
{ "tickle", 100, action },
{ "snicker", 100, action },
{ "tap", 100, action },
{ "smile", 100, action },
{ "beam", 100, action},
{ "masturbate", 100, action},
{ "smoke", 100, action },
{ "shake", 100, action },
{ "cackle", 100, action },
{ "chuckle", 100, action },
{ "wave", 100, action },
{ "poke", 100, action },
{ "yawn", 100, action },
{ "sigh", 100, action },
{ "bounce", 100, action },
{ "shrug", 100, action },
{ "twiddle", 100, action },
{ "grin", 100, action },
{ "frown", 100, action },
{ "giggle", 100, action },
{ "sing", 100, action },
{ "hum", 100, action },
{ "snap", 100, action },
{ "jump", 100, action },
{ "skip", 100, action },
{ "dance", 100, action },
{ "cry", 100, action },
{ "bleed", 100, action },
{ "sniff", 100, action },
{ "whimper", 100, action },
{ "cringe", 100, action },
{ "whistle", 100, action },
{ "smirk", 100, action },
{ "gasp", 100, action },
{ "grunt", 100, action },
{ "stomp", 100, action },
{ "flex", 100, action },
{ "curtsy", 100, action },
{ "blush", 100, action },
{ "faint", 100, action },
{ "hug", 100, action },
{ "expose", 100, action },
{ "wink", 100, action },
{ "clap", 100, action },
{ "drool", 100, action },
{ "copulate", 100, action },
{ "goose", 100, action },
{ "fume", 100, action },
{ "rage", 100, action },
{ "pout", 100, action },
{ "spit", 100, action },
{ "fart", 100, action },
{ "comfort", 100, action },
{ "pat", 100, action },
{ "kiss", 100, action },
{ "glare", 100, action },
{ "slap", 100, action },
{ "suck", 100, action },
{ "defecate", 100, action },
{ "bow", 100, action },
{ "cough", 100, action },
{ "confused", 100, action },
{ "grumble", 100, action },
{ "hiccup", 100, action },
{ "mutter", 100, action },
{ "scratch", 100, action },
{ "strut", 100, action },
{ "sulk", 100, action },
{ "satisfied", 100, action },
{ "wince", 100, action },
{ "roll", 100, action },
{ "raise", 100, action },
{ "whine", 100, action },
{ "growl", 100, action },
{ "high5", 100, action },
{ "moon", 100, action },
{ "purr", 100, action },
{ "taunt", 100, action },
{ "eye", 100, action },
{ "worship", 100, action },
{ "flip", 100, action },
{ "groan", 100, action },
{ "*teleport", 101, dm_teleport },
{ "*t", 101, dm_teleport },
{ "*rm", 102, dm_rmstat },
{ "*reload", 103, dm_reload_rom },
{ "*save", 104, dm_resave },
{ "*create", 105, dm_create_obj },
{ "*c", 105, dm_create_obj },
{ "*perm", 106, dm_perm },
{ "*invis", 107, dm_invis },
{ "*i", 107, dm_invis },
{ "*s", 108, dm_send },
{ "*send", 108, dm_send },
{ "*purge", 109, dm_purge },
{ "*ac", 110, dm_ac },
{ "*users", 111, dm_users },
{ "*echo", 112, dm_echo },
{ "*flushrooms", 113, dm_flushsave },
{ "*shutdown", 114, dm_shutdown },
{ "*f", 115, dm_force },
{ "*force", 115, dm_force },
{ "*flushcrtobj", 116, dm_flush_crtobj },
{ "*monster", 117, dm_create_crt },
{ "*status", 118, dm_stat },
{ "*add", 119, dm_add_rom },
{ "*set", 120, dm_set },
{ "*log", 121, dm_log },
{ "*spy", 122, dm_spy },
{ "*lock", 123, dm_loadlockout },
{ "*finger", 124, dm_finger },
{ "*list", 125, dm_list },
{ "*info", 126, dm_info },
{ "*parameter", 127, dm_param },
{ "*silence", 128, dm_silence},
{ "*broad", 129, dm_broadecho},
{ "*replace",130, dm_replace},
{ "*name",131, dm_nameroom},
{ "*append",132, dm_append},
{ "*prepend",133, dm_prepend},
{ "*gcast",134, dm_cast},
{ "*group",135, dm_group},
{ "*notepad",136, notepad},
{ "*delete",137, dm_delete},
{ "*oname", 138, dm_obj_name },
{ "*cname", 139, dm_crt_name },
{ "*active", 140, list_act },
{ "*dust", 141, dm_dust },
{ "*dmhelp", 142, dm_help },
{ "*attack", 143, dm_attack },
{ "*enemy", 144, list_enm },
{ "*charm", 145, list_charm },
{ "*auth", 146, dm_auth },
{ "*possess", 147, dm_alias },
{ "*tell", 148, dm_flash },
{ "*memory", 149, dm_memory },
{ "*find", 150, dm_find_db },
{ "*clear", 151, dm_delete_db },
{ "*talk", 152, dm_talk },
{ "*gamestat", 153, dm_game_status },
{ "*advance", 154, dm_advance },
{ "push", -2, 0 },
{ "press", -2, 0 },
{ "@", 0, 0 }
};
char article[][10] = {
"the",
"from",
"to",
"with",
"an",
"in",
"for",
"@"
};
struct {
char *splstr;
int splno;
int (*splfn)();
} spllist[] = {
{ "vigor", SVIGOR, vigor },
{ "hurt", SHURTS, offensive_spell },
{ "light", SLIGHT, light },
{ "curepoison", SCUREP, curepoison },
{ "bless", SBLESS, bless },
{ "protection", SPROTE, protection },
{ "fireball", SFIREB, offensive_spell },
{ "invisibility", SINVIS, invisibility },
{ "restore", SRESTO, restore },
{ "detect-invisible", SDINVI, detectinvis },
{ "detect-magic", SDMAGI, detectmagic },
{ "teleport", STELEP, teleport },
{ "stun", SBEFUD, befuddle },
{ "lightning", SLGHTN, offensive_spell },
{ "iceblade", SICEBL, offensive_spell },
{ "enchant", SENCHA, enchant },
{ "word-of-recall", SRECAL, recall },
{ "summon", SSUMMO, summon },
{ "mend-wounds", SMENDW, mend },
{ "heal", SFHEAL, heal },
{ "track", STRACK, magictrack },
{ "levitate", SLEVIT, levitate },
{ "resist-fire", SRFIRE, resist_fire },
{ "fly", SFLYSP, fly },
{ "resist-magic", SRMAGI, resist_magic },
{ "shockbolt", SSHOCK, offensive_spell },
{ "rumble", SRUMBL, offensive_spell },
{ "burn", SBURNS, offensive_spell },
{ "blister", SBLIST, offensive_spell },
{ "dustgust", SDUSTG, offensive_spell },
{ "waterbolt", SWBOLT, offensive_spell },
{ "crush", SCRUSH, offensive_spell },
{ "shatterstone", SENGUL, offensive_spell },
{ "burstflame", SBURST, offensive_spell },
{ "steamblast", SSTEAM, offensive_spell },
{ "engulf", SSHATT, offensive_spell },
{ "immolate", SIMMOL, offensive_spell },
{ "bloodboil", SBLOOD, offensive_spell },
{ "thunderbolt", STHUND, offensive_spell },
{ "earthquake", SEQUAK, offensive_spell },
{ "flamefill", SFLFIL, offensive_spell },
{ "know-aura", SKNOWA, know_alignment },
{ "remove-curse", SREMOV, remove_curse },
{ "resist-cold", SRCOLD, resist_cold },
{ "breathe-water", SBRWAT, breathe_water },
{ "earth-shield", SSSHLD, earth_shield },
{ "clairvoyance", SLOCAT, locate_player },
{ "drain-exp", SDREXP, drain_exp },
{ "remove-disease", SRMDIS, rm_disease },
{ "cure-blindness", SRMBLD, rm_blind },
{ "fear", SFEARS, fear },
{ "room-vigor", SRVIGO, room_vigor },
{ "transport", STRANO, object_send },
{ "blind", SBLIND, blind },
{ "silence", SSILNC, silence },
{ "fortune", SFORTU, fortune },
{ "@", -1,0 }
};
int spllist_size = sizeof(spllist)/sizeof(*spllist);
struct osp_t ospell[] = {
/*
int splno;
char realm;
int mp;
int ndice;
int sdice;
int pdice;
char bonus_type;
*/
{ SHURTS, WIND, 3, 1, 8, 0, 1 }, /* hurt */
{ SRUMBL, EARTH, 3, 1, 8, 0, 1 }, /* rumble */
{ SBURNS, FIRE, 3, 1, 7, 1, 1 }, /* burn */
{ SBLIST, WATER, 3, 1, 8, 0, 1 }, /* blister */
{ SDUSTG, WIND, 7, 2, 5, 7, 2 }, /* dustgust */
{ SCRUSH, EARTH, 7, 2, 5, 7, 2 }, /* stonecrush */
{ SFIREB, FIRE, 7, 2, 5, 8, 2 }, /* fireball */
{ SWBOLT, WATER, 7, 2, 5, 8, 2 }, /* waterbolt */
{ SSHOCK, WIND, 10, 2, 5, 13, 2 }, /* shockbolt */
{ SENGUL, EARTH, 10, 2, 5, 13, 2 }, /* engulf */
{ SBURST, FIRE, 10, 2, 5, 13, 2 }, /* burstflame */
{ SSTEAM, WATER, 10, 2, 5, 13, 2 }, /* steamblast */
{ SLGHTN, WIND, 15, 3, 4, 18, 3 }, /* lightning */
{ SSHATT, EARTH, 15, 3, 4, 19, 3 }, /* shatterstone */
{ SIMMOL, FIRE, 15, 3, 4, 18, 3 }, /* immolate */
{ SBLOOD, WATER, 15, 3, 4, 18, 3 }, /* bloodboil */
{ STHUND, WIND, 25, 4, 5, 30, 3 }, /* thuderbolt */
{ SEQUAK, EARTH, 25, 4, 5, 30, 3 }, /* earthquake */
{ SFLFIL, FIRE, 25, 4, 5, 30, 3 }, /* flamefill */
{ SICEBL, WATER, 25, 4, 5, 30, 3 }, /* iceblade */
{ -1, 0, 0, 0, 0, 0, 0 }
};
char number[][10] = {
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"ten",
"eleven",
"twelve",
"thirteen",
"fourteen",
"fifteen",
"sixteen",
"seventeen",
"eighteen",
"nineteen",
"twenty"
};