X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fobject1.c;h=2aebce08f292031e7de03c0e76f831b396438105;hb=7bb33e990892c95abc26e97e12cdef32c73208b9;hp=775e219992a2855e65f514ae834dea348b988190;hpb=a6ac864fbc18df0ff005123aaebfe0f24df86e79;p=hengband%2Fhengband.git diff --git a/src/object1.c b/src/object1.c index 775e21999..2aebce08f 100644 --- a/src/object1.c +++ b/src/object1.c @@ -144,7 +144,7 @@ void object_flags(object_type *o_ptr, u32b flgs[TR_FLAG_SIZE]) for (i = 0; i < TR_FLAG_SIZE; i++) flgs[i] |= o_ptr->art_flags[i]; - if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3) + if (item_tester_hook_smith(o_ptr)) { int add = o_ptr->xtra3 - 1; @@ -277,7 +277,7 @@ void object_flags_known(object_type *o_ptr, u32b flgs[TR_FLAG_SIZE]) flgs[i] |= o_ptr->art_flags[i]; } - if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3) + if (item_tester_hook_smith(o_ptr)) { int add = o_ptr->xtra3 - 1; @@ -1242,9 +1242,9 @@ return " case ART_GANDALF: { #ifdef JP -return "õº÷¡¢Á´´¶ÃΡ¢Á´´ÕÄê : 1000 ¥¿¡¼¥óËè"; +return "Ä´ºº¡¢Á´´¶ÃΡ¢Á´´ÕÄê : 100 ¥¿¡¼¥óËè"; #else - return "probing, detection and full id every 1000 turns"; + return "probing, detection and full id every 100 turns"; #endif } @@ -1856,6 +1856,7 @@ return " #endif } case ART_NIGHT: + case ART_HELL: { #ifdef JP return "°Å¹õ¤ÎÍò(250) : 150+d150 ¥¿¡¼¥óËè"; @@ -1864,6 +1865,24 @@ return " #endif } + case ART_SACRED_KNIGHTS: + { +#ifdef JP +return "*²ò¼ö*¤ÈÄ´ºº: ¤¤¤Ä¤Ç¤â"; +#else + return "Dispel Curse and Probing every turn"; +#endif + + } + case ART_CHARMED: + { +#ifdef JP +return "ËâÎÏÉü³è: 777 ¥¿¡¼¥óËè"; +#else + return "Restore Mana every 777 turns"; +#endif + + } } @@ -1877,7 +1896,7 @@ return " } - if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3) + if (item_tester_hook_smith(o_ptr)) { switch (o_ptr->xtra3 - 1) { @@ -1887,7 +1906,6 @@ return " #else return "resist acid every 50+d50 turns"; #endif - break; case ESSENCE_TMP_RES_ELEC: #ifdef JP @@ -1895,7 +1913,6 @@ return " #else return "resist elec every 50+d50 turns"; #endif - break; case ESSENCE_TMP_RES_FIRE: #ifdef JP @@ -1903,7 +1920,6 @@ return " #else return "resist fire every 50+d50 turns"; #endif - break; case ESSENCE_TMP_RES_COLD: #ifdef JP @@ -1911,7 +1927,6 @@ return " #else return "resist cold every 50+d50 turns"; #endif - break; case TR_IMPACT: #ifdef JP @@ -1919,7 +1934,6 @@ return " #else return "earthquake every 100+d100 turns"; #endif - break; } } @@ -2141,74 +2155,64 @@ return " { case EGO_AMU_IDENT: #ifdef JP -return "´ÕÄê : 10 ¥¿¡¼¥óËè"; + return "´ÕÄê : 10 ¥¿¡¼¥óËè"; #else return "identify every 10 turns"; #endif - break; case EGO_AMU_CHARM: #ifdef JP -return "¥â¥ó¥¹¥¿¡¼Ì¥Î» : 200 ¥¿¡¼¥óËè"; + return "¥â¥ó¥¹¥¿¡¼Ì¥Î» : 200 ¥¿¡¼¥óËè"; #else return "charm monster every 200 turns"; #endif - break; case EGO_AMU_JUMP: #ifdef JP -return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È : 10+d10 ¥¿¡¼¥óËè"; + return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È : 10+d10 ¥¿¡¼¥óËè"; #else return "blink every 10+d10 turns"; #endif - break; case EGO_AMU_TELEPORT: #ifdef JP -return "¥Æ¥ì¥Ý¡¼¥È : 50+d50 ¥¿¡¼¥óËè"; + return "¥Æ¥ì¥Ý¡¼¥È : 50+d50 ¥¿¡¼¥óËè"; #else return "teleport every 50+d50 turns"; #endif - break; case EGO_AMU_D_DOOR: #ifdef JP -return "¼¡¸µ¤ÎÈâ : 200 ¥¿¡¼¥óËè"; + return "¼¡¸µ¤ÎÈâ : 200 ¥¿¡¼¥óËè"; #else return "dimension door every 200 turns"; #endif - break; case EGO_AMU_RES_FIRE_: #ifdef JP -return "²Ð±ê¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; + return "²Ð±ê¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; #else return "resist fire every 50+d50 turns"; #endif - break; case EGO_AMU_RES_COLD_: #ifdef JP -return "Î䵤¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; + return "Î䵤¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; #else return "resist cold every 50+d50 turns"; #endif - break; case EGO_AMU_RES_ELEC_: #ifdef JP -return "ÅÅ·â¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; + return "ÅÅ·â¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; #else return "resist elec every 50+d50 turns"; #endif - break; case EGO_AMU_RES_ACID_: #ifdef JP -return "»À¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; + return "»À¤Ø¤ÎÂÑÀ­ : 50+d50¥¿¡¼¥óËè"; #else return "resist acid every 50+d50 turns"; #endif - break; case EGO_AMU_DETECTION: #ifdef JP -return "Á´´¶ÃÎ : 55+d55¥¿¡¼¥óËè"; + return "Á´´¶ÃÎ : 55+d55¥¿¡¼¥óËè"; #else return "detect all floor every 55+d55 turns"; #endif - break; } } } @@ -4234,13 +4238,13 @@ cptr describe_use(int i) switch (i) { #ifdef JP -case INVEN_RARM: p = p_ptr->ryoute ? " ξ¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : (left_hander ? " º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : " ±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë"); break; +case INVEN_RARM: p = p_ptr->ryoute ? "ξ¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : (left_hander ? "º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : "±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë"); break; #else case INVEN_RARM: p = "attacking monsters with"; break; #endif #ifdef JP -case INVEN_LARM: p = (left_hander ? " ±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : " º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë"); break; +case INVEN_LARM: p = (left_hander ? "±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : "º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë"); break; #else case INVEN_LARM: p = "wearing on your arm"; break; #endif @@ -4419,7 +4423,10 @@ void display_inven(void) byte attr = TERM_WHITE; char tmp_val[80]; char o_name[MAX_NLEN]; + int wid, hgt; + /* Get size */ + Term_get_size(&wid, &hgt); /* Find the "final" slot */ for (i = 0; i < INVEN_PACK; i++) @@ -4486,12 +4493,12 @@ void display_inven(void) sprintf(tmp_val, "%3d.%1d lb", wgt / 10, wgt % 10); #endif - Term_putstr(71, i, -1, TERM_WHITE, tmp_val); + prt(tmp_val, i, wid - 9); } } /* Erase the rest of the window */ - for (i = z; i < Term->hgt; i++) + for (i = z; i < hgt; i++) { /* Erase the line */ Term_erase(0, i, 255); @@ -4510,7 +4517,10 @@ void display_equip(void) byte attr = TERM_WHITE; char tmp_val[80]; char o_name[MAX_NLEN]; + int wid, hgt; + /* Get size */ + Term_get_size(&wid, &hgt); /* Display the equipment */ for (i = INVEN_RARM; i < INVEN_TOTAL; i++) @@ -4565,30 +4575,29 @@ void display_equip(void) /* Erase the rest of the line */ Term_erase(3+n, i - INVEN_RARM, 255); - /* Display the slot description (if needed) */ - if (show_labels) - { - Term_putstr(61, i - INVEN_RARM, -1, TERM_WHITE, "<--"); - Term_putstr(65, i - INVEN_RARM, -1, TERM_WHITE, mention_use(i)); - } - /* Display the weight (if needed) */ if (show_weights && o_ptr->weight) { int wgt = o_ptr->weight * o_ptr->number; - int col = (show_labels ? 52 : 71); #ifdef JP sprintf(tmp_val, "%3d.%1d kg", lbtokg1(wgt) , lbtokg2(wgt)); #else sprintf(tmp_val, "%3d.%1d lb", wgt / 10, wgt % 10); #endif - Term_putstr(col, i - INVEN_RARM, -1, TERM_WHITE, tmp_val); + prt(tmp_val, i - INVEN_RARM, wid - (show_labels ? 28 : 9)); + } + + /* Display the slot description (if needed) */ + if (show_labels) + { + Term_putstr(wid - 20, i - INVEN_RARM, -1, TERM_WHITE, " <-- "); + prt(mention_use(i), i - INVEN_RARM, wid - 15); } } /* Erase the rest of the window */ - for (i = INVEN_TOTAL - INVEN_RARM; i < Term->hgt; i++) + for (i = INVEN_TOTAL - INVEN_RARM; i < hgt; i++) { /* Clear that line */ Term_erase(0, i, 255); @@ -4596,7 +4605,6 @@ void display_equip(void) } - /* * Find the "first" inventory object with the given "tag". * @@ -4607,16 +4615,32 @@ void display_equip(void) * Also, the tag "@xn" will work as well, where "n" is a any tag-char, * and "x" is the "current" command_cmd code. */ -static int get_tag(int *cp, char tag) +static bool get_tag(int *cp, char tag, int mode) { - int i; + int i, start, end; cptr s; + /* Extract index from mode */ + switch (mode) + { + case USE_EQUIP: + start = INVEN_RARM; + end = INVEN_TOTAL - 1; + break; + + case USE_INVEN: + start = 0; + end = INVEN_PACK - 1; + break; + + default: + return FALSE; + } /**** Find a tag in the form of {@x#} (allow alphabet tag) ***/ - /* Check every object */ - for (i = 0; i < INVEN_TOTAL; ++i) + /* Check every inventory object */ + for (i = start; i <= end; i++) { object_type *o_ptr = &inventory[i]; @@ -4630,7 +4654,7 @@ static int get_tag(int *cp, char tag) if (!item_tester_okay(o_ptr)) continue; /* Find a '@' */ - s = strchr(quark_str(o_ptr->inscription), '@'); + s = my_strchr(quark_str(o_ptr->inscription), '@'); /* Process all tags */ while (s) @@ -4646,7 +4670,7 @@ static int get_tag(int *cp, char tag) } /* Find another '@' */ - s = strchr(s + 1, '@'); + s = my_strchr(s + 1, '@'); } } @@ -4661,7 +4685,7 @@ static int get_tag(int *cp, char tag) } /* Check every object */ - for (i = 0; i < INVEN_TOTAL; ++i) + for (i = start; i <= end; i++) { object_type *o_ptr = &inventory[i]; @@ -4675,7 +4699,7 @@ static int get_tag(int *cp, char tag) if (!item_tester_okay(o_ptr)) continue; /* Find a '@' */ - s = strchr(quark_str(o_ptr->inscription), '@'); + s = my_strchr(quark_str(o_ptr->inscription), '@'); /* Process all tags */ while (s) @@ -4691,7 +4715,7 @@ static int get_tag(int *cp, char tag) } /* Find another '@' */ - s = strchr(s + 1, '@'); + s = my_strchr(s + 1, '@'); } } @@ -4700,6 +4724,156 @@ static int get_tag(int *cp, char tag) } +/* + * Find the "first" floor object with the given "tag". + * + * A "tag" is a numeral "n" appearing as "@n" anywhere in the + * inscription of an object. Alphabetical characters don't work as a + * tag in this form. + * + * Also, the tag "@xn" will work as well, where "n" is a any tag-char, + * and "x" is the "current" command_cmd code. + */ +static bool get_tag_floor(int *cp, char tag, int floor_list[], int floor_num) +{ + int i; + cptr s; + + /**** Find a tag in the form of {@x#} (allow alphabet tag) ***/ + + /* Check every object in the grid */ + for (i = 0; i < floor_num && i < 23; i++) + { + object_type *o_ptr = &o_list[floor_list[i]]; + + /* Skip empty inscriptions */ + if (!o_ptr->inscription) continue; + + /* Find a '@' */ + s = my_strchr(quark_str(o_ptr->inscription), '@'); + + /* Process all tags */ + while (s) + { + /* Check the special tags */ + if ((s[1] == command_cmd) && (s[2] == tag)) + { + /* Save the actual floor object ID */ + *cp = i; + + /* Success */ + return (TRUE); + } + + /* Find another '@' */ + s = my_strchr(s + 1, '@'); + } + } + + + /**** Find a tag in the form of {@#} (allows only numerals) ***/ + + /* Don't allow {@#} with '#' being alphabet */ + if (tag < '0' || '9' < tag) + { + /* No such tag */ + return FALSE; + } + + /* Check every object in the grid */ + for (i = 0; i < floor_num && i < 23; i++) + { + object_type *o_ptr = &o_list[floor_list[i]]; + + /* Skip empty inscriptions */ + if (!o_ptr->inscription) continue; + + /* Find a '@' */ + s = my_strchr(quark_str(o_ptr->inscription), '@'); + + /* Process all tags */ + while (s) + { + /* Check the normal tags */ + if (s[1] == tag) + { + /* Save the floor object ID */ + *cp = i; + + /* Success */ + return (TRUE); + } + + /* Find another '@' */ + s = my_strchr(s + 1, '@'); + } + } + + /* No such tag */ + return (FALSE); +} + + +/* + * Move around label characters with correspond tags + */ +static void prepare_label_string(char *label, int mode) +{ + cptr alphabet_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int offset = (mode == USE_EQUIP) ? INVEN_RARM : 0; + int i; + + /* Prepare normal labels */ + strcpy(label, alphabet_chars); + + /* Move each label */ + for (i = 0; i < 52; i++) + { + int index; + char c = alphabet_chars[i]; + + /* Find a tag with this label */ + if (get_tag(&index, c, mode)) + { + /* Delete the overwritten label */ + if (label[i] == c) label[i] = ' '; + + /* Move the label to the place of corresponding tag */ + label[index - offset] = c; + } + } +} + + +/* + * Move around label characters with correspond tags (floor version) + */ +static void prepare_label_string_floor(char *label, int floor_list[], int floor_num) +{ + cptr alphabet_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + + /* Prepare normal labels */ + strcpy(label, alphabet_chars); + + /* Move each label */ + for (i = 0; i < 52; i++) + { + int index; + char c = alphabet_chars[i]; + + /* Find a tag with this label */ + if (get_tag_floor(&index, c, floor_list, floor_num)) + { + /* Delete the overwritten label */ + if (label[i] == c) label[i] = ' '; + + /* Move the label to the place of corresponding tag */ + label[index] = c; + } + } +} + /* * Display the inventory. @@ -4708,7 +4882,6 @@ static int get_tag(int *cp, char tag) */ int show_inven(int target_item) { - cptr alphabet_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i, j, k, l, z = 0; int col, cur_col, len; object_type *o_ptr; @@ -4719,9 +4892,7 @@ int show_inven(int target_item) char out_desc[23][MAX_NLEN]; int target_item_label = 0; int wid, hgt; - char inven_spellbook_label[52+1]; - - /* See cmd5.c */ + char inven_label[52 + 1]; /* Starting column */ col = command_gap; @@ -4745,28 +4916,7 @@ int show_inven(int target_item) z = i + 1; } - /*** Move around label characters with correspond tags ***/ - - /* Prepare normal labels */ - strcpy(inven_spellbook_label, alphabet_chars); - - /* Move each label */ - for (i = 0; i < 52; i++) - { - int index; - char c = alphabet_chars[i]; - - /* Find a tag with this label */ - if (get_tag(&index, c)) - { - /* Delete the over writen label */ - if (inven_spellbook_label[i] == c) - inven_spellbook_label[i] = ' '; - - /* Move the label to the place of correspond tag */ - inven_spellbook_label[index] = c; - } - } + prepare_label_string(inven_label, USE_INVEN); /* Display the inventory */ for (k = 0, i = 0; i < z; i++) @@ -4841,7 +4991,8 @@ int show_inven(int target_item) } else if (i <= INVEN_PACK) { - sprintf(tmp_val, "%c)", inven_spellbook_label[i]); + /* Prepare an index --(-- */ + sprintf(tmp_val, "%c)", inven_label[i]); } else { @@ -4864,13 +5015,9 @@ int show_inven(int target_item) if (a & 0x80) a |= 0x40; #endif - Term_draw(cur_col, j + 1, a, c); - if (use_bigtile) - { - cur_col++; - if (a & 0x80) - Term_draw(cur_col, j + 1, 255, -1); - } + Term_queue_bigchar(cur_col, j + 1, a, c, 0, 0); + if (use_bigtile) cur_col++; + cur_col += 2; } @@ -4888,7 +5035,7 @@ int show_inven(int target_item) (void)sprintf(tmp_val, "%3d.%1d lb", wgt / 10, wgt % 10); #endif - put_str(tmp_val, j + 1, wid - 9); + prt(tmp_val, j + 1, wid - 9); } } @@ -4918,7 +5065,7 @@ int show_equip(int target_item) char out_desc[23][MAX_NLEN]; int target_item_label = 0; int wid, hgt; - + char equip_label[52 + 1]; /* Starting column */ col = command_gap; @@ -4998,6 +5145,7 @@ int show_equip(int target_item) col = (len > wid - 4) ? 0 : (wid - len - 1); #endif + prepare_label_string(equip_label, USE_EQUIP); /* Output each entry */ for (j = 0; j < k; j++) @@ -5024,9 +5172,16 @@ int show_equip(int target_item) } else strcpy(tmp_val, " "); } - else + else if (i >= INVEN_RARM) + { + /* Prepare an index --(-- */ + sprintf(tmp_val, "%c)", equip_label[i - INVEN_RARM]); + } + else /* Paranoia */ + { /* Prepare an index --(-- */ sprintf(tmp_val, "%c)", index_to_label(i)); + } /* Clear the line with the (possibly indented) index */ put_str(tmp_val, j+1, col); @@ -5043,13 +5198,9 @@ int show_equip(int target_item) if (a & 0x80) a |= 0x40; #endif - Term_draw(cur_col, j + 1, a, c); - if (use_bigtile) - { - cur_col++; - if (a & 0x80) - Term_draw(cur_col, j + 1, 255, -1); - } + Term_queue_bigchar(cur_col, j + 1, a, c, 0, 0); + if (use_bigtile) cur_col++; + cur_col += 2; } @@ -5090,7 +5241,7 @@ int show_equip(int target_item) (void)sprintf(tmp_val, "%3d.%d lb", wgt / 10, wgt % 10); #endif - put_str(tmp_val, j+1, wid - 9); + prt(tmp_val, j + 1, wid - 9); } } @@ -5196,6 +5347,8 @@ static bool get_item_allow(int item) object_type *o_ptr; + if (!command_cmd) return TRUE; /* command_cmd is no longer effective */ + /* Inventory */ if (item >= 0) { @@ -5212,7 +5365,7 @@ static bool get_item_allow(int item) if (!o_ptr->inscription) return (TRUE); /* Find a '!' */ - s = strchr(quark_str(o_ptr->inscription), '!'); + s = my_strchr(quark_str(o_ptr->inscription), '!'); /* Process preventions */ while (s) @@ -5230,7 +5383,7 @@ if (!verify(" } /* Find another '!' */ - s = strchr(s + 1, '!'); + s = my_strchr(s + 1, '!'); } /* Allow it */ @@ -5329,7 +5482,7 @@ bool get_item(int *cp, cptr pmt, cptr str, int mode) { s16b this_o_idx, next_o_idx = 0; - char n1, n2, which = ' '; + char which = ' '; int j, k, i1, i2, e1, e2; @@ -5366,13 +5519,17 @@ bool get_item(int *cp, cptr pmt, cptr str, int mode) /* Get the item index */ if (repeat_pull(cp)) { - if (*cp == INVEN_FORCE) { /* the_force */ - item_tester_tval = 0; - item_tester_hook = NULL; - return (TRUE); - } else + /* the_force */ + if (*cp == INVEN_FORCE) + { + item_tester_tval = 0; + item_tester_hook = NULL; + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + return (TRUE); + } + /* Floor item? */ - if (*cp < 0) + else if (*cp < 0) { object_type *o_ptr; @@ -5391,6 +5548,8 @@ bool get_item(int *cp, cptr pmt, cptr str, int mode) /* Forget the item_tester_hook restriction */ item_tester_hook = NULL; + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + /* Success */ return (TRUE); } @@ -5405,6 +5564,8 @@ bool get_item(int *cp, cptr pmt, cptr str, int mode) /* Forget the item_tester_hook restriction */ item_tester_hook = NULL; + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + /* Success */ return (TRUE); } @@ -5507,7 +5668,6 @@ bool get_item(int *cp, cptr pmt, cptr str, int mode) { /* Hack -- Start on equipment if requested */ if (command_see && command_wrk && equip) - { command_wrk = TRUE; } @@ -5551,49 +5711,43 @@ bool get_item(int *cp, cptr pmt, cptr str, int mode) int get_item_label = 0; /* Show choices */ - if (show_choices) + int ni = 0; + int ne = 0; + + /* Scan windows */ + for (j = 0; j < 8; j++) { - int ni = 0; - int ne = 0; + /* Unused */ + if (!angband_term[j]) continue; - /* Scan windows */ - for (j = 0; j < 8; j++) - { - /* Unused */ - if (!angband_term[j]) continue; + /* Count windows displaying inven */ + if (window_flag[j] & (PW_INVEN)) ni++; - /* Count windows displaying inven */ - if (window_flag[j] & (PW_INVEN)) ni++; + /* Count windows displaying equip */ + if (window_flag[j] & (PW_EQUIP)) ne++; + } - /* Count windows displaying equip */ - if (window_flag[j] & (PW_EQUIP)) ne++; - } + /* Toggle if needed */ + if ((command_wrk && ni && !ne) || + (!command_wrk && !ni && ne)) + { + /* Toggle */ + toggle_inven_equip(); - /* Toggle if needed */ - if ((command_wrk && ni && !ne) || - (!command_wrk && !ni && ne)) - { - /* Toggle */ - toggle_inven_equip(); + /* Track toggles */ + toggle = !toggle; + } - /* Track toggles */ - toggle = !toggle; - } + /* Update */ + p_ptr->window |= (PW_INVEN | PW_EQUIP); - /* Update */ - p_ptr->window |= (PW_INVEN | PW_EQUIP); + /* Redraw windows */ + window_stuff(); - /* Redraw windows */ - window_stuff(); - } /* Inventory screen */ if (!command_wrk) { - /* Extract the legal requests */ - n1 = I2A(i1); - n2 = I2A(i2); - /* Redraw if needed */ if (command_see) get_item_label = show_inven(menu_line); } @@ -5601,10 +5755,6 @@ bool get_item(int *cp, cptr pmt, cptr str, int mode) /* Equipment screen */ else { - /* Extract the legal requests */ - n1 = I2A(e1 - INVEN_RARM); - n2 = I2A(e2 - INVEN_RARM); - /* Redraw if needed */ if (command_see) get_item_label = show_equip(menu_line); } @@ -5949,7 +6099,7 @@ if (other_query_flag && !verify(" case '7': case '8': case '9': { /* Look up the tag */ - if (!get_tag(&k, which)) + if (!get_tag(&k, which, command_wrk ? USE_EQUIP : USE_INVEN)) { bell(); break; @@ -5986,7 +6136,6 @@ if (other_query_flag && !verify(" #if 0 case '\n': case '\r': -#endif { /* Choose "default" inventory item */ if (!command_wrk) @@ -6020,6 +6169,7 @@ if (other_query_flag && !verify(" done = TRUE; break; } +#endif case 'w': { @@ -6039,19 +6189,19 @@ if (other_query_flag && !verify(" bool not_found = FALSE; /* Look up the alphabetical tag */ - if (!get_tag(&k, which)) + if (!get_tag(&k, which, command_wrk ? USE_EQUIP : USE_INVEN)) { not_found = TRUE; } /* Hack -- Validate the item */ - if ((k < INVEN_RARM) ? !inven : !equip) + else if ((k < INVEN_RARM) ? !inven : !equip) { not_found = TRUE; } /* Validate the item */ - if (!get_item_okay(k)) + else if (!get_item_okay(k)) { not_found = TRUE; } @@ -6142,18 +6292,15 @@ if (ver && !verify(" item_tester_hook = NULL; - /* Clean up */ - if (show_choices) - { - /* Toggle again if needed */ - if (toggle) toggle_inven_equip(); + /* Clean up 'show choices' */ + /* Toggle again if needed */ + if (toggle) toggle_inven_equip(); - /* Update */ - p_ptr->window |= (PW_INVEN | PW_EQUIP); + /* Update */ + p_ptr->window |= (PW_INVEN | PW_EQUIP); - /* Window stuff */ - window_stuff(); - } + /* Window stuff */ + window_stuff(); /* Clear the prompt line */ @@ -6162,10 +6309,15 @@ if (ver && !verify(" /* Warning if needed */ if (oops && str) msg_print(str); + if (item) + { #ifdef ALLOW_REPEAT - if (item) repeat_push(*cp); + repeat_push(*cp); #endif /* ALLOW_REPEAT */ + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + } + /* Result */ return (item); } @@ -6224,6 +6376,7 @@ int scan_floor(int *items, int y, int x, int mode) return num; } + /* * Display a list of the items on the floor at the given location. */ @@ -6245,6 +6398,7 @@ int show_floor(int target_item, int y, int x, int *min_width) int floor_list[23], floor_num; int wid, hgt; + char floor_label[52 + 1]; /* Get size */ Term_get_size(&wid, &hgt); @@ -6256,7 +6410,7 @@ int show_floor(int target_item, int y, int x, int *min_width) /* Scan for objects in the grid, using item_tester_okay() */ floor_num = scan_floor(floor_list, y, x, 0x01); - /* Display the inventory */ + /* Display the floor objects */ for (k = 0, i = 0; i < floor_num && i < 23; i++) { o_ptr = &o_list[floor_list[i]]; @@ -6292,6 +6446,8 @@ int show_floor(int target_item, int y, int x, int *min_width) /* Find the column to start in */ col = (len > wid - 4) ? 0 : (wid - len - 1); + prepare_label_string_floor(floor_label, floor_list, floor_num); + /* Output each entry */ for (j = 0; j < k; j++) { @@ -6318,8 +6474,10 @@ int show_floor(int target_item, int y, int x, int *min_width) else strcpy(tmp_val, " "); } else + { /* Prepare an index --(-- */ - sprintf(tmp_val, "%c)", index_to_label(j)); + sprintf(tmp_val, "%c)", floor_label[j]); + } /* Clear the line with the (possibly indented) index */ put_str(tmp_val, j + 1, col); @@ -6337,7 +6495,7 @@ int show_floor(int target_item, int y, int x, int *min_width) sprintf(tmp_val, "%3d.%1d lb", wgt / 10, wgt % 10); #endif - put_str(tmp_val, j + 1, wid - 9); + prt(tmp_val, j + 1, wid - 9); } } @@ -6388,13 +6546,17 @@ bool get_item_floor(int *cp, cptr pmt, cptr str, int mode) /* Get the item index */ if (repeat_pull(cp)) { - if (*cp == INVEN_FORCE) { /* the_force */ - item_tester_tval = 0; - item_tester_hook = NULL; - return (TRUE); - } else + /* the_force */ + if (*cp == INVEN_FORCE) + { + item_tester_tval = 0; + item_tester_hook = NULL; + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + return (TRUE); + } + /* Floor item? */ - if (*cp < 0) + else if (*cp < 0) { object_type *o_ptr; @@ -6413,6 +6575,8 @@ bool get_item_floor(int *cp, cptr pmt, cptr str, int mode) /* Forget the item_tester_hook restriction */ item_tester_hook = NULL; + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + /* Success */ return (TRUE); } @@ -6427,6 +6591,8 @@ bool get_item_floor(int *cp, cptr pmt, cptr str, int mode) /* Forget the item_tester_hook restriction */ item_tester_hook = NULL; + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + /* Success */ return (TRUE); } @@ -6570,41 +6736,38 @@ bool get_item_floor(int *cp, cptr pmt, cptr str, int mode) int get_item_label = 0; /* Show choices */ - if (show_choices) - { - int ni = 0; - int ne = 0; + int ni = 0; + int ne = 0; - /* Scan windows */ - for (j = 0; j < 8; j++) - { - /* Unused */ - if (!angband_term[j]) continue; + /* Scan windows */ + for (j = 0; j < 8; j++) + { + /* Unused */ + if (!angband_term[j]) continue; - /* Count windows displaying inven */ - if (window_flag[j] & (PW_INVEN)) ni++; + /* Count windows displaying inven */ + if (window_flag[j] & (PW_INVEN)) ni++; - /* Count windows displaying equip */ - if (window_flag[j] & (PW_EQUIP)) ne++; - } + /* Count windows displaying equip */ + if (window_flag[j] & (PW_EQUIP)) ne++; + } - /* Toggle if needed */ - if ((command_wrk == (USE_EQUIP) && ni && !ne) || - (command_wrk == (USE_INVEN) && !ni && ne)) - { - /* Toggle */ - toggle_inven_equip(); + /* Toggle if needed */ + if ((command_wrk == (USE_EQUIP) && ni && !ne) || + (command_wrk == (USE_INVEN) && !ni && ne)) + { + /* Toggle */ + toggle_inven_equip(); - /* Track toggles */ - toggle = !toggle; - } + /* Track toggles */ + toggle = !toggle; + } - /* Update */ - p_ptr->window |= (PW_INVEN | PW_EQUIP); + /* Update */ + p_ptr->window |= (PW_INVEN | PW_EQUIP); - /* Redraw windows */ - window_stuff(); - } + /* Redraw windows */ + window_stuff(); /* Inventory screen */ if (command_wrk == (USE_INVEN)) @@ -7295,25 +7458,42 @@ if (!command_see && !use_menu) strcat(out_val, " '*' case '4': case '5': case '6': case '7': case '8': case '9': { - /* Look up the tag */ - if (!get_tag(&k, which)) + if (command_wrk != USE_FLOOR) { - bell(); - break; - } + /* Look up the tag */ + if (!get_tag(&k, which, command_wrk)) + { + bell(); + break; + } - /* Hack -- Validate the item */ - if ((k < INVEN_RARM) ? !inven : !equip) - { - bell(); - break; - } + /* Hack -- Validate the item */ + if ((k < INVEN_RARM) ? !inven : !equip) + { + bell(); + break; + } - /* Validate the item */ - if (!get_item_okay(k)) + /* Validate the item */ + if (!get_item_okay(k)) + { + bell(); + break; + } + } + else { - bell(); - break; + /* Look up the alphabetical tag */ + if (get_tag_floor(&k, which, floor_list, floor_num)) + { + /* Special index */ + k = 0 - floor_list[k]; + } + else + { + bell(); + break; + } } /* Allow player to "refuse" certain actions */ @@ -7399,38 +7579,59 @@ if (!command_see && !use_menu) strcat(out_val, " '*' done = TRUE; break; } + + /* Fall through */ } default: { int ver; - bool not_found = FALSE; - /* Look up the alphabetical tag */ - if (!get_tag(&k, which)) + if (command_wrk != USE_FLOOR) { - not_found = TRUE; - } + bool not_found = FALSE; - /* Hack -- Validate the item */ - if ((k < INVEN_RARM) ? !inven : !equip) - { - not_found = TRUE; - } + /* Look up the alphabetical tag */ + if (!get_tag(&k, which, command_wrk)) + { + not_found = TRUE; + } - /* Validate the item */ - if (!get_item_okay(k)) - { - not_found = TRUE; - } + /* Hack -- Validate the item */ + else if ((k < INVEN_RARM) ? !inven : !equip) + { + not_found = TRUE; + } - if (!not_found) + /* Validate the item */ + else if (!get_item_okay(k)) + { + not_found = TRUE; + } + + if (!not_found) + { + /* Accept that choice */ + (*cp) = k; + item = TRUE; + done = TRUE; + break; + } + } + else { - /* Accept that choice */ - (*cp) = k; - item = TRUE; - done = TRUE; - break; + /* Look up the alphabetical tag */ + if (get_tag_floor(&k, which, floor_list, floor_num)) + { + /* Special index */ + k = 0 - floor_list[k]; + + /* Accept that choice */ + (*cp) = k; + item = TRUE; + done = TRUE; + break; + } } /* Extract "query" setting */ @@ -7523,18 +7724,15 @@ if (ver && !verify(" item_tester_hook = NULL; - /* Clean up */ - if (show_choices) - { - /* Toggle again if needed */ - if (toggle) toggle_inven_equip(); + /* Clean up 'show choices' */ + /* Toggle again if needed */ + if (toggle) toggle_inven_equip(); - /* Update */ - p_ptr->window |= (PW_INVEN | PW_EQUIP); + /* Update */ + p_ptr->window |= (PW_INVEN | PW_EQUIP); - /* Window stuff */ - window_stuff(); - } + /* Window stuff */ + window_stuff(); /* Clear the prompt line */ @@ -7543,10 +7741,15 @@ if (ver && !verify(" /* Warning if needed */ if (oops && str) msg_print(str); + if (item) + { #ifdef ALLOW_REPEAT - if (item) repeat_push(*cp); + repeat_push(*cp); #endif /* ALLOW_REPEAT */ + command_cmd = 0; /* Hack -- command_cmd is no longer effective */ + } + /* Result */ return (item); } @@ -7556,8 +7759,6 @@ static bool py_pickup_floor_aux(void) { s16b this_o_idx; - object_type *o_ptr; - cptr q, s; int item; @@ -7583,9 +7784,6 @@ static bool py_pickup_floor_aux(void) return (FALSE); } - /* Access the object */ - o_ptr = &o_list[this_o_idx]; - /* Pick up the object */ py_pickup_aux(this_o_idx);