OSDN Git Service

have_nightmare() 関数の処理を sanity_blast() 処理にマージ。 / Merge have_nightmare() to sanity_bla...
authorDeskull <desull@users.sourceforge.jp>
Wed, 25 Feb 2015 14:07:00 +0000 (23:07 +0900)
committerDeskull <desull@users.sourceforge.jp>
Wed, 25 Feb 2015 14:07:00 +0000 (23:07 +0900)
src/bldg.c
src/cmd1.c
src/cmd6.c
src/externs.h
src/monster2.c
src/spells1.c

index d5d6aa3..e0fa5e0 100644 (file)
@@ -2087,245 +2087,6 @@ bool get_nightmare(int r_idx)
 }
 
 /*!
- * @brief 悪夢モード時に睡眠/麻痺に陥った際のEldritchHorror処理
- * @param r_idx 狂気の元凶となるモンスターのID
- * @return なし
- * @todo 重複関数あり、要リファクタリング。
- */
-void have_nightmare()
-{
-       bool happened = FALSE;
-       monster_race *r_ptr;
-       int power;
-       char m_name[80];
-       cptr desc;
-
-       get_mon_num_prep(get_nightmare, NULL);
-
-       r_ptr = &r_info[get_mon_num(MAX_DEPTH)];
-       power = r_ptr->level + 10;
-       desc = r_name + r_ptr->name;
-
-       get_mon_num_prep(NULL, NULL);
-
-
-       /* Describe it */
-#ifndef JP
-       if (!(r_ptr->flags1 & RF1_UNIQUE))
-               sprintf(m_name, "%s %s", (is_a_vowel(desc[0]) ? "an" : "a"), desc);
-       else
-#endif
-               sprintf(m_name, "%s", desc);
-
-       if (!(r_ptr->flags1 & RF1_UNIQUE))
-       {
-               if (r_ptr->flags1 & RF1_FRIENDS) power /= 2;
-       }
-       else power *= 2;
-
-       if (saving_throw(p_ptr->skill_sav * 100 / power))
-       {
-               msg_format(_("夢の中で%sに追いかけられた。", "%^s chases you through your dreams."), m_name);
-               /* Safe */
-               return;
-       }
-
-       if (p_ptr->image)
-       {
-               /* Something silly happens... */
-               msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
-                                       funny_desc[randint0(MAX_SAN_FUNNY)], m_name);
-
-               if (one_in_(3))
-               {
-                       msg_print(funny_comments[randint0(MAX_SAN_COMMENT)]);
-                       p_ptr->image = p_ptr->image + randint1(r_ptr->level);
-               }
-
-               /* Never mind; we can't see it clearly enough */
-               return;
-       }
-
-       /* Something frightening happens... */
-       msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
-                                 horror_desc[randint0(MAX_SAN_HORROR)], desc);
-
-       r_ptr->r_flags2 |= RF2_ELDRITCH_HORROR;
-
-       if (!p_ptr->mimic_form)
-       {
-               switch (p_ptr->prace)
-               {
-               /* Demons may make a saving throw */
-               case RACE_IMP:
-               case RACE_DEMON:
-                       if (saving_throw(20 + p_ptr->lev)) return;
-                       break;
-               /* Undead may make a saving throw */
-               case RACE_SKELETON:
-               case RACE_ZOMBIE:
-               case RACE_SPECTRE:
-               case RACE_VAMPIRE:
-                       if (saving_throw(10 + p_ptr->lev)) return;
-                       break;
-               }
-       }
-       else
-       {
-               /* Demons may make a saving throw */
-               if (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON)
-               {
-                       if (saving_throw(20 + p_ptr->lev)) return;
-               }
-               /* Undead may make a saving throw */
-               else if (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD)
-               {
-                       if (saving_throw(10 + p_ptr->lev)) return;
-               }
-       }
-
-       /* Mind blast */
-       if (!saving_throw(p_ptr->skill_sav * 100 / power))
-       {
-               if (!p_ptr->resist_conf)
-               {
-                       (void)set_confused(p_ptr->confused + randint0(4) + 4);
-               }
-               if (!p_ptr->resist_chaos && one_in_(3))
-               {
-                       (void)set_image(p_ptr->image + randint0(250) + 150);
-               }
-               return;
-       }
-
-       /* Lose int & wis */
-       if (!saving_throw(p_ptr->skill_sav * 100 / power))
-       {
-               do_dec_stat(A_INT);
-               do_dec_stat(A_WIS);
-               return;
-       }
-
-       /* Brain smash */
-       if (!saving_throw(p_ptr->skill_sav * 100 / power))
-       {
-               if (!p_ptr->resist_conf)
-               {
-                       (void)set_confused(p_ptr->confused + randint0(4) + 4);
-               }
-               if (!p_ptr->free_act)
-               {
-                       (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
-               }
-               while (!saving_throw(p_ptr->skill_sav))
-               {
-                       (void)do_dec_stat(A_INT);
-               }
-               while (!saving_throw(p_ptr->skill_sav))
-               {
-                       (void)do_dec_stat(A_WIS);
-               }
-               if (!p_ptr->resist_chaos)
-               {
-                       (void)set_image(p_ptr->image + randint0(250) + 150);
-               }
-               return;
-       }
-
-
-       /* Amnesia */
-       if (!saving_throw(p_ptr->skill_sav * 100 / power))
-       {
-               if (lose_all_info())
-               {
-                       msg_print(_("あまりの恐怖に全てのことを忘れてしまった!", "You forget everything in your utmost terror!"));
-               }
-               return;
-       }
-
-       /* Else gain permanent insanity */
-       if ((p_ptr->muta3 & MUT3_MORONIC) && (p_ptr->muta2 & MUT2_BERS_RAGE) &&
-               ((p_ptr->muta2 & MUT2_COWARDICE) || (p_ptr->resist_fear)) &&
-               ((p_ptr->muta2 & MUT2_HALLU) || (p_ptr->resist_chaos)))
-       {
-               /* The poor bastard already has all possible insanities! */
-               return;
-       }
-
-       while (!happened)
-       {
-               switch (randint1(4))
-               {
-                       case 1:
-                       {
-                               if (!(p_ptr->muta3 & MUT3_MORONIC))
-                               {
-                                       if ((p_ptr->stat_use[A_INT] < 4) && (p_ptr->stat_use[A_WIS] < 4))
-                                       {
-                                               msg_print(_("あなたは完璧な馬鹿になったような気がした。しかしそれは元々だった。", "You turn into an utter moron!"));
-                                       }
-                                       else
-                                       {
-                                               msg_print(_("あなたは完璧な馬鹿になった!", "You turn into an utter moron!"));
-                                       }
-
-                                       if (p_ptr->muta3 & MUT3_HYPER_INT)
-                                       {
-                                               msg_print(_("あなたの脳は生体コンピュータではなくなった。", "Your brain is no longer a living computer."));
-                                               p_ptr->muta3 &= ~(MUT3_HYPER_INT);
-                                       }
-                                       p_ptr->muta3 |= MUT3_MORONIC;
-                                       happened = TRUE;
-                               }
-                               break;
-                       }
-                       case 2:
-                       {
-                               if (!(p_ptr->muta2 & MUT2_COWARDICE) && !p_ptr->resist_fear)
-                               {
-                                       msg_print(_("あなたはパラノイアになった!", "You become paranoid!"));
-
-                                       /* Duh, the following should never happen, but anyway... */
-                                       if (p_ptr->muta3 & MUT3_FEARLESS)
-                                       {
-                                               msg_print(_("あなたはもう恐れ知らずではなくなった。", "You are no longer fearless."));
-                                               p_ptr->muta3 &= ~(MUT3_FEARLESS);
-                                       }
-
-                                       p_ptr->muta2 |= MUT2_COWARDICE;
-                                       happened = TRUE;
-                               }
-                               break;
-                       }
-                       case 3:
-                       {
-                               if (!(p_ptr->muta2 & MUT2_HALLU) && !p_ptr->resist_chaos)
-                               {
-                                       msg_print(_("幻覚をひき起こす精神錯乱に陥った!", "You are afflicted by a hallucinatory insanity!"));
-                                       p_ptr->muta2 |= MUT2_HALLU;
-                                       happened = TRUE;
-                               }
-                               break;
-                       }
-                       default:
-                       {
-                               if (!(p_ptr->muta2 & MUT2_BERS_RAGE))
-                               {
-                                       msg_print(_("激烈な感情の発作におそわれるようになった!", "You become subject to fits of berserk rage!"));
-                                       p_ptr->muta2 |= MUT2_BERS_RAGE;
-                                       happened = TRUE;
-                               }
-                               break;
-                       }
-               }
-       }
-
-       p_ptr->update |= PU_BONUS;
-       handle_stuff();
-}
-
-
-/*!
  * @brief 宿屋の利用サブルーチン
  * @details inn commands\n
  * Note that resting for the night was a perfect way to avoid player\n
@@ -2388,8 +2149,7 @@ static bool inn_comm(int cmd)
                                        /* Have some nightmares */
                                        while(1)
                                        {
-                                               have_nightmare();
-
+                                               sanity_blast(NULL, FALSE);
                                                if (!one_in_(3)) break;
                                        }
 
