to emphasize that it's not a light source, change description of wielded Sting
from "(glowing light blue)" to "(light blue aura)" when sighted and
from "(glowing)" to nothing (not warm enough to feel) when blind
+glowing Sting quivers if hero becomes blind and quivering Sting glows if
+ blindness ends; it worked for timed blindness but not for blindfold
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
change in searching stopped finding unseen monsters except hiders and eels
buliding with EXTRA_SANITY_CHECKS enabled would issue "no monster to remove"
warning if steed was killed out from under the hero
+changing Sting's description to be "(weapon in hand) (light blue aura)" was
+ too close to feedback when objects become blessed; change it again,
+ to "(weapon in hand, flickering/glimmering/gleaming light blue)"
tty: turn off an optimization that is the suspected cause of Windows reported
partial status lines following level changes
tty: ensure that current status fields are always copied to prior status
-/* NetHack 3.6 extern.h $NHDT-Date: 1543185068 2018/11/25 22:31:08 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.663 $ */
+/* NetHack 3.6 extern.h $NHDT-Date: 1543745352 2018/12/02 10:09:12 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.664 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */
E long FDECL(arti_cost, (struct obj *));
E struct obj *FDECL(what_gives, (long *));
E const char *FDECL(glow_color, (int));
+E const char *FDECL(glow_verb, (int, BOOLEAN_P));
E void FDECL(Sting_effects, (int));
E int FDECL(retouch_object, (struct obj **, BOOLEAN_P));
E void FDECL(retouch_equipment, (int));
E void FDECL(incr_itimeout, (long *, int));
E void FDECL(make_confused, (long, BOOLEAN_P));
E void FDECL(make_stunned, (long, BOOLEAN_P));
-E void FDECL(make_blinded, (long, BOOLEAN_P));
E void FDECL(make_sick, (long, const char *, BOOLEAN_P, int));
E void FDECL(make_slimed, (long, const char *));
E void FDECL(make_stoned, (long, const char *, int, const char *));
E void FDECL(make_vomiting, (long, BOOLEAN_P));
+E void FDECL(make_blinded, (long, BOOLEAN_P));
+E void NDECL(toggle_blindness);
E boolean FDECL(make_hallucinated, (long, BOOLEAN_P, long));
E void FDECL(make_deaf, (long, BOOLEAN_P));
E void NDECL(self_invis_message);
-/* NetHack 3.6 artifact.c $NHDT-Date: 1509836679 2017/11/04 23:04:39 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.106 $ */
+/* NetHack 3.6 artifact.c $NHDT-Date: 1543745353 2018/12/02 10:09:13 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.127 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
struct obj *, int *, int, BOOLEAN_P, char *));
STATIC_DCL unsigned long FDECL(abil_to_spfx, (long *));
STATIC_DCL uchar FDECL(abil_to_adtyp, (long *));
+STATIC_DCL int FDECL(glow_strength, (int));
STATIC_DCL boolean FDECL(untouchable, (struct obj *, BOOLEAN_P));
STATIC_DCL int FDECL(count_surround_traps, (int, int));
return hcolor(colorstr);
}
+/* glow verb; [0] holds the value used when blind */
+static const char *glow_verbs[] = {
+ "quiver", "flicker", "glimmer", "gleam"
+};
+
+/* relative strength that Sting is glowing (0..3), to select verb */
+STATIC_OVL int
+glow_strength(count)
+int count;
+{
+ /* glow strength should also be proportional to proximity and
+ probably difficulty, but we don't have that information and
+ gathering it is more trouble than this would be worth */
+ return (count > 12) ? 3 : (count > 4) ? 2 : (count > 0);
+}
+
+const char *
+glow_verb(count, ingsfx)
+int count; /* 0 means blind rather than no applicable creatures */
+boolean ingsfx;
+{
+ static char resbuf[20];
+
+ Strcpy(resbuf, glow_verbs[glow_strength(count)]);
+ /* ing_suffix() will double the last consonant for all the words
+ we're using and none of them should have that, so bypass it */
+ if (ingsfx)
+ Strcat(resbuf, "ing");
+ return resbuf;
+}
+
/* use for warning "glow" for Sting, Orcrist, and Grimtooth */
void
Sting_effects(orc_count)
&& (uwep->oartifact == ART_STING
|| uwep->oartifact == ART_ORCRIST
|| uwep->oartifact == ART_GRIMTOOTH)) {
+ int oldstr = glow_strength(warn_obj_cnt),
+ newstr = glow_strength(orc_count);
+
if (orc_count == -1 && warn_obj_cnt > 0) {
/* -1 means that blindness has just been toggled; give a
'continue' message that eventual 'stop' message will match */
pline("%s is %s.", bare_artifactname(uwep),
- !Blind ? "glowing" : "quivering");
- } else if (orc_count > 0 && warn_obj_cnt == 0) {
+ glow_verb(Blind ? 0 : warn_obj_cnt, TRUE));
+ } else if (newstr > 0 && newstr != oldstr) {
/* 'start' message */
if (!Blind)
- pline("%s %s %s!", bare_artifactname(uwep),
- otense(uwep, "glow"), glow_color(uwep->oartifact));
- else
- pline("%s quivers slightly.", bare_artifactname(uwep));
+ pline("%s %s %s%c", bare_artifactname(uwep),
+ otense(uwep, glow_verb(orc_count, FALSE)),
+ glow_color(uwep->oartifact),
+ (newstr > oldstr) ? '!' : '.');
+ else if (oldstr == 0) /* quivers */
+ pline("%s %s slightly.", bare_artifactname(uwep),
+ otense(uwep, glow_verb(0, FALSE)));
} else if (orc_count == 0 && warn_obj_cnt > 0) {
/* 'stop' message */
pline("%s stops %s.", bare_artifactname(uwep),
- !Blind ? "glowing" : "quivering");
+ glow_verb(Blind ? 0 : warn_obj_cnt, TRUE));
}
}
}
-/* NetHack 3.6 do_wear.c $NHDT-Date: 1514072526 2017/12/23 23:42:06 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.100 $ */
+/* NetHack 3.6 do_wear.c $NHDT-Date: 1543745354 2018/12/02 10:09:14 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.103 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
You("can see!");
}
if (changed) {
- /* blindness has just been toggled */
- if (Blind_telepat || Infravision)
- see_monsters();
- vision_full_recalc = 1; /* recalc vision limits */
- if (!Blind)
- learn_unseen_invent();
- context.botl = 1;
+ toggle_blindness(); /* potion.c */
}
}
}
}
if (changed) {
- /* blindness has just been toggled */
- if (Blind_telepat || Infravision)
- see_monsters();
- vision_full_recalc = 1; /* recalc vision limits */
- if (!Blind)
- learn_unseen_invent();
- context.botl = 1;
+ toggle_blindness(); /* potion.c */
}
}
-/* NetHack 3.6 objnam.c $NHDT-Date: 1543544340 2018/11/30 02:19:00 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.226 $ */
+/* NetHack 3.6 objnam.c $NHDT-Date: 1543745355 2018/12/02 10:09:15 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.227 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
if (bimanual(obj))
hand_s = makeplural(hand_s);
+ /* note: Sting's glow message, if added, will insert text
+ in front of "(weapon in hand)"'s closing paren */
Sprintf(eos(bp), " (%sweapon in %s)",
(obj->otyp == AKLYS) ? "tethered " : "", hand_s);
if (warn_obj_cnt && obj == uwep && (EWarn_of_mon & W_WEP) != 0L) {
- /* this used to be "(glowing <color>)" when sighted or
- "(glowing)" when blind (via feeling warmth), but it
- isn't a light source so describe something fainter */
- if (!Blind)
- Sprintf(eos(bp), " (%s aura)", glow_color(obj->oartifact));
+ if (!Blind) /* we know bp[] ends with ')'; overwrite that */
+ Sprintf(eos(bp) - 1, ", %s %s)",
+ glow_verb(warn_obj_cnt, TRUE),
+ glow_color(obj->oartifact));
}
}
}
-/* NetHack 3.6 potion.c $NHDT-Date: 1520797133 2018/03/11 19:38:53 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.144 $ */
+/* NetHack 3.6 potion.c $NHDT-Date: 1543745356 2018/12/02 10:09:16 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.155 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
set_itimeout(&Blinded, xtime);
if (u_could_see ^ can_see_now) { /* one or the other but not both */
- context.botl = TRUE;
- vision_full_recalc = 1; /* blindness just got toggled */
- /* this vision recalculation used to be deferred until
- moveloop(), but that made it possible for vision
- irregularities to occur (cited case was force bolt
- hitting adjacent potion of blindness and then a
- secret door; hero was blinded by vapors but then
- got the message "a door appears in the wall") */
- vision_recalc(0);
- if (Blind_telepat || Infravision)
- see_monsters();
-
- /* avoid either of the sequences
- "Sting starts glowing", [become blind], "Sting stops quivering" or
- "Sting starts quivering", [regain sight], "Sting stops glowing"
- by giving "Sting is quivering" when becoming blind or
- "Sting is glowing" when regaining sight so that the eventual
- "stops" message matches */
- if (warn_obj_cnt && uwep && (EWarn_of_mon & W_WEP) != 0L)
- Sting_effects(-1);
- /* update dknown flag for inventory picked up while blind */
- if (can_see_now)
- learn_unseen_invent();
+ toggle_blindness();
}
}
+/* blindness has just started or just ended--caller enforces that;
+ called by Blindf_on(), Blindf_off(), and make_blinded() */
+void
+toggle_blindness()
+{
+ boolean Stinging = (uwep && (EWarn_of_mon & W_WEP) != 0L);
+
+ /* blindness has just been toggled */
+ context.botl = TRUE; /* status conditions need update */
+ vision_full_recalc = 1; /* vision has changed */
+ /* this vision recalculation used to be deferred until moveloop(),
+ but that made it possible for vision irregularities to occur
+ (cited case was force bolt hitting an adjacent potion of blindness
+ and then a secret door; hero was blinded by vapors but then got the
+ message "a door appears in the wall" because wall spot was IN_SIGHT) */
+ vision_recalc(0);
+ if (Blind_telepat || Infravision || Stinging)
+ see_monsters(); /* also counts EWarn_of_mon monsters */
+ /*
+ * Avoid either of the sequences
+ * "Sting starts glowing", [become blind], "Sting stops quivering" or
+ * "Sting starts quivering", [regain sight], "Sting stops glowing"
+ * by giving "Sting is quivering" when becoming blind or
+ * "Sting is glowing" when regaining sight so that the eventual
+ * "stops" message matches the most recent "Sting is ..." one.
+ */
+ if (Stinging)
+ Sting_effects(-1);
+ /* update dknown flag for inventory picked up while blind */
+ if (!Blind)
+ learn_unseen_invent();
+}
+
boolean
make_hallucinated(xtime, talk, mask)
long xtime; /* nonzero if this is an attempt to turn on hallucination */