-+-+-+-+-+-+-+-+ START OF PART 60 -+-+-+-+-+-+-+-+ X`09 else if (holder & inventory`5BINVEN_FEET`5D.flags) X`09`09l = INVEN_FEET; X#else X`09 if (TR_CURSED & inventory`5BINVEN_BODY`5D.flags) X`09`09l = INVEN_BODY; X`09 else if (TR_CURSED & inventory`5BINVEN_ARM`5D.flags) X`09`09l = INVEN_ARM; X`09 else if (TR_CURSED & inventory`5BINVEN_OUTER`5D.flags) X`09`09l = INVEN_OUTER; X`09 else if (TR_CURSED & inventory`5BINVEN_HEAD`5D.flags) X`09`09l = INVEN_HEAD; X`09 else if (TR_CURSED & inventory`5BINVEN_HANDS`5D.flags) X`09`09l = INVEN_HANDS; X`09 else if (TR_CURSED & inventory`5BINVEN_FEET`5D.flags) X`09`09l = INVEN_FEET; X#endif X X`09 if (l > 0) X`09`09`7B X`09`09 i_ptr = &inventory`5Bl`5D; X`09`09 objdes(tmp_str, i_ptr, FALSE); X`09`09 (void) sprintf(out_val,"Your %s glows brightly!", tmp_str); X`09`09 msg_print(out_val); X`09`09 flag = FALSE; X`09`09 for (k = 0; k < randint(2) + 1; k++) X`09`09 if (enchant(&i_ptr->toac, 10)) X`09`09 flag = TRUE; X`09`09 if (flag) X`09`09 `7B X#ifdef ATARIST_MWC X`09`09 i_ptr->flags &= `7Eholder; X#else X`09`09 i_ptr->flags &= `7ETR_CURSED; X#endif X`09`09 calc_bonuses (); X`09`09 `7D X`09`09 else X`09`09 msg_print("The enchantment fails."); X`09`09 ident = TRUE; X`09`09`7D X`09 break; X`09 case 36: X`09 if ((inventory`5BINVEN_BODY`5D.tval != TV_NOTHING) X`09`09 && (randint(4) == 1)) X`09`09k = INVEN_BODY; X`09 else if ((inventory`5BINVEN_ARM`5D.tval != TV_NOTHING) X`09`09 && (randint(3) ==1)) X`09`09k = INVEN_ARM; X`09 else if ((inventory`5BINVEN_OUTER`5D.tval != TV_NOTHING) X`09`09 && (randint(3) ==1)) X`09`09k = INVEN_OUTER; X`09 else if ((inventory`5BINVEN_HEAD`5D.tval != TV_NOTHING) X`09`09 && (randint(3) ==1)) X`09`09k = INVEN_HEAD; X`09 else if ((inventory`5BINVEN_HANDS`5D.tval != TV_NOTHING) X`09`09 && (randint(3) ==1)) X`09`09k = INVEN_HANDS; X`09 else if ((inventory`5BINVEN_FEET`5D.tval != TV_NOTHING) X`09`09 && (randint(3) ==1)) X`09`09k = INVEN_FEET; X`09 else if (inventory`5BINVEN_BODY`5D.tval != TV_NOTHING) X`09`09k = INVEN_BODY; X`09 else if (inventory`5BINVEN_ARM`5D.tval != TV_NOTHING) X`09`09k = INVEN_ARM; X`09 else if (inventory`5BINVEN_OUTER`5D.tval != TV_NOTHING) X`09`09k = INVEN_OUTER; X`09 else if (inventory`5BINVEN_HEAD`5D.tval != TV_NOTHING) X`09`09k = INVEN_HEAD; X`09 else if (inventory`5BINVEN_HANDS`5D.tval != TV_NOTHING) X`09`09k = INVEN_HANDS; X`09 else if (inventory`5BINVEN_FEET`5D.tval != TV_NOTHING) X`09`09k = INVEN_FEET; X`09 else X`09`09k = 0; X X`09 if (k > 0) X`09`09`7B X`09`09 i_ptr = &inventory`5Bk`5D; X`09`09 objdes(tmp_str, i_ptr, FALSE); X`09`09 (void)sprintf(out_val,"Your %s glows black, fades.",tmp_str); X`09`09 msg_print(out_val); X`09`09 unmagic_name(i_ptr); X`09`09 i_ptr->flags = TR_CURSED; X`09`09 i_ptr->toac = -randint(5) - randint(5); X`09`09 calc_bonuses (); X`09`09 ident = TRUE; X`09`09`7D X`09 break; X`09 case 37: X`09 ident = FALSE; X`09 for (k = 0; k < randint(3); k++) X`09`09`7B X`09`09 y = char_row; X`09`09 x = char_col; X`09`09 ident `7C= summon_undead(&y, &x); X`09`09`7D X`09 break; X`09 case 38: X`09 ident = TRUE; X`09 bless(randint(12)+6); X`09 break; X`09 case 39: X`09 ident = TRUE; X`09 bless(randint(24)+12); X`09 break; X`09 case 40: X`09 ident = TRUE; X`09 bless(randint(48)+24); X`09 break; X`09 case 41: X`09 ident = TRUE; X`09 if (py.flags.word_recall == 0) X`09`09py.flags.word_recall = 25 + randint(30); X`09 msg_print("The air about you becomes charged."); X`09 break; X`09 case 42: X`09 destroy_area(char_row, char_col); X`09 ident = TRUE; X`09 break; X`09 default: X`09 msg_print("Internal error in scroll()"); X`09 break; X`09 `7D X`09 /* End of Scrolls.`09`09`09 */ X`09`7D X i_ptr = &inventory`5Bitem_val`5D; X if (ident) X`09`7B X`09 if (!known1_p(i_ptr)) X`09 `7B X`09 m_ptr = &py.misc; X`09 /* round half-way case up */ X`09 m_ptr->exp += (i_ptr->level +(m_ptr->lev >> 1)) / m_ptr->lev; X`09 prt_experience(); X X`09 identify(&item_val); X`09 i_ptr = &inventory`5Bitem_val`5D; X`09 `7D X`09`7D X else if (!known1_p(i_ptr)) X`09sample (i_ptr); X if (used_up) X`09`7B X`09 desc_remain(item_val); X`09 inven_destroy(item_val); X`09`7D X `7D X`7D $ CALL UNPACK SCROLLS.C;1 1695629205 $ create 'f' X/* source/sets.c: code to emulate the original Pascal sets X X Copyright (c) 1989-92 James E. Wilson X X This software may be copied and distributed for educational, research, an Vd X not for profit purposes provided that this copyright and statement are X included in all such copies. */ X X#include "config.h" X#include "constant.h" X#include "types.h" X Xint set_room(element) Xregister int element; X`7B X if ((element == DARK_FLOOR) `7C`7C (element == LIGHT_FLOOR)) X return(TRUE); X return(FALSE); X`7D X Xint set_corr(element) Xregister int element; X`7B X if (element == CORR_FLOOR `7C`7C element == BLOCKED_FLOOR) X return(TRUE); X return(FALSE); X`7D X Xint set_floor(element) Xint element; X`7B X if (element <= MAX_CAVE_FLOOR) X return(TRUE); X else X return(FALSE); X`7D X Xint set_corrodes(item) Xinven_type *item; X`7B X switch(item->tval) X `7B X case TV_SWORD: case TV_HELM: case TV_SHIELD: case TV_HARD_ARMOR: X case TV_WAND: X return (TRUE); X `7D X return(FALSE); X`7D X X Xint set_flammable(item) Xinven_type *item; X`7B X switch(item->tval) X `7B X case TV_ARROW: case TV_BOW: case TV_HAFTED: case TV_POLEARM: X case TV_BOOTS: case TV_GLOVES: case TV_CLOAK: case TV_SOFT_ARMOR: X /* Items of (RF) should not be destroyed. */ X if (item->flags & TR_RES_FIRE) X`09return FALSE; X else X`09return TRUE; X X case TV_STAFF: case TV_SCROLL1: case TV_SCROLL2: X return TRUE; X `7D X return(FALSE); X`7D X X Xint set_frost_destroy(item) Xinven_type *item; X`7B X if ((item->tval == TV_POTION1) `7C`7C (item->tval == TV_POTION2) X `7C`7C (item->tval == TV_FLASK)) X return(TRUE); X return(FALSE); X`7D X X Xint set_acid_affect(item) Xinven_type *item; X`7B X switch(item->tval) X `7B X case TV_MISC: case TV_CHEST: X return TRUE; X case TV_BOLT: case TV_ARROW: X case TV_BOW: case TV_HAFTED: case TV_POLEARM: case TV_BOOTS: X case TV_GLOVES: case TV_CLOAK: case TV_SOFT_ARMOR: X if (item->flags & TR_RES_ACID) X`09return (FALSE); X else X`09return (TRUE); X `7D X return(FALSE); X`7D X X Xint set_lightning_destroy(item) Xinven_type *item; X`7B X if ((item->tval == TV_RING) `7C`7C (item->tval == TV_WAND) X `7C`7C (item->tval == TV_SPIKE)) X return(TRUE); X else X return(FALSE); X`7D X X X/*ARGSUSED*/`09/* to shut up lint about unused argument */ X#ifdef __TURBOC__ X`09#pragma argused X#endif Xint set_null(item) Xinven_type *item; X#if defined(MAC) && !defined(THINK_C) X`09#pragma unused(item) X#endif X`7B X return(FALSE); X`7D X X Xint set_acid_destroy(item) Xinven_type *item; X`7B X switch(item->tval) X `7B X case TV_ARROW: case TV_BOW: case TV_HAFTED: case TV_POLEARM: X case TV_BOOTS: case TV_GLOVES: case TV_CLOAK: case TV_HELM: X case TV_SHIELD: case TV_HARD_ARMOR: case TV_SOFT_ARMOR: X if (item->flags & TR_RES_ACID) X`09return FALSE; X else X`09return TRUE; X case TV_STAFF: X case TV_SCROLL1: case TV_SCROLL2: case TV_FOOD: case TV_OPEN_DOOR: X case TV_CLOSED_DOOR: X return(TRUE); X `7D X return(FALSE); X`7D X X Xint set_fire_destroy(item) Xinven_type *item; X`7B X switch(item->tval) X `7B X case TV_ARROW: case TV_BOW: case TV_HAFTED: case TV_POLEARM: X case TV_BOOTS: case TV_GLOVES: case TV_CLOAK: case TV_SOFT_ARMOR: X if (item->flags & TR_RES_FIRE) X`09return FALSE; X else X`09return TRUE; X case TV_STAFF: case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1: X case TV_POTION2: case TV_FLASK: case TV_FOOD: case TV_OPEN_DOOR: X case TV_CLOSED_DOOR: X return(TRUE); X `7D X return(FALSE); X`7D X X Xint general_store(element) Xint element; X`7B X switch(element) X `7B X case TV_DIGGING: case TV_BOOTS: case TV_CLOAK: case TV_FOOD: X case TV_FLASK: case TV_LIGHT: case TV_SPIKE: X return(TRUE); X `7D X return(FALSE); X`7D X X Xint armory(element) Xint element; X`7B X switch(element) X `7B X case TV_BOOTS: case TV_GLOVES: case TV_HELM: case TV_SHIELD: X case TV_HARD_ARMOR: case TV_SOFT_ARMOR: X return(TRUE); X `7D X return(FALSE); X`7D X X Xint weaponsmith(element) Xint element; X`7B X switch(element) X `7B X case TV_SLING_AMMO: case TV_BOLT: case TV_ARROW: case TV_BOW: X case TV_HAFTED: case TV_POLEARM: case TV_SWORD: X return(TRUE); X `7D X return(FALSE); X`7D X X Xint temple(element) Xint element; X`7B X switch(element) X `7B X case TV_HAFTED: case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1: X case TV_POTION2: case TV_PRAYER_BOOK: X return(TRUE); X `7D X return(FALSE); X`7D X X Xint alchemist(element) Xint element; X`7B X switch(element) X `7B X case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1: case TV_POTION2: X return(TRUE); X `7D X return(FALSE); X`7D X X Xint magic_shop(element) Xint element; X`7B X switch(element) X `7B X case TV_AMULET: case TV_RING: case TV_STAFF: case TV_WAND: X case TV_SCROLL1: case TV_SCROLL2: case TV_POTION1: case TV_POTION2: X case TV_MAGIC_BOOK: X return(TRUE); X `7D X return(FALSE); X`7D X X#ifdef MAC X/* The last time tried, MPW failed to handle the initialized array of X function pointers properly. hence, this hack. */ Xint store_buy(storeno, element) Xint storeno; Xint element; X`7B X switch (storeno) X `7B X case 0: return(general_store(element)); X case 1: return(armory(element)); X case 2: return(weaponsmith(element)); X case 3: return(temple(element)); X case 4: return(alchemist(element)); X case 5: return(magic_shop(element)); X `7D X return(FALSE); X`7D X#endif $ CALL UNPACK SETS.C;1 2002846960 $ create 'f' X/* source/signals.c: signal handlers X X Copyright (c) 1989-92 James E. Wilson, Christopher J. Stuart X X This software may be copied and distributed for educational, research, an Vd X not for profit purposes provided that this copyright and statement are X included in all such copies. */ X X/* This signal package was brought to you by`09`09-JEW- */ X/* Completely rewritten by`09`09`09`09-CJS- */ X X/* To find out what system we're on. */ X X#include X X#include "config.h" X#include "constant.h" X X/* Signals have no significance on the Mac */ X X#ifdef MAC X Xvoid nosignals() X`7B X`7D X Xvoid signals() X`7B X`7D X Xvoid init_signals() X`7B X`7D X X#else /* a non-Mac system */ X X#ifdef ATARIST_MWC X/* need these for atari st, but for unix, must include signals.h first, X or else suspend won't be properly declared */ X#include "types.h" X#include "externs.h" X#endif X X/* skip most of the file on an ATARI ST */ X/* commented away most single handling for Atari ST TC too, as this X doesn't work as it should. */ X#if !defined(ATARIST_MWC) && !defined(ATARIST_TC) X X#if defined(SYS_V) && defined(lint) X/* for AIX, prevent hundreds of unnecessary lint errors, define before X signal.h is included */ X#define _h_IEEETRAP Xtypedef struct `7B int stuff; `7D fpvmach; X#endif X X/* must include before externs.h, because that uses SIGTSTP */ X#include X X#include "types.h" X#include "externs.h" X X#ifndef USG X/* only needed for Berkeley UNIX */ X#include X#include X#endif X X#ifdef USG X#ifndef ATARIST_MWC X#include X#endif X#else X#include X#endif X X#ifndef VMS X#ifdef USG Xvoid exit(); X#ifdef __TURBOC__ Xvoid sleep(); X#else Xunsigned sleep(); X#endif X#endif X#endif X Xstatic int error_sig = -1; Xstatic int signal_count = 0; X X/*ARGSUSED*/ X#ifndef USG Xstatic int signal_handler(sig, code, scp) Xint sig, code; Xstruct sigcontext *scp; X`7B X int smask; X X smask = sigsetmask(0) `7C (1 << sig); X#else X#if defined(__TURBOC__) `7C`7C defined(AMIGA) Xstatic void signal_handler(sig) X#else Xstatic int signal_handler(sig) X#endif Xint sig; X`7B X#endif X X if(error_sig >= 0)`09/* Ignore all second signals. */ X `7B X if(++signal_count > 10)`09/* Be safe. We will die if persistent enough V. */ X`09(void) signal(sig, SIG_DFL); X return; X `7D X error_sig = sig; X X /* Allow player to think twice. Wizard may force a core dump. */ X if (sig == SIGINT X#if !defined(MSDOS) && !defined(AMIGA) && !defined(ATARIST_TC) X `7C`7C sig == SIGQUIT X#endif X ) X `7B X if (death) X`09(void) signal(sig, SIG_IGN);`09`09/* Can't quit after death. */ X else if (!character_saved && character_generated) X`09`7B X`09 if (!get_check("Really commit *Suicide*?")) X`09 `7B X`09 if (turn > 0) X`09`09disturb(1, 0); X`09 erase_line(0, 0); X`09 put_qio(); X`09 error_sig = -1; X#ifdef USG X`09 (void) signal(sig, signal_handler);/* Have to restore handler. */ X#else X`09 (void) sigsetmask(smask); X#endif X`09 /* in case control-c typed during msg_print */ X`09 if (wait_for_more) X`09`09put_buffer(" -more-", MSG_LINE, 0); X`09 put_qio(); X`09 return;`09`09/* OK. We don't quit. */ X`09 `7D X`09 (void) strcpy(died_from, "Interrupting"); X`09`7D X else X`09(void) strcpy(died_from, "Abortion"); X prt("Interrupt!", 0, 0); X death = TRUE; X exit_game(); X `7D X /* Die. */ X prt( X"OH NO!!!!!! A gruesome software bug LEAPS out at you. There is NO defense! V", X 23, 0); X if (!death && !character_saved && character_generated) X `7B X panic_save = 1; X prt("Your guardian angel is trying to save you.", 0, 0); X (void) sprintf(died_from,"(panic save %d)",sig); +-+-+-+-+-+-+-+- END OF PART 60 +-+-+-+-+-+-+-+-