X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcmd3.c;h=721d4a07a13d87e4888898ecb25dc3f19de4e1a1;hb=52cf2aa925c00e45d0ddf8eee956eb1af5f29b2d;hp=82d050c44fcb134858c9a82c23ff76fdda026299;hpb=56ae7e32ecb8ac689b1e29a6069012c3fc10ff21;p=hengband%2Fhengband.git diff --git a/src/cmd3.c b/src/cmd3.c index 82d050c44..721d4a07a 100644 --- a/src/cmd3.c +++ b/src/cmd3.c @@ -46,13 +46,12 @@ 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)); + (int)lbtokg1(p_ptr->total_weight) , (int)lbtokg2(p_ptr->total_weight) , + (long int)((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 @@ -121,13 +120,12 @@ void do_cmd_equip(void) /* Build a prompt */ #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)); + (int)lbtokg1(p_ptr->total_weight) , (int)lbtokg2(p_ptr->total_weight) , + (long int)((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)); + (long int)((p_ptr->total_weight * 100) / weight_limit())); #endif @@ -201,12 +199,14 @@ 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 */ void do_cmd_wield(void) { - int i, item, slot; + int item, slot; object_type forge; object_type *q_ptr; @@ -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) && !cursed_p(&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; + } - object_desc(ol_name, ol_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); + else if (buki_motteruka(INVEN_LARM)) slot = INVEN_RARM; + + /* 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,33 +344,52 @@ 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; } /* Prevent wielding into a cursed slot */ - if (cursed_p(&inventory[slot])) + if (object_is_cursed(&inventory[slot])) { /* Describe it */ object_desc(o_name, &inventory[slot], (OD_OMIT_PREFIX | OD_NAME_ONLY)); @@ -375,8 +407,10 @@ void do_cmd_wield(void) return; } - if (cursed_p(o_ptr) && confirm_wear && - (object_known_p(o_ptr) || (o_ptr->ident & IDENT_SENSE))) + if (confirm_wear && + ((object_is_cursed(o_ptr) && object_is_known(o_ptr)) || + ((o_ptr->ident & IDENT_SENSE) && + (FEEL_BROKEN <= o_ptr->feeling) && (o_ptr->feeling <= FEEL_CURSED)))) { char dummy[MAX_NLEN+80]; @@ -392,7 +426,7 @@ sprintf(dummy, " if (!get_check(dummy)) return; } - if ((o_ptr->name1 == ART_STONEMASK) && object_known_p(o_ptr) && (p_ptr->prace != RACE_VAMPIRE) && (p_ptr->prace != RACE_ANDROID)) + if ((o_ptr->name1 == ART_STONEMASK) && object_is_known(o_ptr) && (p_ptr->prace != RACE_VAMPIRE) && (p_ptr->prace != RACE_ANDROID)) { char dummy[MAX_NLEN+80]; @@ -409,26 +443,30 @@ sprintf(dummy, "%s if (!get_check(dummy)) return; } - /* Check if completed a quest */ - for (i = 0; i < max_quests; i++) + if (need_switch_wielding && !object_is_cursed(&inventory[need_switch_wielding])) { - if ((quest[i].type == QUEST_TYPE_FIND_ARTIFACT) && - (quest[i].status == QUEST_STATUS_TAKEN) && - (quest[i].k_idx == o_ptr->name1)) - { - if (record_fix_quest) do_cmd_write_nikki(NIKKI_FIX_QUEST_C, i, NULL); - quest[i].status = QUEST_STATUS_COMPLETED; - quest[i].complev = (byte)p_ptr->lev; + 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_print("¥¯¥¨¥¹¥È¤òãÀ®¤·¤¿¡ª"); + msg_format("%s¤ò%s¤Ë¹½¤¨¤Ê¤ª¤·¤¿¡£", switch_name, (slot == INVEN_RARM) ? (left_hander ? "º¸¼ê" : "±¦¼ê") : (left_hander ? "±¦¼ê" : "º¸¼ê")); #else - msg_print("You completed the quest!"); + msg_format("You wield %s at %s hand.", switch_name, (slot == INVEN_RARM) ? (left_hander ? "left" : "right") : (left_hander ? "right" : "left")); #endif - msg_print(NULL); - } + slot = need_switch_wielding; } + check_find_art_quest_completion(o_ptr); + if (p_ptr->pseikaku == SEIKAKU_MUNCHKIN) { identify_item(o_ptr); @@ -476,36 +514,40 @@ msg_print(" /* Wear the new stuff */ object_copy(o_ptr, q_ptr); + /* Player touches it */ + o_ptr->marked |= OM_TOUCHED; + /* Increase the weight */ p_ptr->total_weight += q_ptr->weight; /* 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: @@ -541,7 +583,7 @@ msg_print(" /* Cursed! */ - if (cursed_p(o_ptr)) + if (object_is_cursed(o_ptr)) { /* Warn the player */ #ifdef JP @@ -584,53 +626,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); +#else + msg_format("You are wielding %s with both hands.", o_name); +#endif + else #ifdef JP - msg_format("%s¤òξ¼ê¤Ç¹½¤¨¤¿¡£", o_name ); + msg_format("%s¤ò%s¤Ç¹½¤¨¤¿¡£", o_name, (left_hander ? "º¸¼ê" : "±¦¼ê")); #else - msg_format("You are wielding %s with both hands.", o_name ); + msg_format("You are wielding %s in your %s hand.", o_name, (left_hander ? "left":"right")); #endif - else + } + 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 @@ -683,7 +740,7 @@ void do_cmd_takeoff(void) /* Item is cursed */ - if (cursed_p(o_ptr)) + if (object_is_cursed(o_ptr)) { if ((o_ptr->curse_flags & TRC_PERMA_CURSE) || (p_ptr->pclass != CLASS_BERSERKER)) { @@ -794,7 +851,7 @@ void do_cmd_drop(void) /* Hack -- Cannot remove cursed items */ - if ((item >= INVEN_RARM) && cursed_p(o_ptr)) + if ((item >= INVEN_RARM) && object_is_cursed(o_ptr)) { /* Oops */ #ifdef JP @@ -826,9 +883,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,10 +901,11 @@ 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)) + (o_ptr->tval == TV_MUSIC_BOOK) || + (o_ptr->tval == TV_HEX_BOOK)) { if (o_ptr->sval > 1) return TRUE; @@ -909,27 +969,11 @@ void do_cmd_destroy(void) o_ptr = &o_list[0 - item]; } - - /* See how many items */ - if (o_ptr->number > 1) - { - /* Get a quantity */ - amt = get_quantity(NULL, o_ptr->number); - - /* Allow user abort */ - if (amt <= 0) return; - } - - - /* Describe the object */ - old_number = o_ptr->number; - o_ptr->number = amt; - object_desc(o_name, o_ptr, 0); - o_ptr->number = old_number; - - /* Verify unless quantity given */ + /* Verify unless quantity given beforehand */ if (!force && (confirm_destroy || (object_value(o_ptr) > 0))) { + object_desc(o_name, o_ptr, OD_OMIT_PREFIX); + /* Make a verification */ sprintf(out_val, #ifdef JP @@ -969,7 +1013,7 @@ void do_cmd_destroy(void) /* Cancel */ return; } - if (i == 'a' || i == 'A') + if (i == 'A') { /* Add an auto-destroy preference line */ if (autopick_autoregister(o_ptr)) @@ -981,9 +1025,26 @@ void do_cmd_destroy(void) /* The object is already destroyed. */ return; } - } + } /* while (TRUE) */ } + /* See how many items */ + if (o_ptr->number > 1) + { + /* Get a quantity */ + amt = get_quantity(NULL, o_ptr->number); + + /* Allow user abort */ + if (amt <= 0) return; + } + + + /* Describe the object */ + old_number = o_ptr->number; + o_ptr->number = amt; + object_desc(o_name, o_ptr, 0); + o_ptr->number = old_number; + /* Take a turn */ energy_use = 100; @@ -1162,9 +1223,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 } @@ -1670,6 +1731,11 @@ void do_cmd_target(void) */ void do_cmd_look(void) { + /*TEST*/ + p_ptr->window |= PW_MONSTER_LIST; + window_stuff(); + /*TEST*/ + /* Look around */ if (target_set(TARGET_LOOK)) {