Merge branch 'NetHack-3.6.2'

This commit is contained in:
nhmall
2018-12-02 10:01:27 -05:00
20 changed files with 159 additions and 154 deletions
+5
View File
@@ -234,6 +234,8 @@ dismount that kills steed because there is no room to put it on map blamed the
to emphasize that it's not a light source, change description of wielded Sting 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 light blue)" to "(light blue aura)" when sighted and
from "(glowing)" to nothing (not warm enough to feel) when blind 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 Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
@@ -253,6 +255,9 @@ life-saving while poly'd and Unchanging wasn't restoring u.mh (HP as monster)
change in searching stopped finding unseen monsters except hiders and eels change in searching stopped finding unseen monsters except hiders and eels
buliding with EXTRA_SANITY_CHECKS enabled would issue "no monster to remove" buliding with EXTRA_SANITY_CHECKS enabled would issue "no monster to remove"
warning if steed was killed out from under the hero 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 tty: turn off an optimization that is the suspected cause of Windows reported
partial status lines following level changes partial status lines following level changes
tty: ensure that current status fields are always copied to prior status tty: ensure that current status fields are always copied to prior status
+4 -2
View File
@@ -1,4 +1,4 @@
/* 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. */ /* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -90,6 +90,7 @@ E boolean FDECL(artifact_has_invprop, (struct obj *, UCHAR_P));
E long FDECL(arti_cost, (struct obj *)); E long FDECL(arti_cost, (struct obj *));
E struct obj *FDECL(what_gives, (long *)); E struct obj *FDECL(what_gives, (long *));
E const char *FDECL(glow_color, (int)); E const char *FDECL(glow_color, (int));
E const char *FDECL(glow_verb, (int, BOOLEAN_P));
E void FDECL(Sting_effects, (int)); E void FDECL(Sting_effects, (int));
E int FDECL(retouch_object, (struct obj **, BOOLEAN_P)); E int FDECL(retouch_object, (struct obj **, BOOLEAN_P));
E void FDECL(retouch_equipment, (int)); E void FDECL(retouch_equipment, (int));
@@ -1915,11 +1916,12 @@ E void FDECL(set_itimeout, (long *, long));
E void FDECL(incr_itimeout, (long *, int)); E void FDECL(incr_itimeout, (long *, int));
E void FDECL(make_confused, (long, BOOLEAN_P)); E void FDECL(make_confused, (long, BOOLEAN_P));
E void FDECL(make_stunned, (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_sick, (long, const char *, BOOLEAN_P, int));
E void FDECL(make_slimed, (long, const char *)); E void FDECL(make_slimed, (long, const char *));
E void FDECL(make_stoned, (long, const char *, int, 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_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 boolean FDECL(make_hallucinated, (long, BOOLEAN_P, long));
E void FDECL(make_deaf, (long, BOOLEAN_P)); E void FDECL(make_deaf, (long, BOOLEAN_P));
E void NDECL(self_invis_message); E void NDECL(self_invis_message);
+4 -2
View File
@@ -5,7 +5,7 @@
#ifndef NTCONF_H #ifndef NTCONF_H
#define NTCONF_H #define NTCONF_H
/* #define SHELL /* nt use of pcsys routines caused a hang */ /* #define SHELL */ /* nt use of pcsys routines caused a hang */
#define RANDOM /* have Berkeley random(3) */ #define RANDOM /* have Berkeley random(3) */
#define TEXTCOLOR /* Color text */ #define TEXTCOLOR /* Color text */
@@ -43,7 +43,7 @@
* The remaining code shouldn't need modification. * The remaining code shouldn't need modification.
* ----------------------------------------------------------------- * -----------------------------------------------------------------
*/ */
/* #define SHORT_FILENAMES /* All NT filesystems support long names now /* #define SHORT_FILENAMES */ /* All NT filesystems support long names now
*/ */
#ifdef MICRO #ifdef MICRO
@@ -143,12 +143,14 @@ extern void FDECL(interject, (int));
#define strncmpi(a, b, c) strnicmp(a, b, c) #define strncmpi(a, b, c) strnicmp(a, b, c)
#endif #endif
#ifdef _MSC_VER
/* Visual Studio defines this in their own headers, which we don't use */ /* Visual Studio defines this in their own headers, which we don't use */
#ifndef snprintf #ifndef snprintf
#define snprintf _snprintf #define snprintf _snprintf
#pragma warning( \ #pragma warning( \
disable : 4996) /* deprecation warning suggesting snprintf_s */ disable : 4996) /* deprecation warning suggesting snprintf_s */
#endif #endif
#endif
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h> #include <stdlib.h>
+5
View File
@@ -260,6 +260,11 @@ struct wc_Opt {
unsigned long wc_bit; unsigned long wc_bit;
}; };
/* Macro for the currently active Window Port whose function
pointers have been loaded */
#define WINDOWPORT(wn) \
(windowprocs.name && !strncmpi((wn), windowprocs.name, strlen((wn))))
/* role selection by player_selection(); this ought to be in the core... */ /* role selection by player_selection(); this ought to be in the core... */
#define RS_NAME 0 #define RS_NAME 0
#define RS_ROLE 1 #define RS_ROLE 1
+46 -8
View File
@@ -1,4 +1,4 @@
/* 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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -27,6 +27,7 @@ STATIC_DCL boolean FDECL(Mb_hit, (struct monst * magr, struct monst *mdef,
struct obj *, int *, int, BOOLEAN_P, char *)); struct obj *, int *, int, BOOLEAN_P, char *));
STATIC_DCL unsigned long FDECL(abil_to_spfx, (long *)); STATIC_DCL unsigned long FDECL(abil_to_spfx, (long *));
STATIC_DCL uchar FDECL(abil_to_adtyp, (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 boolean FDECL(untouchable, (struct obj *, BOOLEAN_P));
STATIC_DCL int FDECL(count_surround_traps, (int, int)); STATIC_DCL int FDECL(count_surround_traps, (int, int));
@@ -1852,6 +1853,37 @@ int arti_indx;
return hcolor(colorstr); 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 */ /* use for warning "glow" for Sting, Orcrist, and Grimtooth */
void void
Sting_effects(orc_count) Sting_effects(orc_count)
@@ -1861,22 +1893,28 @@ int orc_count; /* new count (warn_obj_cnt is old count); -1 is a flag value */
&& (uwep->oartifact == ART_STING && (uwep->oartifact == ART_STING
|| uwep->oartifact == ART_ORCRIST || uwep->oartifact == ART_ORCRIST
|| uwep->oartifact == ART_GRIMTOOTH)) { || uwep->oartifact == ART_GRIMTOOTH)) {
int oldstr = glow_strength(warn_obj_cnt),
newstr = glow_strength(orc_count);
if (orc_count == -1 && warn_obj_cnt > 0) { if (orc_count == -1 && warn_obj_cnt > 0) {
/* -1 means that blindness has just been toggled; give a /* -1 means that blindness has just been toggled; give a
'continue' message that eventual 'stop' message will match */ 'continue' message that eventual 'stop' message will match */
pline("%s is %s.", bare_artifactname(uwep), pline("%s is %s.", bare_artifactname(uwep),
!Blind ? "glowing" : "quivering"); glow_verb(Blind ? 0 : warn_obj_cnt, TRUE));
} else if (orc_count > 0 && warn_obj_cnt == 0) { } else if (newstr > 0 && newstr != oldstr) {
/* 'start' message */ /* 'start' message */
if (!Blind) if (!Blind)
pline("%s %s %s!", bare_artifactname(uwep), pline("%s %s %s%c", bare_artifactname(uwep),
otense(uwep, "glow"), glow_color(uwep->oartifact)); otense(uwep, glow_verb(orc_count, FALSE)),
else glow_color(uwep->oartifact),
pline("%s quivers slightly.", bare_artifactname(uwep)); (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) { } else if (orc_count == 0 && warn_obj_cnt > 0) {
/* 'stop' message */ /* 'stop' message */
pline("%s stops %s.", bare_artifactname(uwep), pline("%s stops %s.", bare_artifactname(uwep),
!Blind ? "glowing" : "quivering"); glow_verb(Blind ? 0 : warn_obj_cnt, TRUE));
} }
} }
} }
+1 -1
View File
@@ -193,7 +193,7 @@ sanitize_name(namebuf)
char *namebuf; char *namebuf;
{ {
int c; int c;
boolean strip_8th_bit = (!strcmp(windowprocs.name, "tty") boolean strip_8th_bit = (WINDOWPORT("tty")
&& !iflags.wc_eight_bit_input); && !iflags.wc_eight_bit_input);
/* it's tempting to skip this for single-user platforms, since /* it's tempting to skip this for single-user platforms, since
+11 -61
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 cmd.c $NHDT-Date: 1542673290 2018/11/20 00:21:30 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.302 $ */ /* NetHack 3.6 cmd.c $NHDT-Date: 1543711385 2018/12/02 00:43:05 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.309 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -176,9 +176,6 @@ STATIC_DCL void FDECL(contained_stats, (winid, const char *, long *, long *));
STATIC_DCL void FDECL(misc_stats, (winid, long *, long *)); STATIC_DCL void FDECL(misc_stats, (winid, long *, long *));
STATIC_PTR int NDECL(wiz_show_stats); STATIC_PTR int NDECL(wiz_show_stats);
STATIC_DCL boolean FDECL(accept_menu_prefix, (int NDECL((*)))); STATIC_DCL boolean FDECL(accept_menu_prefix, (int NDECL((*))));
#ifdef PORT_DEBUG
STATIC_DCL int NDECL(wiz_port_debug);
#endif
STATIC_PTR int NDECL(wiz_rumor_check); STATIC_PTR int NDECL(wiz_rumor_check);
STATIC_PTR int NDECL(doattributes); STATIC_PTR int NDECL(doattributes);
@@ -1052,7 +1049,7 @@ wiz_show_wmodes(VOID_ARGS)
int x, y; int x, y;
char row[COLNO + 1]; char row[COLNO + 1];
struct rm *lev; struct rm *lev;
boolean istty = !strcmp(windowprocs.name, "tty"); boolean istty = WINDOWPORT("tty");
win = create_nhwindow(NHW_TEXT); win = create_nhwindow(NHW_TEXT);
if (istty) if (istty)
@@ -3272,10 +3269,6 @@ struct ext_func_tab extcmdlist[] = {
{ ',', "pickup", "pick up things at the current location", dopickup }, { ',', "pickup", "pick up things at the current location", dopickup },
{ '\0', "polyself", "polymorph self", { '\0', "polyself", "polymorph self",
wiz_polyself, IFBURIED | AUTOCOMPLETE | WIZMODECMD }, wiz_polyself, IFBURIED | AUTOCOMPLETE | WIZMODECMD },
#ifdef PORT_DEBUG
{ '\0', "portdebug", "wizard port debug command",
wiz_port_debug, IFBURIED | AUTOCOMPLETE | WIZMODECMD },
#endif
{ M('p'), "pray", "pray to the gods for help", { M('p'), "pray", "pray to the gods for help",
dopray, IFBURIED | AUTOCOMPLETE }, dopray, IFBURIED | AUTOCOMPLETE },
{ C('p'), "prevmsg", "view recent game messages", { C('p'), "prevmsg", "view recent game messages",
@@ -5508,6 +5501,15 @@ parse()
alt_esc = FALSE; /* readchar() reset */ alt_esc = FALSE; /* readchar() reset */
#endif #endif
if (iflags.debug_fuzzer /* if fuzzing, override '!' and ^Z */
&& (Cmd.commands[foo & 0x0ff]
&& (Cmd.commands[foo & 0x0ff]->ef_funct == dosuspend_core
#ifdef SHELL
|| Cmd.commands[foo & 0x0ff]->ef_funct == dosh
#endif
)))
foo = Cmd.spkeys[NHKF_ESC];
if (foo == Cmd.spkeys[NHKF_ESC]) { /* esc cancels count (TH) */ if (foo == Cmd.spkeys[NHKF_ESC]) { /* esc cancels count (TH) */
clear_nhwindow(WIN_MESSAGE); clear_nhwindow(WIN_MESSAGE);
multi = last_multi = 0; multi = last_multi = 0;
@@ -5707,58 +5709,6 @@ dotravel(VOID_ARGS)
return 0; return 0;
} }
#ifdef PORT_DEBUG
#if defined(WIN32) && defined(TTY_GRAPHICS)
extern void NDECL(win32con_debug_keystrokes);
extern void NDECL(win32con_handler_info);
#endif
int
wiz_port_debug()
{
int n, k;
winid win;
anything any;
int item = 'a';
int num_menu_selections;
struct menu_selection_struct {
char *menutext;
void NDECL((*fn));
} menu_selections[] = {
#if defined(WIN32) && defined(TTY_GRAPHICS)
{ "test win32 keystrokes (tty only)", win32con_debug_keystrokes },
{ "show keystroke handler information (tty only)",
win32con_handler_info },
#endif
{ (char *) 0, (void NDECL((*))) 0 } /* array terminator */
};
num_menu_selections = SIZE(menu_selections) - 1;
if (num_menu_selections > 0) {
menu_item *pick_list;
win = create_nhwindow(NHW_MENU);
start_menu(win);
for (k = 0; k < num_menu_selections; ++k) {
any.a_int = k + 1;
add_menu(win, NO_GLYPH, &any, item++, 0, ATR_NONE,
menu_selections[k].menutext, MENU_UNSELECTED);
}
end_menu(win, "Which port debugging feature?");
n = select_menu(win, PICK_ONE, &pick_list);
destroy_nhwindow(win);
if (n > 0) {
n = pick_list[0].item.a_int - 1;
free((genericptr_t) pick_list);
/* execute the function */
(*menu_selections[n].fn)();
}
} else
pline("No port-specific debug capability defined.");
return 0;
}
#endif /*PORT_DEBUG*/
/* /*
* Parameter validator for generic yes/no function to prevent * Parameter validator for generic yes/no function to prevent
* the core from sending too long a prompt string to the * the core from sending too long a prompt string to the
+3 -15
View File
@@ -1,4 +1,4 @@
/* 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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1112,13 +1112,7 @@ register struct obj *otmp;
You("can see!"); You("can see!");
} }
if (changed) { if (changed) {
/* blindness has just been toggled */ toggle_blindness(); /* potion.c */
if (Blind_telepat || Infravision)
see_monsters();
vision_full_recalc = 1; /* recalc vision limits */
if (!Blind)
learn_unseen_invent();
context.botl = 1;
} }
} }
@@ -1157,13 +1151,7 @@ register struct obj *otmp;
} }
} }
if (changed) { if (changed) {
/* blindness has just been toggled */ toggle_blindness(); /* potion.c */
if (Blind_telepat || Infravision)
see_monsters();
vision_full_recalc = 1; /* recalc vision limits */
if (!Blind)
learn_unseen_invent();
context.botl = 1;
} }
} }
+1 -1
View File
@@ -1279,7 +1279,7 @@ boolean uncomp;
int i = 0; int i = 0;
int f; int f;
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
boolean istty = !strncmpi(windowprocs.name, "tty", 3); boolean istty = WINDOWPORT("tty");
#endif #endif
Strcpy(cfn, filename); Strcpy(cfn, filename);
+7 -6
View File
@@ -1,4 +1,4 @@
/* 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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */ /*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1150,15 +1150,16 @@ unsigned doname_flags;
if (bimanual(obj)) if (bimanual(obj))
hand_s = makeplural(hand_s); 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)", Sprintf(eos(bp), " (%sweapon in %s)",
(obj->otyp == AKLYS) ? "tethered " : "", hand_s); (obj->otyp == AKLYS) ? "tethered " : "", hand_s);
if (warn_obj_cnt && obj == uwep && (EWarn_of_mon & W_WEP) != 0L) { if (warn_obj_cnt && obj == uwep && (EWarn_of_mon & W_WEP) != 0L) {
/* this used to be "(glowing <color>)" when sighted or if (!Blind) /* we know bp[] ends with ')'; overwrite that */
"(glowing)" when blind (via feeling warmth), but it Sprintf(eos(bp) - 1, ", %s %s)",
isn't a light source so describe something fainter */ glow_verb(warn_obj_cnt, TRUE),
if (!Blind) glow_color(obj->oartifact));
Sprintf(eos(bp), " (%s aura)", glow_color(obj->oartifact));
} }
} }
} }
+35 -24
View File
@@ -1,4 +1,4 @@
/* 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) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -306,32 +306,43 @@ boolean talk;
set_itimeout(&Blinded, xtime); set_itimeout(&Blinded, xtime);
if (u_could_see ^ can_see_now) { /* one or the other but not both */ if (u_could_see ^ can_see_now) { /* one or the other but not both */
context.botl = TRUE; toggle_blindness();
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();
} }
} }
/* 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 boolean
make_hallucinated(xtime, talk, mask) make_hallucinated(xtime, talk, mask)
long xtime; /* nonzero if this is an attempt to turn on hallucination */ long xtime; /* nonzero if this is an attempt to turn on hallucination */
+3 -3
View File
@@ -828,7 +828,7 @@ register int fd;
#ifdef AMII_GRAPHICS #ifdef AMII_GRAPHICS
{ {
extern struct window_procs amii_procs; extern struct window_procs amii_procs;
if (windowprocs.win_init_nhwindows == amii_procs.win_init_nhwindows) { if (WINDOWPORT("amii") {
extern winid WIN_BASE; extern winid WIN_BASE;
clear_nhwindow(WIN_BASE); /* hack until there's a hook for this */ clear_nhwindow(WIN_BASE); /* hack until there's a hook for this */
} }
@@ -844,7 +844,7 @@ register int fd;
curs(WIN_MAP, 1, 1); curs(WIN_MAP, 1, 1);
dotcnt = 0; dotcnt = 0;
dotrow = 2; dotrow = 2;
if (strncmpi("X11", windowprocs.name, 3)) if (!WINDOWPORT("X11"))
putstr(WIN_MAP, 0, "Restoring:"); putstr(WIN_MAP, 0, "Restoring:");
#endif #endif
restoreprocs.mread_flags = 1; /* return despite error */ restoreprocs.mread_flags = 1; /* return despite error */
@@ -859,7 +859,7 @@ register int fd;
dotrow++; dotrow++;
dotcnt = 0; dotcnt = 0;
} }
if (strncmpi("X11", windowprocs.name, 3)) { if (!WINDOWPORT("X11")) {
putstr(WIN_MAP, 0, "."); putstr(WIN_MAP, 0, ".");
} }
mark_synch(); mark_synch();
+2 -2
View File
@@ -178,7 +178,7 @@ dosave0()
dotcnt = 0; dotcnt = 0;
dotrow = 2; dotrow = 2;
curs(WIN_MAP, 1, 1); curs(WIN_MAP, 1, 1);
if (strncmpi("X11", windowprocs.name, 3)) if (!WINDOWPORT("X11"))
putstr(WIN_MAP, 0, "Saving:"); putstr(WIN_MAP, 0, "Saving:");
#endif #endif
#ifdef MFLOPPY #ifdef MFLOPPY
@@ -242,7 +242,7 @@ dosave0()
dotrow++; dotrow++;
dotcnt = 0; dotcnt = 0;
} }
if (strncmpi("X11", windowprocs.name, 3)) { if (!WINDOWPORT("X11")) {
putstr(WIN_MAP, 0, "."); putstr(WIN_MAP, 0, ".");
} }
mark_synch(); mark_synch();
+1 -1
View File
@@ -1277,7 +1277,7 @@ winid win UNUSED;
STATIC_OVL void STATIC_OVL void
dump_add_menu(win, glyph, identifier, ch, gch, attr, str, preselected) dump_add_menu(win, glyph, identifier, ch, gch, attr, str, preselected)
winid win UNUSED; winid win UNUSED;
int glyph UNUSED; int glyph;
const anything *identifier UNUSED; const anything *identifier UNUSED;
char ch; char ch;
char gch UNUSED; char gch UNUSED;
+7 -7
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 zap.c $NHDT-Date: 1542798627 2018/11/21 11:10:27 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.289 $ */ /* NetHack 3.6 zap.c $NHDT-Date: 1543744276 2018/12/02 09:51:16 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.299 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */ /*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -433,7 +433,8 @@ struct obj *otmp;
dmg = spell_damage_bonus(dmg); dmg = spell_damage_bonus(dmg);
if (resists_drli(mtmp)) { if (resists_drli(mtmp)) {
shieldeff(mtmp->mx, mtmp->my); shieldeff(mtmp->mx, mtmp->my);
} else if (!resist(mtmp, otmp->oclass, dmg, NOTELL) && !DEADMONSTER(mtmp)) { } else if (!resist(mtmp, otmp->oclass, dmg, NOTELL)
&& !DEADMONSTER(mtmp)) {
mtmp->mhp -= dmg; mtmp->mhp -= dmg;
mtmp->mhpmax -= dmg; mtmp->mhpmax -= dmg;
/* die if already level 0, regardless of hit points */ /* die if already level 0, regardless of hit points */
@@ -782,7 +783,7 @@ boolean by_hero;
if ((mons[montype].mlet == S_EEL && !IS_POOL(levl[x][y].typ)) if ((mons[montype].mlet == S_EEL && !IS_POOL(levl[x][y].typ))
|| (mons[montype].mlet == S_TROLL || (mons[montype].mlet == S_TROLL
&& uwep && uwep->oartifact == ART_TROLLSBANE)) { && uwep && uwep->oartifact == ART_TROLLSBANE)) {
if (by_hero && cansee(x,y)) if (by_hero && cansee(x, y))
pline("%s twitches feebly.", pline("%s twitches feebly.",
upstart(corpse_xname(corpse, (const char *) 0, CXN_PFX_THE))); upstart(corpse_xname(corpse, (const char *) 0, CXN_PFX_THE)));
return (struct monst *) 0; return (struct monst *) 0;
@@ -1831,10 +1832,9 @@ struct obj *obj, *otmp;
* from its inventory as a result of the change. * from its inventory as a result of the change.
* If the items fall to the floor, they are not * If the items fall to the floor, they are not
* subject to direct subsequent polymorphing * subject to direct subsequent polymorphing
* themselves on that same zap. This makes it * themselves on that same zap. This makes it
* consistent with items that remain in the * consistent with items that remain in the monster's
* monster's inventory. They are not polymorphed * inventory. They are not polymorphed either.
* either.
* UNDEAD_TURNING - When an undead creature gets killed via * UNDEAD_TURNING - When an undead creature gets killed via
* undead turning, prevent its corpse from being * undead turning, prevent its corpse from being
* immediately revived by the same effect. * immediately revived by the same effect.
+2 -2
View File
@@ -499,12 +499,12 @@ _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);*/
#ifdef WIN32 #ifdef WIN32
/* /*
if (!strncmpi(windowprocs.name, "mswin", 5)) if (WINDOWPORT("mswin"))
NHWinMainInit(); NHWinMainInit();
else else
*/ */
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
if (!strncmpi(windowprocs.name, "tty", 3)) { if (WINDOWPORT("tty")) {
iflags.use_background_glyph = FALSE; iflags.use_background_glyph = FALSE;
nttty_open(1); nttty_open(1);
} else { } else {
+2 -2
View File
@@ -198,7 +198,7 @@ getlock()
#ifndef SELF_RECOVER #ifndef SELF_RECOVER
if (eraseoldlocks()) { if (eraseoldlocks()) {
#if defined(WIN32) && defined(TTY_GRAPHICS) #if defined(WIN32) && defined(TTY_GRAPHICS)
if (!strncmpi(windowprocs.name, "tty", 3)) if (WINDOWPORT("tty"))
clear_screen(); /* display gets fouled up otherwise */ clear_screen(); /* display gets fouled up otherwise */
#endif #endif
goto gotlock; goto gotlock;
@@ -212,7 +212,7 @@ getlock()
#else /*SELF_RECOVER*/ #else /*SELF_RECOVER*/
if (recover_savefile()) { if (recover_savefile()) {
#if defined(WIN32) && defined(TTY_GRAPHICS) #if defined(WIN32) && defined(TTY_GRAPHICS)
if (!strncmpi(windowprocs.name, "tty", 3)) if (WINDOWPORT("tty"))
clear_screen(); /* display gets fouled up otherwise */ clear_screen(); /* display gets fouled up otherwise */
#endif #endif
goto gotlock; goto gotlock;
+8 -8
View File
@@ -305,7 +305,7 @@ void intron() /* enable kbd interupts if enabled when game started */
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
/* Ugly hack to keep from changing tty modes for non-tty games -dlc */ /* Ugly hack to keep from changing tty modes for non-tty games -dlc */
if (!strcmp(windowprocs.name, "tty") && intr_char != nonesuch if (WINDOWPORT("tty") && intr_char != nonesuch
&& curttyb2.intr_sym != '\003') { && curttyb2.intr_sym != '\003') {
curttyb2.intr_sym = '\003'; curttyb2.intr_sym = '\003';
setctty(); setctty();
@@ -317,7 +317,7 @@ void introff() /* disable kbd interrupts if required*/
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
/* Ugly hack to keep from changing tty modes for non-tty games -dlc */ /* Ugly hack to keep from changing tty modes for non-tty games -dlc */
if (!strcmp(windowprocs.name, "tty") && curttyb2.intr_sym != nonesuch) { if (WINDOWPORT("tty") && curttyb2.intr_sym != nonesuch) {
curttyb2.intr_sym = nonesuch; curttyb2.intr_sym = nonesuch;
setctty(); setctty();
} }
@@ -345,7 +345,7 @@ void
sco_mapon() sco_mapon()
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
if (!strcmp(windowprocs.name, "tty") && sco_flag_console) { if (WINDOWPORT("tty") && sco_flag_console) {
if (sco_map_valid != -1) { if (sco_map_valid != -1) {
ioctl(0, LDSMAP, sco_chanmap_buf); ioctl(0, LDSMAP, sco_chanmap_buf);
} }
@@ -358,7 +358,7 @@ void
sco_mapoff() sco_mapoff()
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
if (!strcmp(windowprocs.name, "tty") && sco_flag_console) { if (WINDOWPORT("tty") && sco_flag_console) {
sco_map_valid = ioctl(0, LDGMAP, sco_chanmap_buf); sco_map_valid = ioctl(0, LDGMAP, sco_chanmap_buf);
if (sco_map_valid != -1) { if (sco_map_valid != -1) {
ioctl(0, LDNMAP, (char *) 0); ioctl(0, LDNMAP, (char *) 0);
@@ -379,7 +379,7 @@ void
init_sco_cons() init_sco_cons()
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
if (!strcmp(windowprocs.name, "tty") && sco_flag_console) { if (WINDOWPORT("tty") && sco_flag_console) {
atexit(sco_mapon); atexit(sco_mapon);
sco_mapoff(); sco_mapoff();
load_symset("IBMGraphics", PRIMARY); load_symset("IBMGraphics", PRIMARY);
@@ -409,7 +409,7 @@ void
linux_mapon() linux_mapon()
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
if (!strcmp(windowprocs.name, "tty") && linux_flag_console) { if (WINDOWPORT("tty") && linux_flag_console) {
write(1, "\033(B", 3); write(1, "\033(B", 3);
} }
#endif #endif
@@ -419,7 +419,7 @@ void
linux_mapoff() linux_mapoff()
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
if (!strcmp(windowprocs.name, "tty") && linux_flag_console) { if (WINDOWPORT("tty") && linux_flag_console) {
write(1, "\033(U", 3); write(1, "\033(U", 3);
} }
#endif #endif
@@ -439,7 +439,7 @@ void
init_linux_cons() init_linux_cons()
{ {
#ifdef TTY_GRAPHICS #ifdef TTY_GRAPHICS
if (!strcmp(windowprocs.name, "tty") && linux_flag_console) { if (WINDOWPORT("tty") && linux_flag_console) {
atexit(linux_mapon); atexit(linux_mapon);
linux_mapoff(); linux_mapoff();
#ifdef TEXTCOLOR #ifdef TEXTCOLOR
+2 -2
View File
@@ -73,8 +73,8 @@ DEBUGINFO = Y
# PDCurses header (.h) files and PDCURSES_C to the location # PDCurses header (.h) files and PDCURSES_C to the location
# of your PDCurses C files. # of your PDCurses C files.
# #
ADD_CURSES=Y #ADD_CURSES=Y
PDCURSES_TOP=..\..\pdcurses #PDCURSES_TOP=..\..\pdcurses
# #
#============================================================================== #==============================================================================
# This marks the end of the BUILD DECISIONS section. # This marks the end of the BUILD DECISIONS section.
+10 -7
View File
@@ -216,7 +216,7 @@ VA_DECL(const char *, s)
/* error() may get called before tty is initialized */ /* error() may get called before tty is initialized */
if (iflags.window_inited) if (iflags.window_inited)
end_screen(); end_screen();
if (windowprocs.name != NULL && !strncmpi(windowprocs.name, "tty", 3)) { if (WINDOWPORT("tty")) {
buf[0] = '\n'; buf[0] = '\n';
(void) vsprintf(&buf[1], s, VA_ARGS); (void) vsprintf(&buf[1], s, VA_ARGS);
Strcat(buf, "\n"); Strcat(buf, "\n");
@@ -239,6 +239,11 @@ Delay(int ms)
void void
win32_abort() win32_abort()
{ {
boolean is_tty = FALSE;
#ifdef TTY_GRAPHICS
is_tty = WINDOWPORT("tty");
#endif
if (wizard) { if (wizard) {
int c, ci, ct; int c, ci, ct;
@@ -248,13 +253,11 @@ win32_abort()
msmsg("Execute debug breakpoint wizard?"); msmsg("Execute debug breakpoint wizard?");
while ((ci = nhgetch()) != '\n') { while ((ci = nhgetch()) != '\n') {
if (ct > 0) { if (ct > 0) {
#ifdef TTY_GRAPHICS if (is_tty)
backsp(); /* \b is visible on NT */ backsp(); /* \b is visible on NT console */
#endif
(void) putchar(' '); (void) putchar(' ');
#ifdef TTY_GRAPHICS if (is_tty)
backsp(); backsp();
#endif
ct = 0; ct = 0;
c = 'n'; c = 'n';
} }