diff -pruN slashem-0.0.7E7F1-official-release/include/artifact.h slashem-0.0.7E7F1-shai-hulud/include/artifact.h --- slashem-0.0.7E7F1-official-release/include/artifact.h 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/include/artifact.h 2005-11-01 22:51:18.000000000 +0100 @@ -10,7 +10,8 @@ #define SPFX_RESTR 0x0000002L /* item is restricted - can't be named */ #define SPFX_INTEL 0x0000004L /* item is self-willed - intelligent */ #define SPFX_SPEAK 0x0000008L /* item can speak (not implemented) */ -#define SPFX_SEEK 0x0000010L /* item helps you search for things */ +//#define SPFX_SEEK 0x0000010L /* item helps you search for things */ +#define SPFX_SCLAIR 0x0000010L /* super-clairvoyance - clair+detect unseen */ #define SPFX_WARN 0x0000020L /* item warns you of danger */ #define SPFX_ATTK 0x0000040L /* item has a special attack (attk) */ #define SPFX_DEFN 0x0000080L /* item has a special defence (defn) */ diff -pruN slashem-0.0.7E7F1-official-release/include/artilist.h slashem-0.0.7E7F1-shai-hulud/include/artilist.h --- slashem-0.0.7E7F1-official-release/include/artilist.h 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/include/artilist.h 2005-11-01 22:59:13.000000000 +0100 @@ -80,7 +80,7 @@ A("Dragonbane", BROADSWORD, PHYS(5,0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 500L ), A("Excalibur", LONG_SWORD, - (SPFX_NOGEN|SPFX_RESTR|SPFX_SEEK|SPFX_DEFN|SPFX_INTEL|SPFX_SEARCH),0,0, + (SPFX_NOGEN|SPFX_RESTR|SPFX_DEFN|SPFX_INTEL|SPFX_SEARCH),0,0, PHYS(5,10), DRLI(0,0), NO_CARY, 0, A_LAWFUL, PM_KNIGHT, NON_PM, 4000L ), A("Sunsword", LONG_SWORD, @@ -164,6 +164,11 @@ A("Fire Brand", LONG_SWO (SPFX_RESTR|SPFX_ATTK|SPFX_DEFN), 0, 0, FIRE(5,0), FIRE(0,0), NO_CARY, 0, A_NONE, NON_PM, NON_PM, 3000L ), +A("Tooth of Shai-hulud", CRYSKNIFE, + (SPFX_RESTR|SPFX_INTEL|SPFX_SCLAIR|SPFX_WARN), 0, 0, + PHYS(2,4), NO_DFNS, NO_CARY, + 0, A_CHAOTIC, NON_PM, NON_PM, 3000L ), + /* * Two problems: 1) doesn't let trolls regenerate heads, * 2) doesn't give unusual message for 2-headed monsters (but diff -pruN slashem-0.0.7E7F1-official-release/include/prop.h slashem-0.0.7E7F1-shai-hulud/include/prop.h --- slashem-0.0.7E7F1-official-release/include/prop.h 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/include/prop.h 2005-11-01 22:51:18.000000000 +0100 @@ -73,7 +73,8 @@ #define INFRAVISION 64 #define WARN_OF_MON 65 #define DETECT_MONSTERS 66 -#define LAST_PROP (DETECT_MONSTERS) +#define SEEKING 67 +#define LAST_PROP (SEEKING) /*** Where the properties come from ***/ /* Definitions were moved here from obj.h and you.h */ diff -pruN slashem-0.0.7E7F1-official-release/include/youprop.h slashem-0.0.7E7F1-shai-hulud/include/youprop.h --- slashem-0.0.7E7F1-official-release/include/youprop.h 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/include/youprop.h 2005-11-01 22:51:18.000000000 +0100 @@ -94,10 +94,14 @@ #define Confusion HConfusion #define Blinded u.uprops[BLINDED].intrinsic +#define EBlinded u.uprops[BLINDED].extrinsic #define Blindfolded (ublindf && ublindf->otyp != LENSES) /* ...means blind because of a cover */ -#define Blind ((Blinded || Blindfolded || !haseyes(youmonst.data)) && \ +#define Blind ((Blinded || Blindfolded || !haseyes(youmonst.data) || \ + EBlinded) && \ !(ublindf && ublindf->oartifact == ART_EYES_OF_THE_OVERWORLD)) + + /* ...the Tooth blinds you */ /* ...the Eyes operate even when you really are blind or don't have any eyes */ @@ -161,6 +165,10 @@ #define ESearching u.uprops[SEARCHING].extrinsic #define Searching (HSearching || ESearching) +#define HSeeking u.uprops[SEEKING].intrinsic +#define ESeeking u.uprops[SEEKING].extrinsic +#define Seeking (HSeeking || ESeeking) + #define HClairvoyant u.uprops[CLAIRVOYANT].intrinsic #define EClairvoyant u.uprops[CLAIRVOYANT].extrinsic #define BClairvoyant u.uprops[CLAIRVOYANT].blocked diff -pruN slashem-0.0.7E7F1-official-release/src/allmain.c slashem-0.0.7E7F1-shai-hulud/src/allmain.c --- slashem-0.0.7E7F1-official-release/src/allmain.c 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/src/allmain.c 2005-11-01 22:51:18.000000000 +0100 @@ -310,6 +310,14 @@ moveloop() } /* !u.uinvulnerable */ if(Searching && multi >= 0) (void) dosearch0(1); + if ((u.uhave.amulet || Clairvoyant) && + !In_endgame(&u.uz) && !BClairvoyant && + ((!rn2(8) && Seeking) || + (!(moves % 15) && !rn2(2) && !Seeking))) { + do_vicinity_map(); + if(Seeking && multi >= 0) findit(); + } + dosounds(); do_storms(); gethungry(); @@ -407,11 +415,6 @@ moveloop() continue; } - if ((u.uhave.amulet || Clairvoyant) && - !In_endgame(&u.uz) && !BClairvoyant && - !(moves % 15) && !rn2(2)) - do_vicinity_map(); - if(u.utrap && u.utraptype == TT_LAVA) { if(!is_lava(u.ux,u.uy)) u.utrap = 0; diff -pruN slashem-0.0.7E7F1-official-release/src/artifact.c slashem-0.0.7E7F1-shai-hulud/src/artifact.c --- slashem-0.0.7E7F1-official-release/src/artifact.c 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/src/artifact.c 2005-11-01 22:51:18.000000000 +0100 @@ -538,6 +538,15 @@ long wp_mask; if(on) ESearching |= wp_mask; else ESearching &= ~wp_mask; } + if (spfx & SPFX_SCLAIR) { + if(on) ESeeking |= wp_mask; + else ESeeking &= ~wp_mask; + if(on) EClairvoyant |= wp_mask; + else EClairvoyant &= ~wp_mask; + if(on) EBlinded |= wp_mask; + else EBlinded &= ~wp_mask; + vision_recalc(0); + } if (spfx & SPFX_HALRES) { /* make_hallucinated must (re)set the mask itself to get * the display right */ diff -pruN slashem-0.0.7E7F1-official-release/src/cmd.c slashem-0.0.7E7F1-shai-hulud/src/cmd.c --- slashem-0.0.7E7F1-official-release/src/cmd.c 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/src/cmd.c 2005-11-01 22:51:18.000000000 +0100 @@ -1363,6 +1363,7 @@ int final; /* 0 => still in progress; 1 if (Undead_warning) you_are("warned of undead"); #endif if (Searching) you_have("automatic searching"); + if (Seeking) you_have("automatic detect unseen"); if (Clairvoyant) you_are("clairvoyant"); if (Infravision) you_have("infravision"); if (Detect_monsters) you_are("sensing the presence of monsters"); diff -pruN slashem-0.0.7E7F1-official-release/src/detect.c slashem-0.0.7E7F1-shai-hulud/src/detect.c --- slashem-0.0.7E7F1-official-release/src/detect.c 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/src/detect.c 2005-11-01 22:51:18.000000000 +0100 @@ -1027,7 +1027,8 @@ genericptr_t num; newsym(zx, zy); (*(int*)num)++; } else if ((ttmp = t_at(zx, zy)) != 0) { - if(!ttmp->tseen && ttmp->ttyp != STATUE_TRAP) { + if(/*!ttmp->tseen &&*/ ttmp->ttyp != STATUE_TRAP) { + map_trap(ttmp, 1); ttmp->tseen = 1; newsym(zx,zy); (*(int*)num)++; diff -pruN slashem-0.0.7E7F1-official-release/src/do.c slashem-0.0.7E7F1-shai-hulud/src/do.c --- slashem-0.0.7E7F1-official-release/src/do.c 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/src/do.c 2005-11-01 22:51:18.000000000 +0100 @@ -640,7 +640,7 @@ struct obj *obj; case CRYSKNIFE: /* KMH -- Fixed crysknives have only 10% chance of reverting */ /* only changes when not held by player or monster */ - if (!obj->oerodeproof || !rn2(10)) { + if (!obj->oartifact && (!obj->oerodeproof || !rn2(10))) { obj->otyp = WORM_TOOTH; obj->oerodeproof = 0; } diff -pruN slashem-0.0.7E7F1-official-release/src/wield.c slashem-0.0.7E7F1-shai-hulud/src/wield.c --- slashem-0.0.7E7F1-official-release/src/wield.c 2005-07-02 09:24:44.000000000 +0200 +++ slashem-0.0.7E7F1-shai-hulud/src/wield.c 2005-11-01 22:51:18.000000000 +0100 @@ -809,7 +809,7 @@ register int amount; return(1); } - if(uwep->otyp == CRYSKNIFE && amount < 0) { + if(uwep->otyp == CRYSKNIFE && !uwep->oartifact && amount < 0) { uwep->otyp = WORM_TOOTH; uwep->oerodeproof = 0; Your("weapon seems duller now.");