eating, drinking via #herecmdmenu
Fix eat floor food and drink from dungeon feature via #herecmdmenu. That uses queued commands, but those two actions were changed to skip the floor when queued input was present because asking about floor items interfered with context-sensitive inventory item-actions. I was misled by a comment that says it couldn't insert an m-prefix; that was for treating the 'm' key as typed text rather than as a command. There's no problem with inserting a #reqmenu command which is what 'm' is these days. So item actions can force 'm' to skip the floor and go directly to inventory, also the #eat and #quaff commands don't have to alter their behavior when queued input is pending so the #herecmdmenu usage for them gets fixed.
This commit is contained in:
@@ -3437,9 +3437,8 @@ floorfood(
|
|||||||
* floor food has been declined and inventory lacks
|
* floor food has been declined and inventory lacks
|
||||||
* any suitable items */
|
* any suitable items */
|
||||||
/* if we can't touch floor objects then use invent food only;
|
/* if we can't touch floor objects then use invent food only;
|
||||||
same if 'm' prefix was used or we're executing an item action
|
same when 'm' prefix is used--for #eat, it means "skip floor food" */
|
||||||
for context-sensitive inventory */
|
if (iflags.menu_requested
|
||||||
if (iflags.menu_requested || cmdq_peek()
|
|
||||||
|| !can_reach_floor(TRUE) || (feeding && u.usteed)
|
|| !can_reach_floor(TRUE) || (feeding && u.usteed)
|
||||||
|| (is_pool_or_lava(u.ux, u.uy)
|
|| (is_pool_or_lava(u.ux, u.uy)
|
||||||
&& (Wwalking || is_clinger(uptr) || (Flying && !Breathless))))
|
&& (Wwalking || is_clinger(uptr) || (Flying && !Breathless))))
|
||||||
|
|||||||
+10
-3
@@ -2834,8 +2834,10 @@ itemactions(struct obj *otmp)
|
|||||||
cmdq_add_key(otmp->invlet);
|
cmdq_add_key(otmp->invlet);
|
||||||
break;
|
break;
|
||||||
case IA_DIP_OBJ:
|
case IA_DIP_OBJ:
|
||||||
/*cmdq_add_ec(dodip);*/
|
/* #altdip instead of normal #dip - takes potion to dip into
|
||||||
/*cmdq_add_userinput();*/
|
first (the inventory item instigating this) and item to
|
||||||
|
be dipped second, also ignores floor features such as
|
||||||
|
fountain/sink so we don't need to force m-prefix here */
|
||||||
cmdq_add_ec(dip_into);
|
cmdq_add_ec(dip_into);
|
||||||
cmdq_add_key(otmp->invlet);
|
cmdq_add_key(otmp->invlet);
|
||||||
break;
|
break;
|
||||||
@@ -2844,7 +2846,9 @@ itemactions(struct obj *otmp)
|
|||||||
cmdq_add_key(otmp->invlet);
|
cmdq_add_key(otmp->invlet);
|
||||||
break;
|
break;
|
||||||
case IA_EAT_OBJ:
|
case IA_EAT_OBJ:
|
||||||
/* FIXME: can't add this! cmdq_add_key('m');*/ /* m-prefix: eat, skip floor obj */
|
/* start with m-prefix; for #eat, it means ignore floor food
|
||||||
|
if present and eat food from invent */
|
||||||
|
cmdq_add_ec(do_reqmenu);
|
||||||
cmdq_add_ec(doeat);
|
cmdq_add_ec(doeat);
|
||||||
cmdq_add_key(otmp->invlet);
|
cmdq_add_key(otmp->invlet);
|
||||||
break;
|
break;
|
||||||
@@ -2857,6 +2861,9 @@ itemactions(struct obj *otmp)
|
|||||||
cmdq_add_key(otmp->invlet);
|
cmdq_add_key(otmp->invlet);
|
||||||
break;
|
break;
|
||||||
case IA_QUAFF_OBJ:
|
case IA_QUAFF_OBJ:
|
||||||
|
/* start with m-prefix; for #quaff, it means ignore fountain
|
||||||
|
or sink if present and drink a potion from invent */
|
||||||
|
cmdq_add_ec(do_reqmenu);
|
||||||
cmdq_add_ec(dodrink);
|
cmdq_add_ec(dodrink);
|
||||||
cmdq_add_key(otmp->invlet);
|
cmdq_add_key(otmp->invlet);
|
||||||
break;
|
break;
|
||||||
|
|||||||
+3
-5
@@ -531,11 +531,9 @@ dodrink(void)
|
|||||||
drink_ok_extra = 0;
|
drink_ok_extra = 0;
|
||||||
/* preceding 'q'/#quaff with 'm' skips the possibility of drinking
|
/* preceding 'q'/#quaff with 'm' skips the possibility of drinking
|
||||||
from fountains, sinks, and surrounding water plus the prompting
|
from fountains, sinks, and surrounding water plus the prompting
|
||||||
which those entail; if cmdq is non-empty, player has selected a
|
which those entail; optional for interactive use, essential for
|
||||||
potion from inventory and then chosen action-item 'quaff' so
|
context-sensitive inventory item action 'quaff' */
|
||||||
skip fountains,&c for that case too--the potion's inv letter is
|
if (!iflags.menu_requested) {
|
||||||
queued up for next getobj() */
|
|
||||||
if (!iflags.menu_requested && !cmdq_peek()) {
|
|
||||||
/* Is there a fountain to drink from here? */
|
/* Is there a fountain to drink from here? */
|
||||||
if (IS_FOUNTAIN(levl[u.ux][u.uy].typ)
|
if (IS_FOUNTAIN(levl[u.ux][u.uy].typ)
|
||||||
/* not as low as floor level but similar restrictions apply */
|
/* not as low as floor level but similar restrictions apply */
|
||||||
|
|||||||
Reference in New Issue
Block a user