diff options
author | B. Watson <yalhcru@gmail.com> | 2015-05-07 16:32:32 -0400 |
---|---|---|
committer | B. Watson <yalhcru@gmail.com> | 2015-05-07 16:32:32 -0400 |
commit | 013ac7742311556022304e8b30ca170d48b3a016 (patch) | |
tree | 53faa33e75991363f1a6dcc7edc83a66b70e6995 /larn/data.c | |
download | bsd-games-extra-013ac7742311556022304e8b30ca170d48b3a016.tar.gz |
initial commit
Diffstat (limited to 'larn/data.c')
-rw-r--r-- | larn/data.c | 664 |
1 files changed, 664 insertions, 0 deletions
diff --git a/larn/data.c b/larn/data.c new file mode 100644 index 0000000..4f35994 --- /dev/null +++ b/larn/data.c @@ -0,0 +1,664 @@ +/* $NetBSD: data.c,v 1.13 2008/02/03 20:11:04 dholland Exp $ */ + +/*- + * Copyright (c) 1988 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +#ifndef lint +#if 0 +static char sccsid[] = "@(#)data.c 5.3 (Berkeley) 5/13/91"; +#else +__RCSID("$NetBSD: data.c,v 1.13 2008/02/03 20:11:04 dholland Exp $"); +#endif +#endif /* not lint */ + +/* data.c Larn is copyrighted 1986 by Noah Morgan. */ +/* #define NODEFS */ +#include "header.h" +#include "extern.h" + +/* + class[c[LEVEL]-1] gives the correct name of the players experience level + */ +static char aa1[] = " mighty evil master"; +static char aa2[] = "apprentice demi-god"; +static char aa3[] = " minor demi-god "; +static char aa4[] = " major demi-god "; +static char aa5[] = " minor deity "; +static char aa6[] = " major deity "; +static char aa7[] = " novice guardian "; +static char aa8[] = "apprentice guardian"; +static char aa9[] = " The Creator "; +const char *class[] = +{ + " novice explorer ", "apprentice explorer", " practiced explorer", /* -3 */ + " expert explorer ", " novice adventurer", " adventurer ", /* -6 */ + "apprentice conjurer", " conjurer ", " master conjurer ", /* -9 */ + " apprentice mage ", " mage ", " experienced mage ", /* -12 */ + " master mage ", " apprentice warlord", " novice warlord ", /* -15 */ + " expert warlord ", " master warlord ", " apprentice gorgon ", /* -18 */ + " gorgon ", " practiced gorgon ", " master gorgon ", /* -21 */ + " demi-gorgon ", " evil master ", " great evil master ", /* -24 */ + aa1, aa1, aa1, /* -27 */ + aa1, aa1, aa1, /* -30 */ + aa1, aa1, aa1, /* -33 */ + aa1, aa1, aa1, /* -36 */ + aa1, aa1, aa1, /* -39 */ + aa2, aa2, aa2, /* -42 */ + aa2, aa2, aa2, /* -45 */ + aa2, aa2, aa2, /* -48 */ + aa3, aa3, aa3, /* -51 */ + aa3, aa3, aa3, /* -54 */ + aa3, aa3, aa3, /* -57 */ + aa4, aa4, aa4, /* -60 */ + aa4, aa4, aa4, /* -63 */ + aa4, aa4, aa4, /* -66 */ + aa5, aa5, aa5, /* -69 */ + aa5, aa5, aa5, /* -72 */ + aa5, aa5, aa5, /* -75 */ + aa6, aa6, aa6, /* -78 */ + aa6, aa6, aa6, /* -81 */ + aa6, aa6, aa6, /* -84 */ + aa7, aa7, aa7, /* -87 */ + aa8, aa8, aa8, /* -90 */ + aa8, aa8, aa8, /* -93 */ + " earth guardian ", " air guardian ", " fire guardian ", /* -96 */ + " water guardian ", " time guardian ", " ethereal guardian ", /* -99 */ + aa9, aa9, aa9, /* -102 */ +}; + +/* + table of experience needed to be a certain level of player + skill[c[LEVEL]] is the experience required to attain the next level + */ +#define MEG 1000000 +long skill[] = { + 0, 10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, /* 1-11 */ + 10240, 20480, 40960, 100000, 200000, 400000, 700000, 1 * MEG, /* 12-19 */ + 2 * MEG, 3 * MEG, 4 * MEG, 5 * MEG, 6 * MEG, 8 * MEG, 10 * MEG, /* 20-26 */ + 12 * MEG, 14 * MEG, 16 * MEG, 18 * MEG, 20 * MEG, 22 * MEG, 24 * MEG, 26 * MEG, 28 * MEG, /* 27-35 */ + 30 * MEG, 32 * MEG, 34 * MEG, 36 * MEG, 38 * MEG, 40 * MEG, 42 * MEG, 44 * MEG, 46 * MEG, /* 36-44 */ + 48 * MEG, 50 * MEG, 52 * MEG, 54 * MEG, 56 * MEG, 58 * MEG, 60 * MEG, 62 * MEG, 64 * MEG, /* 45-53 */ + 66 * MEG, 68 * MEG, 70 * MEG, 72 * MEG, 74 * MEG, 76 * MEG, 78 * MEG, 80 * MEG, 82 * MEG, /* 54-62 */ + 84 * MEG, 86 * MEG, 88 * MEG, 90 * MEG, 92 * MEG, 94 * MEG, 96 * MEG, 98 * MEG, 100 * MEG, /* 63-71 */ + 105 * MEG, 110 * MEG, 115 * MEG, 120 * MEG, 125 * MEG, 130 * MEG, 135 * MEG, 140 * MEG, /* 72-79 */ + 145 * MEG, 150 * MEG, 155 * MEG, 160 * MEG, 165 * MEG, 170 * MEG, 175 * MEG, 180 * MEG, /* 80-87 */ + 185 * MEG, 190 * MEG, 195 * MEG, 200 * MEG, 210 * MEG, 220 * MEG, 230 * MEG, 240 * MEG, /* 88-95 */ + 250 * MEG, 260 * MEG, 270 * MEG, 280 * MEG, 290 * MEG, 300 * MEG /* 96-101 */ +}; +#undef MEG + +u_char *lpbuf, *lpnt, *inbuffer, *lpend; /* input/output pointers + * to the buffers */ +struct cel *cell; /* pointer to the dungeon storage */ +short hitp[MAXX][MAXY]; /* monster hp on level */ +short iarg[MAXX][MAXY]; /* arg for the item array */ +u_char item[MAXX][MAXY]; /* objects in maze if any */ +u_char know[MAXX][MAXY]; /* 1 or 0 if here before */ +u_char mitem[MAXX][MAXY]; /* monster item array */ +u_char moved[MAXX][MAXY]; /* monster movement flags */ +u_char stealth[MAXX][MAXY]; /* 0=sleeping 1=awake monst */ +u_char iven[26]; /* inventory for player */ +short ivenarg[26]; /* inventory for player */ +char lastmonst[40]; /* this has the name of the current monster */ +u_char beenhere[MAXLEVEL + MAXVLEVEL] = {0}; /* 1 if have been on + * this level */ +char VERSION = VER; /* this is the present version # of the + * program */ +char SUBVERSION = SUBVER; +u_char nosignal = 0; /* set to 1 to disable the signals from doing + * anything */ +u_char predostuff = 0; /* 2 means that the trap handling routines + * must do a showplayer() after a trap. 0 + * means don't showplayer() 0 - we are in + * create player screen 1 - we are in welcome + * screen 2 - we are in the normal game */ +char loginname[20]; /* players login name */ +char logname[LOGNAMESIZE]; /* players name storage for scoring */ +u_char sex = 1; /* default is a man 0=woman */ +u_char boldon = 1; /* 1=bold objects 0=inverse objects */ +u_char ckpflag = 0; /* 1 if want checkpointing of game, 0 + * otherwise */ +u_char cheat = 0; /* 1 if the player has fudged save file */ +short level = 0; /* cavelevel player is on = c[CAVELEVEL] */ +u_char wizard = 0; /* the wizard mode flag */ +short lastnum = 0; /* the number of the monster last hitting + * player */ +short hitflag = 0; /* flag for if player has been hit when + * running */ +short hit2flag = 0; /* flag for if player has been hit when + * running */ +short hit3flag = 0; /* flag for if player has been hit flush + * input */ +short playerx, playery; /* the room on the present level of + * the player */ +short lastpx, lastpy; /* 0 --- MAXX-1 or 0 --- MAXY-1 */ +short oldx, oldy; +short lasthx = 0, lasthy = 0; /* location of monster last hit by + * player */ +short nobeep = 0; /* true if program is not to beep */ +unsigned long randx = 33601; /* the random number seed */ +time_t initialtime = 0;/* time playing began */ +long gltime = 0; /* the clock for the game */ +long outstanding_taxes = 0; /* present tax bill from score file */ +long c[100], cbak[100]; /* the character description arrays */ +int enable_scroll = 0; /* constant for enabled/disabled + * scrolling regn */ +char aborted[] = " aborted"; +struct sphere *spheres = 0; /* pointer to linked list for spheres of + * annihilation */ +const char *levelname[] = +{" H", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "V1", "V2", "V3"}; + +char objnamelist[] = " ATOP%^F&^+M=%^$$f*OD#~][[)))(((||||||||{?!BC}o:@.<<<<EVV))([[]]](^ [H*** ^^ S tsTLc............................................"; +char monstnamelist[] = " BGHJKOScjtAELNQRZabhiCTYdegmvzFWflorXV pqsyUkMwDDPxnDDuD ..............................................................."; +const char *objectname[] = +{0, "a holy altar", "a handsome jewel encrusted throne", "the orb", "a pit", + "a staircase leading upwards", "an elevator going up", "a bubbling fountain", + "a great marble statue", "a teleport trap", "the college of Larn", + "a mirror", "the DND store", "a staircase going down", "an elevator going down", + "the bank of Larn", "the 5th branch of the Bank of Larn", + "a dead fountain", "gold", "an open door", "a closed door", + "a wall", "The Eye of Larn", "plate mail", "chain mail", "leather armor", + "a sword of slashing", "Bessman's flailing hammer", "a sunsword", + "a two handed sword", "a spear", "a dagger", + "ring of extra regeneration", "a ring of regeneration", "a ring of protection", + "an energy ring", "a ring of dexterity", "a ring of strength", + "a ring of cleverness", "a ring of increase damage", "a belt of striking", + "a magic scroll", "a magic potion", "a book", "a chest", + "an amulet of invisibility", "an orb of dragon slaying", + "a scarab of negate spirit", "a cube of undead control", + "device of theft prevention", "a brilliant diamond", "a ruby", + "an enchanting emerald", "a sparkling sapphire", "the dungeon entrance", + "a volcanic shaft leaning downward", "the base of a volcanic shaft", + "a battle axe", "a longsword", "a flail", "ring mail", "studded leather armor", + "splint mail", "plate armor", "stainless plate armor", "a lance of death", + "an arrow trap", "an arrow trap", "a shield", "your home", + "gold", "gold", "gold", "a dart trap", + "a dart trap", "a trapdoor", "a trapdoor", "the local trading post", + "a teleport trap", "a massive throne", + "a sphere of annihilation", "a handsome jewel encrusted throne", + "the Larn Revenue Service", "a fortune cookie", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" +}; + + + +/* + * for the monster data + * + * array to do rnd() to create monsters <= a given level + */ +u_char monstlevel[] = {5, 11, 17, 22, 27, 33, 39, 42, 46, 50, 53, 56, 59}; + +struct monst monster[] = { + /* + * NAME LV AC DAM ATT DEF GEN + * INT GOLD HP EXP + * ----------------------------------------------------------------- + */ + {"", 0, 0, 0, 0, 0, 0, 3, 0, 0, 0}, + {"bat", 1, 0, 1, 0, 0, 0, 3, 0, 1, 1}, + {"gnome", 1, 10, 1, 0, 0, 0, 8, 30, 2, 2}, + {"hobgoblin", 1, 14, 2, 0, 0, 0, 5, 25, 3, 2}, + {"jackal", 1, 17, 1, 0, 0, 0, 4, 0, 1, 1}, + {"kobold", 1, 20, 1, 0, 0, 0, 7, 10, 1, 1}, + + {"orc", 2, 12, 1, 0, 0, 0, 9, 40, 4, 2}, + {"snake", 2, 15, 1, 0, 0, 0, 3, 0, 3, 1}, + {"giant centipede", 2, 14, 0, 4, 0, 0, 3, 0, 1, 2}, + {"jaculi", 2, 20, 1, 0, 0, 0, 3, 0, 2, 1}, + {"troglodyte", 2, 10, 2, 0, 0, 0, 5, 80, 4, 3}, + {"giant ant", 2, 8, 1, 4, 0, 0, 4, 0, 5, 5}, + + /* + * NAME LV AC DAM ATT DEF GEN + * INT GOLD HP EXP + * ----------------------------------------------------------------- + */ + + {"floating eye", 3, 8, 1, 0, 0, 0, 3, 0, 5, 2}, + {"leprechaun", 3, 3, 0, 8, 0, 0, 3, 1500, 13, 45}, + {"nymph", 3, 3, 0, 14, 0, 0, 9, 0, 18, 45}, + {"quasit", 3, 5, 3, 0, 0, 0, 3, 0, 10, 15}, + {"rust monster", 3, 4, 0, 1, 0, 0, 3, 0, 18, 25}, + {"zombie", 3, 12, 2, 0, 0, 0, 3, 0, 6, 7}, + + {"assassin bug", 4, 9, 3, 0, 0, 0, 3, 0, 20, 15}, + {"bugbear", 4, 5, 4, 15, 0, 0, 5, 40, 20, 35}, + {"hell hound", 4, 5, 2, 2, 0, 0, 6, 0, 16, 35}, + {"ice lizard", 4, 11, 2, 10, 0, 0, 6, 50, 16, 25}, + {"centaur", 4, 6, 4, 0, 0, 0, 10, 40, 24, 45}, + + /* + * NAME LV AC DAM ATT DEF GEN + * INT GOLD HP EXP + * ----------------------------------------------------------------- + */ + + {"troll", 5, 4, 5, 0, 0, 0, 9, 80, 50, 300}, + {"yeti", 5, 6, 4, 0, 0, 0, 5, 50, 35, 100}, + {"white dragon", 5, 2, 4, 5, 0, 0, 16, 500, 55, 1000}, + {"elf", 5, 8, 1, 0, 0, 0, 15, 50, 22, 35}, + {"gelatinous cube", 5, 9, 1, 0, 0, 0, 3, 0, 22, 45}, + + {"metamorph", 6, 7, 3, 0, 0, 0, 3, 0, 30, 40}, + {"vortex", 6, 4, 3, 0, 0, 0, 3, 0, 30, 55}, + {"ziller", 6, 15, 3, 0, 0, 0, 3, 0, 30, 35}, + {"violet fungi", 6, 12, 3, 0, 0, 0, 3, 0, 38, 100}, + {"wraith", 6, 3, 1, 6, 0, 0, 3, 0, 30, 325}, + {"forvalaka", 6, 2, 5, 0, 0, 0, 7, 0, 50, 280}, + + /* + * NAME LV AC DAM ATT DEF GEN + * INT GOLD HP EXP + * ----------------------------------------------------------------- + */ + + {"lama nobe", 7, 7, 3, 0, 0, 0, 6, 0, 35, 80}, + {"osequip", 7, 4, 3, 16, 0, 0, 4, 0, 35, 100}, + {"rothe", 7, 15, 5, 0, 0, 0, 3, 100, 50, 250}, + {"xorn", 7, 0, 6, 0, 0, 0, 13, 0, 60, 300}, + {"vampire", 7, 3, 4, 6, 0, 0, 17, 0, 50, 1000}, + {"invisible stalker", 7, 3, 6, 0, 0, 0, 5, 0, 50, 350}, + + {"poltergeist", 8, 1, 4, 0, 0, 0, 3, 0, 50, 450}, + {"disenchantress", 8, 3, 0, 9, 0, 0, 3, 0, 50, 500}, + {"shambling mound", 8, 2, 5, 0, 0, 0, 6, 0, 45, 400}, + {"yellow mold", 8, 12, 4, 0, 0, 0, 3, 0, 35, 250}, + {"umber hulk", 8, 3, 7, 11, 0, 0, 14, 0, 65, 600}, + + /* + * NAME LV AC DAM ATT DEF GEN + * INT GOLD HP EXP + * ----------------------------------------------------------------- + */ + + {"gnome king", 9, -1, 10, 0, 0, 0, 18, 2000, 100, 3000}, + {"mimic", 9, 5, 6, 0, 0, 0, 8, 0, 55, 99}, + {"water lord", 9, -10, 15, 7, 0, 0, 20, 0, 150, 15000}, + {"bronze dragon", 9, 2, 9, 3, 0, 0, 16, 300, 80, 4000}, + {"green dragon", 9, 3, 8, 10, 0, 0, 15, 200, 70, 2500}, + {"purple worm", 9, -1, 11, 0, 0, 0, 3, 100, 120, 15000}, + {"xvart", 9, -2, 12, 0, 0, 0, 13, 0, 90, 1000}, + + {"spirit naga", 10, -20, 12, 12, 0, 0, 23, 0, 95, 20000}, + {"silver dragon", 10, -1, 12, 3, 0, 0, 20, 700, 100, 10000}, + {"platinum dragon", 10, -5, 15, 13, 0, 0, 22, 1000, 130, 24000}, + {"green urchin", 10, -3, 12, 0, 0, 0, 3, 0, 85, 5000}, + {"red dragon", 10, -2, 13, 3, 0, 0, 19, 800, 110, 14000}, + + {"type I demon lord", 12, -30, 18, 0, 0, 0, 20, 0, 140, 50000}, + {"type II demon lord", 13, -30, 18, 0, 0, 0, 21, 0, 160, 75000}, + {"type III demon lord", 14, -30, 18, 0, 0, 0, 22, 0, 180, 100000}, + {"type IV demon lord", 15, -35, 20, 0, 0, 0, 23, 0, 200, 125000}, + {"type V demon lord", 16, -40, 22, 0, 0, 0, 24, 0, 220, 150000}, + {"type VI demon lord", 17, -45, 24, 0, 0, 0, 25, 0, 240, 175000}, + {"type VII demon lord", 18, -70, 27, 6, 0, 0, 26, 0, 260, 200000}, + {"demon prince", 25, -127, 30, 6, 0, 0, 28, 0, 345, 300000} + + /* + * NAME LV AC DAM ATT DEF + * GEN INT GOLD HP EXP + * ------------------------------------------------------------------- + * -- + */ +}; + +/* name array for scrolls */ + +const char *scrollname[] = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", +"", "", "", "", "", "", "", "", "", "", "", "", "", ""}; + +const char *scrollhide[] = { + " enchant armor", + " enchant weapon", + " enlightenment", + " blank paper", + " create monster", + " create artifact", + " aggravate monsters", + " time warp", + " teleportation", + " expanded awareness", + " haste monsters", + " monster healing", + " spirit protection", + " undead protection", + " stealth", + " magic mapping", + " hold monsters", + " gem perfection", + " spell extension", + " identify", + " remove curse", + " annihilation", + " pulverization", + " life protection", + " ", + " ", + " ", + " " +}; + +const char *potionname[] = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", +"", "", "", "", "", "", ""}; + +/* name array for magic potions */ +const char *potionhide[] = { + " sleep", + " healing", + " raise level", + " increase ability", + " wisdom", + " strength", + " raise charisma", + " dizziness", + " learning", + " gold detection", + " monster detection", + " forgetfulness", + " water", + " blindness", + " confusion", + " heroism", + " sturdiness", + " giant strength", + " fire resistance", + " treasure finding", + " instant healing", + " cure dianthroritis", + " poison", + " see invisible", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " +}; + + + +/* + spell data + */ +u_char spelknow[SPNUM] = {0}; +u_char splev[] = {1, 4, 9, 14, 18, 22, 26, 29, 32, 35, 37, 37, 37, 37, 37}; + +const char *spelcode[] = { + "pro", "mle", "dex", "sle", "chm", "ssp", + "web", "str", "enl", "hel", "cbl", "cre", "pha", "inv", + "bal", "cld", "ply", "can", "has", "ckl", "vpr", + "dry", "lit", "drl", "glo", "flo", "fgr", + "sca", "hld", "stp", "tel", "mfi", /* 31 */ + "sph", "gen", "sum", "wtw", "alt", "per" +}; + +const char *spelname[] = { + "protection", "magic missile", "dexterity", + "sleep", "charm monster", "sonic spear", + + "web", "strength", "enlightenment", + "healing", "cure blindness", "create monster", + "phantasmal forces", "invisibility", + + "fireball", "cold", "polymorph", + "cancellation", "haste self", "cloud kill", + "vaporize rock", + + "dehydration", "lightning", "drain life", + "invulnerability", "flood", "finger of death", + + "scare monster", "hold monster", "time stop", + "teleport away", "magic fire", + + "sphere of annihilation", "genocide", "summon demon", + "walk through walls", "alter reality", "permanence", + "" +}; + +const char *speldescript[] = { + /* 1 */ + "generates a +2 protection field", + "creates and hurls a magic missile equivalent to a +1 magic arrow", + "adds +2 to the caster's dexterity", + "causes some monsters to go to sleep", + "some monsters may be awed at your magnificence", + "causes your hands to emit a screeching sound toward what they point", + /* 7 */ + "causes strands of sticky thread to entangle an enemy", + "adds +2 to the caster's strength for a short term", + "the caster becomes aware of things in the vicinity", + "restores some hp to the caster", + "restores sight to one so unfortunate as to be blinded", + "creates a monster near the caster appropriate for the location", + "creates illusions, and if believed, monsters die", + "the caster becomes invisible", + /* 15 */ + "makes a ball of fire that burns on what it hits", + "sends forth a cone of cold which freezes what it touches", + "you can find out what this does for yourself", + "negates the ability of a monster to use its special abilities", + "speeds up the caster's movements", + "creates a fog of poisonous gas which kills all that is within it", + "this changes rock to air", + /* 22 */ + "dries up water in the immediate vicinity", + "your finger will emit a lightning bolt when this spell is cast", + "subtracts hit points from both you and a monster", + "this globe helps to protect the player from physical attack", + "this creates an avalanche of H2O to flood the immediate chamber", + "this is a holy spell and calls upon your god to back you up", + /* 28 */ + "terrifies the monster so that hopefully it won't hit the magic user", + "the monster is frozen in its tracks if this is successful", + "all movement in the caverns ceases for a limited duration", + "moves a particular monster around in the dungeon (hopefully away from you)", + "this causes a curtain of fire to appear all around you", + /* 33 */ + "anything caught in this sphere is instantly killed. Warning -- dangerous", + "eliminates a species of monster from the game -- use sparingly", + "summons a demon who hopefully helps you out", + "allows the player to walk through walls for a short period of time", + "god only knows what this will do", + "makes a character spell permanent, i. e. protection, strength, etc.", + "" +}; + +char spelweird[MAXMONST + 8][SPNUM] = { + /* + * p m d s c s w s e h c c p i b c p c h c v d l d g f f + * s h s t m s g s w a p + */ + /* + * r l e l h s e t n e b r h n a l l a a k p r i r l l g + * c l t e f p e u t l e + */ + /* + * o e x e m p b r l l l e a v l d y n s l r y t l o o r + * a d p l i h n m w t r + */ + + + /* bat */ {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, 0}, + /* gnome */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* hobgoblin */ {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, 0}, + /* jackal */ {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, 0}, + /* kobold */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + + /* orc */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* snake */ {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, 0}, + /* giant centipede */ {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, 0}, + /* jaculi */ {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, 0}, + /* troglodyte */ {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, 0}, + + /* giant ant */ {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, 0}, + /* floating eye */ {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, 0}, + /* leprechaun */ {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, 0}, + /* nymph */ {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, 0}, + /* quasit */ {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, 0}, + + /* rust monster */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* zombie */ {0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* assassin bug */ {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, 0}, + /* bugbear */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* hell hound */ {0, 6, 0, 0, 0, 0, 12, 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}, + + /* ice lizard */ {0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* centaur */ {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, 0}, + /* troll */ {0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* yeti */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* white dragon */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + + /* elf */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* gelatinous cube */ {0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* metamorph */ {0, 13, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* vortex */ {0, 13, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* ziller */ {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, 0}, + + /* violet fungi */ {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, 0}, + /* wraith */ {0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* forvalaka */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* lama nobe */ {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, 0}, + /* osequip */ {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, 0}, + + /* rothe */ {0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* xorn */ {0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* vampire */ {0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* invisible staker */ {0, 0, 0, 0, 0, 0, 1, 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}, + /* poltergeist */ {0, 13, 0, 8, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + + /* disenchantress */ {0, 0, 0, 8, 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}, + /* shambling mound */ {0, 0, 0, 0, 0, 10, 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}, + /* yellow mold */ {0, 0, 0, 8, 0, 0, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* umber hulk */ {0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* gnome king */ {0, 7, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + + /* mimic */ {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, 0}, + /* water lord */ {0, 13, 0, 8, 3, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* bronze dragon */ {0, 7, 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}, + /* green dragon */ {0, 7, 0, 0, 0, 0, 11, 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}, + /* purple worm */ {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, 0}, + + /* xvart */ {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, 0}, + /* spirit naga */ {0, 13, 0, 8, 3, 4, 1, 0, 0, 0, 0, 0, 0, 5, 0, 4, 9, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* silver dragon */ {0, 6, 0, 9, 0, 0, 12, 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}, + /* platinum dragon */ {0, 7, 0, 9, 0, 0, 11, 0, 0, 0, 0, 0, 14, 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}, + /* green urchin */ {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, 0}, + /* red dragon */ {0, 6, 0, 0, 0, 0, 12, 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}, + + /* + * p m d s c s w s e h c c p i b c p c h c v d l d g f f + * s h s t m s g s w a p + */ + /* + * r l e l h s e t n e b r h n a l l a a k p r i r l l g + * c l t e f p e u t l e + */ + /* + * o e x e m p b r l l l e a v l d y n s l r y t l o o r + * a d p l i h n m w t r + */ + + /* demon lord */ {0, 7, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0}, + /* demon lord */ {0, 7, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0}, + /* demon lord */ {0, 7, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0}, + /* demon lord */ {0, 7, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0}, + /* demon lord */ {0, 7, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0}, + /* demon lord */ {0, 7, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0}, + /* demon lord */ {0, 7, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0}, + /* demon prince */ {0, 7, 0, 4, 3, 9, 1, 0, 0, 0, 0, 0, 14, 5, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 4, 4, 4, 0, 0, 0, 4, 9, 0, 0, 0, 0, 0} + +}; + +const char *spelmes[] = {"", + /* 1 */ "the web had no effect on the %s", + /* 2 */ "the %s changed shape to avoid the web", + /* 3 */ "the %s isn't afraid of you", + /* 4 */ "the %s isn't affected", + /* 5 */ "the %s can see you with his infravision", + /* 6 */ "the %s vaporizes your missile", + /* 7 */ "your missile bounces off the %s", + /* 8 */ "the %s doesn't sleep", + /* 9 */ "the %s resists", + /* 10 */ "the %s can't hear the noise", + /* 11 */ "the %s's tail cuts it free of the web", + /* 12 */ "the %s burns through the web", + /* 13 */ "your missiles pass right through the %s", + /* 14 */ "the %s sees through your illusions", + /* 15 */ "the %s loves the cold!", + /* 16 */ "the %s loves the water!" +}; + +/* + * function to create scroll numbers with appropriate probability of + * occurrence + * + * 0 - armor 1 - weapon 2 - enlightenment 3 - paper + * 4 - create monster 5 - create item 6 - aggravate 7 - time warp + * 8 - teleportation 9 - expanded awareness 10 - haste monst + * 11 - heal monster 12 - spirit protection 13 - undead protection + * 14 - stealth 15 - magic mapping 16 - hold monster + * 17 - gem perfection 18 - spell extension 19 - identify + * 20 - remove curse 21 - annihilation 22 - pulverization + * 23 - life protection + */ +u_char scprob[] = {0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, + 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, + 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, + 15, 15, 16, 16, 16, 17, 17, 18, 18, 19, 19, 19, 20, 20, 20, 20, 21, 22, +22, 22, 23}; + +/* + * function to return a potion number created with appropriate probability + * of occurrence + * + * 0 - sleep 1 - healing 2 - raise level + * 3 - increase ability 4 - gain wisdom 5 - gain strength + * 6 - charismatic character 7 - dizziness 8 - learning + * 9 - gold detection 10 - monster detection 11 - forgetfulness + * 12 - water 13 - blindness 14 - confusion + * 15 - heroism 16 - sturdiness 17 - giant strength + * 18 - fire resistance 19 - treasure finding 20 - instant healing + * 21 - cure dianthroritis 22 - poison 23 - see invisible + */ +u_char potprob[] = {0, 0, 1, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 20, 22, 22, 23, 23}; + +u_char nlpts[] = {0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7}; +u_char nch[] = {0, 0, 0, 1, 1, 1, 2, 2, 3, 4}; +u_char nplt[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 4}; +u_char ndgg[] = {0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 5}; +u_char nsw[] = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3}; |