/***************************************************************************
* 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-1998 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@hypercube.org) *
* Gabrielle Taylor (gtaylor@hypercube.org) *
* Brian Moore (zump@rom.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <time.h>
#include "include.h"
/* item type list */
const struct item_type item_table [] =
{
{ ITEM_LIGHT, "light" },
{ ITEM_SCROLL, "scroll" },
{ ITEM_WAND, "wand" },
{ ITEM_STAFF, "staff" },
{ ITEM_WEAPON, "weapon" },
{ ITEM_TREASURE, "treasure" },
{ ITEM_ARMOR, "armor" },
{ ITEM_POTION, "potion" },
{ ITEM_CLOTHING, "clothing" },
{ ITEM_FURNITURE, "furniture" },
{ ITEM_TRASH, "trash" },
{ ITEM_CONTAINER, "container" },
{ ITEM_DRINK_CON, "drink" },
{ ITEM_KEY, "key" },
{ ITEM_FOOD, "food" },
{ ITEM_MONEY, "money" },
{ ITEM_BOAT, "boat" },
{ ITEM_CORPSE_NPC,"npc_corpse" },
{ ITEM_CORPSE_PC, "pc_corpse" },
{ ITEM_FOUNTAIN, "fountain" },
{ ITEM_PILL, "pill" },
{ ITEM_PROTECT, "protect" },
{ ITEM_MAP, "map" },
{ ITEM_PORTAL, "portal" },
{ ITEM_WARP_STONE,"warp_stone" },
{ ITEM_ROOM_KEY, "room_key" },
{ ITEM_GEM, "gem" },
{ ITEM_JEWELRY, "jewelry" },
{ ITEM_JUKEBOX, "jukebox" },
{ ITEM_TOKEN, "token" },
{ ITEM_SOURCE, "source" },
{ ITEM_INSTRUMENT,"instrument" },
{ ITEM_SOCKET, "socket", },
{ ITEM_QUIVER, "quiver" },
{ ITEM_ARROW, "arrow", },
{ ITEM_SHEATH, "sheath", },
{ ITEM_SKELETON, "skeleton", },
{ ITEM_ORE, "ore", },
{ ITEM_SOCKETS, "sockets", },
{ 0, NULL }
};
/* weapon selection table */
const struct weapon_type weapon_table [] =
{
{ "sword", &OBJ_VNUM_SCHOOL_SWORD, WEAPON_SWORD },
{ "mace", &OBJ_VNUM_SCHOOL_MACE, WEAPON_MACE },
{ "dagger", &OBJ_VNUM_SCHOOL_DAGGER, WEAPON_DAGGER },
{ "axe", &OBJ_VNUM_SCHOOL_AXE, WEAPON_AXE },
{ "flail", &OBJ_VNUM_SCHOOL_FLAIL, WEAPON_FLAIL },
{ "whip", &OBJ_VNUM_SCHOOL_WHIP, WEAPON_WHIP },
{ "polearm", &OBJ_VNUM_SCHOOL_POLEARM,WEAPON_POLEARM },
{ "bow", &OBJ_VNUM_BOW, WEAPON_BOW },
{ NULL, 0, 0 }
};
/* wiznet table and prototype for future flag setting */
const struct wiznet_type wiznet_table [] =
{
{ "on", WIZ_ON, IM },
{ "prefix", WIZ_PREFIX, IM },
{ "ticks", WIZ_TICKS, IM },
{ "logins", WIZ_LOGINS, IM },
{ "sites", WIZ_SITES, L4 },
{ "links", WIZ_LINKS, L7 },
{ "newbies", WIZ_NEWBIE, IM },
{ "spam", WIZ_SPAM, L5 },
{ "deaths", WIZ_DEATHS, IM },
{ "resets", WIZ_RESETS, L4 },
{ "mobdeaths", WIZ_MOBDEATHS, L4 },
{ "flags", WIZ_FLAGS, L5 },
{ "penalties", WIZ_PENALTIES, L5 },
{ "saccing", WIZ_SACCING, L5 },
{ "levels", WIZ_LEVELS, IM },
{ "load", WIZ_LOAD, L2 },
{ "restore", WIZ_RESTORE, L2 },
{ "snoops", WIZ_SNOOPS, L2 },
{ "switches", WIZ_SWITCHES, L2 },
{ "secure", WIZ_SECURE, L1 },
{ "olc", WIZ_OLC, L4 },
{ NULL, 0, 0 }
};
/* attack table -- not very organized :( */
const struct attack_type attack_table [MAX_DAMAGE_MESSAGE] =
{
{ "none", "hit", -1}, /* 0 */
{ "slice", "slice", DAM_SLASH },
{ "stab", "stab", DAM_PIERCE },
{ "slash", "slash", DAM_SLASH },
{ "whip", "whip", DAM_SLASH },
{ "claw", "claw", DAM_SLASH }, /* 5 */
{ "blast", "blast", DAM_BASH },
{ "pound", "pound", DAM_BASH },
{ "crush", "crush", DAM_BASH },
{ "grep", "grep", DAM_SLASH },
{ "bite", "bite", DAM_PIERCE }, /* 10 */
{ "pierce", "pierce", DAM_PIERCE },
{ "suction", "suction", DAM_BASH },
{ "beating", "beating", DAM_BASH },
{ "digestion", "digestion", DAM_ACID },
{ "charge", "charge", DAM_BASH }, /* 15 */
{ "slap", "slap", DAM_BASH },
{ "punch", "punch", DAM_BASH },
{ "wrath", "wrath", DAM_ENERGY },
{ "magic", "magic", DAM_ENERGY },
{ "divine", "divine power", DAM_HOLY }, /* 20 */
{ "cleave", "cleave", DAM_SLASH },
{ "scratch", "scratch", DAM_PIERCE },
{ "peck", "peck", DAM_PIERCE },
{ "peckb", "peck", DAM_BASH },
{ "chop", "chop", DAM_SLASH }, /* 25 */
{ "sting", "sting", DAM_PIERCE },
{ "smash", "smash", DAM_BASH },
{ "shbite", "shocking bite",DAM_LIGHTNING },
{ "flbite", "flaming bite", DAM_FIRE },
{ "frbite", "freezing bite", DAM_COLD }, /* 30 */
{ "acbite", "acidic bite", DAM_ACID },
{ "chomp", "chomp", DAM_PIERCE },
{ "drain", "life drain", DAM_NEGATIVE },
{ "thrust", "thrust", DAM_PIERCE },
{ "slime", "slime", DAM_ACID },
{ "shock", "shock", DAM_LIGHTNING },
{ "thwack", "thwack", DAM_BASH },
{ "flame", "flame", DAM_FIRE },
{ "chill", "chill", DAM_COLD },
{ "silver", "silver", DAM_SILVER },
{ "wind", "wind", DAM_WIND },
{ NULL, NULL, 0 }
};
/* race table */
const struct race_type race_table [] =
{
/*
{
name, pc_race?,
act bits, aff_by bits, off bits,
imm, res, vuln,
form, parts
},
*/
{ "unused", FALSE, 0, 0, 0, 0, 0, 0, 0, 0 },
{
"human", TRUE,
0, 0, 0,
0, 0, 0,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K
},
{
"elf", TRUE,
0, AFF_INFRARED, 0,
0, RES_CHARM, VULN_IRON,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K
},
{
"dwarf", TRUE,
0, AFF_INFRARED, 0,
0, RES_POISON|RES_DISEASE, VULN_DROWNING,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K
},
{
"giant", TRUE,
0, 0, 0,
0, RES_FIRE|RES_COLD, VULN_MENTAL|VULN_LIGHTNING,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K
},
{
"drow", TRUE,
0, 0, 0,
0, RES_NEGATIVE|RES_COLD|RES_CHARM, VULN_HOLY|VULN_LIGHT,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K
},
{
"duergar", TRUE,
0, AFF_INFRARED, 0,
0, RES_PIERCE|RES_NEGATIVE, VULN_LIGHT|VULN_DROWNING,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K
},
{
"orc", TRUE,
0, AFF_INFRARED, 0,
0, RES_DISEASE, VULN_LIGHT,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K
},
{
"bat", FALSE,
0, AFF_FLYING|AFF_DARK_VISION, OFF_DODGE|OFF_FAST,
0, 0, VULN_LIGHT,
A|G|V, A|C|D|E|F|H|J|K|P
},
{
"bear", FALSE,
0, 0, OFF_CRUSH|OFF_DISARM|OFF_BERSERK,
0, RES_BASH|RES_COLD, 0,
A|G|V, A|B|C|D|E|F|H|J|K|U|V
},
{
"cat", FALSE,
0, AFF_DARK_VISION, OFF_FAST|OFF_DODGE,
0, 0, 0,
A|G|V, A|C|D|E|F|H|J|K|Q|U|V
},
{
"centipede", FALSE,
0, AFF_DARK_VISION, 0,
0, RES_PIERCE|RES_COLD, VULN_BASH,
A|B|G|O, A|C|K
},
{
"dog", FALSE,
0, 0, OFF_FAST,
0, 0, 0,
A|G|V, A|C|D|E|F|H|J|K|U|V
},
{
"doll", FALSE,
0, 0, 0,
IMM_COLD|IMM_POISON|IMM_HOLY|IMM_NEGATIVE|IMM_MENTAL|IMM_DISEASE
|IMM_DROWNING, RES_BASH|RES_LIGHT,
VULN_SLASH|VULN_FIRE|VULN_ACID|VULN_LIGHTNING|VULN_ENERGY,
E|J|M|cc, A|B|C|G|H|K
},
{ "dragon", FALSE,
0, AFF_INFRARED|AFF_FLYING, 0,
0, RES_FIRE|RES_BASH|RES_CHARM,
VULN_PIERCE|VULN_COLD,
A|H|Z, A|C|D|E|F|G|H|I|J|K|P|Q|U|V|X
},
{
"fido", FALSE,
0, 0, OFF_DODGE|ASSIST_RACE,
0, 0, VULN_MAGIC,
A|B|G|V, A|C|D|E|F|H|J|K|Q|V
},
{
"fox", FALSE,
0, AFF_DARK_VISION, OFF_FAST|OFF_DODGE,
0, 0, 0,
A|G|V, A|C|D|E|F|H|J|K|Q|V
},
{
"hobgoblin", FALSE,
0, AFF_INFRARED, 0,
0, RES_DISEASE|RES_POISON, 0,
A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y
},
{
"lizard", FALSE,
0, 0, 0,
0, RES_POISON, VULN_COLD,
A|G|X|cc, A|C|D|E|F|H|K|Q|V
},
{
"modron", FALSE,
0, AFF_INFRARED, ASSIST_RACE|ASSIST_ALIGN,
IMM_CHARM|IMM_DISEASE|IMM_MENTAL|IMM_HOLY|IMM_NEGATIVE,
RES_FIRE|RES_COLD|RES_ACID, 0,
H, A|B|C|G|H|J|K
},
{
"pig", FALSE,
0, 0, 0,
0, 0, 0,
A|G|V, A|C|D|E|F|H|J|K
},
{
"rabbit", FALSE,
0, 0, OFF_DODGE|OFF_FAST,
0, 0, 0,
A|G|V, A|C|D|E|F|H|J|K
},
{
"school monster", FALSE,
ACT_NOALIGN, 0, 0,
IMM_CHARM|IMM_SUMMON, 0, VULN_MAGIC,
A|M|V, A|B|C|D|E|F|H|J|K|Q|U
},
{
"snake", FALSE,
0, 0, 0,
0, RES_POISON, VULN_COLD,
A|G|X|Y|cc, A|D|E|F|K|L|Q|V|X
},
{
"song bird", FALSE,
0, AFF_FLYING, OFF_FAST|OFF_DODGE,
0, 0, 0,
A|G|W, A|C|D|E|F|H|K|P
},
{
"water fowl", FALSE,
0, AFF_SWIM|AFF_FLYING, 0,
0, RES_DROWNING, 0,
A|G|W, A|C|D|E|F|H|K|P
},
{
"wolf", FALSE,
0, AFF_DARK_VISION, OFF_FAST|OFF_DODGE,
0, 0, 0,
A|G|V, A|C|D|E|F|J|K|Q|V
},
{
"wyvern", FALSE,
0, AFF_FLYING|AFF_DETECT_INVIS|AFF_DETECT_HIDDEN,
OFF_BASH|OFF_FAST|OFF_DODGE,
IMM_POISON, 0, VULN_LIGHT,
A|B|G|Z, A|C|D|E|F|H|J|K|Q|V|X
},
{
"rat", FALSE,
0, 0,
OFF_FAST, 0,
0, VULN_POISON,
A|G, A|C|D|E|F|H|J|K|Q
},
{
"griffin", FALSE,
0, 0,
0, 0,
0, 0,
A|B|G|Z, A|C|D|E|F|H|J|K|Q|V|X
},
{
"hawk", FALSE,
0, 0,
0, 0,
0, 0,
A|B|G|Z, A|C|D|E||F|H|J|K|Q|V|X
},
{
"unique", FALSE,
0, 0, 0,
0, 0, 0,
0, 0
},
{
NULL, 0, 0, 0, 0, 0, 0
}
};
const struct pc_race_type pc_race_table [] =
{
{ "null race", "", 0, { 100, 100, 100, 100 },
{ "" }, { 13, 13, 13, 13, 13 }, { 18, 18, 18, 18, 18 }, 0, 1 },
/*
{
"race name", short name, points, { klass multipliers },
{ bonus skills },
{ base stats }, { max stats }, size
},
*/
{
"human", "Human", 0,
{ 100, 100, 100, 100, 100, 100, 100, 100 },
{ "" },
{ 13, 13, 13, 13, 13 }, { 18, 18, 18, 18, 18 }, SIZE_MEDIUM, ALIGN_NEUTRAL
},
{
"elf", " Elf ", 5,
{ 100, 125, 100, 120, 100, 125, 100, 120 },
{ "sneak", "hide" },
{ 12, 14, 13, 15, 11 }, { 16, 20, 18, 21, 15 }, SIZE_SMALL, ALIGN_GOOD
},
{
"dwarf", "Dwarf", 8,
{ 150, 100, 125, 100, 150, 100, 125, 100 },
{ "berserk" },
{ 14, 12, 14, 10, 15 }, { 20, 16, 19, 14, 21 }, SIZE_MEDIUM, ALIGN_GOOD
},
{
"giant", "Giant", 6,
{ 200, 150, 150, 105, 200, 150, 150, 105 },
{ "bash", "fast healing" },
{ 16, 11, 13, 11, 14 }, { 22, 15, 18, 15, 20 }, SIZE_LARGE, ALIGN_GOOD
},
{
"drow", "Drow", 6,
{ 150, 100, 125, 100, 150, 100, 125, 100 },
{ "hide", "sneak" },
{ 15, 18, 15, 18, 15 }, { 18, 20, 18, 20, 17 }, SIZE_SMALL, ALIGN_EVIL
},
{
"duergar", "Duer", 6,
{ 150, 100, 125, 100, 150, 100, 125, 100 },
{ "hide", "sneak" },
{ 17, 14, 20, 14, 14 }, { 19, 16, 22, 16, 16 }, SIZE_MEDIUM, ALIGN_EVIL
},
{
"orc", "Orc", 6,
{ 200, 150, 150, 105, 200, 150, 150, 105 },
{ "bash" },
{ 17, 15, 17, 14, 13 }, { 19, 17, 19, 16, 15 }, SIZE_LARGE, ALIGN_EVIL
},
};
/*
* Class table.
*/
const struct class_type class_table [MAX_CLASS] =
{
{
"mage", "Mag", STAT_INT, &OBJ_VNUM_SCHOOL_DAGGER,
{ 3018, 9618 }, 75, 20, 6, 6, 8, TRUE,
"mage basics", "mage default"
},
{
"cleric", "Cle", STAT_WIS, &OBJ_VNUM_SCHOOL_MACE,
{ 3003, 9619 }, 75, 20, 2, 7, 10, TRUE,
"cleric basics", "cleric default"
},
{
"thief", "Thi", STAT_DEX, &OBJ_VNUM_SCHOOL_DAGGER,
{ 3028, 9639 }, 75, 20, -4, 8, 13, FALSE,
"thief basics", "thief default"
},
{
"warrior", "War", STAT_STR, &OBJ_VNUM_SCHOOL_SWORD,
{ 3022, 9633 }, 75, 20, -10, 11, 15, FALSE,
"warrior basics", "warrior default"
},
{
"wizard", "Wiz", STAT_INT, &OBJ_VNUM_SCHOOL_DAGGER,
{ 3018, 9618 }, 75, 20, 2, 7, 10, TRUE,
"wizard basics", "wizard default"
},
{
"druid", "Drd", STAT_STR, &OBJ_VNUM_SCHOOL_MACE,
{ 3003, 9619 }, 75, 18, -2, 9, 12, TRUE,
"druid basics", "druid default"
},
{
"assassin", "Asn", STAT_DEX, &OBJ_VNUM_SCHOOL_DAGGER,
{ 3028, 9639 }, 75, 17, -8, 10, 15, FALSE,
"assassin basics", "assassin default"
},
{
"barbarian", "Bar", STAT_STR, &OBJ_VNUM_SCHOOL_SWORD,
{ 3022, 9633 }, 75, 15, -12, 13, 17, FALSE,
"barbarian basics", "barbarian default"
}
};
/*
* Attribute bonus tables.
*/
const struct str_app_type str_app [51] =
{
{ -5, -4, 0, 0 }, /* 0 */
{ -5, -4, 3, 1 }, /* 1 */
{ -3, -2, 3, 2 },
{ -3, -1, 10, 3 }, /* 3 */
{ -2, -1, 25, 4 },
{ -2, -1, 55, 5 }, /* 5 */
{ -1, 0, 80, 6 },
{ -1, 0, 90, 7 },
{ 0, 0, 100, 8 },
{ 0, 0, 100, 9 },
{ 0, 0, 115, 10 }, /* 10 */
{ 0, 0, 115, 11 },
{ 0, 0, 130, 12 },
{ 0, 0, 130, 13 }, /* 13 */
{ 0, 1, 140, 14 },
{ 1, 1, 150, 15 }, /* 15 */
{ 1, 2, 165, 16 },
{ 2, 3, 180, 22 },
{ 2, 3, 200, 25 }, /* 18 */
{ 3, 4, 225, 30 },
{ 3, 5, 250, 35 }, /* 20 */
{ 4, 6, 300, 40 },
{ 4, 6, 350, 45 },
{ 5, 7, 400, 50 },
{ 5, 8, 425, 55 },
{ 6, 9, 440, 60 }, /* 25 */
{ 6, 9, 450, 63 },
{ 7, 10, 460, 66 },
{ 7, 10, 470, 69 },
{ 8, 11, 480, 72 },
{ 8, 11, 490, 75 }, /* 30 */
{ 9, 12, 500, 78 },
{ 9, 13, 510, 81 },
{ 10, 13, 520, 84 },
{ 11, 14, 530, 87 },
{ 11, 14, 540, 90 }, /* 35 */
{ 13, 15, 550, 93 },
{ 13, 15, 560, 96 },
{ 14, 16, 570, 99 },
{ 14, 16, 580, 102 },
{ 15, 17, 590, 105 }, /* 40 */
{ 16, 18, 600, 108 },
{ 16, 19, 610, 111 },
{ 17, 19, 620, 114 },
{ 17, 20, 630, 117 },
{ 18, 20, 640, 120 }, /* 45 */
{ 18, 21, 650, 123 },
{ 19, 21, 660, 126 },
{ 19, 22, 670, 129 },
{ 20, 22, 680, 132 },
{ 21, 23, 690, 135 } /* 50 */
};
const struct int_app_type int_app [51] =
{
{ 3 }, /* 0 */
{ 5 }, /* 1 */
{ 7 },
{ 8 }, /* 3 */
{ 9 },
{ 10 }, /* 5 */
{ 11 },
{ 12 },
{ 13 },
{ 15 },
{ 17 }, /* 10 */
{ 19 },
{ 22 },
{ 25 },
{ 28 },
{ 30 }, /* 15 */
{ 32 },
{ 34 },
{ 36 }, /* 18 */
{ 38 },
{ 40 }, /* 20 */
{ 42 },
{ 44 },
{ 46 },
{ 48 },
{ 50 }, /* 25 */
{ 51 },
{ 52 },
{ 53 },
{ 54 },
{ 55 }, /* 30 */
{ 56 },
{ 58 },
{ 59 },
{ 60 },
{ 61 }, /* 35 */
{ 62 },
{ 63 },
{ 64 },
{ 65 },
{ 66 }, /* 40 */
{ 67 },
{ 69 },
{ 71 },
{ 73 },
{ 75 }, /* 45 */
{ 77 },
{ 79 },
{ 81 },
{ 83 },
{ 85 } /* 50 */
};
const struct wis_app_type wis_app [51] =
{
{ 0 }, /* 0 */
{ 0 }, /* 1 */
{ 0 },
{ 0 }, /* 3 */
{ 0 },
{ 1 }, /* 5 */
{ 1 },
{ 1 },
{ 1 },
{ 1 },
{ 1 }, /* 10 */
{ 1 },
{ 1 },
{ 1 },
{ 1 },
{ 2 }, /* 15 */
{ 2 },
{ 2 },
{ 3 }, /* 18 */
{ 3 },
{ 3 }, /* 20 */
{ 3 },
{ 4 },
{ 4 },
{ 4 },
{ 5 }, /* 25 */
{ 5 },
{ 5 },
{ 5 },
{ 6 },
{ 6 }, /* 30 */
{ 6 },
{ 6 },
{ 7 },
{ 7 },
{ 7 }, /* 35 */
{ 8 },
{ 8 },
{ 8 },
{ 8 },
{ 9 }, /* 40 */
{ 9 },
{ 9 },
{ 9 },
{ 10 },
{ 10 }, /* 45 */
{ 10 },
{ 11 },
{ 11 },
{ 11 },
{ 12 } /* 50 */
};
const struct dex_app_type dex_app [51] =
{
{ 60 }, /* 0 */
{ 50 }, /* 1 */
{ 50 },
{ 40 },
{ 30 },
{ 20 }, /* 5 */
{ 10 },
{ 0 },
{ 0 },
{ 0 },
{ 0 }, /* 10 */
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ - 10 }, /* 15 */
{ - 15 },
{ - 20 },
{ - 30 },
{ - 40 },
{ - 50 }, /* 20 */
{ - 60 },
{ - 75 },
{ - 90 },
{ -105 },
{ -120 }, /* 25 */
{ -125 },
{ -130 },
{ -135 },
{ -140 },
{ -145 }, /* 30 */
{ -150 },
{ -155 },
{ -160 },
{ -165 },
{ -170 }, /* 35 */
{ -175 },
{ -180 },
{ -185 },
{ -190 },
{ -195 }, /* 40 */
{ -200 },
{ -205 },
{ -210 },
{ -215 },
{ -220 }, /* 45 */
{ -225 },
{ -230 },
{ -235 },
{ -240 },
{ -245 } /* 50 */
};
const struct con_app_type con_app [51] =
{
{ -4, 20 }, /* 0 */
{ -3, 25 }, /* 1 */
{ -2, 30 },
{ -2, 35 }, /* 3 */
{ -1, 40 },
{ -1, 45 }, /* 5 */
{ -1, 50 },
{ 0, 55 },
{ 0, 60 },
{ 0, 65 },
{ 0, 70 }, /* 10 */
{ 0, 75 },
{ 0, 80 },
{ 0, 85 },
{ 0, 88 },
{ 1, 90 }, /* 15 */
{ 2, 95 },
{ 2, 97 },
{ 3, 99 }, /* 18 */
{ 3, 99 },
{ 4, 99 }, /* 20 */
{ 4, 99 },
{ 5, 99 },
{ 6, 99 },
{ 7, 99 },
{ 8, 99 }, /* 25 */
{ 8, 99 },
{ 8, 99 },
{ 9, 99 },
{ 9, 99 },
{ 10, 99 }, /* 30 */
{ 10, 99 },
{ 10, 99 },
{ 11, 99 },
{ 11, 99 },
{ 12, 99 }, /* 35 */
{ 12, 99 },
{ 12, 99 },
{ 13, 99 },
{ 13, 99 },
{ 14, 99 }, /* 40 */
{ 14, 99 },
{ 14, 99 },
{ 15, 99 },
{ 15, 99 },
{ 16, 99 }, /* 45 */
{ 16, 99 },
{ 16, 99 },
{ 17, 99 },
{ 17, 99 },
{ 17, 99 } /* 50 */
};
/*
* Liquid properties.
* Used in world.obj.
*/
const struct liq_type liq_table [] =
{
/* name color proof, full, thirst, food, ssize */
{ "water", "clear", { 0, 1, 10, 0, 16 } },
{ "beer", "amber", { 12, 1, 8, 1, 12 } },
{ "red wine", "burgundy", { 30, 1, 8, 1, 5 } },
{ "ale", "brown", { 15, 1, 8, 1, 12 } },
{ "dark ale", "dark", { 16, 1, 8, 1, 12 } },
{ "whisky", "golden", { 120, 1, 5, 0, 2 } },
{ "lemonade", "pink", { 0, 1, 9, 2, 12 } },
{ "firebreather", "boiling", { 190, 0, 4, 0, 2 } },
{ "local specialty", "clear", { 151, 1, 3, 0, 2 } },
{ "slime mold juice", "green", { 0, 2, -8, 1, 2 } },
{ "milk", "white", { 0, 2, 9, 3, 12 } },
{ "tea", "tan", { 0, 1, 8, 0, 6 } },
{ "coffee", "black", { 0, 1, 8, 0, 6 } },
{ "blood", "red", { 0, 2, -1, 2, 6 } },
{ "salt water", "clear", { 0, 1, -2, 0, 1 } },
{ "coke", "brown", { 0, 2, 9, 2, 12 } },
{ "root beer", "brown", { 0, 2, 9, 2, 12 } },
{ "elvish wine", "green", { 35, 2, 8, 1, 5 } },
{ "white wine", "golden", { 28, 1, 8, 1, 5 } },
{ "champagne", "golden", { 32, 1, 8, 1, 5 } },
{ "mead", "honey-colored",{ 34, 2, 8, 2, 12 } },
{ "rose wine", "pink", { 26, 1, 8, 1, 5 } },
{ "benedictine wine", "burgundy", { 40, 1, 8, 1, 5 } },
{ "vodka", "clear", { 130, 1, 5, 0, 2 } },
{ "cranberry juice", "red", { 0, 1, 9, 2, 12 } },
{ "orange juice", "orange", { 0, 2, 9, 3, 12 } },
{ "absinthe", "green", { 200, 1, 4, 0, 2 } },
{ "brandy", "golden", { 80, 1, 5, 0, 4 } },
{ "aquavit", "clear", { 140, 1, 5, 0, 2 } },
{ "schnapps", "clear", { 90, 1, 5, 0, 2 } },
{ "icewine", "purple", { 50, 2, 6, 1, 5 } },
{ "amontillado", "burgundy", { 35, 2, 8, 1, 5 } },
{ "sherry", "red", { 38, 2, 7, 1, 5 } },
{ "framboise", "red", { 50, 1, 7, 1, 5 } },
{ "rum", "amber", { 151, 1, 4, 0, 2 } },
{ "cordial", "clear", { 100, 1, 5, 0, 2 } },
{ "magic potion", "multi-coloured", { 0, 1, 10, 0, 16 } },
{ NULL, NULL, { 0, 0, 0, 0, 0 } }
};
const struct group_type group_table [MAX_GROUP] =
{
{
"rom basics", { 0, 0, 0, 0, 0, 0, 0, 0 },
{ "scrolls", "staves", "wands", "recall" }
},
{
"mage basics", { 0, -1, -1, -1, -1, -1, -1, -1 },
{ "dagger" }
},
{
"cleric basics", { -1, 0, -1, -1, -1, -1, -1, -1 },
{ "mace" }
},
{
"thief basics", { -1, -1, 0, -1, -1, -1, -1, -1 },
{ "dagger", "steal" }
},
{
"warrior basics", { -1, -1, -1, 0, -1, -1, -1, -1 },
{ "sword", "second attack" }
},
{
"wizard basics", { -1, -1, -1, -1, 0, -1, -1, -1 },
{ "dagger" }
},
{
"druid basics", { -1, -1, -1, -1, -1, 0, -1, -1 },
{ "mace" }
},
{
"assassin basics", { -1, -1, -1, -1, -1, -1, 0, -1 },
{ "dagger", "steal" }
},
{
"barbarian basics", { -1, -1, -1, -1, -1, -1, -1, 0 },
{ "sword", "second attack" }
},
{
"mage default", { 40, -1, -1, -1, -1, -1, -1, -1 },
{ "lore", "beguiling", "combat", "detection", "enhancement", "illusion",
"maladictions", "protective", "transportation", "weather" }
},
{
"cleric default", { -1, 40, -1, -1, -1, -1, -1, -1 },
{ "flail", "attack", "creation", "curative", "benedictions",
"detection", "healing", "maladictions", "protective", "shield block",
"transportation", "weather" }
},
{
"thief default", { -1, -1, 40, -1, -1, -1, -1, -1 },
{ "mace", "sword", "backstab", "disarm", "dodge", "second attack",
"trip", "hide", "peek", "pick lock", "sneak" }
},
{
"warrior default", { -1, -1, -1, 40, -1, -1, -1, -1 },
{ "weaponsmaster", "shield block", "bash", "disarm", "enhanced damage",
"parry", "rescue", "third attack" }
},
{
"wizard default", { -1, -1, -1, -1, 40, -1, -1, -1 },
{ "lore", "beguiling", "combat", "detection", "enhancement", "illusion",
"maladictions", "protective", "transportation", "weather" }
},
{
"druid default", { -1, -1, -1, -1, -1, 40, -1, -1 },
{ "flail", "attack", "creation", "curative", "benedictions",
"detection", "healing", "maladictions", "protective", "shield block",
"transportation", "weather" }
},
{
"assassin default", { -1, -1, -1, -1, -1, -1, 40, -1 },
{ "mace", "sword", "backstab", "disarm", "dodge", "second attack",
"trip", "hide", "peek", "pick lock", "sneak" }
},
{
"barbarian default", { -1, -1, -1, -1, -1, -1, -1, 40 },
{ "weaponsmaster", "shield block", "bash", "disarm", "enhanced damage",
"parry", "rescue", "third attack" }
},
{
"weaponsmaster", { 40, 40, 40, 20, 40, 40, 40, 20 },
{ "axe", "dagger", "flail", "mace", "polearm", "spear", "sword", "whip",
"bow" }
},
{
"attack", { -1, 5, -1, 8, -1, 4, -1, 7 },
{ "demonfire", "dispel evil", "dispel good", "earthquake",
"flamestrike", "heat metal", "ray of truth" }
},
{
"beguiling", { 4, -1, 6, -1, 3, -1, 5, -1 },
{ "calm", "charm person", "sleep" }
},
{
"benedictions", { -1, 4, -1, -1, -1, 3, -1, -1 },
{ "bless", "calm", "frenzy", "holy word", "remove curse" }
},
{
"combat", { 6, -1, 10, 9, 5, -1, 9, 8 },
{ "acid blast", "burning hands", "chain lightning", "chill touch",
"colour spray", "fireball", "lightning bolt", "magic missile",
"shocking grasp" }
},
{
"creation", { 4, 4, 8, 8, 3, 3, 7, 7 },
{ "continual light", "create food", "create spring", "create water",
"create rose", "floating disc" }
},
{
"curative", { -1, 4, -1, 8, -1, 3, -1, 7 },
{ "cure blindness", "cure disease", "cure poison" }
},
{
"detection", { 4, 3, 6, -1, 3, 2, 5, -1, },
{ "detect evil", "detect good", "detect hidden", "detect invis",
"detect magic", "detect poison", "farsight", "identify",
"know alignment", "locate object" }
},
{
"draconian", { 8, -1, -1, -1, 7, -1, -1, -1 },
{ "acid breath", "fire breath", "frost breath", "gas breath",
"lightning breath" }
},
{
"enchantment", { 6, -1, -1, -1, 5, -1, -1, -1 },
{ "enchant armor", "enchant weapon", "fireproof", "recharge" }
},
{
"enhancement", { 5, -1, 9, 9, 4, -1, 8, 8,},
{ "giant strength", "haste", "infravision", "refresh" }
},
{
"harmful", { -1, 3, -1, -1, -1, 2, -1, -1 },
{ "cause critical", "cause light", "cause serious", "harm" }
},
{
"healing", { -1, 3, -1, -1, 2, -1, -1 },
{ "cure critical", "cure light", "cure serious", "heal",
"mass healing", "refresh" }
},
{
"illusion", { 4, -1, 7, -1, 3, -1, 6, -1 },
{ "invis", "mass invis", "ventriloquate" }
},
{
"maladictions", { 5, 4, -1, -1, 4, 3, -1, -1 },
{ "blindness", "change sex", "curse", "energy drain", "plague",
"poison", "slow", "weaken" }
},
{
"protective", { 4, 4, -1, -1, 3, 3, -1, -1 },
{ "armor", "cancellation", "dispel magic", "fireproof",
"protection evil", "protection good", "sanctuary", "shield",
"stone skin" }
},
{
"transportation", { 4, 4, 8, 9, 3, 3, 7, 8 },
{ "fly", "gate", "nexus", "pass door", "portal", "summon", "teleport",
"word of recall" }
},
{
"weather", { 4, 4, -1, -1, 3, 3, -1, -1 },
{ "call lightning", "control weather", "faerie fire", "faerie fog",
"lightning bolt" }
}
};
const struct weight_type weight_table [ ] =
{
{ "slender" },
{ "slim" },
{ "average" },
{ "stocky" },
{ "heavy" },
{ NULL }
};
const struct eye_type eye_table [] =
{
{ "blue" },
{ "green" },
{ "brown" },
{ "black" },
{ "white" },
{ "clear" },
{ "red" },
{ NULL }
};
const struct height_type height_table [] =
{
{ "short" },
{ "midget" },
{ "average" },
{ "tall" },
{ "giant" },
{ NULL }
};
const struct hair_type hair_table [] =
{
{ "blond" },
{ "red" },
{ "black" },
{ "brown" },
{ "white" },
{ "blue" },
{ NULL }
};