}
/*!
- * @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
/* Have some nightmares */
while(1)
{
- have_nightmare();
-
+ sanity_blast(NULL, FALSE);
if (!one_in_(3)) break;
}
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];
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!"));