/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1996 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@pacinfo.com) *
* Gabrielle Taylor (gtaylor@pacinfo.com) *
* Brian Moore (rom@rom.efn.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Tartarus/doc/rom.license *
***************************************************************************/
/***************************************************************************
* Tartarus code is copyright (C) 1997-1998 by Daniel Graham *
* In using this code you agree to comply with the Tartarus license *
* found in the file /Tartarus/doc/tartarus.doc *
***************************************************************************/
#include "include.h"
/* for cabals
*
* NEVER set the max number to 0, ever, ever, ever or we won't boot until you change it
* back. This goes all the way back to math class when you leanred about dividing with zero
*/
const struct cabal_type cabal_table[MAX_CABAL] =
{
/* name, who entry, death room, max ppl,independent, open/closed */
/* independent should be FALSE if is a real cabal */
{ "", "", "", ROOM_VNUM_ALTAR,
1, 1, TRUE , FALSE },
{ "ancient", "[ANCIENT] ", "Masters of Intrigue",
ROOM_VNUM_ANCIENT, 3801, 0, 0, 50, FALSE, FALSE, TRUE },
{ "knight", "[KNIGHT] ", "Knights of Thera",
ROOM_VNUM_KNIGHT, 4502, 0, 0, 50, FALSE, FALSE, TRUE },
{ "arcana", "[ARCANA] ", "Masters of the Five Magics",
ROOM_VNUM_ARCANA, 5801, 0, 0, 50, FALSE, FALSE, TRUE },
{ "rager", "[RAGER] ", "Battleragers, Haters of Magic",
ROOM_VNUM_RAGER, 5701, 0, 0, 50, FALSE, FALSE, TRUE },
{ "outlaw", "[OUTLAW] ", "Outlaw, Barons of Chaos",
ROOM_VNUM_OUTLAW, 9902, 0, 0, 50, FALSE, FALSE, TRUE },
{ "empire", "[EMPIRE] ", "Empire, Subjugator of Nations",
ROOM_VNUM_ALTAR, 8101, 0, 0, 50, FALSE, FALSE, TRUE },
{ "bounty", "[BOUNTY] ", "Bounty Hunters",
ROOM_VNUM_ALTAR, 8800, 0, 0, 50, FALSE, FALSE, TRUE },
{ "sylvan", "[SYLVAN] ", "Sylvan Warders of the Glades",
ROOM_VNUM_ALTAR, 8900, 0, 0, 50, FALSE, FALSE, TRUE },
{
"enforcer", "[ENFORCER] ", "Enforcers of Justice",
ROOM_VNUM_ALTAR, 4521, 0, 0, 50, FALSE, FALSE, TRUE }
};
const struct cabal_restr_type cabal_restr_table[MAX_CABAL] = {
{ // None
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
ALIGN_NONE,
ETHOS_NONE
},
{ // Ancient
{1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0},
ALIGN_E,
ETHOS_ANY
},
{ // Knight
{1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0},
ALIGN_G,
ETHOS_ANY,
},
{ // Arcana
{0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0},
{0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0},
ALIGN_ANY,
ETHOS_ANY,
},
{ // Rager
{1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0},
ALIGN_ANY,
ETHOS_ANY
},
{ // Outlaw
{1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0},
ALIGN_ANY,
ETHOS_C
},
{ // Empire
{1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0},
ALIGN_E,
ETHOS_L
},
{ // Bounty
{1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0},
ALIGN_ANY,
ETHOS_ANY
},
{ // Sylvan
{1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1},
{0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0},
ALIGN_GN,
ETHOS_NC
},
{ // Enforcer
{1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
ALIGN_ANY,
ETHOS_L
}
};
const struct cabal_message cabal_messages[MAX_CABAL] =
{
// login, logout, entry message //
{ "", "", "" },
{ "%s has joined the Hunt.",
"%s has left from the Hunt.",
"May the darkness conceal you." },
{ "The Code of Honor gleams as %s enters the Castle.",
"Farewell %s, the crusades await your return.",
"Greetings, brother Knight." },
{ "The Orb of Magic hums briefly as %s enters the lands.",
"The crystal of power dims briefly as %s leaves the lands.",
"Greetings, Master of Magic." },
{ "WAAAAAAAAAAAAAZZZZZZZZAAAAAAAAA WARRIOR OF THE VILLAGE?!?!!?!?",
"Farewell %s. May your strength return to us soon.",
"Welcome, great warrior." },
{ "The encampment of Outlaws grows as %s enters the realm.",
"%s disbands from the outlaw encampments for a while.",
"Greetings, chaotic one." },
{ "Imperial power grows as %s enters our realm.",
"Our conquest is yet assured though %s leaves us.",
"Greetings, citizen." },
{ "%s has joined the watch.",
"%s has left the watch.",
"Hail, Hunter." },
{ "Welcome, %s, protector of the wilderness.",
"The Grove will remain steadfast in your absence, %s.",
"Nature welcomes you."},
{ "The law grows stronger with the arrival of %s.",
"%s signs off from duty and leaves the chaotic streets.",
"Greetings, Enforcer of the Law."
}
};
const struct hometown_type hometown_table[MAX_HOMETOWN] =
{
/* City Name Recall Pit Align Restrict Ethos Restrict Race/Class Restrict */
{"", 0, 0, ALIGN_NONE, ETHOS_NONE, 0 },
{"Midgaard", 3054, 3010, ALIGN_ANY, ETHOS_ANY, 0 },
{"New Thalos", 9609, 9603, ALIGN_ANY, ETHOS_ANY, 0 },
{"Arkham", 768, 700, ALIGN_E, ETHOS_ANY, 0 },
{"Naiadia", 20463, 20425, ALIGN_ANY, ETHOS_ANY, 0 },
{"Asgard", 1213, 1200, ALIGN_NONE, ETHOS_NONE, 0 },
};
/* for position */
const struct position_type position_table[] =
{
{ "dead", "dead" },
{ "mortally wounded", "mort" },
{ "incapacitated", "incap" },
{ "stunned", "stun" },
{ "sleeping", "sleep" },
{ "resting", "rest" },
{ "sitting", "sit" },
{ "fighting", "fight" },
{ "standing", "stand" },
{ NULL, NULL }
};
/* for sex */
const struct sex_type sex_table[] =
{
{ "none" },
{ "male" },
{ "female" },
{ "either" },
{ NULL }
};
/* for sizes */
const struct size_type size_table[] =
{
{ "tiny" },
{ "small" },
{ "medium" },
{ "large" },
{ "huge", },
{ "giant" },
{ NULL }
};
/* various flag tables */
const struct flag_type act_flags[] =
{
{ "npc", A, FALSE },
{ "sentinel", B, TRUE },
{ "scavenger", C, TRUE },
{ "inner_guardian", D, TRUE },
{ "aggressive", F, TRUE },
{ "stay_area", G, TRUE },
{ "wimpy", H, TRUE },
{ "pet", I, TRUE },
{ "train", J, TRUE },
{ "practice", K, TRUE },
{ "no_track", L, TRUE },
{ "undead", O, TRUE },
{ "cleric", Q, TRUE },
{ "mage", R, TRUE },
{ "thief", S, TRUE },
{ "warrior", T, TRUE },
{ "noalign", U, TRUE },
{ "nopurge", V, TRUE },
{ "outdoors", W, TRUE },
{ "indoors", Y, TRUE },
{ "outer_guardian", Z, TRUE },
{ "healer", aa, TRUE },
{ "gain", bb, TRUE },
{ "update_always", cc, TRUE },
{ "changer", dd, TRUE },
{ NULL, 0, FALSE }
};
const struct flag_type plr_flags[] =
{
{ "npc", A, FALSE },
{ "autoassist", C, FALSE },
{ "autoexit", D, FALSE },
{ "autoloot", E, FALSE },
{ "autosac", F, FALSE },
{ "autogold", G, FALSE },
{ "autosplit", H, FALSE },
{ "color", I, FALSE },
{ "betrayer", K, TRUE },
{ "heroimm", M, TRUE },
{ "holylight", N, FALSE },
{ "empowered", O, FALSE },
{ "can_loot", P, FALSE },
{ "nosummon", Q, FALSE },
{ "nofollow", R, FALSE },
{ "permit", U, TRUE },
{ "moron", V, FALSE },
{ "log", W, FALSE },
{ "deny", X, FALSE },
{ "freeze", Y, FALSE },
{ "thief", Z, FALSE },
{ "killer", aa, FALSE },
{ NULL, 0, 0 }
};
const struct flag_type affect_flags[] =
{
{ "blind", AFF_BLIND, TRUE },
{ "invisible", AFF_INVISIBLE, TRUE },
{ "detect_evil", AFF_DETECT_EVIL, TRUE },
{ "detect_invis", AFF_DETECT_INVIS, TRUE },
{ "detect_magic", AFF_DETECT_MAGIC, TRUE },
{ "detect_hidden", AFF_DETECT_HIDDEN, TRUE },
{ "detect_good", AFF_DETECT_GOOD, TRUE },
{ "sanctuary", AFF_SANCTUARY, TRUE },
{ "faerie_fire", AFF_FAERIE_FIRE, TRUE },
{ "infrared", AFF_INFRARED, TRUE },
{ "curse", AFF_CURSE, TRUE },
{ "poison", AFF_POISON, TRUE },
{ "protect_evil", AFF_PROTECT_EVIL, TRUE },
{ "protect_good", AFF_PROTECT_GOOD, TRUE },
{ "sneak", AFF_SNEAK, TRUE },
{ "hide", AFF_HIDE, TRUE },
{ "sleep", AFF_SLEEP, TRUE },
{ "charm", AFF_CHARM, TRUE },
{ "flying", AFF_FLYING, TRUE },
{ "pass_door", AFF_PASS_DOOR, TRUE },
{ "haste", AFF_HASTE, TRUE },
{ "calm", AFF_CALM, TRUE },
{ "plague", AFF_PLAGUE, TRUE },
{ "weaken", AFF_WEAKEN, TRUE },
{ "dark_vision", AFF_DARK_VISION, TRUE },
{ "berserk", AFF_BERSERK, TRUE },
{ "waterbreathing", AFF_WATERBREATHING, TRUE },
{ "regeneration", AFF_REGENERATION, TRUE },
{ "slow", AFF_SLOW, TRUE },
{ "camouflage", AFF_CAMOUFLAGE, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type off_flags[] =
{
{ "area_attack", OFF_AREA_ATTACK, TRUE },
{ "backstab", OFF_BACKSTAB, TRUE },
{ "bash", OFF_BASH, TRUE },
{ "berserk", OFF_BERSERK, TRUE },
{ "disarm", OFF_DISARM, TRUE },
{ "dodge", OFF_DODGE, TRUE },
{ "fade", OFF_FADE, TRUE },
{ "fast", OFF_FAST, TRUE },
{ "kick", OFF_KICK, TRUE },
{ "dirt_kick", OFF_KICK_DIRT, TRUE },
{ "parry", OFF_PARRY, TRUE },
{ "rescue", OFF_RESCUE, TRUE },
{ "tail", OFF_TAIL, TRUE },
{ "trip", OFF_TRIP, TRUE },
{ "crush", OFF_CRUSH, TRUE },
{ "assist_all", ASSIST_ALL, TRUE },
{ "assist_align", ASSIST_ALIGN, TRUE },
{ "assist_race", ASSIST_RACE, TRUE },
{ "assist_players", ASSIST_PLAYERS, TRUE },
{ "assist_guard", ASSIST_GUARD, TRUE },
{ "assist_vnum", ASSIST_VNUM, TRUE },
{ "static_tracking", STATIC_TRACKING, TRUE },
{ "spam_murder", SPAM_MURDER, TRUE },
{ "attack_evil", OFF_ATTACK_EVIL, TRUE },
{ "attack_good", OFF_ATTACK_GOOD, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type imm_flags[] =
{
{ "summon", A, TRUE },
{ "charm", B, TRUE },
{ "magic", C, TRUE },
{ "weapon", D, TRUE },
{ "bash", E, TRUE },
{ "pierce", F, TRUE },
{ "slash", G, TRUE },
{ "fire", H, TRUE },
{ "cold", I, TRUE },
{ "lightning", J, TRUE },
{ "acid", K, TRUE },
{ "poison", L, TRUE },
{ "negative", M, TRUE },
{ "holy", N, TRUE },
{ "energy", O, TRUE },
{ "mental", P, TRUE },
{ "disease", Q, TRUE },
{ "drowning", R, TRUE },
{ "light", S, TRUE },
{ "sound", T, TRUE },
{ "wood", X, TRUE },
{ "silver", Y, TRUE },
{ "iron", Z, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type form_flags[] =
{
{ "edible", FORM_EDIBLE, TRUE },
{ "poison", FORM_POISON, TRUE },
{ "magical", FORM_MAGICAL, TRUE },
{ "instant_decay", FORM_INSTANT_DECAY, TRUE },
{ "other", FORM_OTHER, TRUE },
{ "animal", FORM_ANIMAL, TRUE },
{ "sentient", FORM_SENTIENT, TRUE },
{ "undead", FORM_UNDEAD, TRUE },
{ "construct", FORM_CONSTRUCT, TRUE },
{ "mist", FORM_MIST, TRUE },
{ "intangible", FORM_INTANGIBLE, TRUE },
{ "biped", FORM_BIPED, TRUE },
{ "centaur", FORM_CENTAUR, TRUE },
{ "insect", FORM_INSECT, TRUE },
{ "spider", FORM_SPIDER, TRUE },
{ "crustacean", FORM_CRUSTACEAN, TRUE },
{ "worm", FORM_WORM, TRUE },
{ "blob", FORM_BLOB, TRUE },
{ "mammal", FORM_MAMMAL, TRUE },
{ "bird", FORM_BIRD, TRUE },
{ "reptile", FORM_REPTILE, TRUE },
{ "snake", FORM_SNAKE, TRUE },
{ "dragon", FORM_DRAGON, TRUE },
{ "amphibian", FORM_AMPHIBIAN, TRUE },
{ "fish", FORM_FISH , TRUE },
{ "cold_blood", FORM_COLD_BLOOD, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type part_flags[] =
{
{ "head", PART_HEAD, TRUE },
{ "arms", PART_ARMS, TRUE },
{ "legs", PART_LEGS, TRUE },
{ "heart", PART_HEART, TRUE },
{ "brains", PART_BRAINS, TRUE },
{ "guts", PART_GUTS, TRUE },
{ "hands", PART_HANDS, TRUE },
{ "feet", PART_FEET, TRUE },
{ "fingers", PART_FINGERS, TRUE },
{ "ear", PART_EAR, TRUE },
{ "eye", PART_EYE, TRUE },
{ "long_tongue", PART_LONG_TONGUE, TRUE },
{ "eyestalks", PART_EYESTALKS, TRUE },
{ "tentacles", PART_TENTACLES, TRUE },
{ "fins", PART_FINS, TRUE },
{ "wings", PART_WINGS, TRUE },
{ "tail", PART_TAIL, TRUE },
{ "claws", PART_CLAWS, TRUE },
{ "fangs", PART_FANGS, TRUE },
{ "horns", PART_HORNS, TRUE },
{ "scales", PART_SCALES, TRUE },
{ "tusks", PART_TUSKS, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type comm_flags[] =
{
{ "quiet", COMM_QUIET, TRUE },
{ "deaf", COMM_DEAF, TRUE },
{ "nowiz", COMM_NOWIZ, TRUE },
{ "noauction", COMM_NOAUCTION, TRUE },
{ "noquestion", COMM_NOQUESTION, TRUE },
{ "nocabal", COMM_NOCABAL, TRUE },
{ "noquote", COMM_NOQUOTE, TRUE },
{ "shoutsoff", COMM_SHOUTSOFF, TRUE },
{ "compact", COMM_COMPACT, TRUE },
{ "brief", COMM_BRIEF, TRUE },
{ "prompt", COMM_PROMPT, TRUE },
{ "combine", COMM_COMBINE, TRUE },
{ "telnet_ga", COMM_TELNET_GA, TRUE },
{ "show_affects", COMM_SHOW_AFFECTS, TRUE },
{ "noemote", COMM_NOEMOTE, FALSE },
{ "noshout", COMM_NOSHOUT, FALSE },
{ "notell", COMM_NOTELL, FALSE },
{ "nochannels", COMM_NOCHANNELS, FALSE },
{ "snoop_proof", COMM_SNOOP_PROOF, FALSE },
{ "afk", COMM_AFK, TRUE },
{ "nosocket", COMM_NOSOCKET, FALSE },
{ "noglobal", COMM_NOGLOBAL, TRUE },
{ "allcabal", COMM_ALL_CABALS, TRUE },
{ NULL, 0, 0 }
};
/***************************** OLC TABLES BELOW **********************************/
const struct flag_type area_flags[] =
{
{ "none", AREA_NONE, FALSE },
{ "changed", AREA_CHANGED, TRUE },
{ "added", AREA_ADDED, TRUE },
{ "loading", AREA_LOADING, FALSE },
{ "closed", AREA_CLOSED, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type sex_flags[] =
{
{ "male", SEX_MALE, TRUE },
{ "female", SEX_FEMALE, TRUE },
{ "neutral", SEX_NEUTRAL, TRUE },
{ "random", 3, TRUE }, /* ROM */
{ "none", SEX_NEUTRAL, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type direction_table [] =
{
{"north", DIR_NORTH, TRUE },
{"east", DIR_EAST, TRUE },
{"south", DIR_SOUTH, TRUE },
{"west", DIR_WEST, TRUE },
{"up", DIR_UP, TRUE },
{"down", DIR_DOWN, TRUE },
{NULL, 0, TRUE },
};
const struct flag_type exit_flags[] =
{
{ "door", EX_ISDOOR, TRUE },
{ "closed", EX_CLOSED, TRUE },
{ "locked", EX_LOCKED, TRUE },
{ "pickproof", EX_PICKPROOF, TRUE },
{ "nopass", EX_NOPASS, TRUE },
{ "easy", EX_EASY, TRUE },
{ "hard", EX_HARD, TRUE },
{ "infuriating", EX_INFURIATING, TRUE },
{ "noclose", EX_NOCLOSE, TRUE },
{ "nolock", EX_NOLOCK, TRUE },
{ "nobash", EX_NOBASH, TRUE },
{ "nonobvious", EX_NONOBVIOUS, TRUE },
{ "current", EX_CURRENT, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type door_resets[] =
{
{ "open and unlocked", 0, TRUE },
{ "closed and unlocked", 1, TRUE },
{ "closed and locked", 2, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type room_flags[] =
{
{ "dark", ROOM_DARK, TRUE },
{ "no_mob", ROOM_NO_MOB, TRUE },
{ "indoors", ROOM_INDOORS, TRUE },
{ "private", ROOM_PRIVATE, TRUE },
{ "safe", ROOM_SAFE, TRUE },
{ "solitary", ROOM_SOLITARY, TRUE },
{ "pet_shop", ROOM_PET_SHOP, TRUE },
{ "no_recall", ROOM_NO_RECALL, TRUE },
{ "no_summon", ROOM_NO_SUMMON, TRUE },
{ "imp_only", ROOM_IMP_ONLY, TRUE },
{ "gods_only", ROOM_GODS_ONLY, TRUE },
{ "heroes_only", ROOM_HEROES_ONLY, TRUE },
{ "newbie_only", ROOM_NEWBIES_ONLY, TRUE },
{ "law", ROOM_LAW, TRUE },
{ "no_where", ROOM_NOWHERE, TRUE },
{ "no_gate", ROOM_NO_GATE, TRUE },
{ "no_consecrate", ROOM_NO_CONSECRATE, TRUE },
{ "low_only", ROOM_LOW_ONLY, TRUE },
{ "no_magic", ROOM_NO_MAGIC, TRUE },
{ "consecrated", ROOM_CONSECRATED, TRUE },
{ "no_newbie", ROOM_NO_NEWBIE, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type sector_flags[] =
{
{ "inside", SECT_INSIDE, TRUE },
{ "city", SECT_CITY, TRUE },
{ "field", SECT_FIELD, TRUE },
{ "forest", SECT_FOREST, TRUE },
{ "hills", SECT_HILLS, TRUE },
{ "mountain", SECT_MOUNTAIN, TRUE },
{ "swim", SECT_WATER_SWIM, TRUE },
{ "noswim", SECT_WATER_NOSWIM, TRUE },
{ "unused", SECT_UNUSED, TRUE },
{ "air", SECT_AIR, TRUE },
{ "desert", SECT_DESERT, TRUE },
{ "road", SECT_ROAD, TRUE },
{ "underwater", SECT_UNDERWATER, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type type_flags[] =
{
{ "light", ITEM_LIGHT, TRUE },
{ "scroll", ITEM_SCROLL, TRUE },
{ "wand", ITEM_WAND, TRUE },
{ "staff", ITEM_STAFF, TRUE },
{ "weapon", ITEM_WEAPON, TRUE },
{ "treasure", ITEM_TREASURE, TRUE },
{ "armor", ITEM_ARMOR, TRUE },
{ "potion", ITEM_POTION, TRUE },
{ "furniture", ITEM_FURNITURE, TRUE },
{ "trash", ITEM_TRASH, TRUE },
{ "container", ITEM_CONTAINER, TRUE },
{ "drinkcontainer", ITEM_DRINK_CON, TRUE },
{ "key", ITEM_KEY, TRUE },
{ "food", ITEM_FOOD, TRUE },
{ "money", ITEM_MONEY, TRUE },
{ "boat", ITEM_BOAT, TRUE },
{ "npccorpse", ITEM_CORPSE_NPC, TRUE },
{ "pc corpse", ITEM_CORPSE_PC, FALSE },
{ "fountain", ITEM_FOUNTAIN, TRUE },
{ "pill", ITEM_PILL, TRUE },
{ "protect", ITEM_PROTECT, TRUE },
{ "map", ITEM_MAP, TRUE },
{ "portal", ITEM_PORTAL, TRUE },
{ "warpstone", ITEM_WARP_STONE, TRUE },
{ "roomkey", ITEM_ROOM_KEY, TRUE },
{ "gem", ITEM_GEM, TRUE },
{ "jewelry", ITEM_JEWELRY, TRUE },
{ "jukebox", ITEM_JUKEBOX, TRUE },
{ "instrument", ITEM_INSTRUMENT, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type extra_flags[] =
{
{ "glow", ITEM_GLOW, TRUE },
{ "hum", ITEM_HUM, TRUE },
{ "dark", ITEM_DARK, TRUE },
{ "lock", ITEM_LOCK, TRUE },
{ "evil", ITEM_EVIL, TRUE },
{ "invis", ITEM_INVIS, TRUE },
{ "magic", ITEM_MAGIC, TRUE },
{ "nodrop", ITEM_NODROP, TRUE },
{ "bless", ITEM_BLESS, TRUE },
{ "antigood", ITEM_ANTI_GOOD, TRUE },
{ "antievil", ITEM_ANTI_EVIL, TRUE },
{ "antineutral", ITEM_ANTI_NEUTRAL, TRUE },
{ "noremove", ITEM_NOREMOVE, TRUE },
{ "inventory", ITEM_INVENTORY, TRUE },
{ "nopurge", ITEM_NOPURGE, TRUE },
{ "rotdeath", ITEM_ROT_DEATH, TRUE },
{ "visdeath", ITEM_VIS_DEATH, TRUE },
{ "meltdrop", ITEM_MELT_DROP, TRUE },
{ "hadtimer", ITEM_HAD_TIMER, TRUE },
{ "sellextract", ITEM_SELL_EXTRACT, TRUE },
{ "burnproof", ITEM_BURN_PROOF, TRUE },
{ "nouncurse", ITEM_NOUNCURSE, TRUE },
{ "metal", ITEM_METAL, TRUE },
{ "nolocate", ITEM_NOLOCATE, TRUE },
{ "nodisarm", ITEM_NODISARM, TRUE },
{ "corpsenoanim", CORPSE_NO_ANIMATE, TRUE },
{ "hidden", ITEM_HIDDEN, TRUE },
{ "antineutraleth", ITEM_ANTI_NEUT, TRUE },
{ "antichaotic", ITEM_ANTI_CHAOTIC, TRUE },
{ "maledicted", ITEM_MALEDICTED, TRUE },
{ "fixed", ITEM_FIXED, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type restrict_flags[] =
{
{ "human_only", HUMAN_ONLY, TRUE },
{ "dwarf_only", DWARF_ONLY, TRUE },
{ "elf_only", ELF_ONLY, TRUE },
{ "drow_only", DARK_ONLY, TRUE },
{ "giant_only", GIANT_ONLY, TRUE },
{ "centuar_only", CENTAUR_ONLY, TRUE },
{ "troll_only", TROLL_ONLY, TRUE },
{ "draconian_only", DRACONIAN_ONLY, TRUE },
{ "gnome_only", GNOME_ONLY, TRUE },
{ "warrior_only", WARRIOR_ONLY, TRUE },
{ "thief_only", THIEF_ONLY, TRUE },
{ "zealot_only", ZEALOT_ONLY, TRUE },
{ "AP_only", ANTI_PALADIN_ONLY, TRUE },
{ "bard_only", BARD_ONLY, TRUE },
{ "ranger_only", RANGER_ONLY, TRUE },
{ "channeler_only", CHANNELER_ONLY, TRUE },
{ "assassin_only", ASSASSIN_ONLY, TRUE },
{ "necromancer_only", NECROMANCER_ONLY, TRUE },
{ "elementalist_only", ELEMENTALIST_ONLY, TRUE },
{ "healer_only", HEALER_ONLY, TRUE },
{ "rager_only", RAGER_ONLY, TRUE },
{ "ancient_only", ANCIENT_ONLY, TRUE },
{ "sylvan_only", SYLVAN_ONLY, TRUE },
{ "mage_only", MAGE_ONLY, TRUE },
{ "arcana_only", ARCANA_ONLY, TRUE },
{ "knight_only", KNIGHT_ONLY, TRUE },
{ "outlaw_only", OUTLAW_ONLY, TRUE },
{ "bounty_only", BOUNTY_ONLY, TRUE },
{ "newbie_only", NEWBIE_ONLY, TRUE },
{ "paladin_only", PALADIN_ONLY, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type wear_flags[] =
{
{ "take", ITEM_TAKE, TRUE },
{ "finger", ITEM_WEAR_FINGER, TRUE },
{ "neck", ITEM_WEAR_NECK, TRUE },
{ "body", ITEM_WEAR_BODY, TRUE },
{ "head", ITEM_WEAR_HEAD, TRUE },
{ "legs", ITEM_WEAR_LEGS, TRUE },
{ "feet", ITEM_WEAR_FEET, TRUE },
{ "hands", ITEM_WEAR_HANDS, TRUE },
{ "arms", ITEM_WEAR_ARMS, TRUE },
{ "shield", ITEM_WEAR_SHIELD, TRUE },
{ "about", ITEM_WEAR_ABOUT, TRUE },
{ "waist", ITEM_WEAR_WAIST, TRUE },
{ "wrist", ITEM_WEAR_WRIST, TRUE },
{ "wield", ITEM_WIELD, TRUE },
{ "hold", ITEM_HOLD, TRUE },
{ "nosac", ITEM_NO_SAC, TRUE },
{ "brand", ITEM_WEAR_BRAND, TRUE },
{ "strap", ITEM_WEAR_STRAPPED, TRUE },
{ NULL, 0, 0 }
};
/*
* Used when adding an affect to tell where it goes.
* See addaffect and delaffect in act_olc.c
*/
const struct flag_type apply_flags[] =
{
{ "none", APPLY_NONE, TRUE },
{ "strength", APPLY_STR, TRUE },
{ "dexterity", APPLY_DEX, TRUE },
{ "intelligence", APPLY_INT, TRUE },
{ "wisdom", APPLY_WIS, TRUE },
{ "constitution", APPLY_CON, TRUE },
{ "sex", APPLY_SEX, TRUE },
{ "class", APPLY_CLASS, TRUE },
{ "level", APPLY_LEVEL, TRUE },
{ "age", APPLY_AGE, TRUE },
{ "height", APPLY_HEIGHT, TRUE },
{ "weight", APPLY_WEIGHT, TRUE },
{ "mana", APPLY_MANA, TRUE },
{ "hp", APPLY_HIT, TRUE },
{ "move", APPLY_MOVE, TRUE },
{ "gold", APPLY_GOLD, TRUE },
{ "experience", APPLY_EXP, TRUE },
{ "ac", APPLY_AC, TRUE },
{ "hitroll", APPLY_HITROLL, TRUE },
{ "damroll", APPLY_DAMROLL, TRUE },
{ "saves", APPLY_SAVES, TRUE },
{ "savingpara", APPLY_SAVING_PARA, TRUE },
{ "savingrod", APPLY_SAVING_ROD, TRUE },
{ "savingpetri", APPLY_SAVING_PETRI, TRUE },
{ "savingbreath", APPLY_SAVING_BREATH, TRUE },
{ "savingspell", APPLY_SAVING_SPELL, TRUE },
{ "spellaffect", APPLY_SPELL_AFFECT, FALSE },
{ "dam_mod", APPLY_DAM_MOD, TRUE },
{ "attack_mod", APPLY_ATTACK_MOD, TRUE },
{ "enhancedDamMod", APPLY_ENHANCED_MOD, TRUE },
{ "regen", APPLY_REGENERATION, TRUE },
{ "size", APPLY_SIZE, TRUE },
{ NULL, 0, 0 }
};
/*
* What is seen.
*/
const struct flag_type wear_loc_strings[] =
{
{ "in the inventory", WEAR_NONE, TRUE },
{ "as a light", WEAR_LIGHT, TRUE },
{ "on the left finger", WEAR_FINGER_L, TRUE },
{ "on the right finger", WEAR_FINGER_R, TRUE },
{ "around the neck (1)", WEAR_NECK_1, TRUE },
{ "around the neck (2)", WEAR_NECK_2, TRUE },
{ "on the body", WEAR_BODY, TRUE },
{ "over the head", WEAR_HEAD, TRUE },
{ "on the legs", WEAR_LEGS, TRUE },
{ "on the feet", WEAR_FEET, TRUE },
{ "on the hands", WEAR_HANDS, TRUE },
{ "on the arms", WEAR_ARMS, TRUE },
{ "as a shield", WEAR_SHIELD, TRUE },
{ "about the shoulders", WEAR_ABOUT, TRUE },
{ "around the waist", WEAR_WAIST, TRUE },
{ "on the left wrist", WEAR_WRIST_L, TRUE },
{ "on the right wrist", WEAR_WRIST_R, TRUE },
{ "wielded", WEAR_WIELD, TRUE },
{ "held in the hands", WEAR_HOLD, TRUE },
{ "dual wielded", WEAR_DUAL_WIELD, TRUE },
{ NULL, 0 , 0 }
};
const struct flag_type wear_loc_flags[] =
{
{ "none", WEAR_NONE, TRUE },
{ "light", WEAR_LIGHT, TRUE },
{ "lfinger", WEAR_FINGER_L, TRUE },
{ "rfinger", WEAR_FINGER_R, TRUE },
{ "neck1", WEAR_NECK_1, TRUE },
{ "neck2", WEAR_NECK_2, TRUE },
{ "body", WEAR_BODY, TRUE },
{ "head", WEAR_HEAD, TRUE },
{ "legs", WEAR_LEGS, TRUE },
{ "feet", WEAR_FEET, TRUE },
{ "hands", WEAR_HANDS, TRUE },
{ "arms", WEAR_ARMS, TRUE },
{ "shield", WEAR_SHIELD, TRUE },
{ "about", WEAR_ABOUT, TRUE },
{ "waist", WEAR_WAIST, TRUE },
{ "lwrist", WEAR_WRIST_L, TRUE },
{ "rwrist", WEAR_WRIST_R, TRUE },
{ "wielded", WEAR_WIELD, TRUE },
{ "hold", WEAR_HOLD, TRUE },
{ "dualwielded", WEAR_DUAL_WIELD, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type container_flags[] =
{
{ "closeable", 1, TRUE },
{ "pickproof", 2, TRUE },
{ "closed", 4, TRUE },
{ "locked", 8, TRUE },
{ "puton", 16, TRUE },
{ NULL, 0, 0 }
};
/*****************************************************************************
ROM - specific tables:
****************************************************************************/
const struct flag_type ac_type[] =
{
{ "pierce", AC_PIERCE, TRUE },
{ "bash", AC_BASH, TRUE },
{ "slash", AC_SLASH, TRUE },
{ "exotic", AC_EXOTIC, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type size_flags[] =
{
{ "tiny", SIZE_TINY, TRUE },
{ "small", SIZE_SMALL, TRUE },
{ "medium", SIZE_MEDIUM, TRUE },
{ "large", SIZE_LARGE, TRUE },
{ "huge", SIZE_HUGE, TRUE },
{ "giant", SIZE_GIANT, TRUE },
{ NULL, 0, 0 },
};
const struct flag_type weapon_class[] =
{
{ "exotic", WEAPON_EXOTIC, TRUE },
{ "sword", WEAPON_SWORD, TRUE },
{ "dagger", WEAPON_DAGGER, TRUE },
{ "spear", WEAPON_SPEAR, TRUE },
{ "mace", WEAPON_MACE, TRUE },
{ "axe", WEAPON_AXE, TRUE },
{ "flail", WEAPON_FLAIL, TRUE },
{ "whip", WEAPON_WHIP, TRUE },
{ "polearm", WEAPON_POLEARM, TRUE },
{ "staff", WEAPON_STAFF, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type weapon_type2[] =
{
{ "flaming", WEAPON_FLAMING, TRUE },
{ "frost", WEAPON_FROST, TRUE },
{ "vampiric", WEAPON_VAMPIRIC, TRUE },
{ "sharp", WEAPON_SHARP, TRUE },
{ "vorpal", WEAPON_VORPAL, TRUE },
{ "twohands", WEAPON_TWO_HANDS, TRUE },
{ "shocking", WEAPON_SHOCKING, TRUE },
{ "poison", WEAPON_POISON, TRUE },
{ "leader", WEAPON_LEADER, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type res_flags[] =
{
{ "summon", RES_SUMMON, TRUE },
{ "charm", RES_CHARM, TRUE },
{ "magic", RES_MAGIC, TRUE },
{ "weapon", RES_WEAPON, TRUE },
{ "bash", RES_BASH, TRUE },
{ "pierce", RES_PIERCE, TRUE },
{ "slash", RES_SLASH, TRUE },
{ "fire", RES_FIRE, TRUE },
{ "cold", RES_COLD, TRUE },
{ "lightning", RES_LIGHTNING, TRUE },
{ "acid", RES_ACID, TRUE },
{ "poison", RES_POISON, TRUE },
{ "negative", RES_NEGATIVE, TRUE },
{ "holy", RES_HOLY, TRUE },
{ "energy", RES_ENERGY, TRUE },
{ "mental", RES_MENTAL, TRUE },
{ "disease", RES_DISEASE, TRUE },
{ "drowning", RES_DROWNING, TRUE },
{ "light", RES_LIGHT, TRUE },
{ "sound", RES_SOUND, TRUE },
{ "wood", RES_WOOD, TRUE },
{ "silver", RES_SILVER, TRUE },
{ "iron", RES_IRON, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type vuln_flags[] =
{
{ "summon", VULN_SUMMON, TRUE },
{ "charm", VULN_CHARM, TRUE },
{ "magic", VULN_MAGIC, TRUE },
{ "weapon", VULN_WEAPON, TRUE },
{ "bash", VULN_BASH, TRUE },
{ "pierce", VULN_PIERCE, TRUE },
{ "slash", VULN_SLASH, TRUE },
{ "fire", VULN_FIRE, TRUE },
{ "cold", VULN_COLD, TRUE },
{ "lightning", VULN_LIGHTNING, TRUE },
{ "acid", VULN_ACID, TRUE },
{ "poison", VULN_POISON, TRUE },
{ "negative", VULN_NEGATIVE, TRUE },
{ "holy", VULN_HOLY, TRUE },
{ "energy", VULN_ENERGY, TRUE },
{ "mental", VULN_MENTAL, TRUE },
{ "disease", VULN_DISEASE, TRUE },
{ "drowning", VULN_DROWNING, TRUE },
{ "light", VULN_LIGHT, TRUE },
{ "sound", VULN_SOUND, TRUE },
{ "wood", VULN_WOOD, TRUE },
{ "silver", VULN_SILVER, TRUE },
{ "iron", VULN_IRON, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type position_flags[] =
{
{ "dead", POS_DEAD, FALSE },
{ "mortal", POS_MORTAL, FALSE },
{ "incap", POS_INCAP, FALSE },
{ "stunned", POS_STUNNED, FALSE },
{ "sleeping", POS_SLEEPING, TRUE },
{ "resting", POS_RESTING, TRUE },
{ "sitting", POS_SITTING, TRUE },
{ "fighting", POS_FIGHTING, FALSE },
{ "standing", POS_STANDING, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type portal_flags[] =
{
{ "normal_exit", GATE_NORMAL_EXIT, TRUE },
{ "no_curse", GATE_NOCURSE, TRUE },
{ "go_with", GATE_GOWITH, TRUE },
{ "buggy", GATE_BUGGY, TRUE },
{ "random", GATE_RANDOM, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type furniture_flags[] =
{
{ "stand_at", STAND_AT, TRUE },
{ "stand_on", STAND_ON, TRUE },
{ "stand_in", STAND_IN, TRUE },
{ "sit_at", SIT_AT, TRUE },
{ "sit_on", SIT_ON, TRUE },
{ "sit_in", SIT_IN, TRUE },
{ "rest_at", REST_AT, TRUE },
{ "rest_on", REST_ON, TRUE },
{ "rest_in", REST_IN, TRUE },
{ "sleep_at", SLEEP_AT, TRUE },
{ "sleep_on", SLEEP_ON, TRUE },
{ "sleep_in", SLEEP_IN, TRUE },
{ "put_at", PUT_AT, TRUE },
{ "put_on", PUT_ON, TRUE },
{ "put_in", PUT_IN, TRUE },
{ "put_inside", PUT_INSIDE, TRUE },
{ NULL, 0, 0 }
};
const struct flag_type apply_types [] =
{
{ "affects", TO_AFFECTS, TRUE },
{ "object", TO_OBJECT, TRUE },
{ "immune", TO_IMMUNE, TRUE },
{ "resist", TO_RESIST, TRUE },
{ "vuln", TO_VULN, TRUE },
{ "weapon", TO_WEAPON, TRUE },
{ NULL, 0, TRUE }
};
const struct bit_type bitvector_type [] =
{
{ affect_flags, "affect" },
{ apply_flags, "apply" },
{ imm_flags, "imm" },
{ res_flags, "res" },
{ vuln_flags, "vuln" },
{ weapon_type2, "weapon" }
};
const struct empire_type empire_table[MAX_EMPIRE] =
{
/* name, who entry */
{ "anathema", "[ANATHEMA] " },
{ "nonempire", "" },
{ "prebloodoath", "" },
{ "bloodoath", "[BLOODOATH] " },
{ "citizen", "[CITIZEN] " },
{ "leader", "[LEADER] " },
{ "emperor", "[EMPEROR] " },
{ "immortal", "" }
};
const struct color_type color_table[MAX_COLORS] =
{
/* Color name Associated Ascii Value */
{"uncolored", "\x01B[0m" },
{"red", "\x01B[0;31m" },
{"green", "\x01B[0;32m" },
{"yellow", "\x01B[0;33m" },
{"blue", "\x01B[0;34m" },
{"magenta", "\x01B[0;35m" },
{"cyan", "\x01B[0;36m" },
{"lightgrey", "\x01B[0;37m" },
{"darkgrey", "\x01B[1;30m" },
{"lightred", "\x01B[1;31m" },
{"lightgreen", "\x01B[1;32m" },
{"lightyellow", "\x01B[1;33m" },
{"lightblue", "\x01B[1;34m" },
{"lightmagenta","\x01B[1;35m" },
{"lightcyan", "\x01B[1;36m" },
{"white", "\x01B[1;37m" },
};
const struct color_event_type color_event[MAX_EVENTS] =
{
/* Event Name Default Color Minimum Level */
{"prompt", "uncolored", 1 },
{"channels", "darkgrey", 1 },
{"tells", "lightgreen", 1 },
{"grouptells", "magenta", 1 },
{"speech", "lightyellow", 1 },
{"damage", "lightred", 1 },
{"yells", "lightcyan", 1 },
{"immtalk", "lightblue", 52 },
{"wiznet", "uncolored", 52 },
{"prays", "lightred", 53 },
};
const struct flag_type extended_flags[] =
{
{ "cheap_shot", OFF_CHEAPSHOT, TRUE },
{ "parting_blow", OFF_PARTING_BLOW, TRUE },
{ "assassin", OFF_ASSASSIN, TRUE },
{ "sword_spec", OFF_SWORD_SPEC, TRUE },
{ "axe_spec", OFF_AXE_SPEC, TRUE },
{ "hth_spec", OFF_HTH_SPEC, TRUE },
{ "dagger_spec", OFF_DAGGER_SPEC, TRUE },
{ "spear_spec", OFF_SPEAR_SPEC, TRUE },
{ "mace_spec", OFF_MACE_SPEC, TRUE },
{ "whip_spec", OFF_WHIP_SPEC, TRUE },
{ "polearm_spec", OFF_POLEARM_SPEC, TRUE },
{ NULL, 0, FALSE }
};
/* New Affect Types */
const struct flag_type aftype_table[] =
{
{ "AFT_SPELL", AFT_SPELL, TRUE },
{ "AFT_SKILL", AFT_SKILL, TRUE },
{ "AFT_POWER", AFT_POWER, TRUE },
{ "AFT_MALADY", AFT_MALADY, TRUE },
{ "AFT_COMMUNE", AFT_COMMUNE, TRUE },
{ "AFT_INVIS", AFT_INVIS, TRUE },
{ NULL, 0, FALSE },
};
const struct display_type apply_locations[] =
{
{ "none", APPLY_NONE, "none" },
{ "str", APPLY_STR, "strength" },
{ "dex", APPLY_DEX, "dexterity" },
{ "int", APPLY_INT, "intelligence" },
{ "wis", APPLY_WIS, "wisdom" },
{ "con", APPLY_CON, "constitution" },
{ "sex", APPLY_SEX, "sex" },
{ "class", APPLY_CLASS, "class" },
{ "age", APPLY_AGE, "age" },
{ "height", APPLY_HEIGHT, "none" },
{ "weight", APPLY_WEIGHT, "none" },
{ "mana", APPLY_MANA, "mana" },
{ "hp", APPLY_HIT, "health" },
{ "move", APPLY_MOVE, "moves" },
{ "gold", APPLY_GOLD, "none" },
{ "exp", APPLY_EXP, "none" },
{ "ac", APPLY_AC, "armor class" },
{ "hitroll", APPLY_HITROLL, "hitroll" },
{ "damroll", APPLY_DAMROLL, "damroll" },
{ "saves", APPLY_SAVES, "saves" },
{ "spara", APPLY_SAVING_PARA, "save vs paralysis" },
{ "srod", APPLY_SAVING_ROD, "save vs rod" },
{ "spetri", APPLY_SAVING_PETRI, "save vs petrification" },
{ "sbreath", APPLY_SAVING_BREATH,"save vs breath" },
{ "svspell", APPLY_SAVING_SPELL, "save vs spell" },
{ "affect", APPLY_SPELL_AFFECT, "none" },
{ "regen", APPLY_REGENERATION, "regeneration" },
{ "dam_mod", APPLY_DAM_MOD, "% damage received" },
{ "enhancedDamMod", APPLY_ENHANCED_MOD, "% damage dealt" },
{ "attack_mod", APPLY_ATTACK_MOD, "number of attacks" },
{ "size", APPLY_SIZE, "size" },
{ NULL, 0, FALSE },
};
const struct flag_type area_type_table[] =
{
{"normal", ARE_NORMAL, TRUE },
{"cabal", ARE_CABAL, TRUE },
{"quest", ARE_QUEST, TRUE },
{"city", ARE_CITY, TRUE },
{"unopened", ARE_UNOPENED, TRUE },
{NULL, 0, TRUE },
};
const struct bounty_type bounty_table[MAX_BOUNTY] =
{
/* rank name, extitle, credits required */
{ "neophyte", "Neophyte Hunter", 0 },
{ "hunter", "Veteran Hunter", 200 },
{ "master", "Master Hunter", 500 },
{ "sensei", "Elder Sensei of the Hunters", 1000 },
};
const struct quest_reward quest_reward_table[MAX_QUEST_REWARDS] =
{
/* keyword, price, type
description,
classes,
races,
aligns, ethos,
function that performs the reward
Class array layout (listed in groups of 5):
{ warrior, thief, zealot, paladin, anti-paladin,
ranger, druid, channeler, assassin, necromancer,
elementalist, bard, healer }
Race array layout (listed in groups of 5):
{ human, dwarf, elf, svirfnebli, dark-elf,
centaur, troll, cloud, gnome, draconian,
ethereal, changeling, arial, fire, duergar,
storm, lich, angel, wood-elf, illithid,
vuuhu, ruugrah, malefisti } */
//ARMOR
{ "warrior set boots", 2500, REWARD_ARMOR, SET_ITEM, SET_WARRIOR,
OBJ_VNUM_QUEST_STORE_WARRIOR_BOOTS,
"Boots fashioned for the strongest of warriors. Grant the March skill.",
{1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_warrior_boots },
{ "warrior set gauntlets", 2500, REWARD_ARMOR, SET_ITEM, SET_WARRIOR,
OBJ_VNUM_QUEST_STORE_WARRIOR_GAUNTLETS,
"Gloves fashioned for the strongest of warriors.",
{1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_warrior_gauntlets },
{ "warrior set plate", 2500, REWARD_ARMOR, SET_ITEM, SET_WARRIOR,
OBJ_VNUM_QUEST_STORE_WARRIOR_PLATE,
"Platemail fashioned for the strongest of warriors.",
{1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_warrior_plate },
{ "channeler set helm", 2500, REWARD_ARMOR, SET_ITEM, SET_CHANNELER,
OBJ_VNUM_QUEST_STORE_CHANNELER_HELM,
"A crest designed to allow clearer and more focused thought. Grants the Mana\nConduit skill.",
{0,0,0,0,0,0,0,1,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_channeler_helm },
{ "channeler set necklace", 2500, REWARD_ARMOR, SET_ITEM, SET_CHANNELER,
OBJ_VNUM_QUEST_STORE_CHANNELER_NECK,
"A necklace of magical beads. Grants the Mana Disruption spell.",
{0,0,0,0,0,0,0,1,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_channeler_neck },
{ "channeler set robe", 2500, REWARD_ARMOR, SET_ITEM, SET_CHANNELER,
OBJ_VNUM_QUEST_STORE_CHANNELER_ROBE,
"A robe sewn of ethereal fibers. Grants the Mental Clarity skill.",
{0,0,0,0,0,0,0,1,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_channeler_robe },
{ "channeler set ankh", 2500, REWARD_ARMOR, SET_ITEM, SET_CHANNELER,
OBJ_VNUM_QUEST_STORE_CHANNELER_ANKH,
"A magical artifact from an ethereal realm. Can be invoked for a Displacement\neffect.",
{0,0,0,0,0,0,0,1,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_channeler_ankh },
{ "thief set belt", 2500, REWARD_ARMOR, SET_ITEM, SET_THIEF,
OBJ_VNUM_QUEST_STORE_THIEF_BELT,
"An ethereal belt of pouches. Grants the Plant Explosives skill.",
{0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_thief_belt },
{ "thief set boots", 2500, REWARD_ARMOR, SET_ITEM, SET_THIEF,
OBJ_VNUM_QUEST_STORE_THIEF_BOOTS,
"A pair of lightweight blackened boots. Grant the Advanced Tripwire skill.",
{0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_thief_boots },
{ "thief set robe", 2500, REWARD_ARMOR, SET_ITEM, SET_THIEF,
OBJ_VNUM_QUEST_STORE_THIEF_ROBE,
"A concealing robe forged from the essence of shadows. Grants the Shadowstep skill.",
{0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_thief_robe },
{ "healer set ring", 2500, REWARD_ARMOR, SET_ITEM, SET_HEALER,
OBJ_VNUM_QUEST_STORE_HEALER_RING,
"A holy ring crafted from translucent gold. Grants the Resurrect spell.",
{0,0,0,0,0,0,0,0,0,0,0,0,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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_healer_ring },
{ "healer set sleeves", 2500, REWARD_ARMOR, SET_ITEM, SET_HEALER,
OBJ_VNUM_QUEST_STORE_HEALER_SLEEVES,
"Silver-laced armguards from the heavens. Grants the Divine Transferrance spell.",
{0,0,0,0,0,0,0,0,0,0,0,0,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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_healer_sleeves },
{ "healer set bracelet", 2500, REWARD_ARMOR, SET_ITEM, SET_HEALER,
OBJ_VNUM_QUEST_STORE_HEALER_BRACELET,
"A blessed bracelet of pure aquamarine. Grants the Greater Regeneration skill.",
{0,0,0,0,0,0,0,0,0,0,0,0,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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_healer_bracelet },
{ "healer set statue", 2500, REWARD_ARMOR, SET_ITEM, SET_HEALER,
OBJ_VNUM_QUEST_STORE_HEALER_STATUE,
"A statuette imbued with the essence of a goddess.",
{0,0,0,0,0,0,0,0,0,0,0,0,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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_healer_statue },
{ "elementalist set helm", 2500, REWARD_ARMOR, SET_ITEM, SET_ELEMENTALIST,
OBJ_VNUM_QUEST_STORE_ELEMENTALIST_HELM,
"A halo of frozen flame. Grants the Shatter Armor spell.",
{0,0,0,0,0,0,0,0,0,0,1,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_elementalist_helm },
{ "elementalist set neck", 2500, REWARD_ARMOR, SET_ITEM, SET_ELEMENTALIST,
OBJ_VNUM_QUEST_STORE_ELEMENTALIST_NECK,
"A cloak of pure flowing water. Grants the Elemental Affinity skill.",
{0,0,0,0,0,0,0,0,0,0,1,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_elementalist_neck },
{ "elementalist set belt", 2500, REWARD_ARMOR, SET_ITEM, SET_ELEMENTALIST,
OBJ_VNUM_QUEST_STORE_ELEMENTALIST_BELT,
"A cord of sparking electricity. Grants the Hurricane spell.",
{0,0,0,0,0,0,0,0,0,0,1,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_elementalist_belt },
{ "elementalist set ankh", 2500, REWARD_ARMOR, SET_ITEM, SET_ELEMENTALIST,
OBJ_VNUM_QUEST_STORE_ELEMENTALIST_FLAME,
"A pure, flickering flame.",
{0,0,0,0,0,0,0,0,0,0,1,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_elementalist_flame },
//WEAPONS
{ "warrior set weapon", 2500, REWARD_WEAPON, SET_ITEM, SET_WARRIOR,
OBJ_VNUM_QUEST_STORE_WARRIOR_WEAPON,
"A weapon fashioned for the strongest of warriors. This weapon's type can \nbe converted by saying the phrase, \"Victory to the <weapon type>!\"",
{1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_warrior_weapon },
{ "thief set weapon", 2500, REWARD_WEAPON, SET_ITEM, SET_THIEF,
OBJ_VNUM_QUEST_STORE_THIEF_DAGGER,
"A lightweight dagger forged from shadow.",
{0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ALIGN_ANY, ETHOS_ANY,
quest_reward_thief_dagger },
//BOOSTS
{ "hp boost", 1000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Maximum HP raised by 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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_hp_boost },
{ "mana boost", 1000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Maximum Mana raised by 30.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_mana_boost },
{ "move boost", 1000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Maximum Moves raised by 30.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_move_boost },
{ "attack modifier", 10000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"One extra attack per round.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_attack_modifier },
{ "damage reduction", 4000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Damage received reduced by 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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_damage_reduction },
{ "damage enhancement", 2000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Damage dealt increased by 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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_damage_enhancer },
{ "remove fire vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips fire vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_fire },
{ "remove cold vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips cold vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_cold },
{ "remove lightning vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips lightning vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_lightning },
{ "remove holy vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips holy vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_holy },
{ "remove negative vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips negative vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_negative },
{ "remove mental vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips mental vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_mental },
{ "remove bash vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips bashing vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_bash },
{ "remove iron vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips iron vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_iron },
{ "remove drowning vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips drowning vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_drowning },
{ "remove light vuln", 5000, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Strips light vulnerability.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_remove_vuln_light },
{ "add slash resistance", 7500, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Grants resistance to slashing attacks.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_add_resist_slash },
{ "add pierce resistance", 7500, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Grants resistance to piercing attacks.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_add_resist_pierce },
{ "add bash resistance", 7500, REWARD_BOOST, NOT_SET_ITEM, SET_NONE, 0,
"Grants resistance to bashing attacks.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_add_resist_bash },
//MISCELLANEOUS
{ "pill of recall", 250, REWARD_MISCELLANEOUS, NOT_SET_ITEM, SET_NONE, 0,
"Buys one (1) pill of recall.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_pill_recall },
{ "pill of serum", 250, REWARD_MISCELLANEOUS, NOT_SET_ITEM, SET_NONE, 0,
"Buys one (1) poison antidote.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_pill_antidote },
{ "pill of purifying", 250, REWARD_MISCELLANEOUS, NOT_SET_ITEM, SET_NONE, 0,
"Buys one (1) plague-counteracting pill.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_pill_purifier },
{ "pill of holy water", 250, REWARD_MISCELLANEOUS, NOT_SET_ITEM, SET_NONE, 0,
"Buys one (1) pill filled with holy water, used for removing curses.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_pill_holy_water },
{ "pill of teleportation", 250, REWARD_MISCELLANEOUS, NOT_SET_ITEM, SET_NONE, 0,
"Buys one (1) teleportation pill.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_pill_teleport },
{ "pill of flight", 250, REWARD_MISCELLANEOUS, NOT_SET_ITEM, SET_NONE, 0,
"Buys one (1) pill of flying.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_pill_flying },
{ "pill of pass-door", 250, REWARD_MISCELLANEOUS, NOT_SET_ITEM, SET_NONE, 0,
"Buys one (1) pill of pass door.",
{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},
ALIGN_ANY, ETHOS_ANY,
quest_reward_pill_pass_door }
};
const struct set_type set_type_table[MAX_SET_TYPES] =
{
{ SET_NONE, NULL, NULL },
{ SET_WARRIOR, "Victory (Warrior)", check_set_item_warrior },
{ SET_CHANNELER, "Consciousness (Channeler)", check_set_item_channeler },
{ SET_THIEF, "Imperception (Thief)", check_set_item_thief },
{ SET_HEALER, "Devotion (Healer)", check_set_item_healer },
{ SET_ELEMENTALIST,"Control (Elementalist)", check_set_item_elementalist },
};
const struct sector_type sector_table[SECT_MAX] =
{
{ "inside", SECT_INSIDE, 1, 1, "civilized" },
{ "city", SECT_CITY, 1, 1, "civilized" },
{ "field", SECT_FIELD, 2, 1, "uncivilized" },
{ "forest", SECT_FOREST, 3, 2, "uncivilized" },
{ "hills", SECT_HILLS, 5, 2, "uncivilized" },
{ "mountains", SECT_MOUNTAIN, 6, 3, "uncivilized" },
{ "water", SECT_WATER_SWIM, 3, 1, "uncivilized" },
{ "water", SECT_WATER_NOSWIM, 3, 1, "uncivilized" },
{ "unused", SECT_UNUSED, 1, 1, "civilized" },
{ "air", SECT_AIR, 4, 2, "uncivilized" },
{ "desert", SECT_DESERT, 5, 4, "uncivilized" },
{ "road", SECT_ROAD, 2, 1, "civilized" },
{ "underwater", SECT_UNDERWATER, 4, 2, "underwater" }
};