index 8c6c394..fe84b6a 100644 (file)
@@ -1241,7 +1241,7 @@ static void hit_trap(bool break_trap)
                                        msg_print(_("身の毛もよだつ光景が頭に浮かんだ。", "A horrible vision enters your mind."));
 
                                        /* Have some nightmares */
-                                       have_nightmare();
+                                       sanity_blast(NULL, FALSE);
 
                                }
                                (void)set_paralyzed(p_ptr->paralyzed + randint0(10) + 5);
index 7107cd0..6cd9763 100644 (file)
@@ -810,7 +810,7 @@ static void do_cmd_quaff_potion_aux(int item)
                                        msg_print(_("恐ろしい光景が頭に浮かんできた。", "A horrible vision enters your mind."));
 
                                        /* Have some nightmares */
-                                       have_nightmare();
+                                       sanity_blast(NULL, FALSE);
                                }
                                if (set_paralyzed(p_ptr->paralyzed + randint0(4) + 4))
                                {
index 351a54f..010bc3e 100644 (file)
@@ -1296,7 +1296,6 @@ extern void move_to_black_market(object_type * o_ptr);
 
 /* bldg.c */
 extern bool get_nightmare(int r_idx);
-extern void have_nightmare(void);
 extern void battle_monsters(void);
 extern void do_cmd_bldg(void);
 extern void do_cmd_quest(void);
index 23049f0..822213b 100644 (file)
@@ -1962,7 +1962,7 @@ void sanity_blast(monster_type *m_ptr, bool necro)
 
        if (p_ptr->inside_battle || !character_dungeon) return;
 
-       if (!necro)
+       if (!necro && m_ptr)
        {
                char            m_name[80];
                monster_race    *r_ptr = &r_info[m_ptr->ap_r_idx];
@@ -2043,6 +2043,97 @@ void sanity_blast(monster_type *m_ptr, bool necro)
                        if (saving_throw(25 + p_ptr->lev)) return;
                }
        }
