menu loot suggestion from newsgroup
Newsgroups: rec.games.roguelike.nethack Subject: Re: YANI - empty containers interface <email deleted> On Mon, 2 Sep 2002 12:13:49 +0300, <email deleted> wrote: > I find the behaviour when trying to put something in an empty container > quite irritating. Let's remind it: > #loot > "The <container> is empty. Do you want to put something in it? (y/n)" > This means I have to read the message and to press 'y' or to cancel via > Esc. > For comparison, non-empty containers behave like this - please forgive > me that I've forgotten the exact words: > #loot > "Do what? > o - take out > i - put in > b - both of the above" > So my suggestion is to change the behaviour of empty containers to be > the same as non-empty ones. That is: > #loot > "Do what? > i - put in" > This way, I don't have to look at the container. If I want to put > something in, pressing 'i' will lead to the same results in both cases. This part of the suggestion was not implemented, however: > If I want to take something out, then pressing 'o' or 'b' - although > they are not in the list of choices - will display a message "This ><container> is empty" and end the #loot-ing session.
This commit is contained in:
+36
-17
@@ -32,7 +32,7 @@ STATIC_PTR int FDECL(in_container,(struct obj *));
|
|||||||
STATIC_PTR int FDECL(ck_bag,(struct obj *));
|
STATIC_PTR int FDECL(ck_bag,(struct obj *));
|
||||||
STATIC_PTR int FDECL(out_container,(struct obj *));
|
STATIC_PTR int FDECL(out_container,(struct obj *));
|
||||||
STATIC_DCL int FDECL(menu_loot, (int, struct obj *, BOOLEAN_P));
|
STATIC_DCL int FDECL(menu_loot, (int, struct obj *, BOOLEAN_P));
|
||||||
STATIC_DCL int FDECL(in_or_out_menu, (const char *,struct obj *));
|
STATIC_DCL int FDECL(in_or_out_menu, (const char *,struct obj *, BOOLEAN_P, BOOLEAN_P));
|
||||||
STATIC_DCL int FDECL(container_at, (int, int, BOOLEAN_P));
|
STATIC_DCL int FDECL(container_at, (int, int, BOOLEAN_P));
|
||||||
STATIC_DCL boolean FDECL(able_to_loot, (int, int));
|
STATIC_DCL boolean FDECL(able_to_loot, (int, int));
|
||||||
STATIC_DCL boolean FDECL(mon_beside, (int, int));
|
STATIC_DCL boolean FDECL(mon_beside, (int, int));
|
||||||
@@ -1911,11 +1911,12 @@ register int held;
|
|||||||
struct monst *shkp;
|
struct monst *shkp;
|
||||||
boolean one_by_one, allflag, loot_out = FALSE, loot_in = FALSE;
|
boolean one_by_one, allflag, loot_out = FALSE, loot_in = FALSE;
|
||||||
char select[MAXOCLASSES+1];
|
char select[MAXOCLASSES+1];
|
||||||
char qbuf[QBUFSZ];
|
char qbuf[QBUFSZ], emptymsg[QBUFSZ];
|
||||||
long loss = 0L;
|
long loss = 0L;
|
||||||
int cnt = 0, used = 0, lcnt = 0,
|
int cnt = 0, used = 0, lcnt = 0,
|
||||||
menu_on_request;
|
menu_on_request;
|
||||||
|
|
||||||
|
emptymsg[0] = '\0';
|
||||||
if (obj->olocked) {
|
if (obj->olocked) {
|
||||||
pline("%s to be locked.", Tobjnam(obj, "seem"));
|
pline("%s to be locked.", Tobjnam(obj, "seem"));
|
||||||
if (held) You("must put it down to unlock.");
|
if (held) You("must put it down to unlock.");
|
||||||
@@ -2003,14 +2004,20 @@ register int held;
|
|||||||
|
|
||||||
obj->owt = weight(obj);
|
obj->owt = weight(obj);
|
||||||
|
|
||||||
if (!cnt) {
|
if (!cnt) Sprintf(emptymsg, "%s %s empty.", Yname2(obj), otense(obj, "are"));
|
||||||
pline("%s %s empty.", Yname2(obj), otense(obj, "are"));
|
if (cnt || flags.menu_style == MENU_FULL) {
|
||||||
} else {
|
|
||||||
Sprintf(qbuf, "Do you want to take %s out of %s?",
|
Sprintf(qbuf, "Do you want to take %s out of %s?",
|
||||||
something, yname(obj));
|
something, yname(obj));
|
||||||
if (flags.menu_style != MENU_TRADITIONAL) {
|
if (flags.menu_style != MENU_TRADITIONAL) {
|
||||||
if (flags.menu_style == MENU_FULL) {
|
if (flags.menu_style == MENU_FULL) {
|
||||||
int t = in_or_out_menu("Do what?", current_container);
|
int t;
|
||||||
|
char menuprompt[QBUFSZ];
|
||||||
|
boolean outokay = (cnt != 0);
|
||||||
|
boolean inokay = (invent != 0);
|
||||||
|
menuprompt[0] = '\0';
|
||||||
|
if (!cnt) Sprintf(menuprompt, "%s ", emptymsg);
|
||||||
|
Strcat(menuprompt, "Do what?");
|
||||||
|
t = in_or_out_menu(menuprompt, current_container, outokay, inokay);
|
||||||
if (t <= 0) return 0;
|
if (t <= 0) return 0;
|
||||||
loot_out = (t & 0x01) != 0;
|
loot_out = (t & 0x01) != 0;
|
||||||
loot_in = (t & 0x02) != 0;
|
loot_in = (t & 0x02) != 0;
|
||||||
@@ -2056,6 +2063,8 @@ ask_again2:
|
|||||||
return used;
|
return used;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
pline("%s", emptymsg); /* <whatever> is empty. */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef GOLDOBJ
|
#ifndef GOLDOBJ
|
||||||
@@ -2067,7 +2076,7 @@ ask_again2:
|
|||||||
You("don't have anything to put in.");
|
You("don't have anything to put in.");
|
||||||
return used;
|
return used;
|
||||||
}
|
}
|
||||||
if (flags.menu_style != MENU_FULL || !cnt) {
|
if (flags.menu_style != MENU_FULL) {
|
||||||
loot_in = (yn_function("Do you wish to put something in?",
|
loot_in = (yn_function("Do you wish to put something in?",
|
||||||
ynqchars, 'n') == 'y');
|
ynqchars, 'n') == 'y');
|
||||||
}
|
}
|
||||||
@@ -2200,9 +2209,10 @@ boolean put_in;
|
|||||||
}
|
}
|
||||||
|
|
||||||
STATIC_OVL int
|
STATIC_OVL int
|
||||||
in_or_out_menu(prompt, obj)
|
in_or_out_menu(prompt, obj, outokay, inokay)
|
||||||
const char *prompt;
|
const char *prompt;
|
||||||
struct obj *obj;
|
struct obj *obj;
|
||||||
|
boolean outokay, inokay;
|
||||||
{
|
{
|
||||||
winid win;
|
winid win;
|
||||||
anything any;
|
anything any;
|
||||||
@@ -2214,15 +2224,24 @@ struct obj *obj;
|
|||||||
any.a_void = 0;
|
any.a_void = 0;
|
||||||
win = create_nhwindow(NHW_MENU);
|
win = create_nhwindow(NHW_MENU);
|
||||||
start_menu(win);
|
start_menu(win);
|
||||||
any.a_int = 1;
|
if (outokay) {
|
||||||
Sprintf(buf,"Take %s out of %s", something, the(xname(obj)));
|
any.a_int = 1;
|
||||||
add_menu(win, NO_GLYPH, &any, *menuselector++, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
Sprintf(buf,"Take %s out of %s", something, the(xname(obj)));
|
||||||
any.a_int = 2;
|
add_menu(win, NO_GLYPH, &any, *menuselector, 0, ATR_NONE,
|
||||||
Sprintf(buf,"Put %s into %s", something, the(xname(obj)));
|
buf, MENU_UNSELECTED);
|
||||||
add_menu(win, NO_GLYPH, &any, *menuselector++, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
}
|
||||||
any.a_int = 3;
|
menuselector++;
|
||||||
add_menu(win, NO_GLYPH, &any, *menuselector, 0, ATR_NONE,
|
if (inokay) {
|
||||||
"Both of the above", MENU_UNSELECTED);
|
any.a_int = 2;
|
||||||
|
Sprintf(buf,"Put %s into %s", something, the(xname(obj)));
|
||||||
|
add_menu(win, NO_GLYPH, &any, *menuselector, 0, ATR_NONE, buf, MENU_UNSELECTED);
|
||||||
|
}
|
||||||
|
menuselector++;
|
||||||
|
if (outokay && inokay) {
|
||||||
|
any.a_int = 3;
|
||||||
|
add_menu(win, NO_GLYPH, &any, *menuselector, 0, ATR_NONE,
|
||||||
|
"Both of the above", MENU_UNSELECTED);
|
||||||
|
}
|
||||||
end_menu(win, prompt);
|
end_menu(win, prompt);
|
||||||
n = select_menu(win, PICK_ONE, &pick_list);
|
n = select_menu(win, PICK_ONE, &pick_list);
|
||||||
destroy_nhwindow(win);
|
destroy_nhwindow(win);
|
||||||
|
|||||||
Reference in New Issue
Block a user