/**************************************************************************** * 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 * ***************************************************************************/ /**************************************************************************** * Demon's Dance MUD, and source code are property of Eric Goetschalckx * * By compiling this code, you agree to include the following in your * * login screen: * * Derivative of Demon's Dance, by Enzo/Stan * ***************************************************************************/ #if defined(macintosh) #include <types.h> #elif defined(WIN32) #include <sys/types.h> #include <time.h> #define NOCRYPT #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #include "merc.h" #include "interp.h" #include "magic.h" #include "recycle.h" #include "tables.h" #include "lookup.h" #include "arena.h" /* race table */ const struct race_type race_table [] = { /* { name, pc_race?, act bits, aff_by bits, off bits, imm, res, vuln, form, parts, remort_race?, regen_affect }, */ { "unique", 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|Z, FALSE, 1 }, { "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|Z, FALSE, .6666 }, { "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|Z, FALSE, 1.5 }, { "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|Z, FALSE, 2 }, /*remort races*/ { "gargoyle", TRUE, 0, AFF_DETECT_MAGIC|AFF_FLYING, 0, IMM_POISON, RES_DISEASE|RES_BASH|RES_COLD, VULN_ACID|VULN_PIERCE, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 2 }, { "vampire", TRUE, 0, AFF_DETECT_EVIL|AFF_INFRARED|AFF_DETECT_GOOD, 0, IMM_NEGATIVE, RES_SOUND|RES_PIERCE|RES_COLD, VULN_FIRE|VULN_BASH|VULN_HOLY, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 2 }, { "ogre", TRUE, 0, AFF_REGENERATION|AFF_INFRARED, 0, IMM_MENTAL, RES_BASH|RES_POISON|RES_FIRE, VULN_SLASH|VULN_COLD, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 3 }, { "gnome", TRUE, 0, AFF_DETECT_MAGIC|AFF_HASTE, 0, 0, RES_MENTAL|RES_BASH|RES_ACID, VULN_DISEASE|VULN_POISON|VULN_SLASH, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 1.5 }, { "mordhel", TRUE, 0, AFF_DETECT_EVIL|AFF_DETECT_MAGIC|AFF_HASTE, 0, 0, RES_SLASH|RES_BASH|RES_COLD, VULN_PIERCE|VULN_FIRE|VULN_SOUND, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 1.5 }, { "angel", TRUE, 0, AFF_DETECT_MAGIC|AFF_FLYING|AFF_DETECT_EVIL, 0, IMM_HOLY, RES_LIGHTNING|RES_COLD, VULN_FIRE|VULN_NEGATIVE, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 2 }, { "leprechaun", TRUE, 0, AFF_DETECT_HIDDEN|AFF_DETECT_INVIS|AFF_HASTE, 0, 0, RES_PIERCE|RES_NEGATIVE|RES_HOLY, VULN_SLASH|VULN_LIGHTNING, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 2 }, { "alarihel", TRUE, 0, AFF_DETECT_HIDDEN|AFF_HASTE, 0, IMM_DISEASE, RES_MENTAL|RES_ACID, VULN_PIERCE|VULN_POISON, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 1.5 }, { "demogorgon", TRUE, 0, AFF_DETECT_GOOD|AFF_FLYING|AFF_DETECT_INVIS, 0, IMM_FIRE, RES_SLASH|RES_BASH|RES_LIGHTNING, VULN_COLD|VULN_ACID|VULN_PIERCE, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Y|Z, TRUE, 1.5 }, /*end remort races*/ { "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|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "centipede", FALSE, 0, AFF_DARK_VISION, 0, 0, RES_PIERCE|RES_COLD, VULN_BASH, A|B|G|O, A|C|K|Z, FALSE, 1 }, { "dog", FALSE, 0, 0, OFF_FAST, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K|U|V|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "goblin", FALSE, 0, AFF_INFRARED, 0, 0, RES_DISEASE, VULN_MAGIC, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "kobold", FALSE, 0, AFF_INFRARED, 0, 0, RES_POISON, VULN_MAGIC, A|B|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Q|Z, FALSE, 1 }, { "lizard", FALSE, 0, 0, 0, 0, RES_POISON, VULN_COLD, A|G|X|cc, A|C|D|E|F|H|K|Q|V|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "orc", FALSE, 0, AFF_INFRARED, 0, 0, RES_DISEASE, VULN_LIGHT, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Z, FALSE, 1 }, { "pig", FALSE, 0, 0, 0, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K|Z, FALSE, 1 }, { "rabbit", FALSE, 0, 0, OFF_DODGE|OFF_FAST, 0, 0, 0, A|G|V, A|C|D|E|F|H|J|K|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "snake", FALSE, 0, 0, 0, 0, RES_POISON, VULN_COLD, A|G|X|Y|cc, A|D|E|F|K|L|Q|V|X|Z, FALSE, 1 }, { "song bird", FALSE, 0, AFF_FLYING, OFF_FAST|OFF_DODGE, 0, 0, 0, A|G|W, A|C|D|E|F|H|K|P|Z, FALSE, 1 }, { "troll", FALSE, 0, AFF_REGENERATION|AFF_INFRARED|AFF_DETECT_HIDDEN, OFF_BERSERK, 0, RES_CHARM|RES_BASH, VULN_FIRE|VULN_ACID, A|B|H|M|V, A|B|C|D|E|F|G|H|I|J|K|U|V|Z, FALSE, 1 }, { "water fowl", FALSE, 0, AFF_SWIM|AFF_FLYING, 0, 0, RES_DROWNING, 0, A|G|W, A|C|D|E|F|H|K|P|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "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|Z, FALSE, 1 }, { "plant", FALSE, 0, AFF_INFRARED, 0, 0, 0, VULN_FIRE, A|H|M|V, A|B|C|D|E|F|G|H|I|J|K|Z, FALSE, 1 }, { "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 }, /* { "race name", short name, points, { class multipliers }, { bonus skills }, { base stats }, { max stats }, size, "notes on race abilities", {com_bonus,cov_bonus,sor_bonus,arc_bonus,wor_bonus} }, */ { "human", "Human", 0, { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { "" }, { 13, 13, 13, 13, 13 }, { 40, 40, 40, 40, 40 }, SIZE_MEDIUM, "None", "None ", "None", {5, 5, 5, 5, 5} }, { "elf", " Elf ", 5, { 100, 125, 100, 120, 100, 100, 100, 100, 100, 100, 100 }, { "sneak", "hide" }, { 12, 14, 13, 15, 11 }, { 40, 40, 40, 40, 40 }, SIZE_SMALL, "None ", "{mCharm ", "None", {3, 5, 5, 5, 5} }, { "dwarf", "Dwarf", 8, { 150, 100, 125, 100, 100, 100, 100, 100, 100, 100, 100 }, { "berserk" }, { 14, 12, 14, 10, 15 }, { 40, 40, 40, 40, 40 }, SIZE_MEDIUM, "None","{GPoison {yDisease", "{cDrowning", {6, 5, 5, 5, 5} }, { "giant", "Giant", 6, { 200, 150, 150, 105, 100, 100, 100, 100, 100, 100, 100 }, { "bash", "fast healing" }, { 16, 11, 13, 11, 14 }, { 40, 40, 40, 40, 40 }, SIZE_LARGE, "None","{RFire {BCold","{MMental {YLightning", {8, 5, 5, 5, 5} }, { "gargoyle", "Grgle", 9, { 175, 90, 200, 100, 100, 175, 100, 90, 175, 200, 100 }, { "stone skin"}, { 19, 17, 22, 15, 18 }, { 45, 45, 45, 45, 45 }, SIZE_LARGE, "{GPoison{W","{yDisease {DBash {BCold","{gAcid {DPierce", {5, 5, 5, 5, 5} }, { "vampire", "Vampe", 11, { 90, 200, 175, 125, 125, 90, 125, 200, 90, 100, 100 }, { "" }, { 19, 20, 15, 18, 14 }, { 45, 45, 45, 45, 45 }, SIZE_MEDIUM, "{wNegative","{cSound {DPierce {BCold","{RFire {DBash {YHOLY", {5, 5, 5, 5, 5} }, { "ogre", "Ogre ", 10, { 200, 200, 200, 50, 75, 200, 100, 200, 200, 200, 100 }, { "berserk", "fast healing" }, { 22, 15, 15, 16, 22 }, { 45, 45, 45, 45, 45 }, SIZE_LARGE, "{MMental","{GPoison {RFire","{DSlash {BCold", {10, 5, 5, 5, 5} }, { "gnome", " Gnome", 8, { 70, 125, 80, 200, 200, 80, 200, 125, 80, 100, 100 }, { "berserk", "fast healing" }, { 16, 22, 19, 17, 15 }, { 45, 45, 45, 45, 45 }, SIZE_SMALL, "None","{MMental {DBash {gAcid","{yDisease {GPoison {DSlash", {2, 5, 5, 5, 5} }, { "mordhel", "Mrdhl", 10, { 50, 200, 100, 100, 100, 75, 100, 200, 75, 125, 100 }, { "energy drain" }, { 17, 22, 16, 18, 14 }, { 45, 45, 45, 45, 45 }, SIZE_MEDIUM, "None","{DSlash {DBash {BCold","{DPierce {RFire {cSound", {7, 5, 5, 5, 5} }, { "angel", "Angel", 11, { 100, 50, 200, 175, 175, 100, 175, 50, 100, 150, 100 }, { "protection evil" }, { 15, 16, 22, 16, 15 }, { 45, 45, 45, 45, 45 }, SIZE_MEDIUM, "{YHoly","{YLightning {BCold","{RFire {wNegative", {5, 5, 5, 5, 5} }, { "leprechaun", "Lprcn", 8, { 150, 175, 50, 100, 200, 175, 80, 175, 175, 75, 100 }, { "sneak", "hide" }, { 19, 17, 17, 23, 18 }, { 45, 45, 45, 45, 45 }, SIZE_MEDIUM, "None","{DPierce {wNegative {YHoly","{DSlash {YLightning", {3, 5, 5, 5, 5} }, { "alarihel", "Alrhl", 10, { 150, 175, 50, 100, 75, 200, 75, 175, 200, 75, 100 }, { "frenzy", "sneak" }, { 19, 16, 15, 20, 16 }, { 45, 45, 45, 45, 45 }, SIZE_MEDIUM, "{yDisease","{MMental {gAcid","{DPierce {GPoison", {5, 5, 5, 5, 5} }, { "demogorgon", "Dmgrg", 10, { 200, 200, 200, 50, 75, 200, 100, 200, 200, 200, 100 }, { "berserk", "fast healing" }, { 22, 15, 15, 16, 22 }, { 45, 45, 45, 45, 45 }, SIZE_LARGE, "{RFire{x","{DSlash Bash {YLightning{x","{BCold {gAcid {DPierce{x", {8, 5, 5, 5, 5} }, };