games-request@tekred.TEK.COM (11/05/87)
Submitted by: "James E. Wilson" <wilson@ji.berkeley.edu>
Comp.sources.games: Volume 2, Issue 81
Archive-name: umoria/Part16
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 16 (of 16)."
# Contents: Makefile.43 constants.h eat.c prayer.c sets.c signals.c
# staffs.c wands.c
# Wrapped by billr@tekred on Wed Nov 4 10:00:19 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f Makefile.43 -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"Makefile.43\"
else
echo shar: Extracting \"Makefile.43\" \(2422 characters\)
sed "s/^X//" >Makefile.43 <<'END_OF_Makefile.43'
X# BINDIR is the directory where the moria binary while be put
X# LIBDIR is where the other files (scoreboard, news, hours) will be put
X# LIBDIR must be the same directory defined in config.h
XBINDIR = /usr/public/moria
XLIBDIR = /usr/public/moriadir
X
XCFLAGS = -O -DKEY_BINDINGS=ORIGINAL
X
XSRCS = main.c misc1.c misc2.c store1.c files.c io.c create.c desc.c\
X generate.c sets.c dungeon.c creature.c death.c eat.c help.c magic.c\
X potions.c prayer.c save.c staffs.c wands.c scrolls.c spells.c\
X wizard.c store2.c signals.c moria1.c moria2.c monsters.c\
X treasure1.c treasure2.c variables.c
X
XOBJS = main.o misc1.o misc2.o store1.o files.o io.o create.o desc.o\
X generate.o sets.o dungeon.o creature.o death.o eat.o help.o magic.o\
X potions.o prayer.o save.o staffs.o wands.o scrolls.o spells.o\
X wizard.o store2.o signals.o moria1.o moria2.o monsters.o\
X treasure1.o treasure2.o variables.o
X
Xmoria : $(OBJS)
X cc -o moria $(CFLAGS) $(OBJS) -lm -lcurses -ltermcap
X
Xlintout : $(SRCS)
X lint $(SRCS) -lm -lcurses -ltermcap > lintout
X
XTAGS : $(SRCS)
X ctags -x $(SRCS) > TAGS
X
Xinstall:
X cp moria $(BINDIR)
X cp Moria_hours $(LIBDIR)
X cp Moria_news $(LIBDIR)
X cp Highscores $(LIBDIR)
X chmod 4511 $(BINDIR)/moria
X chmod 644 $(LIBDIR)/Highscores
X chmod 444 $(LIBDIR)/Moria_news
X chmod 444 $(LIBDIR)/Moria_hours
X chmod 555 $(LIBDIR)
X
Xcreate.o: constants.h types.h externs.h
Xcreature.o: constants.h types.h externs.h
Xdeath.o: config.h constants.h types.h externs.h
Xdesc.o: constants.h types.h externs.h
Xdungeon.o: constants.h types.h externs.h
Xeat.o: constants.h types.h externs.h
Xfiles.o: config.h constants.h types.h externs.h
Xgenerate.o: constants.h types.h externs.h
Xhelp.o: constants.h types.h externs.h
Xio.o: constants.h types.h externs.h
Xmagic.o: constants.h types.h externs.h
Xmain.o: constants.h types.h
Xmisc1.o: constants.h types.h externs.h
Xmisc2.o: config.h constants.h types.h externs.h
Xmoria1.o: constants.h types.h externs.h
Xmoria2.o: constants.h types.h externs.h
Xpotions.o: constants.h types.h externs.h
Xprayer.o: constants.h types.h externs.h
Xsave.o: constants.h types.h externs.h
Xscrolls.o: constants.h types.h externs.h
Xsets.o: constants.h
Xsignals.o: constants.h types.h externs.h
Xspells.o: constants.h types.h externs.h
Xstaffs.o: constants.h types.h externs.h
Xstore1.o: constants.h types.h externs.h
Xstore2.o: constants.h types.h externs.h
Xwands.o: constants.h types.h externs.h
Xwizard.o: constants.h types.h externs.h
END_OF_Makefile.43
if test 2422 -ne `wc -c <Makefile.43`; then
echo shar: \"Makefile.43\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f constants.h -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"constants.h\"
else
echo shar: Extracting \"constants.h\" \(8769 characters\)
sed "s/^X//" >constants.h <<'END_OF_constants.h'
X/*Note to the Wizard: */
X/* Tweaking these constants can *GREATLY* change the game. */
X/* Two years of constant tuning have generated these */
X/* values. Minor adjustments are encouraged, but you must */
X/* be very careful not to unbalance the game. Moria was */
X/* meant to be challenging, not a give away. Many */
X/* adjustments can cause the game to act strangely, or even*/
X/* cause errors. */
X
X/* Current version number of Moria */
X#define CUR_VERSION 4.85
X
X#ifdef USG
X#define index strchr
X#endif
X
X#ifndef TRUE
X#define TRUE 1
X#endif
X#ifndef FALSE
X#define FALSE 0
X#endif
X
X/* Changing values below this line may be hazardous to your health! */
X
X/* key bindings option */
X#define ORIGINAL 0 /* uses keypad for directions */
X#define ROGUE_LIKE 1 /* uses 'rogue' style keys for directions */
X
X/* Dungeon size parameters */
X#define MAX_HEIGHT 66 /* Multiple of 11; >= 22 */
X#define MAX_WIDTH 198 /* Multiple of 33; >= 66 */
X#define SCREEN_HEIGHT 22
X#define SCREEN_WIDTH 66
X
X/* Output dungeon section sizes */
X#define OUTPAGE_HEIGHT 44 /* 44 lines of dungeon per section */
X#define OUTPAGE_WIDTH 99 /* 100 columns of dungeon per section */
X
X/* Dungeon generation values */
X/* Note: The entire design of dungeon can be changed by only */
X/* slight adjustments here. */
X#define DUN_TUN_RND 36 /* Random direction (4 is min) */
X#define DUN_TUN_CHG 70 /* Chance of changing direction (99 max) */
X#define DUN_TUN_FND 12 /* Distance for auto find to kick in */
X#define DUN_TUN_CON 15 /* Chance of extra tunneling */
X#define DUN_ROO_MEA 32 /* Mean of # of rooms, standard dev2 */
X#define DUN_TUN_PEN 25 /* % chance of room doors */
X#define DUN_TUN_JCT 15 /* % chance of doors at tunnel junctions */
X#define DUN_STR_DEN 5 /* Density of streamers */
X#define DUN_STR_RNG 2 /* Width of streamers */
X#define DUN_STR_MAG 3 /* Number of magma streamers */
X#define DUN_STR_MC 95 /* 1/x chance of treasure per magma */
X#define DUN_STR_QUA 2 /* Number of quartz streamers */
X#define DUN_STR_QC 55 /* 1/x chance of treasure per quartz */
X#define DUN_UNUSUAL 300 /* Level/x chance of unusual room */
X
X/* Store constants */
X#define MAX_OWNERS 18 /* Number of owners to choose from */
X#define MAX_STORES 6 /* Number of different stores */
X#define STORE_INVEN_MAX 24 /* Max number of discrete objs in inven */
X#define STORE_CHOICES 26 /* NUMBER of items to choice stock from */
X#define STORE_MAX_INVEN 20 /* Max diff objs in stock before auto sell*/
X#define STORE_MIN_INVEN 14 /* Min diff objs in stock before auto buy*/
X#define STORE_TURN_AROUND 3 /* Amount of buying and selling normally */
X#define INVEN_INIT_MAX 105 /* Size of store init array */
X#define COST_ADJ 1.00 /* Adjust prices for buying and selling */
X
X/* Treasure constants */
X#define INVEN_ARRAY_SIZE 35 /* Size of inventory array(Do not change)*/
X#define INVEN_MAX 34 /* index of highest entry in inventory array */
X#define MAX_OBJ_LEVEL 50 /* Maximum level of magic in dungeon */
X#define OBJ_GREAT 20 /* 1/n Chance of item being a Great Item */
X#define MAX_OBJECTS 344 /* Number of objects for universe */
X#define MAX_GOLD 18 /* Number of different types of gold */
X#define MAX_TALLOC 225 /* Max objects per level */
X#define TREAS_ROOM_ALLOC 7 /* Amount of objects for rooms */
X#define TREAS_ANY_ALLOC 2 /* Amount of objects for corridors */
X#define TREAS_GOLD_ALLOC 2 /* Amount of gold (and gems) */
X
X/* Magic Treasure Generation constants */
X/* Note: Number of special objects, and degree of enchantments */
X/* can be adjusted here. */
X#define OBJ_STD_ADJ 1.25 /* Adjust STD per level */
X#define OBJ_STD_MIN 7 /* Minimum STD */
X#define OBJ_TOWN_LEVEL 7 /* Town object generation level */
X#define OBJ_BASE_MAGIC 15 /* Base amount of magic */
X#define OBJ_BASE_MAX 70 /* Max amount of magic */
X#define OBJ_DIV_SPECIAL 6 /* magic_chance/# special magic */
X#define OBJ_DIV_CURSED 1.3 /* magic_chance/# cursed items */
X
X/* Constants describing limits of certain objects */
X#define OBJ_LAMP_MAX 15000 /* Maximum amount that lamp can be filled*/
X#define OBJ_BOLT_RANGE 18 /* Maximum range of bolts and balls */
X#define OBJ_RUNE_PROT 3000 /* Rune of protection resistance */
X
X/* Creature constants */
X#define MAX_CREATURES 279 /* Number of creatures defined for univ */
X#define MAX_MALLOC 100+1 /* Max that can be allocated */
X#define MAX_MALLOC_CHANCE 160 /* 1/x chance of new monster each round */
X#define MAX_MONS_LEVEL 40 /* Maximum level of creatures */
X#define MAX_SIGHT 20 /* Maximum dis a creature can be seen */
X#define MAX_SPELL_DIS 20 /* Maximum dis creat. spell can be cast */
X#define MAX_MON_MULT 75 /* Maximum reproductions on a level */
X#define MON_MULT_ADJ 7 /* High value slows multiplication */
X#define MON_NASTY 50 /* Dun_level/x chance of high level creat*/
X#define MIN_MALLOC_LEVEL 14 /* Minimum number of monsters/level */
X#define MIN_MALLOC_TD 4 /* Number of people on town level (day) */
X#define MIN_MALLOC_TN 8 /* Number of people on town level (night)*/
X#define WIN_MON_TOT 2 /* Total number of "win" creatures */
X#define WIN_MON_APPEAR 50 /* Level where winning creatures begin */
X#define MON_SUMMON_ADJ 2 /* Adjust level of summoned creatures */
X#define MON_DRAIN_LIFE 2 /* Percent of player exp drained per hit */
X
X/* Trap constants */
X#define MAX_TRAPA 18 /* Number of defined traps */
X#define MAX_TRAPB 19 /* Includes secret doors */
X
X/* Descriptive constants */
X#define MAX_COLORS 67 /* Used with potions */
X#define MAX_MUSH 29 /* Used with mushrooms */
X#define MAX_WOODS 41 /* Used with staffs */
X#define MAX_METALS 31 /* Used with wands */
X#define MAX_ROCKS 52 /* Used with rings */
X#define MAX_AMULETS 39 /* Used with amulets */
X#define MAX_SYLLABLES 153 /* Used with scrolls */
X
X/* Player constants */
X#define MAX_PLAYER_LEVEL 40 /* Maximum possible character level */
X#define MAX_RACES 8 /* Number of defined races */
X#define MAX_CLASS 6 /* Number of defined classes */
X#define USE_DEVICE 3 /* x> Harder devices x< Easier devices */
X#define MAX_BACKGROUND 128 /* Number of types of histories for univ */
X#define PLAYER_FOOD_FULL 10000/* Getting full */
X#define PLAYER_FOOD_MAX 15000/* Maximum food value, beyond is wasted */
X#define PLAYER_FOOD_FAINT 300/* Character begins fainting */
X#define PLAYER_FOOD_WEAK 1000/* Warn player that he is getting very low*/
X#define PLAYER_FOOD_ALERT 2000/* Warn player that he is getting low */
X#define PLAYER_REGEN_FAINT 0.0005 /* Regen factor when fainting */
X#define PLAYER_REGEN_WEAK 0.0015 /* Regen factor when weak */
X#define PLAYER_REGEN_NORMAL 0.0030 /* Regen factor when full */
X#define PLAYER_REGEN_HPBASE 0.0220 /* Min amount hp regen */
X#define PLAYER_REGEN_MNBASE 0.0080 /* Min amount mana regen */
X#define PLAYER_WEIGHT_CAP 130 /* "#"*(1/10 pounds) per strength point */
X#define PLAYER_EXIT_PAUSE 2 /* Pause time before player can re-roll */
X
X/* Base to hit constants */
X#define BTH_LEV_ADJ 3 /* Adjust BTH per level */
X#define BTH_PLUS_ADJ 3 /* Adjust BTH per plus-to-hit */
X#define BTH_HIT 12 /* Automatic hit; 1/bth_hit */
X
X/* table size for random() */
X#define STATE_SIZE 128
X
X/* magic numbers for players inventory array */
X#define INVEN_WIELD 22
X#define INVEN_HEAD 23
X#define INVEN_NECK 24
X#define INVEN_BODY 25
X#define INVEN_ARM 26
X#define INVEN_HANDS 27
X#define INVEN_RIGHT 28
X#define INVEN_LEFT 29
X#define INVEN_FEET 30
X#define INVEN_OUTER 31
X#define INVEN_LIGHT 32
X#define INVEN_AUX 33
X
END_OF_constants.h
if test 8769 -ne `wc -c <constants.h`; then
echo shar: \"constants.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f eat.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"eat.c\"
else
echo shar: Extracting \"eat.c\" \(5231 characters\)
sed "s/^X//" >eat.c <<'END_OF_eat.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Eat some food... -RAK- */
Xeat()
X{
X unsigned int i;
X int j, k, item_val;
X int redraw, ident;
X struct flags *f_ptr;
X struct misc *m_ptr;
X struct stats *s_ptr;
X treasure_type *i_ptr;
X
X reset_flag = TRUE;
X if (inven_ctr > 0)
X {
X if (find_range(80, -1, &j, &k))
X {
X redraw = FALSE;
X if (get_item(&item_val, "Eat what?", &redraw, j, k))
X {
X i_ptr = &inventory[item_val];
X if (redraw) draw_cave();
X reset_flag = FALSE;
X i = i_ptr->flags;
X ident = FALSE;
X while (i != 0)
X {
X j = bit_pos(&i) + 1;
X /* Foods */
X switch(j)
X {
X case 1:
X f_ptr = &py.flags;
X f_ptr->poisoned += randint(10) + i_ptr->level;
X ident = TRUE;
X break;
X case 2:
X f_ptr = &py.flags;
X f_ptr->blind += randint(250) + 10*i_ptr->level + 100;
X draw_cave();
X msg_print("A veil of darkness surrounds you.");
X ident = TRUE;
X break;
X case 3:
X f_ptr = &py.flags;
X f_ptr->afraid += randint(10) + i_ptr->level;
X msg_print("You feel terrified!");
X ident = TRUE;
X break;
X case 4:
X f_ptr = &py.flags;
X f_ptr->confused += randint(10) + i_ptr->level;
X msg_print("You feel drugged.");
X ident = TRUE;
X break;
X case 5:
X f_ptr = &py.flags;
X f_ptr->image += randint(200) + 25*i_ptr->level + 200;
X ident = TRUE;
X break;
X case 6:
X ident = cure_poison();
X break;
X case 7:
X ident = cure_blindness();
X break;
X case 8:
X f_ptr = &py.flags;
X if (f_ptr->afraid > 1)
X {
X f_ptr->afraid = 1;
X ident = TRUE;
X }
X break;
X case 9:
X ident = cure_confusion();
X break;
X case 10:
X ident = lose_str();
X break;
X case 11:
X ident = lose_con();
X break;
X case 12:
X ident = lose_int();
X break;
X case 13:
X ident = lose_wis();
X break;
X case 14:
X ident = lose_dex();
X break;
X case 15:
X ident = lose_chr();
X break;
X case 16:
X s_ptr = &py.stats;
X if (s_ptr->str > s_ptr->cstr)
X {
X s_ptr->cstr = s_ptr->str;
X msg_print("You feel your strength returning.");
X prt_strength();
X ident = TRUE;
X }
X break;
X case 17:
X s_ptr = &py.stats;
X if (s_ptr->con > s_ptr->ccon)
X {
X s_ptr->ccon = s_ptr->con;
X msg_print("You feel your health returning.");
X prt_constitution();
X ident = TRUE;
X }
X break;
X case 18:
X s_ptr = &py.stats;
X if (py.stats.intel > s_ptr->cint)
X {
X s_ptr->cint = py.stats.intel;
X msg_print("Your head spins a moment.");
X prt_intelligence();
X ident = TRUE;
X }
X break;
X case 19:
X s_ptr = &py.stats;
X if (s_ptr->wis > s_ptr->cwis)
X {
X s_ptr->cwis = s_ptr->wis;
X msg_print("You feel your wisdom returning.");
X prt_wisdom();
X ident = TRUE;
X }
X break;
X case 20:
X s_ptr = &py.stats;
X if (s_ptr->dex > s_ptr->cdex)
X {
X s_ptr->cdex = s_ptr->dex;
X msg_print("You feel more dextrous.");
X prt_dexterity();
X ident = TRUE;
X }
X break;
X case 21:
X s_ptr = &py.stats;
X if (s_ptr->chr > s_ptr->cchr)
X {
X s_ptr->cchr = s_ptr->chr;
X msg_print("Your skins starts itching.");
X prt_charisma();
X ident = TRUE;
X }
X break;
X case 22:
X ident = hp_player(randint(3), "poisonness food.");
X break;
X case 23:
X ident = hp_player(randint(6), "poisonness food.");
X break;
X case 24:
X ident = hp_player(randint(12), "poisonness food.");
X break;
X case 25:
X ident = hp_player(damroll("3d6"), "poisonness food.");
X break;
X case 26:
X ident = hp_player(damroll("3d12"), "poisonness food.");
X break;
X case 27:
X ident = hp_player(-randint(4), "poisonness food.");
X break;
X case 28:
X ident = hp_player(-randint(8), "poisonness food.");
X break;
X case 29:
X ident = hp_player(-damroll("2d8"), "poisonness food.");
X break;
X case 30:
X ident = hp_player(-damroll("3d8"), "poisonness food.");
X break;
X case 31:
X m_ptr = &py.misc;
X m_ptr->mhp--;
X if (m_ptr->mhp < m_ptr->chp)
X m_ptr->chp = (double)m_ptr->mhp;
X take_hit(1, "poisonness food.");
X prt_mhp();
X prt_chp();
X ident = TRUE;
X break;
X default:
X break;
X }
X /* End of food actions... */
X }
X if (ident)
X identify(inventory[item_val]);
X if (i_ptr->flags != 0)
X {
X m_ptr = &py.misc;
X m_ptr->exp += ((i_ptr->level/m_ptr->lev) + .5);
X prt_experience();
X }
X add_food(i_ptr->p1);
X py.flags.status = (0xFFFFFFFC & py.flags.status);
X prt_hunger();
X desc_remain(item_val);
X inven_destroy(item_val);
X }
X else
X if (redraw) draw_cave();
X }
X else
X msg_print("You are not carrying any food.");
X }
X else
X msg_print("But you are not carrying anything.");
X}
END_OF_eat.c
if test 5231 -ne `wc -c <eat.c`; then
echo shar: \"eat.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f prayer.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"prayer.c\"
else
echo shar: Extracting \"prayer.c\" \(4983 characters\)
sed "s/^X//" >prayer.c <<'END_OF_prayer.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Pray like HELL... -RAK- */
Xpray()
X{
X int i, j, item_val, dir;
X int choice, chance, result;
X int dumy, y_dumy, x_dumy;
X int redraw;
X spell_type *s_ptr;
X struct misc *m_ptr;
X struct flags *f_ptr;
X treasure_type *i_ptr;
X
X reset_flag = TRUE;
X if (py.flags.blind > 0)
X msg_print("You can't see to read your prayer!");
X else if (no_light())
X msg_print("You have no light to read by.");
X else if (py.flags.confused > 0)
X msg_print("You are too confused...");
X else if (class[py.misc.pclass].pspell)
X if (inven_ctr > 0)
X {
X if (find_range(91, -1, &i, &j))
X {
X redraw = FALSE;
X if (get_item(&item_val, "Use which Holy Book?", &redraw, i, j))
X {
X if ((result = cast_spell("Recite which prayer?", item_val,
X &choice, &chance, &redraw)) == TRUE)
X {
X s_ptr = &magic_spell[py.misc.pclass][choice];
X reset_flag = FALSE;
X if (randint(100) < chance)
X msg_print("You lost your concentration!");
X else
X {
X y_dumy = char_row;
X x_dumy = char_col;
X /* Prayers... */
X choice++;
X switch(choice)
X {
X case 1:
X (void) detect_evil();
X break;
X case 2:
X (void) hp_player(damroll("3d3"), "a prayer.");
X break;
X case 3:
X (void) bless(randint(12)+12);
X break;
X case 4:
X (void) remove_fear();
X break;
X case 5:
X (void) light_area(char_row, char_col);
X break;
X case 6:
X (void) detect_trap();
X break;
X case 7:
X (void) detect_sdoor();
X break;
X case 8:
X (void) slow_poison();
X break;
X case 9:
X if (get_dir("Which direction?", &dir,
X &dumy, &y_dumy, &x_dumy))
X (void) confuse_monster(dir, char_row, char_col);
X break;
X case 10:
X teleport((int)(py.misc.lev*3));
X break;
X case 11:
X (void) hp_player(damroll("4d4"), "a prayer.");
X break;
X case 12:
X (void) bless(randint(24)+24);
X break;
X case 13:
X (void) sleep_monsters1(char_row, char_col);
X break;
X case 14:
X (void) create_food();
X break;
X case 15:
X for (i = 0; i < INVEN_MAX; i++)
X {
X i_ptr = &inventory[i];
X i_ptr->flags &= 0x7FFFFFFF;
X }
X break;
X case 16:
X f_ptr = &py.flags;
X f_ptr->resist_heat += randint(10) + 10;
X f_ptr->resist_cold += randint(10) + 10;
X break;
X case 17:
X (void) cure_poison();
X break;
X case 18:
X if (get_dir("Which direction?", &dir,
X &dumy, &y_dumy, &x_dumy))
X fire_ball(6, dir, char_row, char_col,
X (int)(damroll("3d6")+py.misc.lev),
X "Black Sphere");
X break;
X case 19:
X (void) hp_player(damroll("8d4"), "a prayer.");
X break;
X case 20:
X detect_inv2(randint(24)+24);
X break;
X case 21:
X (void) protect_evil();
X break;
X case 22:
X (void) earthquake();
X break;
X case 23:
X (void) map_area();
X break;
X case 24:
X (void) hp_player(damroll("16d4"), "a prayer.");
X break;
X case 25:
X (void) turn_undead();
X break;
X case 26:
X (void) bless(randint(48)+48);
X break;
X case 27:
X (void) dispell_creature(0x0008,
X (int)(3*py.misc.lev));
X break;
X case 28:
X (void) hp_player(200, "a prayer.");
X break;
X case 29:
X (void) dispell_creature(0x0004,
X (int)(3*py.misc.lev));
X break;
X case 30:
X (void) warding_glyph();
X break;
X case 31:
X (void) dispell_creature(0x0004,
X (int)(4*py.misc.lev));
X (void) cure_confusion();
X (void) remove_fear();
X (void) cure_poison();
X (void) cure_blindness();
X (void) hp_player(1000, "a prayer.");
X break;
X default:
X break;
X }
X /* End of prayers... */
X if (!reset_flag)
X {
X m_ptr = &py.misc;
X m_ptr->exp += s_ptr->sexp;
X prt_experience();
X s_ptr->sexp = 0;
X }
X }
X m_ptr = &py.misc;
X if (!reset_flag)
X {
X if (s_ptr->smana > m_ptr->cmana)
X {
X msg_print("You faint from fatigue!");
X py.flags.paralysis =
X randint(5*(int)(s_ptr->smana-(int)m_ptr->cmana));
X m_ptr->cmana = 0.0;
X if (randint(3) == 1)
X {
X msg_print("You have damaged your health!");
X py.stats.ccon = de_statp(py.stats.ccon);
X prt_constitution();
X }
X }
X else
X m_ptr->cmana -= (double)s_ptr->smana;
X prt_cmana();
X }
X }
X else if (result == -1)
X msg_print("You don't know any prayers in that book.");
X }
X else
X if (redraw) draw_cave();
X }
X else
X msg_print("But you are not carrying any Holy Books!");
X }
X else
X msg_print("But you are not carrying any Holy Books!");
X else
X msg_print("Pray hard enough and your prayers may be answered.");
X}
END_OF_prayer.c
if test 4983 -ne `wc -c <prayer.c`; then
echo shar: \"prayer.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f sets.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"sets.c\"
else
echo shar: Extracting \"sets.c\" \(4073 characters\)
sed "s/^X//" >sets.c <<'END_OF_sets.c'
X#include "constants.h"
X
Xint set_1_2(element)
Xint element;
X{
X if ((element == 1) || (element == 2))
X return(TRUE);
X return(FALSE);
X}
X
Xint set_1_2_4(element)
Xint element;
X{
X if ((element == 1) || (element == 2) || (element == 4))
X return(TRUE);
X return(FALSE);
X}
X
Xint set_4(element)
Xint element;
X{
X if (element == 4)
X return(TRUE);
X return(FALSE);
X}
X
Xint set_corrodes(element)
Xint element;
X{
X switch(element)
X {
X case 23: case 33: case 34: case 35: case 65:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_flammable(element)
Xint element;
X{
X switch(element)
X {
X case 12: case 20: case 21: case 22: case 30: case 31: case 32:
X case 36: case 55: case 70: case 71:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_frost_destroy(element)
Xint element;
X{
X if ((element == 75) || (element == 76))
X return(TRUE);
X return(FALSE);
X}
X
X
Xint set_acid_affect(element)
Xint element;
X{
X switch(element)
X {
X case 1: case 2: case 11: case 12: case 20: case 21: case 22:
X case 30: case 31: case 32: case 36:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_floor(element)
X{
X switch(element)
X {
X case 1: case 2: case 4: case 5: case 6: case 7:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_lightning_destroy(element)
Xint element;
X{
X switch(element)
X {
X case 45: case 60: case 65:
X return(FALSE);
X break;
X }
X return(TRUE);
X}
X
X
X/*ARGSUSED*/ /* to shut up lint about unused argument */
Xint set_null(element)
Xint element;
X{
X return(FALSE);
X}
X
X
Xint set_acid_destroy(element)
Xint element;
X{
X switch(element)
X {
X case 12: case 20: case 21: case 22: case 30: case 31: case 32: case 33:
X case 34: case 35: case 36: case 55: case 70: case 71: case 80: case 104:
X case 105:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_fire_destroy(element)
Xint element;
X{
X switch(element)
X {
X case 12: case 20: case 21: case 22: case 30: case 31: case 32: case 36:
X case 55: case 70: case 71: case 75: case 76: case 80: case 104:
X case 105:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint general_store(element)
Xint element;
X{
X switch(element)
X {
X case 25: case 30: case 32: case 80: case 77: case 15: case 13:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint armory(element)
Xint element;
X{
X switch(element)
X {
X case 30: case 31: case 33: case 34: case 35: case 36:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint weaponsmith(element)
Xint element;
X{
X switch(element)
X {
X case 10: case 11: case 12: case 20: case 21: case 22: case 23:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint temple(element)
Xint element;
X{
X switch(element)
X {
X case 21: case 70: case 71: case 75: case 76: case 91:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint alchemist(element)
Xint element;
X{
X switch(element)
X {
X case 70: case 71: case 75: case 76:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint magic_shop(element)
Xint element;
X{
X switch(element)
X {
X case 40: case 45: case 55: case 65: case 70: case 71:
X case 75: case 76: case 90:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_wall(element)
Xint element;
X{
X switch(element)
X {
X case 10: case 11: case 12:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_pwall(element)
Xint element;
X{
X switch(element)
X {
X case 10: case 11: case 12: case 15:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_corr(element)
Xint element;
X{
X if ((element == 4) || (element == 5))
X return(TRUE);
X return(FALSE);
X}
X
X
Xint set_trap(element)
Xint element;
X{
X switch(element)
X {
X case 101: case 102: case 109: case 110:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
X
X
Xint set_light(element)
Xint element;
X{
X switch(element)
X {
X case 102: case 103: case 104: case 105:
X case 107: case 108: case 109: case 110:
X return(TRUE);
X break;
X }
X return(FALSE);
X}
END_OF_sets.c
if test 4073 -ne `wc -c <sets.c`; then
echo shar: \"sets.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f signals.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"signals.c\"
else
echo shar: Extracting \"signals.c\" \(3793 characters\)
sed "s/^X//" >signals.c <<'END_OF_signals.c'
X#include <curses.h>
X#include <signal.h>
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
Xextern int total_winner;
Xextern int moria_flag;
Xextern int search_flag;
X
X#ifdef USG
X/* no local special characters */
X#else
Xextern struct ltchars save_special_chars;
X#endif
X
Xint error_sig, error_code;
Xint (*core_dump)();
X#ifdef USG
X/* no suspend signal */
X#else
Xint (*suspend_handler)();
X#endif
X
X/* This signal package was brought to you by -JEW- */
X
X(*signal())();
Xsignal_save_core();
Xsignal_save_no_core();
Xsignal_ask_quit();
X
Xinit_signals()
X{
X (void) signal(SIGHUP, signal_save_no_core);
X (void) signal(SIGINT, signal_ask_quit);
X core_dump = signal(SIGQUIT, signal_save_core);
X (void) signal(SIGILL, signal_save_core);
X (void) signal(SIGTRAP, signal_save_core);
X (void) signal(SIGIOT, signal_save_core);
X (void) signal(SIGEMT, signal_save_core);
X (void) signal(SIGFPE, signal_save_core);
X (void) signal(SIGKILL, signal_save_core);
X (void) signal(SIGBUS, signal_save_core);
X (void) signal(SIGSEGV, signal_save_core);
X (void) signal(SIGSYS, signal_save_core);
X (void) signal(SIGTERM, signal_save_core);
X}
X
X/*ARGSUSED*/
X#ifdef USG
Xsignal_save_core(sig)
Xint sig;
X{
X error_sig = sig;
X error_code = 0;
X prt("OH NO!!!!!!!!!! Attempting panic save.", 23, 0);
X save_char(FALSE, FALSE);
X (void) signal(SIGQUIT, SIG_DFL);
X /* restore terminal settings */
X#ifndef BUGGY_CURSES
X nl();
X#endif
X#ifdef ultrix
X nocrmode();
X#else
X nocbreak();
X#endif
X echo();
X resetterm();
X /* restore the saved values of the local special chars */
X /* no local special characters */
X /* allow QUIT signal */
X /* nothing needs to be done here */
X (void) kill(getpid(), 3);
X exit_game();
X}
X#else
Xsignal_save_core(sig, code, scp)
Xint sig, code;
Xstruct sigcontext *scp;
X{
X error_sig = sig;
X error_code = code;
X prt("OH NO!!!!!!!!!! Attempting panic save.", 23, 0);
X save_char(FALSE, FALSE);
X (void) signal(SIGQUIT, SIG_DFL);
X /* restore terminal settings */
X#ifndef BUGGY_CURSES
X nl();
X#endif
X#ifdef ultrix
X nocrmode();
X#else
X nocbreak();
X#endif
X echo();
X /* restore the saved values of the local special chars */
X (void) ioctl(0, TIOCSLTC, (char *)&save_special_chars);
X /* allow QUIT signal */
X (void) sigsetmask(0);
X (void) kill(getpid(), 3);
X exit_game();
X}
X#endif
X
X/*ARGSUSED*/
X#ifdef USG
Xsignal_save_no_core(sig)
Xint sig;
X{
X error_sig = sig;
X error_code = 0;
X save_char(FALSE, TRUE);
X exit_game();
X}
X#else
Xsignal_save_no_core(sig, code, scp)
Xint sig, code;
Xstruct sigcontext *scp;
X{
X error_sig = sig;
X error_code = code;
X save_char(FALSE, TRUE);
X exit_game();
X}
X#endif
X
X/*ARGSUSED*/
X#ifdef USG
Xsignal_ask_quit(sig)
Xint sig;
X{
X char command;
X
X /* reset signal handler */
X (void) signal(sig, signal_ask_quit);
X if (get_com("Do you really want to quit?", &command))
X switch(command)
X {
X case 'y': case 'Y':
X if (character_generated)
X upon_death();
X else
X exit_game();
X break;
X }
X find_flag = FALSE;
X if (search_flag)
X search_off();
X if (py.flags.rest > 0)
X rest_off();
X erase_line(msg_line, msg_line);
X}
X#else
Xsignal_ask_quit(sig, code, scp)
Xint sig, code;
Xstruct sigcontext *scp;
X{
X char command;
X
X /* no need to reset signal handler */
X if (get_com("Do you really want to quit?", &command))
X switch(command)
X {
X case 'y': case 'Y':
X if (character_generated)
X upon_death();
X else
X exit_game();
X break;
X }
X find_flag = FALSE;
X if (search_flag)
X search_off();
X if (py.flags.rest > 0)
X rest_off();
X erase_line(msg_line, msg_line);
X}
X#endif
X
Xno_controlz()
X{
X#ifdef USG
X /* no suspend signal */
X#else
X suspend_handler = signal(SIGTSTP, SIG_IGN);
X#endif
X}
X
Xcontrolz()
X{
X#ifdef USG
X /* no suspend signal */
X#else
X (void) signal(SIGTSTP, suspend_handler);
X#endif
X}
END_OF_signals.c
if test 3793 -ne `wc -c <signals.c`; then
echo shar: \"signals.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f staffs.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"staffs.c\"
else
echo shar: Extracting \"staffs.c\" \(3348 characters\)
sed "s/^X//" >staffs.c <<'END_OF_staffs.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Use a staff... -RAK- */
Xuse()
X{
X unsigned int i;
X int j, k, item_val, chance;
X int y, x;
X int redraw, ident;
X struct misc *m_ptr;
X treasure_type *i_ptr;
X
X reset_flag = TRUE;
X if (inven_ctr > 0)
X {
X if (find_range(55, -1, &j, &k))
X {
X redraw = FALSE;
X if (get_item(&item_val, "Use which staff?", &redraw, j, k))
X {
X i_ptr = &inventory[item_val];
X if (redraw) draw_cave();
X reset_flag = FALSE;
X m_ptr = &py.misc;
X chance = m_ptr->save + m_ptr->lev + int_adj() - i_ptr->level - 5;
X if (py.flags.confused > 0)
X chance /= 2.0;
X if (chance <= 0) chance = 1;
X if (randint(chance) < USE_DEVICE)
X msg_print("You failed to use the staff properly.");
X else if (i_ptr->p1 > 0)
X {
X i = i_ptr->flags;
X ident = FALSE;
X (i_ptr->p1)--;
X while (i != 0)
X {
X j = bit_pos(&i) + 1;
X /* Staffs... */
X switch(j)
X {
X case 1:
X ident = light_area(char_row, char_col);
X break;
X case 2:
X ident = detect_sdoor();
X break;
X case 3:
X ident = detect_trap();
X break;
X case 4:
X ident = detect_treasure();
X break;
X case 5:
X ident = detect_object();
X break;
X case 6:
X teleport(100);
X ident = TRUE;
X break;
X case 7:
X ident = earthquake();
X break;
X case 8:
X ident = FALSE;
X for (k = 0; k < randint(4); k++)
X {
X y = char_row;
X x = char_col;
X ident |= summon_monster(&y, &x, FALSE);
X }
X break;
X case 9:
X ident = genocide();
X break;
X case 10:
X ident = destroy_area(char_row, char_col);
X break;
X case 11:
X ident = starlite(char_row, char_col);
X break;
X case 12:
X ident = speed_monsters(1);
X break;
X case 13:
X ident = speed_monsters(-1);
X break;
X case 14:
X ident = sleep_monsters2();
X break;
X case 15:
X ident = hp_player(randint(8), "a staff.");
X break;
X case 16:
X ident = detect_invisible();
X break;
X case 17:
X py.flags.fast += randint(30) + 15;
X ident = TRUE;
X break;
X case 18:
X py.flags.slow += randint(30) + 15;
X ident = TRUE;
X break;
X case 19:
X ident = mass_poly();
X break;
X case 20:
X if (remove_curse())
X {
X msg_print("The staff glows blue for a moment..");
X ident = TRUE;
X }
X break;
X case 21:
X ident = detect_evil();
X break;
X case 22:
X if ((cure_blindness()) || (cure_poison()) ||
X (cure_confusion()))
X ident = TRUE;
X break;
X case 23:
X ident = dispell_creature(0x0004, 60);
X break;
X case 24:
X ident = mass_genocide();
X break;
X case 25:
X ident = unlight_area(char_row, char_col);
X break;
X default:
X break;
X }
X /* End of staff actions... */
X }
X if (ident)
X identify(inventory[item_val]);
X if (i_ptr->flags != 0)
X {
X m_ptr = &py.misc;
X m_ptr->exp += ((i_ptr->level/m_ptr->lev) + 0.5);
X prt_experience();
X }
X desc_charges(item_val);
X }
X else
X msg_print("The staff has no charges left.");
X }
X else
X if (redraw) draw_cave();
X }
X else
X msg_print("You are not carrying any staffs.");
X }
X else
X msg_print("But you are not carrying anything.");
X}
END_OF_staffs.c
if test 3348 -ne `wc -c <staffs.c`; then
echo shar: \"staffs.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f wands.c -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"wands.c\"
else
echo shar: Extracting \"wands.c\" \(4179 characters\)
sed "s/^X//" >wands.c <<'END_OF_wands.c'
X#include "constants.h"
X#include "types.h"
X#include "externs.h"
X
X
X/* Wands for the aiming... */
Xaim()
X{
X unsigned int i;
X int j, k, l, chance;
X int dir, item_val;
X int dumy, y_dumy, x_dumy;
X int redraw, ident;
X treasure_type *i_ptr;
X struct misc *m_ptr;
X
X redraw = FALSE;
X reset_flag = TRUE;
X if (inven_ctr > 0)
X {
X if (find_range(65, -1, &j, &k))
X {
X if (get_item(&item_val, "Aim which wand?", &redraw, j, k))
X {
X i_ptr = &inventory[item_val];
X if (redraw) draw_cave();
X reset_flag = FALSE;
X redraw = FALSE;
X y_dumy = char_row;
X x_dumy = char_col;
X if (get_dir("Which direction?", &dir, &dumy, &y_dumy, &x_dumy))
X {
X if (py.flags.confused > 0)
X {
X msg_print("You are confused...");
X do
X {
X dir = randint(9);
X }
X while (dir == 5);
X }
X i = i_ptr->flags;
X ident = FALSE;
X m_ptr = &py.misc;
X chance = m_ptr->save + m_ptr->lev + int_adj() - i_ptr->level;
X if (py.flags.confused > 0)
X chance /= 2.0;
X if (chance <= 0) chance = 1;
X if (randint(chance) < USE_DEVICE)
X msg_print("You failed to use the wand properly.");
X else if (i_ptr->p1 > 0)
X {
X (i_ptr->p1)--;
X while (i != 0)
X {
X j = bit_pos(&i) + 1;
X k = char_row;
X l = char_col;
X /* Wands */
X switch(j)
X {
X case 1:
X msg_print("A line of blue shimmering light appears.");
X light_line(dir, char_row, char_col);
X ident = TRUE;
X break;
X case 2:
X fire_bolt(1, dir, k, l, damroll("3d8"),
X "Lightning Bolt");
X ident = TRUE;
X break;
X case 3:
X fire_bolt(4, dir, k, l, damroll("4d8"),
X "Frost Bolt");
X ident = TRUE;
X break;
X case 4:
X fire_bolt(5, dir, k, l, damroll("6d8"),
X "Fire Bolt");
X ident = TRUE;
X break;
X case 5:
X ident = wall_to_mud(dir, k, l);
X break;
X case 6:
X ident = poly_monster(dir, k, l);
X break;
X case 7:
X ident = hp_monster(dir, k, l, -damroll("4d6"));
X break;
X case 8:
X ident = speed_monster(dir, k, l, 1);
X break;
X case 9:
X ident = speed_monster(dir, k, l, -1);
X break;
X case 10:
X ident = confuse_monster(dir, k, l);
X break;
X case 11:
X ident = sleep_monster(dir, k, l);
X break;
X case 12:
X ident = drain_life(dir, k, l);
X break;
X case 13:
X ident = td_destroy2(dir, k, l);
X break;
X case 14:
X fire_bolt(0, dir, k, l, damroll("2d6"),
X "Magic Missile");
X ident = TRUE;
X break;
X case 15:
X ident = build_wall(dir, k, l);
X break;
X case 16:
X ident = clone_monster(dir, k, l);
X break;
X case 17:
X ident = teleport_monster(dir, k, l);
X break;
X case 18:
X ident = disarm_all(dir, k, l);
X break;
X case 19:
X fire_ball(1, dir, k, l, 24, "Lightning Ball");
X ident = TRUE;
X break;
X case 20:
X fire_ball(4, dir, k, l, 32, "Cold Ball");
X ident = TRUE;
X break;
X case 21:
X fire_ball(5, dir, k, l, 48, "Fire Ball");
X ident = TRUE;
X break;
X case 22:
X fire_ball(2, dir, k, l, 8, "Stinking Cloud");
X ident = TRUE;
X break;
X case 23:
X fire_ball(3, dir, k, l, 40, "Acid Ball");
X ident = TRUE;
X break;
X case 24:
X i = 2 << (randint(23) - 1);
X break;
X default:
X break;
X }
X /* End of Wands... */
X }
X if (ident)
X identify(inventory[item_val]);
X if (i_ptr->flags != 0)
X {
X m_ptr = &py.misc;
X m_ptr->exp += ((i_ptr->level/m_ptr->lev) + 0.5);
X prt_experience();
X }
X desc_charges(item_val);
X }
X else
X msg_print("The wand has no charges left.");
X }
X }
X }
X else
X msg_print("You are not carrying any wands.");
X }
X else
X msg_print("But you are not carrying anything.");
X if (redraw) draw_cave();
X}
END_OF_wands.c
if test 4179 -ne `wc -c <wands.c`; then
echo shar: \"wands.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 16 \(of 16\).
cp /dev/null ark16isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 16 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0