--- src/util.c.orig 2004-02-24 16:42:12.000000000 -0500 +++ src/util.c 2004-07-11 15:20:08.000000000 -0400 @@ -3659,6 +3659,19 @@ */ static char request_command_buffer[256]; +/* +* Mega-Hack -- characters for which keymaps should be ignored in +* request_command(). This MUST have at least twice as many characters as +* there are building actions in the actions[] array in store_info_type. +*/ +char request_command_ignore_keymaps[12]; + +/* +* Mega-Hack -- flag set by do_cmd_{inven,equip}() to allow keymaps in +* auto-command mode. +*/ +bool request_command_inven_mode = FALSE; + /* @@ -3730,8 +3743,14 @@ /* Forget it */ command_new = 0; - /* Hack - bypass keymaps. Does this break inven/equip? */ - if (!inkey_next) inkey_next = ""; + /* Hack - bypass keymaps, unless asked not to */ + if (!inkey_next && !request_command_inven_mode) + { + inkey_next = ""; + } + + /* Mega-Hack -- turn off this flag immediately */ + request_command_inven_mode = FALSE; } /* Get a keypress in "command" mode */ @@ -3873,6 +3892,17 @@ /* Look up applicable keymap */ act = keymap_act[mode][(byte)(cmd)]; + /* Mega-Hack -- Ignore certain keymaps */ + if (shopping && cmd > 0) + { + for (i = 0; i < 12; i++) + if (cmd == request_command_ignore_keymaps[i]) + { + act = NULL; + break; + } + } + /* Apply keymap if not inside a keymap already */ if (act && !inkey_next) { @@ -3909,10 +3939,6 @@ } } - /* Shopping */ - if (shopping == 1) - {} - /* Hack -- Scan equipment */ for (i = INVEN_WIELD; i < INVEN_TOTAL; i++) { --- src/store.c.orig 2004-02-24 16:42:13.000000000 -0500 +++ src/store.c 2004-07-11 15:18:56.000000000 -0400 @@ -3405,6 +3405,7 @@ #endif /* ALLOW_REPEAT -- TNB */ +#if 0 /* These should no longer be necessary */ if (rogue_like_commands && command_cmd == 'l') { command_cmd = 'x'; /* hack! */ @@ -3417,6 +3418,7 @@ { command_cmd = 'a'; /* kwt */ } +#endif for (i = 0; i < 6; i++) { @@ -3825,6 +3827,16 @@ /* Display the store */ display_store(); + /* Mega-Hack -- Ignore keymaps on store action letters */ + for (i = 0; i < 6; i++) + { + store_action_type *ba_ptr = + &ba_info[st_info[st_ptr->st_idx].actions[i]]; + request_command_ignore_keymaps[2*i] = ba_ptr->letter; + request_command_ignore_keymaps[2*i+1] = ba_ptr->letter_aux; + + } + /* Do not leave */ leave_store = FALSE; @@ -3976,6 +3988,9 @@ /* Hack -- Cancel "see" mode */ command_see = FALSE; + /* Mega-Hack -- Clear the 'ignore-keymaps' list */ + memset(request_command_ignore_keymaps, 0, 12); + /* Flush messages XXX XXX XXX */ msg_print(NULL); @@ -4284,6 +4299,15 @@ /* Display the store */ display_store(); + /* Mega-Hack -- Ignore keymaps on store action letters */ + for (i = 0; i < 6; i++) + { + store_action_type *ba_ptr = + &ba_info[st_info[st_ptr->st_idx].actions[i]]; + request_command_ignore_keymaps[2*i] = ba_ptr->letter; + request_command_ignore_keymaps[2*i+1] = ba_ptr->letter_aux; + } + /* Do not leave */ leave_store = FALSE; @@ -4435,6 +4459,9 @@ /* Hack -- Cancel "see" mode */ command_see = FALSE; + /* Mega-Hack -- Clear the 'ignore-keymaps' list */ + memset(request_command_ignore_keymaps, 0, 12); + /* Flush messages XXX XXX XXX */ msg_print(NULL); --- src/cmd3.c.orig 2004-02-24 16:42:12.000000000 -0500 +++ src/cmd3.c 2004-07-11 15:08:38.000000000 -0400 @@ -99,6 +99,9 @@ { /* Hack -- Use "display" mode */ command_see = TRUE; + + /* Mega-Hack -- Don't disable keymaps for this key */ + request_command_inven_mode = TRUE; } } @@ -161,6 +164,9 @@ { /* Enter "display" mode */ command_see = TRUE; + + /* Mega-Hack -- Don't disable keymaps for this key */ + request_command_inven_mode = TRUE; } } --- src/externs.h.orig 2004-02-24 19:52:27.000000000 -0500 +++ src/externs.h 2004-07-11 15:01:30.000000000 -0400 @@ -1514,6 +1514,8 @@ extern bool get_com(cptr prompt, char *command); extern s32b get_quantity(cptr prompt, s32b max); extern void pause_line(int row); +extern char request_command_ignore_keymaps[12]; +extern bool request_command_inven_mode; extern void request_command(int shopping); extern bool is_a_vowel(int ch); extern int get_keymap_dir(char ch);