teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L);
- if (old_ml && (old_cdis <= MAX_SIGHT) && !world_monster && los(py, px, oldfy, oldfx))
+ if (old_ml && (old_cdis <= MAX_SIGHT) && !world_monster && !p_ptr->inside_battle && los(py, px, oldfy, oldfx))
{
bool follow = FALSE;
/* Check for quest completion */
check_quest_completion(m_ptr);
+ if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
+ {
+ char m2_name[80];
+
+ monster_desc(m2_name, m_ptr, MD_INDEF_VISIBLE);
+ do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_TELE_LEVEL, m2_name);
+ }
+
delete_monster_idx(m_idx);
}
(void)set_monster_csleep(c_ptr->m_idx, 0);
/* Notice the "waking up" */
- if (is_seen(m_ptr))
+ if (m_ptr->ml)
{
/* Acquire the monster name */
monster_desc(m_name, m_ptr, 0);
else
item_tester_hook = item_tester_hook_identify;
- if (!can_get_item())
+ if (can_get_item())
+ {
+#ifdef JP
+ q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò´ÕÄꤷ¤Þ¤¹¤«? ";
+#else
+ q = "Identify which item? ";
+#endif
+ }
+ else
{
if (only_equip)
- {
item_tester_hook = object_is_weapon_armour_ammo;
- }
else
- {
item_tester_hook = NULL;
- }
+
+#ifdef JP
+ q = "¤¹¤Ù¤Æ´ÕÄêºÑ¤ß¤Ç¤¹¡£ ";
+#else
+ q = "All items are identified. ";
+#endif
}
/* Get an item */
#ifdef JP
-q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò´ÕÄꤷ¤Þ¤¹¤«? ";
-s = "´ÕÄꤹ¤ë¤Ù¤¥¢¥¤¥Æ¥à¤¬¤Ê¤¤¡£";
+ s = "´ÕÄꤹ¤ë¤Ù¤¥¢¥¤¥Æ¥à¤¬¤Ê¤¤¡£";
#else
- q = "Identify which item? ";
s = "You have nothing to identify.";
#endif
else
item_tester_hook = item_tester_hook_identify_fully;
- if (!can_get_item())
+ if (can_get_item())
+ {
+#ifdef JP
+ q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò*´ÕÄê*¤·¤Þ¤¹¤«? ";
+#else
+ q = "*Identify* which item? ";
+#endif
+ }
+ else
{
if (only_equip)
item_tester_hook = object_is_weapon_armour_ammo;
else
item_tester_hook = NULL;
+
+#ifdef JP
+ q = "¤¹¤Ù¤Æ*´ÕÄê*ºÑ¤ß¤Ç¤¹¡£ ";
+#else
+ q = "All items are *identified*. ";
+#endif
}
/* Get an item */
#ifdef JP
-q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò´ÕÄꤷ¤Þ¤¹¤«? ";
-s = "´ÕÄꤹ¤ë¤Ù¤¥¢¥¤¥Æ¥à¤¬¤Ê¤¤¡£";
+ s = "*´ÕÄê*¤¹¤ë¤Ù¤¥¢¥¤¥Æ¥à¤¬¤Ê¤¤¡£";
#else
- q = "Identify which item? ";
- s = "You have nothing to identify.";
+ s = "You have nothing to *identify*.";
#endif
if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR))) return (FALSE);
object_type *o_ptr;
char o_name[MAX_NLEN];
- /* Multishadow effects is determined by turn */
- if( p_ptr->multishadow && (turn & 1) )return 0;
+ if (CHECK_MULTISHADOW()) return 0;
if (p_ptr->inside_arena) return 0;
if (p_ptr->resist_acid) dam = (dam + 2) / 3;
if (double_resist) dam = (dam + 2) / 3;
- if ((!(double_resist || p_ptr->resist_acid)) &&
- one_in_(HURT_CHANCE))
- (void)do_dec_stat(A_CHR);
+ if (!CHECK_MULTISHADOW())
+ {
+ if ((!(double_resist || p_ptr->resist_acid)) &&
+ one_in_(HURT_CHANCE))
+ (void)do_dec_stat(A_CHR);
- /* If any armor gets hit, defend the player */
- if (minus_ac()) dam = (dam + 1) / 2;
+ /* If any armor gets hit, defend the player */
+ if (minus_ac()) dam = (dam + 1) / 2;
+ }
/* Take damage */
- get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
+ get_damage = take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
/* Inventory damage */
if (!(double_resist && p_ptr->resist_acid))
if (double_resist) dam = (dam + 2) / 3;
if ((!(double_resist || p_ptr->resist_elec)) &&
- one_in_(HURT_CHANCE))
+ one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW())
(void)do_dec_stat(A_DEX);
/* Take damage */
- get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
+ get_damage = take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
/* Inventory damage */
if (!(double_resist && p_ptr->resist_elec))
if (double_resist) dam = (dam + 2) / 3;
if ((!(double_resist || p_ptr->resist_fire)) &&
- one_in_(HURT_CHANCE))
+ one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW())
(void)do_dec_stat(A_STR);
/* Take damage */
- get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
+ get_damage = take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
/* Inventory damage */
if (!(double_resist && p_ptr->resist_fire))
if (double_resist) dam = (dam + 2) / 3;
if ((!(double_resist || p_ptr->resist_cold)) &&
- one_in_(HURT_CHANCE))
+ one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW())
(void)do_dec_stat(A_STR);
/* Take damage */
- get_damage=take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
+ get_damage = take_hit(DAMAGE_ATTACK, dam, kb_str, monspell);
/* Inventory damage */
if (!(double_resist && p_ptr->resist_cold))
if (new_r_idx != old_r_idx)
{
u32b mode = 0L;
+ bool preserve_hold_objects = back_m.hold_o_idx ? TRUE : FALSE;
+ s16b this_o_idx, next_o_idx = 0;
/* Get the monsters attitude */
if (is_friendly(m_ptr)) mode |= PM_FORCE_FRIENDLY;
if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
if (m_ptr->mflag2 & MFLAG2_NOPET) mode |= PM_NO_PET;
+ /* Mega-hack -- ignore held objects */
+ m_ptr->hold_o_idx = 0;
+
/* "Kill" the "old" monster */
delete_monster_idx(c_ptr->m_idx);
/* Create a new monster (no groups) */
if (place_monster_aux(0, y, x, new_r_idx, mode))
{
+ m_list[hack_m_idx_ii].nickname = back_m.nickname;
+ m_list[hack_m_idx_ii].parent_m_idx = back_m.parent_m_idx;
+ m_list[hack_m_idx_ii].hold_o_idx = back_m.hold_o_idx;
+
/* Success */
polymorphed = TRUE;
}
/* Re-initialize monster process */
mproc_init();
}
+ else preserve_hold_objects = FALSE;
+ }
+
+ /* Mega-hack -- preserve held objects */
+ if (preserve_hold_objects)
+ {
+ for (this_o_idx = back_m.hold_o_idx; this_o_idx; this_o_idx = next_o_idx)
+ {
+ /* Acquire object */
+ object_type *o_ptr = &o_list[this_o_idx];
+
+ /* Acquire next object */
+ next_o_idx = o_ptr->next_o_idx;
+
+ /* Held by new monster */
+ o_ptr->held_m_idx = hack_m_idx_ii;
+ }
+ }
+ else if (back_m.hold_o_idx) /* Failed (paranoia) */
+ {
+ /* Delete objects */
+ for (this_o_idx = back_m.hold_o_idx; this_o_idx; this_o_idx = next_o_idx)
+ {
+ /* Acquire next object */
+ next_o_idx = o_list[this_o_idx].next_o_idx;
+
+ /* Delete the object */
+ delete_object_idx(this_o_idx);
+ }
}
if (targeted) target_who = hack_m_idx_ii;