I:70:3:0
W:50:0:5:0
A:50/1
-D:$It makes your main weapon (Shattered) when you read it.
-D:¤½¤ì¤ÏÆɤà¤ÈÍø¤ÏÓ¤ËÁõÈ÷Ãæ¤ÎÉð´ï¤ò(ÉÔÎÉÉÊ)¤ËÊѤ¨¤ë¡£
+D:$It makes your wielding weapon (Shattered) when you read it.
+D:¤½¤ì¤ÏÆɤà¤ÈÁõÈ÷Ãæ¤ÎÉð´ï¤ò(ÉÔÎÉÉÊ)¤ËÊѤ¨¤ë¡£
N:214:*Ëɶñ¶¯²½*
E:*Enchant Armor*
monster_type *m_ptr = &m_list[c_ptr->m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
- object_type *o_ptr;
+ /* Access the weapon */
+ object_type *o_ptr = &inventory[INVEN_RARM + hand];
char m_name[80];
break;
}
- if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+ if (!o_ptr->k_idx) /* Empty hand */
{
if ((r_ptr->level + 10) > p_ptr->lev)
{
}
}
}
- else
+ else if (object_is_melee_weapon(o_ptr))
{
if ((r_ptr->level + 10) > p_ptr->lev)
{
/* Extract monster name (or "it") */
monster_desc(m_name, m_ptr, 0);
- /* Access the weapon */
- o_ptr = &inventory[INVEN_RARM+hand];
-
/* Calculate the "attack quality" */
bonus = p_ptr->to_h[hand] + o_ptr->to_h;
chance = (p_ptr->skill_thn + (bonus * BTH_PLUS_ADJ));
energy_use = 100;
+ if (!p_ptr->migite && !p_ptr->hidarite &&
+ !(p_ptr->muta2 & (MUT2_HORNS | MUT2_BEAK | MUT2_SCOR_TAIL | MUT2_TRUNK | MUT2_TENTACLES)))
+ {
+#ifdef JP
+ msg_print("ξ¼ê¤¬¤Õ¤µ¤¬¤Ã¤Æ¹¶·â¤Ç¤¤Ê¤¤¡£");
+#else
+ msg_print("You cannot do attacking.");
+#endif
+ return FALSE;
+ }
+
if (m_ptr->csleep) /* It is not honorable etc to attack helpless victims */
{
if (!(r_ptr->flags3 & RF3_EVIL) || one_in_(5)) chg_virtue(V_COMPASSION, -1);
}
else if (boomerang)
{
- if (buki_motteruka(INVEN_LARM))
+ if (buki_motteruka(INVEN_RARM) && buki_motteruka(INVEN_LARM))
{
item_tester_hook = item_tester_hook_boomerang;
#ifdef JP
return FALSE;
}
}
- else
- {
- item = INVEN_RARM;
- }
+ else if (buki_motteruka(INVEN_LARM)) item = INVEN_LARM;
+ else item = INVEN_RARM;
}
else
{
cptr q, s;
+ int need_switch_wielding = 0;
+
if (p_ptr->special_defense & KATA_MUSOU)
{
set_action(ACTION_NONE);
case TV_CAPTURE:
case TV_SHIELD:
case TV_CARD:
+ /* Dual wielding */
if (buki_motteruka(INVEN_RARM) && buki_motteruka(INVEN_LARM))
{
/* Restrict the choices */
#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;
#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)
{
#endif
if (!get_item(&slot, q, s, (USE_EQUIP))) return;
+ if ((slot == INVEN_LARM) && !buki_motteruka(INVEN_RARM))
+ need_switch_wielding = INVEN_RARM;
}
break;
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++)
{
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)))
+ if (object_allow_two_hands_wielding(o_ptr) && (empty_hands(FALSE) == EMPTY_HAND_LARM) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE)))
#ifdef JP
act = "%s(%c)¤òξ¼ê¤Ç¹½¤¨¤¿¡£";
#else
break;
case INVEN_LARM:
+ if (object_allow_two_hands_wielding(o_ptr) && (empty_hands(FALSE) == EMPTY_HAND_RARM) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE)))
#ifdef JP
- act = (left_hander ? "%s(%c)¤ò±¦¼ê¤ËÁõÈ÷¤·¤¿¡£" : "%s(%c)¤òº¸¼ê¤ËÁõÈ÷¤·¤¿¡£");
+ act = "%s(%c)¤òξ¼ê¤Ç¹½¤¨¤¿¡£";
+#else
+ act = "You are wielding %s (%c) with both hands.";
+#endif
+ else
+#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.");
+ act = (left_hander ? "You are wielding %s (%c) on right hand." : "You are wielding %s (%c) on left hand.");
#endif
break;
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) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE)))
#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 ? "º¸¼ê" : "±¦¼ê"));
+ msg_format("%s¤ò%s¤Ç¹½¤¨¤¿¡£", o_name, (left_hander ? "º¸¼ê" : "±¦¼ê"));
#else
- msg_format("You are wielding %s on %s hand.", o_name, (left_hander ? "left":"right") );
+ msg_format("You are wielding %s on %s hand.", o_name, (left_hander ? "left":"right"));
#endif
+ }
+ else
+ {
+ if (object_allow_two_hands_wielding(o_ptr) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE)))
+#ifdef JP
+ msg_format("%s¤òξ¼ê¤Ç¹½¤¨¤¿¡£", o_name);
+#else
+ 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) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE)))
#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
/* 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);
}
powers[num++] = PET_NAME;
- if (p_ptr->riding && buki_motteruka(INVEN_RARM) && (empty_hands(FALSE) & EMPTY_HAND_LARM) && ((inventory[INVEN_RARM].weight > 99) || (inventory[INVEN_RARM].tval == TV_POLEARM)))
+ if (p_ptr->riding)
{
- if (p_ptr->pet_extra_flags & PF_RYOUTE)
+ if ((p_ptr->migite && (empty_hands(FALSE) == EMPTY_HAND_LARM) &&
+ object_allow_two_hands_wielding(&inventory[INVEN_RARM])) ||
+ (p_ptr->hidarite && (empty_hands(FALSE) == EMPTY_HAND_RARM) &&
+ object_allow_two_hands_wielding(&inventory[INVEN_LARM])))
{
+ if (p_ptr->pet_extra_flags & PF_RYOUTE)
+ {
+#ifdef JP
+ power_desc[num] = "Éð´ï¤òÊÒ¼ê¤Ç»ý¤Ä";
+#else
+ power_desc[num] = "use one hand to control a riding pet";
+#endif
+ }
+ else
+ {
#ifdef JP
- power_desc[num] = "Éð´ï¤òÊÒ¼ê¤Ç»ý¤Ä";
+ power_desc[num] = "Éð´ï¤òξ¼ê¤Ç»ý¤Ä";
#else
- power_desc[num] = "use one hand to control a riding pet";
+ power_desc[num] = "use both hands for a weapon";
#endif
+ }
+ powers[num++] = PET_RYOUTE;
}
else
{
+ switch (p_ptr->pclass)
+ {
+ case CLASS_MONK:
+ case CLASS_FORCETRAINER:
+ case CLASS_BERSERKER:
+ if (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))
+ {
+ if (p_ptr->pet_extra_flags & PF_RYOUTE)
+ {
#ifdef JP
- power_desc[num] = "Éð´ï¤òξ¼ê¤Ç»ý¤Ä";
+ power_desc[num] = "ÊÒ¼ê¤Ç³ÊÆ®¤¹¤ë";
#else
- power_desc[num] = "use both hands for a weapon.";
+ power_desc[num] = "use one hand to control a riding pet";
#endif
+ }
+ else
+ {
+#ifdef JP
+ power_desc[num] = "ξ¼ê¤Ç³ÊÆ®¤¹¤ë";
+#else
+ power_desc[num] = "use both hands for melee";
+#endif
+ }
- }
+ powers[num++] = PET_RYOUTE;
+ }
+ else if ((empty_hands(FALSE) != EMPTY_HAND_NONE) && !buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+ {
+ if (p_ptr->pet_extra_flags & PF_RYOUTE)
+ {
+#ifdef JP
+ power_desc[num] = "³ÊÆ®¤ò¹Ô¤ï¤Ê¤¤";
+#else
+ power_desc[num] = "use one hand to control a riding pet";
+#endif
+ }
+ else
+ {
+#ifdef JP
+ power_desc[num] = "³ÊÆ®¤ò¹Ô¤¦";
+#else
+ power_desc[num] = "use one hand for melee";
+#endif
+ }
- powers[num++] = PET_RYOUTE;
+ powers[num++] = PET_RYOUTE;
+ }
+ break;
+ }
+ }
}
/* Nothing chosen yet */
case SV_SCROLL_CURSE_WEAPON:
{
- if (curse_weapon(FALSE, INVEN_RARM)) ident = TRUE;
+ k = 0;
+ if (buki_motteruka(INVEN_RARM))
+ {
+ k = INVEN_RARM;
+ if (buki_motteruka(INVEN_LARM) && one_in_(2)) k = INVEN_LARM;
+ }
+ else if (buki_motteruka(INVEN_LARM)) k = INVEN_LARM;
+ if (k && curse_weapon(FALSE, k)) ident = TRUE;
break;
}
}
if ((p_ptr->muta2 & MUT2_DISARM) && one_in_(10000))
{
+ int slot = 0;
object_type *o_ptr;
disturb(0, 0);
take_hit(DAMAGE_NOESCAPE, randint1(p_ptr->wt / 6), "tripping", -1);
#endif
-
msg_print(NULL);
if (buki_motteruka(INVEN_RARM))
{
- int slot = INVEN_RARM;
+ slot = INVEN_RARM;
o_ptr = &inventory[INVEN_RARM];
+
if (buki_motteruka(INVEN_LARM) && one_in_(2))
{
o_ptr = &inventory[INVEN_LARM];
slot = INVEN_LARM;
}
- if (!object_is_cursed(o_ptr))
- {
+ }
+ else if (buki_motteruka(INVEN_LARM))
+ {
+ o_ptr = &inventory[INVEN_LARM];
+ slot = INVEN_LARM;
+ }
+
+ if (slot && !object_is_cursed(o_ptr))
+ {
#ifdef JP
- msg_print("Éð´ï¤òÍ¤Æ¤·¤Þ¤Ã¤¿¡ª");
+ msg_print("Éð´ï¤òÍ¤Æ¤·¤Þ¤Ã¤¿¡ª");
#else
- msg_print("You drop your weapon!");
+ msg_print("You drop your weapon!");
#endif
-
- inven_drop(slot, 1);
- }
+ inven_drop(slot, 1);
}
}
}
extern void redraw_stuff(void);
extern void window_stuff(void);
extern void handle_stuff(void);
-extern s16b empty_hands(bool is_monk);
+extern s16b empty_hands(bool riding_control);
extern bool heavy_armor(void);
extern bool object_is_smith(object_type *o_ptr);
extern bool object_is_artifact(object_type *o_ptr);
extern bool object_is_nameless(object_type *o_ptr);
+extern bool object_allow_two_hands_wielding(object_type *o_ptr);
/* wild.c */
extern void set_floor_and_wall(byte type);
}
+static void display_player_melee_bonus(int hand, int hand_entry)
+{
+ char buf[160];
+ int show_tohit = p_ptr->dis_to_h[hand];
+ int show_todam = p_ptr->dis_to_d[hand];
+ object_type *o_ptr = &inventory[INVEN_RARM + hand];
+
+ /* Hack -- add in weapon info if known */
+ if (object_is_known(o_ptr)) show_tohit += o_ptr->to_h;
+ if (object_is_known(o_ptr)) show_todam += o_ptr->to_d;
+
+ /* Melee attacks */
+ sprintf(buf, "(%+d,%+d)", show_tohit, show_todam);
+
+ /* Dump the bonuses to hit/dam */
+ if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+ display_player_one_line(ENTRY_BARE_HAND, buf, TERM_L_BLUE);
+ else if (p_ptr->ryoute)
+ display_player_one_line(ENTRY_TWO_HANDS, buf, TERM_L_BLUE);
+ else
+ display_player_one_line(hand_entry, buf, TERM_L_BLUE);
+}
+
+
/*
* Prints the following information on the screen.
*/
static void display_player_middle(void)
{
char buf[160];
- int show_tohit, show_todam;
- object_type *o_ptr;
- int tmul = 0;
- int e;
-
- if(p_ptr->migite)
- {
- show_tohit = p_ptr->dis_to_h[0];
- show_todam = p_ptr->dis_to_d[0];
- o_ptr = &inventory[INVEN_RARM];
+ /* Base skill */
+ int show_tohit = p_ptr->dis_to_h_b;
+ int show_todam = 0;
- /* Hack -- add in weapon info if known */
- if (object_is_known(o_ptr)) show_tohit += o_ptr->to_h;
- if (object_is_known(o_ptr)) show_todam += o_ptr->to_d;
+ /* Range weapon */
+ object_type *o_ptr = &inventory[INVEN_BOW];
- /* Melee attacks */
- sprintf(buf, "(%+d,%+d)", show_tohit, show_todam);
+ int tmul = 0;
+ int e;
- /* Dump the bonuses to hit/dam */
- if(!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
- display_player_one_line(ENTRY_BARE_HAND, buf, TERM_L_BLUE);
- else if(p_ptr->ryoute)
- display_player_one_line(ENTRY_TWO_HANDS, buf, TERM_L_BLUE);
- else if (left_hander)
- display_player_one_line(ENTRY_LEFT_HAND1, buf, TERM_L_BLUE);
- else
- display_player_one_line(ENTRY_RIGHT_HAND1, buf, TERM_L_BLUE);
+ if (p_ptr->migite)
+ {
+ display_player_melee_bonus(0, left_hander ? ENTRY_LEFT_HAND1 : ENTRY_RIGHT_HAND1);
}
- if(p_ptr->hidarite)
+ if (p_ptr->hidarite)
{
- show_tohit = p_ptr->dis_to_h[1];
- show_todam = p_ptr->dis_to_d[1];
-
- o_ptr = &inventory[INVEN_LARM];
-
- /* Hack -- add in weapon info if known */
- if (object_is_known(o_ptr)) show_tohit += o_ptr->to_h;
- if (object_is_known(o_ptr)) show_todam += o_ptr->to_d;
-
- /* Melee attacks */
- sprintf(buf, "(%+d,%+d)", show_tohit, show_todam);
-
- /* Dump the bonuses to hit/dam */
- if (left_hander)
- display_player_one_line(ENTRY_RIGHT_HAND2, buf, TERM_L_BLUE);
- else
- display_player_one_line(ENTRY_LEFT_HAND2, buf, TERM_L_BLUE);
+ display_player_melee_bonus(1, left_hander ? ENTRY_RIGHT_HAND2: ENTRY_LEFT_HAND2);
}
else if ((p_ptr->pclass == CLASS_MONK) && (empty_hands(TRUE) & EMPTY_HAND_RARM))
{
#endif
}
- /* Range weapon */
- o_ptr = &inventory[INVEN_BOW];
-
- /* Base skill */
- show_tohit = p_ptr->dis_to_h_b;
- show_todam = 0;
-
/* Apply weapon bonuses */
if (object_is_known(o_ptr)) show_tohit += o_ptr->to_h;
if (object_is_known(o_ptr)) show_todam += o_ptr->to_d;
add_flag(flgs, TR_SPEED);
else
{
- if (!inventory[INVEN_LARM].tval || p_ptr->hidarite)
+ if ((!inventory[INVEN_RARM].k_idx || p_ptr->migite) &&
+ (!inventory[INVEN_LARM].k_idx || p_ptr->hidarite))
add_flag(flgs, TR_SPEED);
if (p_ptr->lev>24)
add_flag(flgs, TR_FREE_ACT);
for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
{
object_desc(o_name, &inventory[i], 0);
- if ((i == INVEN_LARM) && p_ptr->ryoute)
+ if ((((i == INVEN_RARM) && p_ptr->hidarite) || ((i == INVEN_LARM) && p_ptr->migite)) && p_ptr->ryoute)
#ifdef JP
strcpy(o_name, "(Éð´ï¤òξ¼ê»ý¤Á)");
#else
return;
}
- if (!buki_motteruka(INVEN_RARM))
+ if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
{
if (flush_failure) flush();
#ifdef JP
return FALSE;
}
+
+/*
+ * Check if an object is melee weapon and allows wielding with two-hands
+ */
+bool object_allow_two_hands_wielding(object_type *o_ptr)
+{
+ if (object_is_melee_weapon(o_ptr) && ((o_ptr->weight > 99) || (o_ptr->tval == TV_POLEARM))) return TRUE;
+
+ return FALSE;
+}
switch (i)
{
#ifdef JP
-case INVEN_RARM: p = p_ptr->ryoute ? " ξ¼ê" : (left_hander ? " º¸¼ê" : " ±¦¼ê"); break;
+ case INVEN_RARM: p = p_ptr->heavy_wield[0] ? "±¿ÈÂÃæ" : ((p_ptr->ryoute && p_ptr->migite) ? " ξ¼ê" : (left_hander ? " º¸¼ê" : " ±¦¼ê")); break;
#else
- case INVEN_RARM: p = "Wielding"; break;
+ case INVEN_RARM: p = p_ptr->heavy_wield[0] ? "Just lifting" : (p_ptr->migite ? "Wielding" : "On arm"); break;
#endif
#ifdef JP
-case INVEN_LARM: p = (left_hander ? " ±¦¼ê" : " º¸¼ê"); break;
+ case INVEN_LARM: p = p_ptr->heavy_wield[1] ? "±¿ÈÂÃæ" : ((p_ptr->ryoute && p_ptr->hidarite) ? " ξ¼ê" : (left_hander ? " ±¦¼ê" : " º¸¼ê")); break;
#else
- case INVEN_LARM: p = "On arm"; break;
+ case INVEN_LARM: p = p_ptr->heavy_wield[1] ? "Just lifting" : (p_ptr->hidarite ? "Wielding" : "On arm"); break;
#endif
#ifdef JP
-case INVEN_BOW: p = "¼Í·âÍÑ"; break;
+ case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < inventory[i].weight / 10) ? "±¿ÈÂÃæ" : "¼Í·âÍÑ"; break;
#else
- case INVEN_BOW: p = "Shooting"; break;
+ case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < inventory[i].weight / 10) ? "Just holding" : "Shooting"; break;
#endif
#ifdef JP
-case INVEN_LEFT: p = (left_hander ? "±¦¼ê»Ø" : "º¸¼ê»Ø"); break;
+ case INVEN_RIGHT: p = (left_hander ? "º¸¼ê»Ø" : "±¦¼ê»Ø"); break;
#else
- case INVEN_LEFT: p = "On left hand"; break;
+ case INVEN_RIGHT: p = (left_hander ? "On left hand" : "On right hand"); break;
#endif
#ifdef JP
-case INVEN_RIGHT: p = (left_hander ? "º¸¼ê»Ø" : "±¦¼ê»Ø"); break;
+ case INVEN_LEFT: p = (left_hander ? "±¦¼ê»Ø" : "º¸¼ê»Ø"); break;
#else
- case INVEN_RIGHT: p = "On right hand"; break;
+ case INVEN_LEFT: p = (left_hander ? "On right hand" : "On left hand"); break;
#endif
#ifdef JP
-case INVEN_NECK: p = " ¼ó"; break;
+ case INVEN_NECK: p = " ¼ó"; break;
#else
case INVEN_NECK: p = "Around neck"; break;
#endif
#ifdef JP
-case INVEN_LITE: p = " ¸÷¸»"; break;
+ case INVEN_LITE: p = " ¸÷¸»"; break;
#else
case INVEN_LITE: p = "Light source"; break;
#endif
#ifdef JP
-case INVEN_BODY: p = " ÂÎ"; break;
+ case INVEN_BODY: p = " ÂÎ"; break;
#else
case INVEN_BODY: p = "On body"; break;
#endif
#ifdef JP
-case INVEN_OUTER: p = "ÂΤξå"; break;
+ case INVEN_OUTER: p = "ÂΤξå"; break;
#else
case INVEN_OUTER: p = "About body"; break;
#endif
#ifdef JP
-case INVEN_HEAD: p = " Ƭ"; break;
+ case INVEN_HEAD: p = " Ƭ"; break;
#else
case INVEN_HEAD: p = "On head"; break;
#endif
#ifdef JP
-case INVEN_HANDS: p = " ¼ê"; break;
+ case INVEN_HANDS: p = " ¼ê"; break;
#else
case INVEN_HANDS: p = "On hands"; break;
#endif
#ifdef JP
-case INVEN_FEET: p = " "; break;
+ case INVEN_FEET: p = " "; break;
#else
case INVEN_FEET: p = "On feet"; break;
#endif
#ifdef JP
-default: p = "¥¶¥Ã¥¯"; break;
+ default: p = "¥¶¥Ã¥¯"; break;
#else
default: p = "In pack"; break;
#endif
-
- }
-
- /* Hack -- Heavy weapon */
- if (i == INVEN_RARM)
- {
- if (p_ptr->heavy_wield[0])
- {
-#ifdef JP
-p = "±¿ÈÂÃæ";
-#else
- p = "Just lifting";
-#endif
-
- }
- }
-
- /* Hack -- Heavy weapon */
- if (i == INVEN_LARM)
- {
- if (p_ptr->heavy_wield[1])
- {
-#ifdef JP
-p = "±¿ÈÂÃæ";
-#else
- p = "Just lifting";
-#endif
-
- }
- }
-
- /* Hack -- Heavy bow */
- if (i == INVEN_BOW)
- {
- object_type *o_ptr;
- o_ptr = &inventory[i];
- if (adj_str_hold[p_ptr->stat_ind[A_STR]] < o_ptr->weight / 10)
- {
-#ifdef JP
-p = "±¿ÈÂÃæ";
-#else
- p = "Just holding";
-#endif
-
- }
}
/* Return the result */
- return (p);
+ return p;
}
switch (i)
{
#ifdef JP
-case INVEN_RARM: p = p_ptr->ryoute ? "ξ¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : (left_hander ? "º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : "±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë"); break;
+ case INVEN_RARM: p = p_ptr->heavy_wield[0] ? "±¿ÈÂÃæ¤Î" : ((p_ptr->ryoute && p_ptr->migite) ? "ξ¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : (left_hander ? "º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : "±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë")); break;
#else
- case INVEN_RARM: p = "attacking monsters with"; break;
+ case INVEN_RARM: p = p_ptr->heavy_wield[0] ? "just lifting" : (p_ptr->migite ? "attacking monsters with" : "wearing on your arm"); break;
#endif
#ifdef JP
-case INVEN_LARM: p = (left_hander ? "±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : "º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë"); break;
+ case INVEN_LARM: p = p_ptr->heavy_wield[1] ? "±¿ÈÂÃæ¤Î" : ((p_ptr->ryoute && p_ptr->hidarite) ? "ξ¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : (left_hander ? "±¦¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë" : "º¸¼ê¤ËÁõÈ÷¤·¤Æ¤¤¤ë")); break;
#else
- case INVEN_LARM: p = "wearing on your arm"; break;
+ case INVEN_LARM: p = p_ptr->heavy_wield[1] ? "just lifting" : (p_ptr->hidarite ? "attacking monsters with" : "wearing on your arm"); break;
#endif
#ifdef JP
-case INVEN_BOW: p = "¼Í·âÍѤËÁõÈ÷¤·¤Æ¤¤¤ë"; break;
+ case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < inventory[i].weight / 10) ? "»ý¤Ä¤À¤±¤ÇÀº°ìÇÕ¤Î" : "¼Í·âÍѤËÁõÈ÷¤·¤Æ¤¤¤ë"; break;
#else
- case INVEN_BOW: p = "shooting missiles with"; break;
+ case INVEN_BOW: p = (adj_str_hold[p_ptr->stat_ind[A_STR]] < inventory[i].weight / 10) ? "just holding" : "shooting missiles with"; break;
#endif
#ifdef JP
-case INVEN_LEFT: p = (left_hander ? "±¦¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë" : "º¸¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë"); break;
+ case INVEN_RIGHT: p = (left_hander ? "º¸¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë" : "±¦¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë"); break;
#else
- case INVEN_LEFT: p = "wearing on your left hand"; break;
+ case INVEN_RIGHT: p = (left_hander ? "wearing on your left hand" : "wearing on your right hand"); break;
#endif
#ifdef JP
-case INVEN_RIGHT: p = (left_hander ? "º¸¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë" : "±¦¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë"); break;
+ case INVEN_LEFT: p = (left_hander ? "±¦¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë" : "º¸¼ê¤Î»Ø¤Ë¤Ï¤á¤Æ¤¤¤ë"); break;
#else
- case INVEN_RIGHT: p = "wearing on your right hand"; break;
+ case INVEN_LEFT: p = (left_hander ? "wearing on your right hand" : "wearing on your left hand"); break;
#endif
#ifdef JP
-case INVEN_NECK: p = "¼ó¤Ë¤«¤±¤Æ¤¤¤ë"; break;
+ case INVEN_NECK: p = "¼ó¤Ë¤«¤±¤Æ¤¤¤ë"; break;
#else
case INVEN_NECK: p = "wearing around your neck"; break;
#endif
#ifdef JP
-case INVEN_LITE: p = "¸÷¸»¤Ë¤·¤Æ¤¤¤ë"; break;
+ case INVEN_LITE: p = "¸÷¸»¤Ë¤·¤Æ¤¤¤ë"; break;
#else
case INVEN_LITE: p = "using to light the way"; break;
#endif
#ifdef JP
-case INVEN_BODY: p = "ÂΤËÃå¤Æ¤¤¤ë"; break;
+ case INVEN_BODY: p = "ÂΤËÃå¤Æ¤¤¤ë"; break;
#else
case INVEN_BODY: p = "wearing on your body"; break;
#endif
#ifdef JP
-case INVEN_OUTER: p = "¿È¤Ë¤Þ¤È¤Ã¤Æ¤¤¤ë"; break;
+ case INVEN_OUTER: p = "¿È¤Ë¤Þ¤È¤Ã¤Æ¤¤¤ë"; break;
#else
case INVEN_OUTER: p = "wearing on your back"; break;
#endif
#ifdef JP
-case INVEN_HEAD: p = "Ƭ¤Ë¤«¤Ö¤Ã¤Æ¤¤¤ë"; break;
+ case INVEN_HEAD: p = "Ƭ¤Ë¤«¤Ö¤Ã¤Æ¤¤¤ë"; break;
#else
case INVEN_HEAD: p = "wearing on your head"; break;
#endif
#ifdef JP
-case INVEN_HANDS: p = "¼ê¤Ë¤Ä¤±¤Æ¤¤¤ë"; break;
+ case INVEN_HANDS: p = "¼ê¤Ë¤Ä¤±¤Æ¤¤¤ë"; break;
#else
case INVEN_HANDS: p = "wearing on your hands"; break;
#endif
#ifdef JP
-case INVEN_FEET: p = "¤ˤϤ¤¤Æ¤¤¤ë"; break;
+ case INVEN_FEET: p = "¤ˤϤ¤¤Æ¤¤¤ë"; break;
#else
case INVEN_FEET: p = "wearing on your feet"; break;
#endif
#ifdef JP
-default: p = "¥¶¥Ã¥¯¤ËÆþ¤Ã¤Æ¤¤¤ë"; break;
+ default: p = "¥¶¥Ã¥¯¤ËÆþ¤Ã¤Æ¤¤¤ë"; break;
#else
default: p = "carrying in your pack"; break;
#endif
-
- }
-
- /* Hack -- Heavy weapon */
- if (i == INVEN_RARM)
- {
- object_type *o_ptr;
- int hold = adj_str_hold[p_ptr->stat_ind[A_STR]];
-
- if (p_ptr->ryoute) hold *= 2;
- o_ptr = &inventory[i];
- if (hold < o_ptr->weight / 10)
- {
-#ifdef JP
-p = "±¿ÈÂÃæ¤Î";
-#else
- p = "just lifting";
-#endif
-
- }
- }
-
- /* Hack -- Heavy bow */
- if (i == INVEN_BOW)
- {
- object_type *o_ptr;
- o_ptr = &inventory[i];
- if (adj_str_hold[p_ptr->stat_ind[A_STR]] < o_ptr->weight / 10)
- {
-#ifdef JP
-p = "»ý¤Ä¤À¤±¤ÇÀº°ìÇÕ¤Î";
-#else
- p = "just holding";
-#endif
-
- }
}
/* Return the result */
Term_putstr(0, i - INVEN_RARM, 3, TERM_WHITE, tmp_val);
/* Obtain an item description */
- if ((i == INVEN_LARM) && p_ptr->ryoute)
+ if ((((i == INVEN_RARM) && p_ptr->hidarite) || ((i == INVEN_LARM) && p_ptr->migite)) && p_ptr->ryoute)
{
#ifdef JP
strcpy(o_name, "(Éð´ï¤òξ¼ê»ý¤Á)");
#else
strcpy(o_name, "(wielding with two-hands)");
#endif
- attr = 1;
+ attr = TERM_WHITE;
}
else
{
o_ptr = &inventory[i];
/* Is this item acceptable? */
- if (!item_tester_okay(o_ptr) && (!((i == INVEN_LARM) && p_ptr->ryoute) || item_tester_no_ryoute)) continue;
+ if (!item_tester_okay(o_ptr) &&
+ (!((((i == INVEN_RARM) && p_ptr->hidarite) || ((i == INVEN_LARM) && p_ptr->migite)) && p_ptr->ryoute) ||
+ item_tester_no_ryoute)) continue;
/* Description */
object_desc(o_name, o_ptr, 0);
- if ((i == INVEN_LARM) && p_ptr->ryoute)
+ if ((((i == INVEN_RARM) && p_ptr->hidarite) || ((i == INVEN_LARM) && p_ptr->migite)) && p_ptr->ryoute)
{
#ifdef JP
(void)strcpy(out_desc[k],"(Éð´ï¤òξ¼ê»ý¤Á)");
#else
(void)strcpy(out_desc[k],"(wielding with two-hands)");
#endif
- out_color[k] = 1;
+ out_color[k] = TERM_WHITE;
}
else
{
while ((e1 <= e2) && (!get_item_okay(e1))) e1++;
while ((e1 <= e2) && (!get_item_okay(e2))) e2--;
+ if (equip && p_ptr->ryoute && !item_tester_no_ryoute)
+ {
+ if (p_ptr->migite)
+ {
+ if (e2 < INVEN_LARM) e2 = INVEN_LARM;
+ }
+ else if (p_ptr->hidarite) e1 = INVEN_RARM;
+ }
/* Restrict floor usage */
while ((e1 <= e2) && (!get_item_okay(e1))) e1++;
while ((e1 <= e2) && (!get_item_okay(e2))) e2--;
+ if (equip && p_ptr->ryoute && !item_tester_no_ryoute)
+ {
+ if (p_ptr->migite)
+ {
+ if (e2 < INVEN_LARM) e2 = INVEN_LARM;
+ }
+ else if (p_ptr->hidarite) e1 = INVEN_RARM;
+ }
+
/* Count "okay" floor items */
floor_num = 0;
}
else if (command == -4)
{
- if (!buki_motteruka(INVEN_RARM))
+ if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
{
#ifdef JP
msg_print("Éð´ï¤ò»ý¤¿¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó¡£");
display_inventory();
}
}
- if (item >= INVEN_RARM) calc_android_exp();
- if ((choice == 0) && ((item == INVEN_RARM) || (item == INVEN_LARM))) kamaenaoshi(item);
+
+ if ((choice == 0) && (item >= INVEN_RARM))
+ {
+ calc_android_exp();
+ kamaenaoshi(item);
+ }
}
bool buki_motteruka(int i)
{
- return ((inventory[i].k_idx && inventory[i].tval >= TV_DIGGING && inventory[i].tval <= TV_SWORD) ? TRUE : FALSE);
+ return ((inventory[i].k_idx && object_is_melee_weapon(&inventory[i])) ? TRUE : FALSE);
}
{
int i, j, hold, neutral[2];
int new_speed;
+ int default_hand = 0;
+ int empty_hands_status = empty_hands(TRUE);
int extra_blows[2];
int extra_shots;
object_type *o_ptr;
/* Base skill -- digging */
p_ptr->skill_dig = 0;
- if (buki_motteruka(INVEN_RARM) && (empty_hands(FALSE) & EMPTY_HAND_LARM) && ((inventory[INVEN_RARM].weight > 99) || (inventory[INVEN_RARM].tval == TV_POLEARM)) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE))) p_ptr->ryoute = TRUE;
- if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_BERSERKER)) && (empty_hands(TRUE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM)) && (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE))) p_ptr->ryoute = TRUE;
- if (buki_motteruka(INVEN_RARM) || !buki_motteruka(INVEN_LARM)) p_ptr->migite = TRUE;
- if (buki_motteruka(INVEN_LARM)) p_ptr->hidarite = TRUE;
+ if (buki_motteruka(INVEN_RARM)) p_ptr->migite = TRUE;
+ if (buki_motteruka(INVEN_LARM))
+ {
+ p_ptr->hidarite = TRUE;
+ if (!p_ptr->migite) default_hand = 1;
+ }
+
+ if (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE))
+ {
+ if (p_ptr->migite && (empty_hands(FALSE) == EMPTY_HAND_LARM) &&
+ object_allow_two_hands_wielding(&inventory[INVEN_RARM]))
+ {
+ p_ptr->ryoute = TRUE;
+ }
+ else if (p_ptr->hidarite && (empty_hands(FALSE) == EMPTY_HAND_RARM) &&
+ object_allow_two_hands_wielding(&inventory[INVEN_LARM]))
+ {
+ p_ptr->ryoute = TRUE;
+ }
+ else
+ {
+ switch (p_ptr->pclass)
+ {
+ case CLASS_MONK:
+ case CLASS_FORCETRAINER:
+ case CLASS_BERSERKER:
+ if (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))
+ {
+ p_ptr->migite = TRUE;
+ p_ptr->ryoute = TRUE;
+ }
+ break;
+ }
+ }
+ }
+
+ if (!p_ptr->migite && !p_ptr->hidarite)
+ {
+ if (empty_hands_status & EMPTY_HAND_RARM) p_ptr->migite = TRUE;
+ else if (empty_hands_status == EMPTY_HAND_LARM)
+ {
+ p_ptr->hidarite = TRUE;
+ default_hand = 1;
+ }
+ }
if (p_ptr->special_defense & KAMAE_MASK)
{
- if (!(empty_hands(TRUE) & EMPTY_HAND_RARM))
+ if (!(empty_hands_status & EMPTY_HAND_RARM))
{
set_action(ACTION_NONE);
}
new_speed -= (p_ptr->lev) / 10;
p_ptr->skill_stl -= (p_ptr->lev)/10;
}
- else if (!inventory[INVEN_LARM].tval || p_ptr->hidarite)
+ else if ((!inventory[INVEN_RARM].k_idx || p_ptr->migite) &&
+ (!inventory[INVEN_LARM].k_idx || p_ptr->hidarite))
{
new_speed += 3;
if (!(prace_is_(RACE_KLACKON) ||
if (p_ptr->lev > 24)
p_ptr->free_act = TRUE;
}
- if (!inventory[INVEN_LARM].tval || p_ptr->hidarite)
+ if ((!inventory[INVEN_RARM].k_idx || p_ptr->migite) &&
+ (!inventory[INVEN_LARM].k_idx || p_ptr->hidarite))
{
p_ptr->to_a += p_ptr->lev/2+5;
p_ptr->dis_to_a += p_ptr->lev/2+5;
else
{
/* Apply the bonuses to hit/damage */
- p_ptr->to_h[0] += bonus_to_h;
- p_ptr->to_d[0] += bonus_to_d;
+ p_ptr->to_h[default_hand] += bonus_to_h;
+ p_ptr->to_d[default_hand] += bonus_to_d;
/* Apply the mental bonuses to hit/damage, if known */
if (object_is_known(o_ptr))
{
- p_ptr->dis_to_h[0] += bonus_to_h;
- p_ptr->dis_to_d[0] += bonus_to_d;
+ p_ptr->dis_to_h[default_hand] += bonus_to_h;
+ p_ptr->dis_to_d[default_hand] += bonus_to_d;
}
}
}
if (p_ptr->special_defense & KAMAE_SUZAKU) new_speed += 10;
- if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+ if ((p_ptr->migite && (empty_hands_status & EMPTY_HAND_RARM)) ||
+ (p_ptr->hidarite && (empty_hands_status & EMPTY_HAND_LARM)))
{
- p_ptr->to_h[0] += (p_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
- p_ptr->dis_to_h[0] += (p_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
+ p_ptr->to_h[default_hand] += (p_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
+ p_ptr->dis_to_h[default_hand] += (p_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
}
if (buki_motteruka(INVEN_RARM) && buki_motteruka(INVEN_LARM))
p_ptr->to_d[i] += p_ptr->lev/6;
p_ptr->dis_to_h[i] += p_ptr->lev/5;
p_ptr->dis_to_d[i] += p_ptr->lev/6;
- if (!p_ptr->hidarite || p_ptr->ryoute)
+ if (((i == 0) && !p_ptr->hidarite) || p_ptr->ryoute)
{
p_ptr->to_h[i] += p_ptr->lev/5;
p_ptr->to_d[i] += p_ptr->lev/6;
int penalty = 0;
p_ptr->riding_ryoute = FALSE;
+
if (p_ptr->ryoute || (empty_hands(FALSE) == EMPTY_HAND_NONE)) p_ptr->riding_ryoute = TRUE;
+ else if (p_ptr->pet_extra_flags & PF_RYOUTE)
+ {
+ switch (p_ptr->pclass)
+ {
+ case CLASS_MONK:
+ case CLASS_FORCETRAINER:
+ case CLASS_BERSERKER:
+ if ((empty_hands(FALSE) != EMPTY_HAND_NONE) && !buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+ p_ptr->riding_ryoute = TRUE;
+ break;
+ }
+ }
if ((p_ptr->pclass == CLASS_BEASTMASTER) || (p_ptr->pclass == CLASS_CAVALRY))
{
}
/* Different calculation for monks with empty hands */
- if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_BERSERKER)) && (empty_hands(TRUE) & EMPTY_HAND_RARM))
+ if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_BERSERKER)) &&
+ (empty_hands_status & EMPTY_HAND_RARM) && !p_ptr->hidarite)
{
int blow_base = p_ptr->lev + adj_dex_blow[p_ptr->stat_ind[A_DEX]];
p_ptr->num_blow[0] = 0;
bonus_to_d = ((int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128)/2;
bonus_to_h = ((int)(adj_str_th[p_ptr->stat_ind[A_STR]]) - 128) + ((int)(adj_dex_th[p_ptr->stat_ind[A_DEX]]) - 128);
- p_ptr->to_h[0] += MAX(bonus_to_h,1);
- p_ptr->dis_to_h[0] += MAX(bonus_to_h,1);
- p_ptr->to_d[0] += MAX(bonus_to_d,1);
- p_ptr->dis_to_d[0] += MAX(bonus_to_d,1);
+ p_ptr->to_h[default_hand] += MAX(bonus_to_h,1);
+ p_ptr->dis_to_h[default_hand] += MAX(bonus_to_h,1);
+ p_ptr->to_d[default_hand] += MAX(bonus_to_d,1);
+ p_ptr->dis_to_d[default_hand] += MAX(bonus_to_d,1);
}
- if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_BERSERKER)) && (empty_hands(TRUE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))) p_ptr->ryoute = FALSE;
+ if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_BERSERKER)) && (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))) p_ptr->ryoute = FALSE;
/* Affect Skill -- stealth (bonus one) */
p_ptr->skill_stl += 1;
if (p_ptr->riding_ryoute)
{
#ifdef JP
- msg_print("ξ¼ê¤¬¤Õ¤µ¤¬¤Ã¤Æ¤¤¤ÆÇϤòÁà¤ì¤Ê¤¤¡£");
+ msg_format("%sÇϤòÁà¤ì¤Ê¤¤¡£", (empty_hands(FALSE) == EMPTY_HAND_NONE) ? "ξ¼ê¤¬¤Õ¤µ¤¬¤Ã¤Æ¤¤¤Æ" : "");
#else
msg_print("You are using both hand for fighting, and you can't control a riding pet.");
#endif
else
{
#ifdef JP
- msg_print("¼ê¤¬¶õ¤¤¤ÆÇϤòÁà¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
+ msg_format("%sÇϤòÁà¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£", (empty_hands(FALSE) == EMPTY_HAND_NONE) ? "¼ê¤¬¶õ¤¤¤Æ" : "");
#else
msg_print("You began to control riding pet with one hand.");
#endif
}
-s16b empty_hands(bool is_monk)
+s16b empty_hands(bool riding_control)
{
s16b status = EMPTY_HAND_NONE;
- if (is_monk && (p_ptr->pclass != CLASS_MONK) && (p_ptr->pclass != CLASS_FORCETRAINER) && (p_ptr->pclass != CLASS_BERSERKER)) return EMPTY_HAND_NONE;
- if (!(inventory[INVEN_RARM].k_idx)) status |= EMPTY_HAND_RARM;
- if (!(inventory[INVEN_LARM].k_idx)) status |= EMPTY_HAND_LARM;
+ if (!inventory[INVEN_RARM].k_idx) status |= EMPTY_HAND_RARM;
+ if (!inventory[INVEN_LARM].k_idx) status |= EMPTY_HAND_LARM;
+
+ if (riding_control && (status != EMPTY_HAND_NONE) && p_ptr->riding && !(p_ptr->pet_extra_flags & PF_RYOUTE))
+ {
+ if (status & EMPTY_HAND_LARM) status &= ~(EMPTY_HAND_LARM);
+ else if (status & EMPTY_HAND_RARM) status &= ~(EMPTY_HAND_RARM);
+ }
+
return status;
}
#endif
break;
case REW_CURSE_WP:
- if (!buki_motteruka(INVEN_RARM)) break;
+ if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) break;
#ifdef JP
msg_format("%s¤ÎÀ¼¤¬¶Á¤ÅϤä¿:",
chaos_patrons[p_ptr->chaos_patron]);
msg_print("'Thou reliest too much on thy weapon.'");
#endif
- object_desc(o_name, &inventory[INVEN_RARM], OD_NAME_ONLY);
- (void)curse_weapon(FALSE, INVEN_RARM);
+ dummy = INVEN_RARM;
+ if (buki_motteruka(INVEN_LARM))
+ {
+ dummy = INVEN_LARM;
+ if (buki_motteruka(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
+ }
+ object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
+ (void)curse_weapon(FALSE, dummy);
#ifdef JP
reward = format("%s¤¬Ç˲õ¤µ¤ì¤¿¡£", o_name);
#else
case 3:
if (one_in_(2))
{
- if (!buki_motteruka(INVEN_RARM)) break;
- object_desc(o_name, &inventory[INVEN_RARM], OD_NAME_ONLY);
- (void)curse_weapon(FALSE, INVEN_RARM);
+ if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) break;
+ dummy = INVEN_RARM;
+ if (buki_motteruka(INVEN_LARM))
+ {
+ dummy = INVEN_LARM;
+ if (buki_motteruka(INVEN_RARM) && one_in_(2)) dummy = INVEN_RARM;
+ }
+ object_desc(o_name, &inventory[dummy], OD_NAME_ONLY);
+ (void)curse_weapon(FALSE, dummy);
#ifdef JP
reward = format("%s¤¬Ç˲õ¤µ¤ì¤¿¡£", o_name);
#else
}
activate_hi_summon(py, px, FALSE);
(void)activate_ty_curse(FALSE, &count);
- if (one_in_(2)) (void)curse_weapon(FALSE, INVEN_RARM);
+ if (one_in_(2))
+ {
+ dummy = 0;
+
+ if (buki_motteruka(INVEN_RARM))
+ {
+ dummy = INVEN_RARM;
+ if (buki_motteruka(INVEN_LARM) && one_in_(2)) dummy = INVEN_LARM;
+ }
+ else if (buki_motteruka(INVEN_LARM)) dummy = INVEN_LARM;
+
+ if (dummy) (void)curse_weapon(FALSE, dummy);
+ }
if (one_in_(2)) (void)curse_armor();
break;
case REW_DESTRUCT: