diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 52aa675e4..d783301bc 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.84 $ $NHDT-Date: 1562203850 2019/07/04 01:30:50 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.86 $ $NHDT-Date: 1562462061 2019/07/07 01:14:21 $ 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, @@ -98,6 +98,7 @@ if an engulfer has any worn items, hero could pick them up from inside and they wouldn't be unworn properly, eventually triggering warnings or worse (Juiblex will wear an amulet if created with one; a shapechanger might wear one and then turn into an engulfer) +kicking an altar ignored god's wrath if hero injured himself during the kick Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository @@ -169,6 +170,7 @@ curses: when map window was clipped, the 'scrollbars' shown to indicate which the 2nd and 3rd fifths (for example) were currently within view curses: support users's setting for erase char and kill char when getting a line of input with 'popup_dialog' Off (already supported for popup On) +curses: attempting to use ^H to rush left actually executed ^G (#wizgenesis) curses+'perm_invent': entries were wrapping without any control; usually not noticeable because next entry overwrote, but visible for final entry when whole inventory fit within the available height; looked ok with diff --git a/src/cmd.c b/src/cmd.c index 2dbfa352f..67a6d5fd8 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -5944,8 +5944,8 @@ char def; res = (*windowprocs.win_yn_function)(query, resp, def); #ifdef DUMPLOG if (idx == g.saved_pline_index) { - /* when idx is still the same as saved_pline_index, the interface - didn't put the prompt into saved_plines[]; we put a simplified + /* when idx is still the same as g.saved_pline_index, the interface + didn't put the prompt into g.saved_plines[]; we put a simplified version in there now (without response choices or default) */ Sprintf(dumplog_buf, "%s ", query); (void) key2txt((uchar) res, eos(dumplog_buf)); diff --git a/src/dokick.c b/src/dokick.c index 19a2a588b..6f22ec511 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 dokick.c $NHDT-Date: 1551920353 2019/03/07 00:59:13 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.131 $ */ +/* NetHack 3.6 dokick.c $NHDT-Date: 1562462061 2019/07/07 01:14:21 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.133 $ */ /* Copyright (c) Izchak Miller, Mike Stephenson, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1053,9 +1053,9 @@ dokick() if (Levitation) goto dumb; You("kick %s.", (Blind ? something : "the altar")); + altar_wrath(x, y); if (!rn2(3)) goto ouch; - altar_wrath(x, y); exercise(A_DEX, TRUE); return 1; } diff --git a/src/mklev.c b/src/mklev.c index a0903be9d..9bf6882df 100644 --- a/src/mklev.c +++ b/src/mklev.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mklev.c $NHDT-Date: 1560304468 2019/06/12 01:54:28 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.61 $ */ +/* NetHack 3.6 mklev.c $NHDT-Date: 1562455089 2019/07/06 23:18:09 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.63 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Alex Smith, 2017. */ /* NetHack may be freely redistributed. See license for details. */ @@ -581,6 +581,10 @@ clear_level_structures() register int x, y; register struct rm *lev; + /* note: normally we'd start at x=1 because map column #0 isn't used + (except for placing vault guard at <0,0> when removed from the map + but not from the level); explicitly reset column #0 along with the + rest so that we start the new level with a completely clean slate */ for (x = 0; x < COLNO; x++) { lev = &levl[x][0]; for (y = 0; y < ROWNO; y++) { @@ -635,6 +639,7 @@ clear_level_structures() xdnstair = ydnstair = xupstair = yupstair = 0; g.sstairs.sx = g.sstairs.sy = 0; xdnladder = ydnladder = xupladder = yupladder = 0; + g.dnstairs_room = g.upstairs_room = g.sstairs_room = (struct mkroom *) 0; g.made_branch = FALSE; clear_regions(); } @@ -1014,6 +1019,13 @@ mklev() for (ridx = 0; ridx < SIZE(g.rooms); ridx++) g.rooms[ridx].orig_rtype = g.rooms[ridx].rtype; + /* something like this usually belongs in clear_level_structures() + but these aren't saved and restored so might not retain their + values for the life of the current level; reset them to default + now so that they never do and no one will be tempted to introduce + a new use of them for anything on this level */ + g.dnstairs_room = g.upstairs_room = g.sstairs_room = (struct mkroom *) 0; + reseed_random(rn2); reseed_random(rn2_on_display_rng); } diff --git a/src/pray.c b/src/pray.c index 8604c94ba..408188ccb 100644 --- a/src/pray.c +++ b/src/pray.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 pray.c $NHDT-Date: 1561061321 2019/06/20 20:08:41 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.115 $ */ +/* NetHack 3.6 pray.c $NHDT-Date: 1562462064 2019/07/07 01:14:24 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.116 $ */ /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2222,13 +2222,21 @@ register int x, y; { aligntyp altaralign = a_align(x, y); - if (!strcmp(align_gname(altaralign), u_gname())) { + if (u.ualign.type == altaralign && u.ualign.record > -rn2(4)) { godvoice(altaralign, "How darest thou desecrate my altar!"); (void) adjattrib(A_WIS, -1, FALSE); + u.ualign.record--; } else { - pline("A voice (could it be %s?) whispers:", align_gname(altaralign)); + pline("%s %s%s:", + !Deaf ? "A voice (could it be" + : "Despite your deafness, you seem to hear", + align_gname(altaralign), + !Deaf ? "?) whispers" : " say"); verbalize("Thou shalt pay, infidel!"); - change_luck(-1); + /* higher luck is more likely to be reduced; as it approaches -5 + the chance to lose another point drops down, eventually to 0 */ + if (Luck > -5 && rn2(Luck + 6)) + change_luck(rn2(20) ? -1 : -2); } } diff --git a/win/curses/cursmesg.c b/win/curses/cursmesg.c index 95d56ae4d..30c9ebced 100644 --- a/win/curses/cursmesg.c +++ b/win/curses/cursmesg.c @@ -661,7 +661,7 @@ curses_message_win_getline(const char *prompt, char *answer, int buffer) goto alldone; case '\177': /* DEL/Rubout */ case KEY_DC: /* delete-character */ - case '\b': /* ^H (Backspace: '\011') */ + case '\b': /* ^H (Backspace: '\010') */ case KEY_BACKSPACE: if (len < 1) { len = 1; @@ -887,7 +887,7 @@ boolean restoring_msghist; static int stash_count; static nhprev_mesg *stash_head = 0; #ifdef DUMPLOG - extern unsigned saved_pline_index; /* pline.c */ + /* extern unsigned g.saved_pline_index; */ /* pline.c */ #endif if (restoring_msghist && !initd) { @@ -899,8 +899,8 @@ boolean restoring_msghist; last_mesg = (nhprev_mesg *) 0; /* no need to remember the tail */ initd = TRUE; #ifdef DUMPLOG - /* this suffices; there's no need to scrub saved_pline[] pointers */ - saved_pline_index = 0; + /* this suffices; there's no need to scrub g.saved_pline[] pointers */ + g.saved_pline_index = 0; #endif } diff --git a/win/curses/cursmisc.c b/win/curses/cursmisc.c index 441bda3d2..ad8b14f20 100644 --- a/win/curses/cursmisc.c +++ b/win/curses/cursmisc.c @@ -792,6 +792,13 @@ curses_convert_keys(int key) /* Handle arrow keys */ switch (key) { + case KEY_BACKSPACE: + /* we can't distinguish between a separate backspace key and + explicit Ctrl+H intended to rush to the left; without this, + a value for ^H greater than 255 is passed back to core's + readchar() and stripping the value down to 0..255 yields ^G! */ + ret = C('H'); + break; case KEY_LEFT: if (iflags.num_pad) { ret = '4';