+       else if(!necro)
+       {
+               bool happened = FALSE;
+               monster_race *r_ptr;
+               int power;
+               char m_name[80];
+               cptr desc;
+
+               get_mon_num_prep(get_nightmare, NULL);
+
+               r_ptr = &r_info[get_mon_num(MAX_DEPTH)];
+               power = r_ptr->level + 10;
+               desc = r_name + r_ptr->name;
+
+               get_mon_num_prep(NULL, NULL);
+
+               /* Describe it */
+#ifndef JP
+               if (!(r_ptr->flags1 & RF1_UNIQUE))
+                       sprintf(m_name, "%s %s", (is_a_vowel(desc[0]) ? "an" : "a"), desc);
+               else
+#endif
+               sprintf(m_name, "%s", desc);
+
+               if (!(r_ptr->flags1 & RF1_UNIQUE))
+               {
+                       if (r_ptr->flags1 & RF1_FRIENDS) power /= 2;
+               }
+               else power *= 2;
+
+               if (saving_throw(p_ptr->skill_sav * 100 / power))
+               {
+                       msg_format(_("夢の中で%sに追いかけられた。", "%^s chases you through your dreams."), m_name);
+                       /* Safe */
+                       return;
+               }
+
+               if (p_ptr->image)
+               {
+                       /* Something silly happens... */
+                       msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
+                                               funny_desc[randint0(MAX_SAN_FUNNY)], m_name);
+
+                       if (one_in_(3))
+                       {
+                               msg_print(funny_comments[randint0(MAX_SAN_COMMENT)]);
+                               p_ptr->image = p_ptr->image + randint1(r_ptr->level);
+                       }
+
+                       /* Never mind; we can't see it clearly enough */
+                       return;
+               }
+
+               /* Something frightening happens... */
+               msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
+                                 horror_desc[randint0(MAX_SAN_HORROR)], desc);
+
+               r_ptr->r_flags2 |= RF2_ELDRITCH_HORROR;
+
+               if (!p_ptr->mimic_form)
+               {
+                       switch (p_ptr->prace)
+                       {
+                       /* Demons may make a saving throw */
+                       case RACE_IMP:
+                       case RACE_DEMON:
+                               if (saving_throw(20 + p_ptr->lev)) return;
+                               break;
+                       /* Undead may make a saving throw */
+                       case RACE_SKELETON:
+                       case RACE_ZOMBIE:
+                       case RACE_SPECTRE:
+                       case RACE_VAMPIRE:
+                               if (saving_throw(10 + p_ptr->lev)) return;
+                               break;
+                       }
+               }
+               else
+               {
+                       /* Demons may make a saving throw */
+                       if (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON)
+                       {
+                               if (saving_throw(20 + p_ptr->lev)) return;
+                       }
+                       /* Undead may make a saving throw */
+                       else if (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD)
+                       {
+                               if (saving_throw(10 + p_ptr->lev)) return;
+                       }
+               }
+       }
        else
        {
                msg_print(_("ネクロノミコンを読んで正気を失った!", "Your sanity is shaken by reading the Necronomicon!"));
index 59ba66e..a7d9b7f 100644 (file)
@@ -5890,7 +5890,7 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int
                        {
                 msg_print(_("恐ろしい光景が頭に浮かんできた。", "A horrible vision enters your mind."));
                                /* Have some nightmares */
-                               have_nightmare();
+                               sanity_blast(NULL, FALSE);
                        }
 
                        set_paralyzed(p_ptr->paralyzed + dam);