oops [all of fixes35.0 as log text]

This commit is contained in:
nethack.rankin
2011-12-05 09:16:07 +00:00
parent 73a934f6f6
commit d11e4daf27
5 changed files with 164 additions and 13 deletions

View File

@@ -17,7 +17,6 @@ Debug-Mode Quick Reference:
#polyself == polymorph self
#seenv == show seen vectors
#stats == show memory statistics
#terrain == show map topology
#timeout == look at timeout queue
#vision == show vision array
#wmode == show wall modes

View File

@@ -843,8 +843,10 @@ Ride (or stop riding) a monster.
Rub a lamp or a stone.
.lp "#sit "
Sit down.
.lp #terrain
Show bare map without displaying monsters, objects, or traps.
.lp "#tip "
Tip over a container to pour out its contents.
Tip over a container (bag or box) to pour out its contents.
.lp #turn
Turn undead.
.lp #twoweapon

View File

@@ -33,7 +33,7 @@
\begin{document}
%
% input file: guidebook.mn
% $Revision: 1.116 $ $Date: 2011/04/25 03:29:41 $
% $Revision: 1.117 $ $Date: 2011/09/15 04:16:22 $
%
%.ds h0 "
%.ds h1 %.ds h2 \%
@@ -1053,8 +1053,10 @@ Rub a lamp or a stone.
\item[\tb{\#sit}]
Sit down.
%.lp
\item[\tb{\#terrain}]
Show bare map without displaying monsters, objects, or traps.
\item[\tb{\#tip}]
Tip over a container to pour out its contents.
Tip over a container (bag or box) to pour out its contents.
%.lp
\item[\tb{\#turn}]
Turn undead.

View File

@@ -261,6 +261,7 @@ E void FDECL(find_trap, (struct trap *));
E int FDECL(dosearch0, (int));
E int NDECL(dosearch);
E void NDECL(sokoban_detect);
E void FDECL(reveal_terrain, (BOOLEAN_P));
/* ### dig.c ### */

165
src/cmd.c
View File

@@ -126,6 +126,7 @@ STATIC_PTR int NDECL(domonability);
STATIC_PTR int NDECL(dooverview_or_wiz_where);
#endif /* DUNGEON_OVERVIEW */
STATIC_PTR int NDECL(dotravel);
STATIC_PTR int NDECL(doterrain);
# ifdef WIZARD
STATIC_PTR int NDECL(wiz_wish);
STATIC_PTR int NDECL(wiz_identify);
@@ -142,7 +143,8 @@ STATIC_PTR int NDECL(wiz_show_vision);
STATIC_PTR int NDECL(wiz_smell);
STATIC_PTR int NDECL(wiz_mon_polycontrol);
STATIC_PTR int NDECL(wiz_show_wmodes);
STATIC_PTR int NDECL(wiz_map_terrain);
STATIC_DCL void NDECL(wiz_map_levltyp);
STATIC_DCL void NDECL(wiz_levltyp_legend);
#if defined(__BORLANDC__) && !defined(_WIN32)
extern void FDECL(show_borlandc_stats, (winid));
#endif
@@ -820,9 +822,9 @@ wiz_show_wmodes(VOID_ARGS)
return 0;
}
/* #terrain command */
STATIC_PTR int
wiz_map_terrain(VOID_ARGS)
/* wizard mode variant of #terrain; internal levl[][].typ values in base-36 */
STATIC_OVL void
wiz_map_levltyp(VOID_ARGS)
{
winid win;
int x, y, terrain;
@@ -921,10 +923,91 @@ wiz_map_terrain(VOID_ARGS)
}
display_nhwindow(win, TRUE);
/* TODO? create legend of levl[][].typ codes and allow switching
back and forth between it and coded map display */
destroy_nhwindow(win);
return 0;
return;
}
/* temporary? hack, since level type codes aren't the same as screen
symbols and only the latter have easily accessible descriptions */
static const char *levltyp[] = {
"stone",
"vertical wall",
"horizontal wall",
"top-left corner wall",
"top-right corner wall",
"bottom-left corner wall",
"bottom-right corner wall",
"cross wall",
"tee-up wall",
"tee-down wall",
"tee-left wall",
"tee-right wall",
"drawbridge wall",
"tree",
"secret door",
"secret corridor",
"pool",
"moat",
"water",
"drawbridge up",
"lava pool",
"iron bars",
"door",
"corridor",
"room",
"stairs",
"ladder",
"fountain",
"throne",
"sink",
"grave",
"altar",
"ice",
"drawbridge down",
"air",
"cloud",
/* not a real terrain type, but used for undiggable stone
by wiz_map_levltyp() */
"unreachable/undiggable",
/* padding in case the number of entries above is odd */
""
};
/* explanation of base-36 output from wiz_map_levltyp() */
STATIC_OVL void
wiz_levltyp_legend(VOID_ARGS)
{
winid win;
int i, j, last, c;
const char *dsc, *fmt;
char buf[BUFSZ];
win = create_nhwindow(NHW_TEXT);
putstr(win, 0, "#terrain encodings:");
putstr(win, 0, "");
fmt = " %c - %-28s"; /* TODO: include tab-separated variant for win32 */
*buf = '\0';
/* output in pairs, left hand column holds [0],[1],...,[N/2-1]
and right hand column holds [N/2],[N/2+1],...,[N-1];
N ('last') will always be even, and may or may not include
the empty string entry to pad out the final pair, depending
upon how many other entries are present in levltyp[] */
last = SIZE(levltyp) & ~1;
for (i = 0; i < last / 2; ++i)
for (j = i; j < last; j += last / 2) {
dsc = levltyp[j];
c = !*dsc ? ' ' : !strncmp(dsc, "unreachable", 11) ? '*' :
/* same int-to-char conversion as wiz_map_levltyp() */
(j < 10) ? '0' + j : (j < 36) ? 'a' + j - 10 : 'A' + j - 36;
Sprintf(eos(buf), fmt, c, dsc);
if (j > i) {
putstr(win, 0, buf);
*buf = '\0';
}
}
display_nhwindow(win, TRUE);
destroy_nhwindow(win);
return;
}
/* #wizsmell command - test usmellmon(). */
@@ -983,6 +1066,71 @@ wiz_rumor_check(VOID_ARGS)
}
#endif /* WIZARD */
/* #terrain command */
STATIC_PTR int
doterrain(VOID_ARGS)
{
int which = 1; /* show known map, ala crawl's '|' command */
if (discover || wizard) {
/* explore mode #terrain: choose between known map and full map;
wizard mode #terrain: choose between known map, full map,
a dump of the internal levl[][].typ codes w/ level flags,
and a legend for the levl[][].typ codes */
winid men;
menu_item *sel;
anything any;
int n;
men = create_nhwindow(NHW_MENU);
any = zeroany;
any.a_int = 1;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
"known map without monsters, objects, and traps",
MENU_SELECTED);
any.a_int = 2;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
"full map without monsters, objects, and traps",
MENU_UNSELECTED);
#ifdef WIZARD
if (wizard) {
any.a_int = 3;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
"internal levl[][].typ codes in base-36",
MENU_UNSELECTED);
any.a_int = 4;
add_menu(men, NO_GLYPH, &any, 0, 0, ATR_NONE,
"legend of base-36 levl[][].typ codes",
MENU_UNSELECTED);
}
#endif
end_menu(men, "View which?");
n = select_menu(men, PICK_ONE, &sel);
destroy_nhwindow(men);
/*
* n < 0: player used ESC to cancel;
* n == 0: preselected entry was explicitly chosen and got toggled off;
* n == 1: preselected entry was implicitly chosen via <space>|<enter>;
* n == 2: another entry was explicitly chosen, so skip preselected one
*/
which = (n < 0) ? -1 : (n == 0) ? 1 : sel[0].item.a_int;
if (n > 1 && which == 1) which = sel[1].item.a_int;
if (n > 0) free((genericptr_t)sel);
} /* discover || wizard */
switch (which) {
case 1: reveal_terrain(FALSE); break; /* known map */
case 2: reveal_terrain(TRUE); break; /* full map */
#ifdef WIZARD
case 3: wiz_map_levltyp(); break; /* map internals */
case 4: wiz_levltyp_legend(); break; /* internal details */
#endif
default: break;
}
return 0; /* no time elapses */
}
/* -enlightenment and conduct- */
static winid en_win = WIN_ERR;
@@ -2330,6 +2478,7 @@ struct ext_func_tab extcmdlist[] = {
#endif
{"rub", "rub a lamp or a stone", dorub, FALSE},
{"sit", "sit down", dosit, FALSE},
{"terrain", "show map without obstructions", doterrain, TRUE},
{"tip", "empty a container", dotip, FALSE},
{"turn", "turn undead", doturn, TRUE},
{"twoweapon", "toggle two-weapon combat", dotwoweapon, FALSE},
@@ -2356,7 +2505,6 @@ struct ext_func_tab extcmdlist[] = {
#endif
{(char *)0, (char *)0, donull, TRUE}, /* seenv */
{(char *)0, (char *)0, donull, TRUE}, /* stats */
{(char *)0, (char *)0, donull, TRUE}, /* terrain */
{(char *)0, (char *)0, donull, TRUE}, /* timeout */
{(char *)0, (char *)0, donull, TRUE}, /* vanquished */
{(char *)0, (char *)0, donull, TRUE}, /* vision */
@@ -2386,7 +2534,6 @@ static const struct ext_func_tab debug_extcmdlist[] = {
#endif
{"seenv", "show seen vectors", wiz_show_seenv, TRUE},
{"stats", "show memory statistics", wiz_show_stats, TRUE},
{"terrain", "show map topology", wiz_map_terrain, TRUE},
{"timeout", "look at timeout queue", wiz_timeout_queue, TRUE},
{"vanquished", "list vanquished monsters", dovanquished, TRUE},
{"vision", "show vision array", wiz_show_vision, TRUE},