Show object symbols in menu headings
... in menus where those object symbols act as menu accelerators. Toggleable via "menu_objsyms" boolean option, defaults to off.
This commit is contained in:
@@ -2100,6 +2100,9 @@ Default '|'.
|
||||
Menu character accelerator to goto the next menu page.
|
||||
Implemented by the Amiga, Gem and tty ports.
|
||||
Default '>'.
|
||||
.lp menu_objsyms
|
||||
Show object symbols in menu headings in menus where
|
||||
the object symbols act as menu accelerators (default off).
|
||||
.lp menu_previous_page
|
||||
Menu character accelerator to goto the previous menu page.
|
||||
Implemented by the Amiga, Gem and tty ports.
|
||||
|
||||
@@ -883,6 +883,8 @@ add option mention_walls, which gives feedback when bumping against a wall
|
||||
fix invalid pointer dereference in morguemon if ndemon returns NON_PM
|
||||
after object loss through polyshudder don't get left hiding under nothing
|
||||
if you're polymorphed into a hider
|
||||
show object symbols in menu headings in menus where those object symbols
|
||||
act as menu accelerators, toggleable via "menu_objsyms" option
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
|
||||
@@ -911,7 +911,7 @@ E int NDECL(dopramulet);
|
||||
E int NDECL(doprtool);
|
||||
E int NDECL(doprinuse);
|
||||
E void FDECL(useupf, (struct obj *,long));
|
||||
E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P));
|
||||
E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P,BOOLEAN_P));
|
||||
E void NDECL(free_invbuf);
|
||||
E void NDECL(reassign);
|
||||
E int NDECL(doorganize);
|
||||
|
||||
@@ -191,6 +191,7 @@ struct instance_flags {
|
||||
boolean news; /* print news */
|
||||
boolean mention_walls; /* give feedback when bumping walls */
|
||||
boolean menu_tab_sep; /* Use tabs to separate option menu fields */
|
||||
boolean menu_head_objsym; /* Show obj symbol in menu headings */
|
||||
boolean menu_requested; /* Flag for overloaded use of 'm' prefix
|
||||
* on some non-move commands */
|
||||
boolean renameallowed; /* can change hero name during role selection */
|
||||
|
||||
26
src/invent.c
26
src/invent.c
@@ -1789,7 +1789,7 @@ nextclass:
|
||||
if (!flags.sortpack || otmp->oclass == *invlet) {
|
||||
if (flags.sortpack && !classcount) {
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
let_to_name(*invlet, FALSE), MENU_UNSELECTED);
|
||||
let_to_name(*invlet, FALSE, (want_reply && iflags.menu_head_objsym)), MENU_UNSELECTED);
|
||||
classcount++;
|
||||
}
|
||||
any.a_char = ilet;
|
||||
@@ -1863,7 +1863,7 @@ char avoidlet;
|
||||
if (flags.sortpack && !classcount) {
|
||||
any = zeroany; /* zero */
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
let_to_name(*invlet, FALSE), MENU_UNSELECTED);
|
||||
let_to_name(*invlet, FALSE, FALSE), MENU_UNSELECTED);
|
||||
classcount++;
|
||||
}
|
||||
any.a_char = ilet;
|
||||
@@ -1991,7 +1991,7 @@ dounpaid()
|
||||
if (otmp->unpaid) {
|
||||
if (!flags.sortpack || otmp->oclass == *invlet) {
|
||||
if (flags.sortpack && !classcount) {
|
||||
putstr(win, 0, let_to_name(*invlet, TRUE));
|
||||
putstr(win, 0, let_to_name(*invlet, TRUE, FALSE));
|
||||
classcount++;
|
||||
}
|
||||
|
||||
@@ -2009,7 +2009,7 @@ dounpaid()
|
||||
if (count > num_so_far) {
|
||||
/* something unpaid is contained */
|
||||
if (flags.sortpack)
|
||||
putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE));
|
||||
putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE, FALSE));
|
||||
/*
|
||||
* Search through the container objects in the inventory for
|
||||
* unpaid items. The top level inventory items have already
|
||||
@@ -2701,10 +2701,12 @@ static NEARDATA char *invbuf = (char *)0;
|
||||
static NEARDATA unsigned invbufsiz = 0;
|
||||
|
||||
char *
|
||||
let_to_name(let,unpaid)
|
||||
let_to_name(let,unpaid,showsym)
|
||||
char let;
|
||||
boolean unpaid;
|
||||
boolean unpaid,showsym;
|
||||
{
|
||||
const char *ocsymfmt = " ('%c')";
|
||||
const int invbuf_sympadding = 8; /* arbitrary */
|
||||
const char *class_name;
|
||||
const char *pos;
|
||||
int oclass = (let >= 1 && let < MAXOCLASSES) ? let : 0;
|
||||
@@ -2717,7 +2719,8 @@ boolean unpaid;
|
||||
else
|
||||
class_name = names[0];
|
||||
|
||||
len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof "");
|
||||
len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof "") +
|
||||
(oclass ? (strlen(ocsymfmt)+invbuf_sympadding) : 0);
|
||||
if (len > invbufsiz) {
|
||||
if (invbuf) free((genericptr_t)invbuf);
|
||||
invbufsiz = len + 10; /* add slop to reduce incremental realloc */
|
||||
@@ -2727,6 +2730,15 @@ boolean unpaid;
|
||||
Strcat(strcpy(invbuf, "Unpaid "), class_name);
|
||||
else
|
||||
Strcpy(invbuf, class_name);
|
||||
if ((oclass != 0) && showsym) {
|
||||
char *bp = eos(invbuf);
|
||||
int mlen = invbuf_sympadding - strlen(class_name);
|
||||
while (--mlen > 0) {
|
||||
*bp = ' '; bp++;
|
||||
}
|
||||
*bp = '\0';
|
||||
Sprintf(eos(invbuf), ocsymfmt, def_oc_syms[oclass].sym);
|
||||
}
|
||||
return invbuf;
|
||||
}
|
||||
|
||||
|
||||
@@ -446,7 +446,7 @@ dodiscovered() /* free after Robert Viduya */
|
||||
if ((dis = disco[i]) != 0 && interesting_to_discover(dis)) {
|
||||
ct++;
|
||||
if (oclass != prev_class) {
|
||||
putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE));
|
||||
putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE, FALSE));
|
||||
prev_class = oclass;
|
||||
}
|
||||
Sprintf(buf, "%s %s",(objects[dis].oc_pre_discovered ? "*" : " "),
|
||||
@@ -472,7 +472,7 @@ char *buf;
|
||||
{
|
||||
char *s;
|
||||
|
||||
Strcpy(buf, let_to_name(oclass, FALSE));
|
||||
Strcpy(buf, let_to_name(oclass, FALSE, FALSE));
|
||||
for (s = buf; *s; ++s) *s = lowc(*s);
|
||||
return buf;
|
||||
}
|
||||
@@ -615,7 +615,7 @@ doclassdisco()
|
||||
break;
|
||||
default:
|
||||
oclass = def_char_to_objclass(c);
|
||||
Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE));
|
||||
Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE, FALSE));
|
||||
putstr(tmpwin, iflags.menu_headings, buf);
|
||||
for (i = bases[(int)oclass];
|
||||
i < NUM_OBJECTS && objects[i].oc_class == oclass; ++i) {
|
||||
@@ -672,7 +672,7 @@ rename_disco()
|
||||
if (oclass != prev_class) {
|
||||
any.a_int = 0;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings,
|
||||
ATR_NONE, let_to_name(oclass, FALSE), MENU_UNSELECTED);
|
||||
ATR_NONE, let_to_name(oclass, FALSE, FALSE), MENU_UNSELECTED);
|
||||
prev_class = oclass;
|
||||
}
|
||||
any.a_int = dis;
|
||||
|
||||
@@ -142,6 +142,7 @@ static struct Bool_Opt
|
||||
{"mention_walls", &iflags.mention_walls, FALSE, SET_IN_GAME},
|
||||
/* for menu debugging only*/
|
||||
{"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME},
|
||||
{"menu_objsyms", &iflags.menu_head_objsym, FALSE, SET_IN_GAME},
|
||||
{"mouse_support", &iflags.wc_mouse_support, TRUE, DISP_IN_GAME}, /*WC*/
|
||||
#ifdef NEWS
|
||||
{"news", &iflags.news, TRUE, DISP_IN_GAME},
|
||||
|
||||
10
src/pickup.c
10
src/pickup.c
@@ -769,7 +769,9 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */
|
||||
if (sorted && !printed_type_name) {
|
||||
any = zeroany;
|
||||
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||
let_to_name(*pack, FALSE), MENU_UNSELECTED);
|
||||
let_to_name(*pack, FALSE,
|
||||
(how != PICK_NONE) && iflags.menu_head_objsym),
|
||||
MENU_UNSELECTED);
|
||||
printed_type_name = TRUE;
|
||||
}
|
||||
|
||||
@@ -928,8 +930,10 @@ int how; /* type of query */
|
||||
any.a_int = curr->oclass;
|
||||
add_menu(win, NO_GLYPH, &any, invlet++,
|
||||
def_oc_syms[(int)objects[curr->otyp].oc_class].sym,
|
||||
ATR_NONE, let_to_name(*pack, FALSE),
|
||||
MENU_UNSELECTED);
|
||||
ATR_NONE,
|
||||
let_to_name(*pack, FALSE,
|
||||
(how != PICK_NONE) && iflags.menu_head_objsym),
|
||||
MENU_UNSELECTED);
|
||||
collected_type_name = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user