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