X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcmd3.c;h=42e7e3a2ad063645f96b3d32cd0fb9a5af932f11;hb=84c58762171463d0e15000104057a55dff7b7158;hp=24b1b670d707c2eefa9498d54e19e17c6e4a4d92;hpb=3e4319de33500689dee9dec2bd11dd62df554cc5;p=hengband%2Fhengband.git diff --git a/src/cmd3.c b/src/cmd3.c index 24b1b670d..42e7e3a2a 100644 --- a/src/cmd3.c +++ b/src/cmd3.c @@ -47,12 +47,11 @@ void do_cmd_inven(void) #ifdef JP sprintf(out_val, "»ý¤Áʪ¡§ ¹ç·× %3d.%1d kg (¸Â³¦¤Î%ld%%) ¥³¥Þ¥ó¥É: ", lbtokg1(p_ptr->total_weight) , lbtokg2(p_ptr->total_weight) , - (p_ptr->total_weight * 100) / ((adj_str_wgt[p_ptr->stat_ind[A_STR]] * (p_ptr->pclass == CLASS_BERSERKER ? 150 : 100)) -/ 2)); + (p_ptr->total_weight * 100) / weight_limit()); #else sprintf(out_val, "Inventory: carrying %d.%d pounds (%ld%% of capacity). Command: ", (int)(p_ptr->total_weight / 10), (int)(p_ptr->total_weight % 10), - (p_ptr->total_weight * 100) / ((adj_str_wgt[p_ptr->stat_ind[A_STR]] * (p_ptr->pclass == CLASS_BERSERKER ? 150 : 100)) / 2)); + (p_ptr->total_weight * 100) / weight_limit()); #endif @@ -122,12 +121,11 @@ void do_cmd_equip(void) #ifdef JP sprintf(out_val, "ÁõÈ÷¡§ ¹ç·× %3d.%1d kg (¸Â³¦¤Î%ld%%) ¥³¥Þ¥ó¥É: ", lbtokg1(p_ptr->total_weight) , lbtokg2(p_ptr->total_weight) , - (p_ptr->total_weight * 100) / ((adj_str_wgt[p_ptr->stat_ind[A_STR]] * (p_ptr->pclass == CLASS_BERSERKER ? 150 : 100)) -/ 2)); + (p_ptr->total_weight * 100) / weight_limit()); #else sprintf(out_val, "Equipment: carrying %d.%d pounds (%ld%% of capacity). Command: ", (int)(p_ptr->total_weight / 10), (int)(p_ptr->total_weight % 10), - (p_ptr->total_weight * 100) / ((adj_str_wgt[p_ptr->stat_ind[A_STR]] * (p_ptr->pclass == CLASS_BERSERKER ? 150 : 100)) / 2)); + (p_ptr->total_weight * 100) / weight_limit()); #endif @@ -201,6 +199,8 @@ static bool item_tester_hook_melee_weapon(object_type *o_ptr) } +bool select_ring_slot = FALSE; + /* * Wield or wear a single item from the pack or floor */ @@ -219,6 +219,8 @@ void do_cmd_wield(void) cptr q, s; + int need_switch_wielding = 0; + if (p_ptr->special_defense & KATA_MUSOU) { set_action(ACTION_NONE); @@ -260,6 +262,7 @@ void do_cmd_wield(void) case TV_CAPTURE: case TV_SHIELD: case TV_CARD: + /* Dual wielding */ if (buki_motteruka(INVEN_RARM) && buki_motteruka(INVEN_LARM)) { /* Restrict the choices */ @@ -276,27 +279,28 @@ void do_cmd_wield(void) #endif if (!get_item(&slot, q, s, (USE_EQUIP))) return; - if ((slot == INVEN_RARM) && !object_is_cursed(&inventory[INVEN_RARM])) - { - object_type *or_ptr = &inventory[INVEN_RARM]; - object_type *ol_ptr = &inventory[INVEN_LARM]; - object_type object_tmp; - object_type *otmp_ptr = &object_tmp; - char ol_name[MAX_NLEN]; + if (slot == INVEN_RARM) need_switch_wielding = INVEN_LARM; + } + + else if (buki_motteruka(INVEN_LARM)) slot = INVEN_RARM; - object_desc(ol_name, ol_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); + /* Both arms are already used by non-weapon */ + else if (inventory[INVEN_RARM].k_idx && !object_is_melee_weapon(&inventory[INVEN_RARM]) && + inventory[INVEN_LARM].k_idx && !object_is_melee_weapon(&inventory[INVEN_LARM])) + { + /* Restrict the choices */ + item_tester_hook = item_tester_hook_mochikae; - object_copy(otmp_ptr, ol_ptr); - object_copy(ol_ptr, or_ptr); - object_copy(or_ptr, otmp_ptr); + /* Choose a hand */ #ifdef JP - msg_format("%s¤ò%s¤Ë¹½¤¨¤Ê¤ª¤·¤¿¡£", ol_name, left_hander ? "º¸¼ê" : "±¦¼ê"); + q = "¤É¤Á¤é¤Î¼ê¤ËÁõÈ÷¤·¤Þ¤¹¤«?"; + s = "¤ª¤Ã¤È¡£"; #else - msg_format("You wield %s at %s hand.", ol_name, left_hander ? "left" : "right"); + q = "Equip which hand? "; + s = "Oops."; #endif - slot = INVEN_LARM; - } + if (!get_item(&slot, q, s, (USE_EQUIP))) return; } break; @@ -315,6 +319,15 @@ void do_cmd_wield(void) #endif } + else if (!inventory[INVEN_RARM].k_idx && buki_motteruka(INVEN_LARM)) + { +#ifdef JP + if (!get_check("ÆóÅáή¤ÇÀ襤¤Þ¤¹¤«¡©")) slot = INVEN_LARM; +#else + if (!get_check("Dual wielding? ")) slot = INVEN_LARM; +#endif + } + /* Both arms are already used */ else if (inventory[INVEN_LARM].k_idx && inventory[INVEN_RARM].k_idx) { @@ -331,28 +344,47 @@ void do_cmd_wield(void) #endif if (!get_item(&slot, q, s, (USE_EQUIP))) return; + if ((slot == INVEN_LARM) && !buki_motteruka(INVEN_RARM)) + need_switch_wielding = INVEN_RARM; } break; /* Rings */ case TV_RING: + /* Choose a ring slot */ if (inventory[INVEN_LEFT].k_idx && inventory[INVEN_RIGHT].k_idx) { - /* Restrict the choices */ - item_tester_tval = TV_RING; - item_tester_no_ryoute = TRUE; - - /* Choose a ring from the equipment only */ #ifdef JP q = "¤É¤Á¤é¤Î»ØÎؤȼè¤êÂؤ¨¤Þ¤¹¤«?"; - s = "¤ª¤Ã¤È¡£"; #else q = "Replace which ring? "; - s = "Oops."; #endif + } + else + { +#ifdef JP + q = "¤É¤Á¤é¤Î¼ê¤ËÁõÈ÷¤·¤Þ¤¹¤«?"; +#else + q = "Equip which hand? "; +#endif + } - if (!get_item(&slot, q, s, (USE_EQUIP))) return; +#ifdef JP + s = "¤ª¤Ã¤È¡£"; +#else + s = "Oops."; +#endif + + /* Restrict the choices */ + select_ring_slot = TRUE; + item_tester_no_ryoute = TRUE; + + if (!get_item(&slot, q, s, (USE_EQUIP))) + { + select_ring_slot = FALSE; + return; } + select_ring_slot = FALSE; break; } @@ -409,6 +441,28 @@ sprintf(dummy, "%s if (!get_check(dummy)) return; } + if (need_switch_wielding && !object_is_cursed(&inventory[need_switch_wielding])) + { + object_type *slot_o_ptr = &inventory[slot]; + object_type *switch_o_ptr = &inventory[need_switch_wielding]; + object_type object_tmp; + object_type *otmp_ptr = &object_tmp; + char switch_name[MAX_NLEN]; + + object_desc(switch_name, switch_o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); + + object_copy(otmp_ptr, switch_o_ptr); + object_copy(switch_o_ptr, slot_o_ptr); + object_copy(slot_o_ptr, otmp_ptr); +#ifdef JP + msg_format("%s¤ò%s¤Ë¹½¤¨¤Ê¤ª¤·¤¿¡£", switch_name, (slot == INVEN_RARM) ? (left_hander ? "º¸¼ê" : "±¦¼ê") : (left_hander ? "±¦¼ê" : "º¸¼ê")); +#else + msg_format("You wield %s at %s hand.", switch_name, (slot == INVEN_RARM) ? (left_hander ? "left" : "right") : (left_hander ? "right" : "left")); +#endif + + slot = need_switch_wielding; + } + /* Check if completed a quest */ for (i = 0; i < max_quests; i++) { @@ -482,30 +536,31 @@ msg_print(" /* Increment the equip counter by hand */ equip_cnt++; +#ifdef JP +#define STR_WIELD_RARM "%s(%c)¤ò±¦¼ê¤ËÁõÈ÷¤·¤¿¡£" +#define STR_WIELD_LARM "%s(%c)¤òº¸¼ê¤ËÁõÈ÷¤·¤¿¡£" +#define STR_WIELD_ARMS "%s(%c)¤òξ¼ê¤Ç¹½¤¨¤¿¡£" +#else +#define STR_WIELD_RARM "You are wielding %s (%c) in your right hand." +#define STR_WIELD_LARM "You are wielding %s (%c) in your left hand." +#define STR_WIELD_ARMS "You are wielding %s (%c) with both hands." +#endif + /* Where is the item now */ switch (slot) { case INVEN_RARM: - if ((o_ptr->tval != TV_SHIELD) && (o_ptr->tval != TV_CAPTURE) && (o_ptr->tval != TV_CARD) && (empty_hands(FALSE) & EMPTY_HAND_LARM) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM)) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE))) -#ifdef JP - act = "%s(%c)¤òξ¼ê¤Ç¹½¤¨¤¿¡£"; -#else - act = "You are wielding %s (%c) with both hands."; -#endif + if (object_allow_two_hands_wielding(o_ptr) && (empty_hands(FALSE) == EMPTY_HAND_LARM) && CAN_TWO_HANDS_WIELDING()) + act = STR_WIELD_ARMS; else -#ifdef JP - act = (left_hander ? "%s(%c)¤òº¸¼ê¤ËÁõÈ÷¤·¤¿¡£" : "%s(%c)¤ò±¦¼ê¤ËÁõÈ÷¤·¤¿¡£"); -#else - act = (left_hander ? "You are wielding %s (%c) on left hand." : "You are wielding %s (%c) on right hand."); -#endif + act = (left_hander ? STR_WIELD_LARM : STR_WIELD_RARM); break; case INVEN_LARM: -#ifdef JP - act = (left_hander ? "%s(%c)¤ò±¦¼ê¤ËÁõÈ÷¤·¤¿¡£" : "%s(%c)¤òº¸¼ê¤ËÁõÈ÷¤·¤¿¡£"); -#else - act = (left_hander ? "You are wielding %s (%c) on right hand." : "You are wielding %s (%c) on left hand."); -#endif + if (object_allow_two_hands_wielding(o_ptr) && (empty_hands(FALSE) == EMPTY_HAND_RARM) && CAN_TWO_HANDS_WIELDING()) + act = STR_WIELD_ARMS; + else + act = (left_hander ? STR_WIELD_RARM : STR_WIELD_LARM); break; case INVEN_BOW: @@ -584,53 +639,68 @@ msg_print(" void kamaenaoshi(int item) { - object_type *o_ptr, *o2_ptr; + object_type *o_ptr, *new_o_ptr; char o_name[MAX_NLEN]; - if ((item == INVEN_RARM) && buki_motteruka(INVEN_LARM)) + if (item == INVEN_RARM) { - o_ptr = &inventory[INVEN_RARM]; - o2_ptr = &inventory[INVEN_LARM]; - object_copy(o_ptr, o2_ptr); - p_ptr->total_weight += o2_ptr->weight; - inven_item_increase(INVEN_LARM,-1); - inven_item_optimize(INVEN_LARM); - object_desc(o_name, o_ptr, 0); - if (((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM)) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE))) + if (buki_motteruka(INVEN_LARM)) + { + o_ptr = &inventory[INVEN_LARM]; + object_desc(o_name, o_ptr, 0); + + if (!object_is_cursed(o_ptr)) + { + new_o_ptr = &inventory[INVEN_RARM]; + object_copy(new_o_ptr, o_ptr); + p_ptr->total_weight += o_ptr->weight; + inven_item_increase(INVEN_LARM, -((int)o_ptr->number)); + inven_item_optimize(INVEN_LARM); + if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING()) #ifdef JP - msg_format("%s¤òξ¼ê¤Ç¹½¤¨¤¿¡£", o_name ); + msg_format("%s¤òξ¼ê¤Ç¹½¤¨¤¿¡£", o_name); #else - msg_format("You are wielding %s with both hands.", o_name ); + msg_format("You are wielding %s with both hands.", o_name); #endif - else + else +#ifdef JP + msg_format("%s¤ò%s¤Ç¹½¤¨¤¿¡£", o_name, (left_hander ? "º¸¼ê" : "±¦¼ê")); +#else + msg_format("You are wielding %s in your %s hand.", o_name, (left_hander ? "left":"right")); +#endif + } + else + { + if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING()) #ifdef JP - msg_format("%s¤ò%s¤Ç¹½¤¨¤¿¡£", o_name, (left_hander ? "º¸¼ê" : "±¦¼ê")); + msg_format("%s¤òξ¼ê¤Ç¹½¤¨¤¿¡£", o_name); #else - msg_format("You are wielding %s on %s hand.", o_name, (left_hander ? "left":"right") ); + msg_format("You are wielding %s with both hands.", o_name); #endif + } + } } else if (item == INVEN_LARM) { + o_ptr = &inventory[INVEN_RARM]; + if (o_ptr->k_idx) object_desc(o_name, o_ptr, 0); + if (buki_motteruka(INVEN_RARM)) { - o_ptr = &inventory[INVEN_RARM]; - object_desc(o_name, o_ptr, 0); - if (((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM)) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE))) + if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING()) #ifdef JP - msg_format("%s¤òξ¼ê¤Ç¹½¤¨¤¿¡£", o_name ); + msg_format("%s¤òξ¼ê¤Ç¹½¤¨¤¿¡£", o_name); #else - msg_format("You are wielding %s with both hands.", o_name ); + msg_format("You are wielding %s with both hands.", o_name); #endif } - else if (!(empty_hands(FALSE) & EMPTY_HAND_RARM)) + else if (!(empty_hands(FALSE) & EMPTY_HAND_RARM) && !object_is_cursed(o_ptr)) { - o_ptr = &inventory[INVEN_LARM]; - o2_ptr = &inventory[INVEN_RARM]; - object_copy(o_ptr, o2_ptr); - p_ptr->total_weight += o2_ptr->weight; - inven_item_increase(INVEN_RARM,-1); + new_o_ptr = &inventory[INVEN_LARM]; + object_copy(new_o_ptr, o_ptr); + p_ptr->total_weight += o_ptr->weight; + inven_item_increase(INVEN_RARM, -((int)o_ptr->number)); inven_item_optimize(INVEN_RARM); - object_desc(o_name, o_ptr, 0); #ifdef JP msg_format("%s¤ò»ý¤ÁÂؤ¨¤¿¡£", o_name); #else @@ -826,9 +896,11 @@ void do_cmd_drop(void) /* Drop (some of) the item */ inven_drop(item, amt); - if ((item == INVEN_RARM) || (item == INVEN_LARM)) kamaenaoshi(item); - - if (item >= INVEN_RARM) calc_android_exp(); + if (item >= INVEN_RARM) + { + kamaenaoshi(item); + calc_android_exp(); + } p_ptr->redraw |= (PR_EQUIPPY); } @@ -842,7 +914,7 @@ static bool high_level_book(object_type *o_ptr) (o_ptr->tval == TV_CHAOS_BOOK) || (o_ptr->tval == TV_DEATH_BOOK) || (o_ptr->tval == TV_TRUMP_BOOK) || - (o_ptr->tval == TV_ENCHANT_BOOK) || + (o_ptr->tval == TV_CRAFT_BOOK) || (o_ptr->tval == TV_DAEMON_BOOK) || (o_ptr->tval == TV_CRUSADE_BOOK) || (o_ptr->tval == TV_MUSIC_BOOK)) @@ -1163,9 +1235,9 @@ void do_cmd_observe(void) /* Describe it fully */ #ifdef JP - if (!screen_object(o_ptr, TRUE)) msg_print("ÆäËÊѤï¤Ã¤¿¤È¤³¤í¤Ï¤Ê¤¤¤è¤¦¤À¡£"); + if (!screen_object(o_ptr, SCROBJ_FORCE_DETAIL)) msg_print("ÆäËÊѤï¤Ã¤¿¤È¤³¤í¤Ï¤Ê¤¤¤è¤¦¤À¡£"); #else - if (!screen_object(o_ptr, TRUE)) msg_print("You see nothing special."); + if (!screen_object(o_ptr, SCROBJ_FORCE_DETAIL)) msg_print("You see nothing special."); #endif }