Add context menu for the location next to you
This commit is contained in:
@@ -184,6 +184,7 @@ static coord clicklook_cc;
|
|||||||
|
|
||||||
STATIC_DCL void FDECL(add_herecmd_menuitem, (winid, int NDECL((*)), const char *));
|
STATIC_DCL void FDECL(add_herecmd_menuitem, (winid, int NDECL((*)), const char *));
|
||||||
STATIC_DCL char FDECL(here_cmd_menu, (BOOLEAN_P));
|
STATIC_DCL char FDECL(here_cmd_menu, (BOOLEAN_P));
|
||||||
|
STATIC_DCL char FDECL(there_cmd_menu, (int, int));
|
||||||
STATIC_DCL char *NDECL(parse);
|
STATIC_DCL char *NDECL(parse);
|
||||||
STATIC_DCL void FDECL(show_direction_keys, (winid, CHAR_P, BOOLEAN_P));
|
STATIC_DCL void FDECL(show_direction_keys, (winid, CHAR_P, BOOLEAN_P));
|
||||||
STATIC_DCL boolean FDECL(help_dir, (CHAR_P, int, const char *));
|
STATIC_DCL boolean FDECL(help_dir, (CHAR_P, int, const char *));
|
||||||
@@ -4688,6 +4689,46 @@ const char *text;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STATIC_OVL char
|
||||||
|
there_cmd_menu(x, y)
|
||||||
|
int x, y;
|
||||||
|
{
|
||||||
|
winid win;
|
||||||
|
anything any;
|
||||||
|
char ch;
|
||||||
|
char buf[BUFSZ];
|
||||||
|
schar typ = levl[x][y].typ;
|
||||||
|
int npick;
|
||||||
|
menu_item *picks = (menu_item *) 0;
|
||||||
|
struct trap *ttmp;
|
||||||
|
|
||||||
|
win = create_nhwindow(NHW_MENU);
|
||||||
|
start_menu(win);
|
||||||
|
|
||||||
|
if (IS_DOOR(typ)) {
|
||||||
|
int dm = levl[x][y].doormask;
|
||||||
|
if ((dm & (D_CLOSED|D_LOCKED))) {
|
||||||
|
add_herecmd_menuitem(win, dokick, "Kick the door");
|
||||||
|
add_herecmd_menuitem(win, doopen, "Open the door");
|
||||||
|
} else if ((dm & D_ISOPEN)) {
|
||||||
|
add_herecmd_menuitem(win, doclose, "Close the door");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typ <= SCORR)
|
||||||
|
add_herecmd_menuitem(win, dosearch, "Search for secret doors");
|
||||||
|
|
||||||
|
end_menu(win, "What do you want to do?");
|
||||||
|
npick = select_menu(win, PICK_ONE, &picks);
|
||||||
|
destroy_nhwindow(win);
|
||||||
|
if (npick > 0) {
|
||||||
|
ch = cmd_from_func(picks->item.a_void);
|
||||||
|
free((genericptr_t)picks);
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
return '\0';
|
||||||
|
}
|
||||||
|
|
||||||
STATIC_OVL char
|
STATIC_OVL char
|
||||||
here_cmd_menu(doit)
|
here_cmd_menu(doit)
|
||||||
boolean doit;
|
boolean doit;
|
||||||
@@ -4857,6 +4898,13 @@ int x, y, mod;
|
|||||||
&& !test_move(u.ux, u.uy, x, y, TEST_MOVE)) {
|
&& !test_move(u.ux, u.uy, x, y, TEST_MOVE)) {
|
||||||
cmd[1] = Cmd.dirchars[dir];
|
cmd[1] = Cmd.dirchars[dir];
|
||||||
cmd[2] = '\0';
|
cmd[2] = '\0';
|
||||||
|
if (iflags.herecmd_menu) {
|
||||||
|
cmd[0] = there_cmd_menu(u.ux + x, u.uy + y);
|
||||||
|
if (cmd[0] == '\0')
|
||||||
|
cmd[1] = '\0';
|
||||||
|
return cmd;
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_DOOR(levl[u.ux + x][u.uy + y].typ)) {
|
if (IS_DOOR(levl[u.ux + x][u.uy + y].typ)) {
|
||||||
/* slight assistance to the player: choose kick/open for them
|
/* slight assistance to the player: choose kick/open for them
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user