OSDN Git Service

[Implement] #37285 量子生物が確率的に消滅する処理を変更し、ユニークならばショートテレポートまたはテレポートアウェイ (距離10)が発動するようにした...
[hengband/hengband.git] / src / monster-process.c
index 106284a..1a38a1e 100644 (file)
@@ -1307,30 +1307,54 @@ void process_monster(player_type *target_ptr, MONSTER_IDX m_idx)
                if (!randint0(2)) return;
 
                /* Sometimes die */
-               if (!randint0((m_idx % 100) + 10) && !(r_ptr->flags1 & RF1_QUESTOR))
+               if (!randint0((m_idx % 100) + 10))
                {
-                       bool sad = FALSE;
-
-                       if (is_pet(m_ptr) && !(m_ptr->ml)) sad = TRUE;
-
-                       if (see_m)
+                       if ((r_ptr->flags1 & RF1_UNIQUE) == 0)
                        {
-                               GAME_TEXT m_name[MAX_NLEN];
-                               monster_desc(target_ptr, m_name, m_ptr, 0);
+                               if (!(r_ptr->flags1 & RF1_QUESTOR))
+                               {
+                                       if (see_m)
+                                       {
+                                               GAME_TEXT m_name[MAX_NLEN];
+                                               monster_desc(target_ptr, m_name, m_ptr, 0);
+                                               msg_format(_("%sは消え去った!", "%^s disappears!"), m_name);
+                                       }
 
-                               msg_format(_("%sは消え去った!", "%^s disappears!"), m_name);
+                                       monster_death(target_ptr, m_idx, FALSE);
+                                       delete_monster_idx(target_ptr, m_idx);
+                                       if (is_pet(m_ptr) && !(m_ptr->ml))
+                                       {
+                                               msg_print(_("少しの間悲しい気分になった。", "You feel sad for a moment."));
+                                       }
+
+                                       return;
+                               }
                        }
+                       else
+                       {
+                               if (see_m)
+                               {
+                                       GAME_TEXT m_name[MAX_NLEN];
+                                       monster_desc(target_ptr, m_name, m_ptr, 0);
+                                       msg_format(_("%sは量子的効果を起こした!", "%^s produced a quantum effect!"), m_name);
+                               }
+                               else
+                               {
+                                       msg_print(_("量子的効果が起こった!", "A quantum effect was produced!"));
+                               }
 
-                       /* Generate treasure, etc */
-                       monster_death(target_ptr, m_idx, FALSE);
+                               bool target = one_in_(2);
+                               const int blink = 32 * 5 + 4;
+                               if (target)
+                               {
+                                       (void)monspell_to_monster(target_ptr, blink, m_ptr->fy, m_ptr->fx, m_idx, m_idx);
 
-                       delete_monster_idx(target_ptr, m_idx);
-                       if (sad)
-                       {
-                               msg_print(_("少しの間悲しい気分になった。", "You feel sad for a moment."));
+                               }
+                               else
+                               {
+                                       teleport_player_away(m_idx, target_ptr, 10, TRUE);
+                               }
                        }
-
-                       return;
                }
        }