int context_menu_player_2(int mx, int my) { menu_type *m; rect_region r; int selected; char *labels; m = menu_dynamic_new(); if (!m) { return 0; } labels = (char*)string_make(lower_case); m->selections = labels; menu_dynamic_add_label(m, "Knowledge", '~', 1, labels); menu_dynamic_add_label(m, "Show Map", 'M', 2, labels); menu_dynamic_add_label(m, "^Show Messages", 'P', 3, labels); menu_dynamic_add_label(m, "Show Monster List", '[', 9, labels); menu_dynamic_add_label(m, "Show Object List", ']', 10, labels); menu_dynamic_add_label(m, "Toggle Searching", 'S', 4, labels); if (player_has_pets()) { menu_dynamic_add_label(m, "Pet Commands", 'p', 5, labels); } menu_dynamic_add_label(m, "Destroy an item", 'k', 6, labels); menu_dynamic_add_label(m, "Options", '=', 8, labels); menu_dynamic_add_label(m, "Commands", '?', 7, labels); menu_dynamic_add_label(m, "Back", ' ', 11, labels); /* work out display region */ r.width = menu_dynamic_longest_entry(m) + 3 + 2; /* +3 for tag, 2 for pad */ if (mx > Term->wid - r.width - 1) { r.col = Term->wid - r.width - 1; } else { r.col = mx + 1; } r.page_rows = m->count; if (my > Term->hgt - r.page_rows - 1) { if (my - r.page_rows - 1 <= 0) { /* menu has too many items, so put in upper right corner */ r.row = 1; r.col = Term->wid - r.width - 1; } else { r.row = Term->hgt - r.page_rows - 1; } } else { r.row = my + 1; } /* Hack -- no flush needed */ msg_flag = FALSE; screen_save(); button_backup_all(TRUE); menu_layout(m, &r); rect_region_erase_bordered(&r); prtf(0, 0, "($UEnter to select$Y\n$V, $UESC$Y%c$V) Command:", ESCAPE); selected = menu_dynamic_select(m); menu_dynamic_free(m); string_free(labels); button_restore(); screen_load(); if (selected == 1) { /* show knowledge screen */ Term_keypress('~');//,0); } else if (selected == 2) { /* Toggle show map */ p_ptr->cmd.cmd = 'M'; repeat_check(); do_cmd_view_map(); } else if (selected == 3) { /* Toggle show messages */ Term_keypress(KTRL('p'));//,0);/*XXX should be ('p', KC_MOD_CONTROL);*/ } else if (selected == 4) { /* Toggle search mode */ Term_keypress('S');//,0); } else if (selected == 5) { /* show pet menu */ p_ptr->cmd.cmd = 'p'; repeat_check(); do_cmd_pet(); } else if (selected == 6) { /* destroy/squelch an item */ Term_keypress('k');//,0); } else if (selected == 7) { /* show the commands */ context_menu_command(mx,my); } else if (selected == 8) { /* show options screen */ Term_keypress('=');//,0); } else if (selected == 9) { /* show the monster list */ p_ptr->cmd.dir = 5; do_cmd_list_monster(0); //Term_keypress('[');//,0); } else if (selected == 10) { /* show the object list */ p_ptr->cmd.dir = 5; do_cmd_list_object(0); //Term_keypress(']');//,0); } else if (selected == 11) { /* show the previous menu again */ return 2; } return 1; }
int context_menu_player(int mx, int my) { menu_type *m; rect_region r; int selected; char *labels; cave_type *c_ptr = area(p_ptr->px,p_ptr->py); pcave_type *pc_ptr = parea(p_ptr->px,p_ptr->py); feature_type *feat; m = menu_dynamic_new(); if (!m) { return 0; } labels = (char*)string_make(lower_case); m->selections = labels; feat = &(f_info[c_ptr->feat]); menu_dynamic_add_label(m, "Use Item", 'u', 1, labels); /* if player can cast, add casting option */ if (player_is_caster()) { if (player_can_cast()) { menu_dynamic_add_label(m, "Cast", 'm', 2, labels); } else { menu_dynamic_add_label(m, "$Cast", 'm', 2, labels); } } /* if player can use racial powers or mutations, add option */ if (player_has_power()) { if (player_can_use_power()) { menu_dynamic_add_label(m, "Use Power", 'U', 16, labels); } else { menu_dynamic_add_label(m, "$Use Power", 'U', 16, labels); } } /* if player is on stairs add option to use them */ if (feat->flags & FF_EXIT_UP) { menu_dynamic_add_label(m, "Go Up", '<', 11, labels); } if (feat->flags & FF_EXIT_DOWN) { menu_dynamic_add_label(m, "Go Down", '>', 12, labels); } menu_dynamic_add_label(m, "Search", 's', 3, labels); menu_dynamic_add_label(m, "Look", 'l', 6, labels); menu_dynamic_add_label(m, "Rest", 'R', 4, labels); menu_dynamic_add_label(m, "Inventory", 'i', 5, labels); /* if object under player add pickup option */ if (c_ptr->o_idx) { object_type *o_ptr = &(o_list[c_ptr->o_idx]); //if (!squelch_item_ok(o_ptr)) { menu_dynamic_add_label(m, "Floor", 'i', 13, labels); if (inven_carry_okay(o_ptr)) { menu_dynamic_add_label(m, "Pickup", 'g', 14, labels); } else { menu_dynamic_add_label(m, "$Pickup", 'g', 14, labels); } //} } menu_dynamic_add_label(m, "Character", 'C', 7, labels); /* XXX Don't show the keymap line until the keymap list is implemented, to * avoid confusion as to what should be there */ /*menu_dynamic_add(m, "Keymaps", 10);*/ if (!OPT(center_player)) { menu_dynamic_add_label(m, "^Center Map", 'L', 15, labels); } menu_dynamic_add_label(m, "Other", ' ', 9, labels); /* work out display region */ r.width = menu_dynamic_longest_entry(m) + 3 + 2; /* +3 for tag, 2 for pad */ if (mx > Term->wid - r.width - 1) { r.col = Term->wid - r.width - 1; } else { r.col = mx + 1; } r.page_rows = m->count; if (my > Term->hgt - r.page_rows - 1) { if (my - r.page_rows - 1 <= 0) { /* menu has too many items, so put in upper right corner */ r.row = 1; r.col = Term->wid - r.width - 1; } else { r.row = Term->hgt - r.page_rows - 1; } } else { r.row = my + 1; } /* Hack -- no flush needed */ msg_flag = FALSE; screen_save(); button_backup_all(TRUE); menu_layout(m, &r); rect_region_erase_bordered(&r); prtf(0, 0, "($UEnter to select$Y\n$V, $UESC$Y%c$V) Command:", ESCAPE); selected = menu_dynamic_select(m); menu_dynamic_free(m); string_free(labels); button_restore(); screen_load(); switch(selected) { case 1: { /* use an item */ p_ptr->cmd.cmd = 'u'; repeat_check(); do_cmd_use(); } break; case 2: { /* Cast a spell */ p_ptr->cmd.cmd = 'm'; repeat_check(); do_cmd_cast_wrapper(); } break; case 3: { /* search */ p_ptr->cmd.cmd = 's'; repeat_check(); do_cmd_search(); } break; case 4: { /* rest */ p_ptr->cmd.cmd = 'R'; repeat_check(); do_cmd_rest(); } break; case 5: { /* show inventory screen */ Term_keypress('i');//,0); } break; case 6: { /* look mode */ if (target_set(TARGET_LOOK)) { //if (target_set_interactive(TARGET_LOOK, p_ptr->px, p_ptr->py)) { msgf("Target Selected."); } } break; case 7: { /* show character screen */ do_cmd_character(); } break; case 9: { /* show another layer of menu options screen */ int res; while ((res = context_menu_player_2(mx,my)) == 3); if (res == 2) return 3; } break; case 10: { /* show the commands */ int res; while ((res = context_menu_command(mx,my)) == 3); if (res == 2) return 3; } break; case 11: { /* go up stairs */ p_ptr->cmd.cmd = '<'; repeat_check(); do_cmd_go_up(); } break; case 12: { /* go down stairs */ p_ptr->cmd.cmd = '>'; repeat_check(); do_cmd_go_down(); } break; case 13: { if (c_ptr->o_idx) { object_type *o_ptr = &(o_list[c_ptr->o_idx]); /* there is an item on the floor, show the inventory screen starting * from the floor */ if (o_ptr->next_o_idx) { do_cmd_inven_floor(); } else { /* if we only have one item, show the context menu directly */ if (o_ptr->k_idx) { /* Track the object kind */ object_kind_track(o_ptr->k_idx); while (context_menu_object(o_ptr) == 2); } } } } break; case 14: { /* pick the item up */ //cmd_insert(CMD_PICKUP); //cmd_set_arg_item(cmd_get_top(), 0, -1); carry(TRUE); } break; case 15: { /* center the map on the player */ /*panel_center(p_ptr->px, p_ptr->py);*/ do_cmd_center_map(); } break; case 16: { /* use character powers */ p_ptr->cmd.cmd = 'U'; repeat_check(); do_cmd_racial_power(); } break; } return 1; }
static int context_menu_player_2(int mx, int my) { menu_type *m; region r; int selected; char *labels; bool allowed = TRUE; int mode = OPT(rogue_like_commands) ? KEYMAP_MODE_ROGUE : KEYMAP_MODE_ORIG; unsigned char cmdkey; m = menu_dynamic_new(); if (!m) { return 0; } labels = string_make(lower_case); m->selections = labels; menu_dynamic_add_label(m, "Knowledge", '~', MENU_VALUE_KNOWLEDGE, labels); menu_dynamic_add_label(m, "Show Map", 'M', MENU_VALUE_MAP, labels); menu_dynamic_add_label(m, "^Show Messages", 'P', MENU_VALUE_MESSAGES, labels); menu_dynamic_add_label(m, "Show Monster List", '[', MENU_VALUE_MONSTERS, labels); menu_dynamic_add_label(m, "Show Object List", ']', MENU_VALUE_OBJECTS, labels); ADD_LABEL("Toggle Searching", CMD_TOGGLE_SEARCH, MN_ROW_VALID); /* Squelch toggle has different keys, but we don't have a way to look them up (see cmd-process.c). */ cmdkey = (mode == KEYMAP_MODE_ORIG) ? 'K' : 'O'; menu_dynamic_add_label(m, "Toggle Squelched", cmdkey, MENU_VALUE_TOGGLE_SQUELCHED, labels); ADD_LABEL("Squelch an item", CMD_DESTROY, MN_ROW_VALID); menu_dynamic_add_label(m, "Options", '=', MENU_VALUE_OPTIONS, labels); menu_dynamic_add_label(m, "Commands", '?', MENU_VALUE_HELP, labels); /* work out display region */ r.width = (int)menu_dynamic_longest_entry(m) + 3 + 2; /* +3 for tag, 2 for pad */ if (mx > Term->wid - r.width - 1) { r.col = Term->wid - r.width - 1; } else { r.col = mx + 1; } r.page_rows = m->count; if (my > Term->hgt - r.page_rows - 1) { if (my - r.page_rows - 1 <= 0) { /* menu has too many items, so put in upper right corner */ r.row = 1; r.col = Term->wid - r.width - 1; } else { r.row = Term->hgt - r.page_rows - 1; } } else { r.row = my + 1; } /* Hack -- no flush needed */ msg_flag = FALSE; screen_save(); menu_layout(m, &r); region_erase_bordered(&r); prt("(Enter to select, ESC) Command:", 0, 0); selected = menu_dynamic_select(m); menu_dynamic_free(m); string_free(labels); screen_load(); /* Check the command to see if it is allowed. */ switch (selected) { case -1: /* User cancelled the menu. */ return 3; case MENU_VALUE_KNOWLEDGE: case MENU_VALUE_MAP: case MENU_VALUE_MESSAGES: case MENU_VALUE_TOGGLE_SQUELCHED: case MENU_VALUE_HELP: case MENU_VALUE_MONSTERS: case MENU_VALUE_OBJECTS: case MENU_VALUE_OPTIONS: case CMD_TOGGLE_SEARCH: allowed = TRUE; break; case CMD_DESTROY: cmdkey = cmd_lookup_key(selected, mode); allowed = key_confirm_command(cmdkey); break; default: /* Invalid command; prevent anything from happening. */ bell("Invalid context menu command."); allowed = FALSE; break; } if (!allowed) return 1; /* Perform the command. */ switch (selected) { case MENU_VALUE_KNOWLEDGE: Term_keypress('~', 0); break; case MENU_VALUE_MAP: Term_keypress('M', 0); break; case MENU_VALUE_MESSAGES: Term_keypress(KTRL('p'), 0); break; case CMD_DESTROY: case CMD_TOGGLE_SEARCH: cmdkey = cmd_lookup_key(selected, mode); Term_keypress(cmdkey, 0); break; case MENU_VALUE_TOGGLE_SQUELCHED: /* Squelch toggle has different keys, but we don't have a way to look them up (see cmd-process.c). */ cmdkey = (mode == KEYMAP_MODE_ORIG) ? 'K' : 'O'; Term_keypress(cmdkey, 0); break; case MENU_VALUE_HELP: context_menu_command(mx, my); break; case MENU_VALUE_MONSTERS: Term_keypress('[', 0); break; case MENU_VALUE_OBJECTS: Term_keypress(']', 0); break; case MENU_VALUE_OPTIONS: Term_keypress('=', 0); break; default: break; } return 1; }