diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index eedab0537..3735f6257 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -2629,11 +2629,9 @@ On Windows, it is \(lq.nethackrc\(rq in \(lq\\%USERPROFILE%\\NetHack\\3.6\(rq. The file may not exist, but it is a normal ASCII text file can can be created with any text editor. -.pg After running NetHack for the first time, you should find a default template for the configuration file named \(lq.nethackrc.template\(rq in \(lq\\%USERPROFILE%\\NetHack\\3.6\(rq. -.pg If you had not created the configuration file, NetHack will create the configuration file for you using the default template file. .pg diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index ef6c26b8f..1a8ad80cf 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -2878,14 +2878,10 @@ can be created with any text editor.\\ On Windows, it is \mbox{``.nethackrc''} in the foler \mbox{{``\%USERPROFILE\%\textbackslash NetHack\textbackslash 3.6''}}. The file may not exist, but it is a normal ASCII text file and can be created -with any text editor.\\ - -%.lp "" +with any text editor. After runing {\it NetHack\/} for the first time, you should find a default template for ths configuration file named \mbox{``.nethackrc.template''} in \mbox{{``\%USERPROFILE\%\textbackslash NetHack\textbackslash 3.6''}}. - -%.lp "" If you had not created the configuration file, {\it NetHack\/} will create the configuration file for you using the default template file. diff --git a/doc/config.nh b/doc/config.nh index ce5410382..437158250 100644 --- a/doc/config.nh +++ b/doc/config.nh @@ -347,7 +347,8 @@ # How the map window is shown? Windows GUI only. # possible map_mode options include: tiles, ascii4x6, # ascii6x8, ascii8x8, ascii16x8, ascii7x12, ascii8x12, ascii16x12, -# ascii12x16, ascii10x18, fit_to_screen +# ascii12x16, ascii10x18, fit_to_screen, ascii_fit_to_screen, +# tiles_fit_to_screen #OPTIONS=map_mode:tiles # Define alternative file for the files, and the tile size diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 04a1e0685..12490115f 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.151 $ $NHDT-Date: 1572530225 2019/10/31 13:57:05 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.155 $ $NHDT-Date: 1572833562 2019/11/04 02:12:42 $ This fixes36.3 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.2 in May 2019. Please note, however, @@ -212,6 +212,8 @@ when entering Astral level, initial rendering of guardian angel didn't show it as tame; noticeable if the level was entered with 'hilite_pet' On fix a leashed pet polymorphed into a long worm staying leashed prevent leashing unsolid monsters and monsters with no extremities +playing musical instruments gave feedback which ignored deafness +some other deafness-related message corrections Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository diff --git a/src/dokick.c b/src/dokick.c index 7e89ddb8b..fdb19c426 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -1192,9 +1192,16 @@ dokick() exercise(A_DEX, TRUE); return 1; } else if (!rn2(3)) { - pline("Flupp! %s.", - (Blind ? "You hear a sloshing sound" - : "Muddy waste pops up from the drain")); + if (Blind && Deaf) + Sprintf(buf, " %s", body_part(FACE)); + else + buf[0] = '\0'; + pline("%s%s%s.", !Deaf ? "Flupp! " : "", + !Blind + ? "Muddy waste pops up from the drain" + : !Deaf + ? "You hear a sloshing sound" + : "Something splashes you in the", buf); if (!(g.maploc->looted & S_LRING)) { /* once per sink */ if (!Blind) You_see("a ring shining in its midst."); diff --git a/src/music.c b/src/music.c index f1bf9c724..7bdd5950f 100644 --- a/src/music.c +++ b/src/music.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 music.c $NHDT-Date: 1544442713 2018/12/10 11:51:53 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.57 $ */ +/* NetHack 3.6 music.c $NHDT-Date: 1572833563 2019/11/04 02:12:43 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.58 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -170,7 +170,7 @@ struct monst *bugler; /* monster that played instrument */ mtmp->mstrategy &= ~STRAT_WAITMASK; if (canseemon(mtmp)) pline("%s is now ready for battle!", Monnam(mtmp)); - else + else if (!Deaf) Norep("You hear the rattle of battle gear being readied."); } else if ((distm = ((bugler == &g.youmonst) ? distu(mtmp->mx, mtmp->my) @@ -284,7 +284,7 @@ int force; /*FALLTHRU*/ case ROOM: case CORR: /* Try to make a pit */ - do_pit: + do_pit: chasm = maketrap(x, y, PIT); if (!chasm) break; /* no pit if portal at that location */ @@ -467,6 +467,7 @@ struct obj *instr; mundane = TRUE; } + #define PLAY_NORMAL 0x00 #define PLAY_STUNNED 0x01 #define PLAY_CONFUSED 0x02 @@ -484,10 +485,16 @@ struct obj *instr; You("start playing %s.", yname(instr)); break; case PLAY_STUNNED: - You("produce an obnoxious droning sound."); + if (!Deaf) + You("produce an obnoxious droning sound."); + else + You_feel("a monotonous vibration."); break; case PLAY_CONFUSED: - You("produce a raucous noise."); + if (!Deaf) + You("produce a raucous noise."); + else + You_feel("a jarring vibration."); break; case PLAY_HALLU: You("produce a kaleidoscopic display of floating butterfiles."); @@ -511,13 +518,17 @@ struct obj *instr; case MAGIC_FLUTE: /* Make monster fall asleep */ consume_obj_charge(instr, TRUE); - You("produce %s music.", Hallucination ? "piped" : "soft"); + You("%sproduce %s music.", !Deaf ? "" : "seem to ", + Hallucination ? "piped" : "soft"); put_monsters_to_sleep(u.ulevel * 5); exercise(A_DEX, TRUE); break; case WOODEN_FLUTE: /* May charm snakes */ do_spec &= (rn2(ACURR(A_DEX)) + u.ulevel > 25); - pline("%s.", Tobjnam(instr, do_spec ? "trill" : "toot")); + if (!Deaf) + pline("%s.", Tobjnam(instr, do_spec ? "trill" : "toot")); + else + You_feel("%s %s.", yname(instr), do_spec ? "trill" : "toot"); if (do_spec) charm_snakes(u.ulevel * 3); exercise(A_DEX, TRUE); @@ -543,26 +554,38 @@ struct obj *instr; makeknown(instr->otyp); break; case TOOLED_HORN: /* Awaken or scare monsters */ - You("produce a frightful, grave sound."); + if (!Deaf) + You("produce a frightful, grave sound."); + else + You("blow into the horn."); awaken_monsters(u.ulevel * 30); exercise(A_WIS, FALSE); break; case BUGLE: /* Awaken & attract soldiers */ - You("extract a loud noise from %s.", yname(instr)); + if (!Deaf) + You("extract a loud noise from %s.", yname(instr)); + else + You("blow into the bugle."); awaken_soldiers(&g.youmonst); exercise(A_WIS, FALSE); break; case MAGIC_HARP: /* Charm monsters */ consume_obj_charge(instr, TRUE); - pline("%s very attractive music.", Tobjnam(instr, "produce")); + if (!Deaf) + pline("%s very attractive music.", Tobjnam(instr, "produce")); + else + You_feel("very soothing vibrations."); charm_monsters((u.ulevel - 1) / 3 + 1); exercise(A_DEX, TRUE); break; case WOODEN_HARP: /* May calm Nymph */ do_spec &= (rn2(ACURR(A_DEX)) + u.ulevel > 25); - pline("%s %s.", Yname2(instr), - do_spec ? "produces a lilting melody" : "twangs"); + if (!Deaf) + pline("%s %s.", Yname2(instr), + do_spec ? "produces a lilting melody" : "twangs"); + else + You_feel("soothing vibrations."); if (do_spec) calm_nymphs(u.ulevel * 3); exercise(A_DEX, TRUE); @@ -583,8 +606,12 @@ struct obj *instr; break; case LEATHER_DRUM: /* Awaken monsters */ if (!mundane) { - You("beat a deafening row!"); - incr_itimeout(&HDeaf, rn1(20, 30)); + if (!Deaf) { + You("beat a deafening row!"); + incr_itimeout(&HDeaf, rn1(20, 30)); + } else { + You("pound on the drum."); + } exercise(A_WIS, FALSE); } else You("%s %s.", @@ -649,7 +676,10 @@ struct obj *instr; *s = 'B'; } } - You("extract a strange sound from %s!", the(xname(instr))); + + You(!Deaf ? "extract a strange sound from %s!" + : "can feel %s emitting vibrations.", the(xname(instr))); + /* Check if there was the Stronghold drawbridge near * and if the tune conforms to what we're waiting for. @@ -662,8 +692,8 @@ struct obj *instr; for (x = u.ux - 1; x <= u.ux + 1; x++) if (isok(x, y)) if (find_drawbridge(&x, &y)) { - u.uevent.uheard_tune = - 2; /* tune now fully known */ + /* tune now fully known */ + u.uevent.uheard_tune = 2; if (levl[x][y].typ == DRAWBRIDGE_DOWN) close_drawbridge(x, y); else @@ -696,7 +726,7 @@ struct obj *instr; if (buf[x] == g.tune[x]) { gears++; matched[x] = TRUE; - } else + } else { for (y = 0; y < 5; y++) if (!matched[y] && buf[x] == g.tune[y] && buf[y] != g.tune[y]) { @@ -704,8 +734,9 @@ struct obj *instr; matched[y] = TRUE; break; } + } } - if (tumblers) + if (tumblers) { if (gears) You_hear("%d tumbler%s click and %d gear%s turn.", tumblers, plur(tumblers), gears, @@ -713,7 +744,7 @@ struct obj *instr; else You_hear("%d tumbler%s click.", tumblers, plur(tumblers)); - else if (gears) { + } else if (gears) { You_hear("%d gear%s turn.", gears, plur(gears)); /* could only get `gears == 5' by playing five correct notes followed by excess; otherwise, @@ -728,7 +759,7 @@ struct obj *instr; } else return do_improvisation(instr); -nevermind: + nevermind: pline1(Never_mind); return 0; } diff --git a/src/options.c b/src/options.c index c400c3c9e..5c18d6521 100644 --- a/src/options.c +++ b/src/options.c @@ -3354,7 +3354,8 @@ boolean tinitial, tfrom_file; /* WINCAP * * map_mode:[tiles|ascii4x6|ascii6x8|ascii8x8|ascii16x8|ascii7x12 - * |ascii8x12|ascii16x12|ascii12x16|ascii10x18|fit_to_screen] + * |ascii8x12|ascii16x12|ascii12x16|ascii10x18|fit_to_screen + * |ascii_fit_to_screen|tiles_fit_to_screen] */ fullname = "map_mode"; if (match_optname(opts, fullname, sizeof "map_mode" - 1, TRUE)) { @@ -3362,7 +3363,7 @@ boolean tinitial, tfrom_file; complain_about_duplicate(opts, 1); op = string_for_opt(opts, negated); if (op && !negated) { - if (!strncmpi(op, "tiles", sizeof "tiles" - 1)) + if (!strcmpi(op, "tiles")) iflags.wc_map_mode = MAP_MODE_TILES; else if (!strncmpi(op, "ascii4x6", sizeof "ascii4x6" - 1)) iflags.wc_map_mode = MAP_MODE_ASCII4x6; @@ -3385,6 +3386,12 @@ boolean tinitial, tfrom_file; else if (!strncmpi(op, "fit_to_screen", sizeof "fit_to_screen" - 1)) iflags.wc_map_mode = MAP_MODE_ASCII_FIT_TO_SCREEN; + else if (!strncmpi(op, "ascii_fit_to_screen", + sizeof "ascii_fit_to_screen" - 1)) + iflags.wc_map_mode = MAP_MODE_ASCII_FIT_TO_SCREEN; + else if (!strncmpi(op, "tiles_fit_to_screen", + sizeof "tiles_fit_to_screen" - 1)) + iflags.wc_map_mode = MAP_MODE_TILES_FIT_TO_SCREEN; else { config_error_add("Unknown %s parameter '%s'", fullname, op); return FALSE; diff --git a/src/shk.c b/src/shk.c index 74c3ec669..b5755ae66 100644 --- a/src/shk.c +++ b/src/shk.c @@ -2983,8 +2983,9 @@ boolean peaceful, silent; if (canseemon(shkp)) { Norep("%s booms: \"%s, you are a thief!\"", Shknam(shkp), g.plname); - } else + } else if (!Deaf) { Norep("You hear a scream, \"Thief!\""); + } } hot_pursuit(shkp); (void) angry_guards(FALSE); diff --git a/src/zap.c b/src/zap.c index 49fb7543b..778ac76f4 100644 --- a/src/zap.c +++ b/src/zap.c @@ -4433,7 +4433,9 @@ short exploding_wand_typ; if (is_ice(x, y)) { melt_ice(x, y, (char *) 0); } else if (is_pool(x, y)) { - const char *msgtxt = "You hear hissing gas."; + const char *msgtxt = (!Deaf) + ? "You hear hissing gas." + : "That seemed remarkably uneventful."; if (lev->typ != POOL) { /* MOAT or DRAWBRIDGE_UP */ if (see_it) diff --git a/sys/winnt/.nethackrc.template b/sys/winnt/.nethackrc.template index 39b7924cf..50605b27d 100644 --- a/sys/winnt/.nethackrc.template +++ b/sys/winnt/.nethackrc.template @@ -104,7 +104,8 @@ OPTIONS=suppress_alert:3.3.1 # Map window settings # possible map_mode options include: tiles|ascii4x6|ascii6x8|ascii8x8|ascii16x8| # ascii7x12|ascii8x12|ascii16x12|ascii12x16| -# ascii10x18|fit_to_screen +# ascii10x18|fit_to_screen|ascii_fit_to_screen| +# tiles_fit_to_screen OPTIONS=map_mode:tiles,scroll_margin:10 # Message window settings diff --git a/win/win32/mhsplash.c b/win/win32/mhsplash.c index 8dcfd1b39..dcb698450 100644 --- a/win/win32/mhsplash.c +++ b/win/win32/mhsplash.c @@ -259,6 +259,7 @@ NHSplashWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_COMMAND: switch (LOWORD(wParam)) { + case IDCANCEL: case IDOK: mswin_window_mark_dead(mswin_winid_from_handle(hWnd)); if (GetNHApp()->hMainWnd == hWnd) diff --git a/win/win32/vs2017/NetHackPackage.appxmanifest b/win/win32/vs2017/NetHackPackage.appxmanifest index 44c752964..8eebc3cc4 100644 --- a/win/win32/vs2017/NetHackPackage.appxmanifest +++ b/win/win32/vs2017/NetHackPackage.appxmanifest @@ -1,6 +1,6 @@  - + NetHack 3.6 NetHack DevTeam