2 * todo 単体で2400行を超えている。要分割
3 * @brief 魔法によるモンスターへの効果まとめ
9 #include "effect/effect-monster.h"
10 #include "spells-effect-util.h"
11 #include "player-damage.h"
14 #include "monster-spell.h"
16 #include "io/write-diary.h"
17 #include "main/sound-definitions-table.h"
18 #include "player-move.h"
19 #include "monster-status.h"
20 #include "player-effects.h"
21 #include "spells-diceroll.h"
22 #include "monsterrace-hook.h"
23 #include "cmd/cmd-pet.h" // 暫定、後で消すかも.
24 #include "combat/melee.h"
25 #include "core.h" // 暫定、後で消す.
31 monster_type *m_caster_ptr;
49 GAME_TEXT m_name[MAX_NLEN];
51 PARAMETER_VALUE photo;
61 EFFECT_ID effect_type;
67 static void substitute_effect_monster(effect_monster *effect_monster_ptr, MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_POINT dam, EFFECT_ID effect_type, BIT_FLAGS flag, bool see_s_msg)
69 effect_monster_ptr->who = who;
70 effect_monster_ptr->r = r;
71 effect_monster_ptr->y = y;
72 effect_monster_ptr->x = x;
73 effect_monster_ptr->dam = dam;
74 effect_monster_ptr->effect_type = effect_type;
75 effect_monster_ptr->flag = flag;
76 effect_monster_ptr->see_s_msg = see_s_msg;
81 * @brief effect_monster構造体を初期化する
82 * @param caster_ptr プレーヤーへの参照ポインタ
83 * @param effect_monster_ptr モンスター効果構造体への参照ポインタ
84 * @param 魔法を発動したモンスター (0ならばプレーヤー)
89 void initialize_effect_monster(player_type *caster_ptr, effect_monster *effect_monster_ptr, MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_POINT dam, EFFECT_ID effect_type, BIT_FLAGS flag, bool see_s_msg)
91 substitute_effect_monster(effect_monster_ptr, who, r, y, x, dam, effect_type, flag, see_s_msg);
93 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
94 effect_monster_ptr->g_ptr = &floor_ptr->grid_array[effect_monster_ptr->y][effect_monster_ptr->x];
95 effect_monster_ptr->m_ptr = &floor_ptr->m_list[effect_monster_ptr->g_ptr->m_idx];
96 effect_monster_ptr->m_caster_ptr = (effect_monster_ptr->who > 0) ? &floor_ptr->m_list[effect_monster_ptr->who] : NULL;
97 effect_monster_ptr->r_ptr = &r_info[effect_monster_ptr->m_ptr->r_idx];
98 effect_monster_ptr->seen = effect_monster_ptr->m_ptr->ml;
99 effect_monster_ptr->seen_msg = is_seen(effect_monster_ptr->m_ptr);
100 effect_monster_ptr->slept = (bool)MON_CSLEEP(effect_monster_ptr->m_ptr);
101 effect_monster_ptr->obvious = FALSE;
102 effect_monster_ptr->known = ((effect_monster_ptr->m_ptr->cdis <= MAX_SIGHT) || caster_ptr->phase_out);
103 effect_monster_ptr->skipped = FALSE;
104 effect_monster_ptr->get_angry = FALSE;
105 effect_monster_ptr->do_poly = FALSE;
106 effect_monster_ptr->do_dist = 0;
107 effect_monster_ptr->do_conf = 0;
108 effect_monster_ptr->do_stun = 0;
109 effect_monster_ptr->do_sleep = 0;
110 effect_monster_ptr->do_fear = 0;
111 effect_monster_ptr->do_time = 0;
112 effect_monster_ptr->heal_leper = FALSE;
113 effect_monster_ptr->photo = 0;
114 effect_monster_ptr->note = NULL;
115 effect_monster_ptr->note_dies = extract_note_dies(real_r_idx(effect_monster_ptr->m_ptr));
116 effect_monster_ptr->caster_lev = (effect_monster_ptr->who > 0) ? r_info[effect_monster_ptr->m_caster_ptr->r_idx].level : (caster_ptr->lev * 2);
121 * @brief 汎用的なビーム/ボルト/ボール系によるモンスターへの効果処理 / Handle a beam/bolt/ball causing damage to a monster.
122 * @param caster_ptr プレーヤーへの参照ポインタ
123 * @param who 魔法を発動したモンスター(0ならばプレイヤー) / Index of "source" monster (zero for "player")
124 * @param r 効果半径(ビーム/ボルト = 0 / ボール = 1以上) / Radius of explosion (0 = beam/bolt, 1 to 9 = ball)
125 * @param y 目標y座標 / Target y location (or location to travel "towards")
126 * @param x 目標x座標 / Target x location (or location to travel "towards")
127 * @param dam 基本威力 / Base damage roll to apply to affected monsters (or player)
128 * @param effect_type 効果属性 / Type of damage to apply to monsters (and objects)
130 * @param see_s_msg TRUEならばメッセージを表示する
131 * @return 何か一つでも効力があればTRUEを返す / TRUE if any "effects" of the projection were observed, else FALSE
133 bool affect_monster(player_type *caster_ptr, MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_POINT dam, EFFECT_ID effect_type, BIT_FLAGS flag, bool see_s_msg)
135 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
136 effect_monster tmp_effect;
137 effect_monster *effect_monster_ptr = &tmp_effect;
138 initialize_effect_monster(caster_ptr, effect_monster_ptr, who, r, y, x, dam, effect_type, flag, see_s_msg);
140 if (!effect_monster_ptr->g_ptr->m_idx) return FALSE;
142 /* Never affect projector */
143 if (effect_monster_ptr->who && (effect_monster_ptr->g_ptr->m_idx == effect_monster_ptr->who)) return FALSE;
144 if ((effect_monster_ptr->g_ptr->m_idx == caster_ptr->riding) &&
145 !effect_monster_ptr->who &&
146 !(effect_monster_ptr->effect_type == GF_OLD_HEAL) &&
147 !(effect_monster_ptr->effect_type == GF_OLD_SPEED) &&
148 !(effect_monster_ptr->effect_type == GF_STAR_HEAL))
150 if (sukekaku && ((effect_monster_ptr->m_ptr->r_idx == MON_SUKE) || (effect_monster_ptr->m_ptr->r_idx == MON_KAKU))) return FALSE;
152 /* Don't affect already death monsters */
153 /* Prevents problems with chain reactions of exploding monsters */
154 if (effect_monster_ptr->m_ptr->hp < 0) return FALSE;
156 effect_monster_ptr->dam = (effect_monster_ptr->dam + effect_monster_ptr->r) / (effect_monster_ptr->r + 1);
158 /* Get the monster name (BEFORE polymorphing) */
159 monster_desc(caster_ptr, effect_monster_ptr->m_name, effect_monster_ptr->m_ptr, 0);
161 /* Get the monster possessive ("his"/"her"/"its") */
162 monster_desc(caster_ptr, effect_monster_ptr->m_poss, effect_monster_ptr->m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
164 if (caster_ptr->riding && (effect_monster_ptr->g_ptr->m_idx == caster_ptr->riding)) disturb(caster_ptr, TRUE, TRUE);
166 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_ALL &&
167 effect_monster_ptr->effect_type != GF_OLD_CLONE && effect_monster_ptr->effect_type != GF_STAR_HEAL && effect_monster_ptr->effect_type != GF_OLD_HEAL
168 && effect_monster_ptr->effect_type != GF_OLD_SPEED && effect_monster_ptr->effect_type != GF_CAPTURE && effect_monster_ptr->effect_type != GF_PHOTO)
170 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
171 effect_monster_ptr->dam = 0;
172 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_ALL);
173 if (effect_monster_ptr->effect_type == GF_LITE_WEAK || effect_monster_ptr->effect_type == GF_KILL_WALL) effect_monster_ptr->skipped = TRUE;
177 switch (effect_monster_ptr->effect_type)
181 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
186 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
187 if (effect_monster_ptr->r_ptr->flagsr & RFR_IM_ACID)
189 effect_monster_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
190 effect_monster_ptr->dam /= 9;
191 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_IM_ACID);
197 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
198 if (effect_monster_ptr->r_ptr->flagsr & RFR_IM_ELEC)
200 effect_monster_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
201 effect_monster_ptr->dam /= 9;
202 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_IM_ELEC);
208 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
209 if (effect_monster_ptr->r_ptr->flagsr & RFR_IM_FIRE)
211 effect_monster_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
212 effect_monster_ptr->dam /= 9;
213 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_IM_FIRE);
215 else if (effect_monster_ptr->r_ptr->flags3 & (RF3_HURT_FIRE))
217 effect_monster_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
218 effect_monster_ptr->dam *= 2;
219 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_FIRE);
225 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
226 if (effect_monster_ptr->r_ptr->flagsr & RFR_IM_COLD)
228 effect_monster_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
229 effect_monster_ptr->dam /= 9;
230 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
232 else if (effect_monster_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
234 effect_monster_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
235 effect_monster_ptr->dam *= 2;
236 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
242 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
243 if (effect_monster_ptr->r_ptr->flagsr & RFR_IM_POIS)
245 effect_monster_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
246 effect_monster_ptr->dam /= 9;
247 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_IM_POIS);
253 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
254 if (effect_monster_ptr->r_ptr->flagsr & RFR_IM_POIS)
256 effect_monster_ptr->note = _("には耐性がある。", " resists.");
257 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
258 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_IM_POIS);
260 else if (one_in_(3)) effect_monster_ptr->do_poly = TRUE;
265 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
266 if (effect_monster_ptr->r_ptr->flags3 & RF3_GOOD)
268 effect_monster_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
269 effect_monster_ptr->dam *= 2;
270 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
276 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
277 if (effect_monster_ptr->r_ptr->flags3 & RF3_EVIL)
279 effect_monster_ptr->dam *= 2;
280 effect_monster_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
281 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= RF3_EVIL;
285 effect_monster_ptr->note = _("には耐性がある。", " resists.");
286 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
292 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
297 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
298 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_PLAS)
300 effect_monster_ptr->note = _("には耐性がある。", " resists.");
301 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
302 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_PLAS);
309 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
310 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_NETH)
312 if (effect_monster_ptr->r_ptr->flags3 & RF3_UNDEAD)
314 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
315 effect_monster_ptr->dam = 0;
316 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
320 effect_monster_ptr->note = _("には耐性がある。", " resists.");
321 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
323 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_NETH);
325 else if (effect_monster_ptr->r_ptr->flags3 & RF3_EVIL)
327 effect_monster_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
328 effect_monster_ptr->dam /= 2;
329 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
336 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
337 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_WATE)
339 if ((effect_monster_ptr->m_ptr->r_idx == MON_WATER_ELEM) || (effect_monster_ptr->m_ptr->r_idx == MON_UNMAKER))
341 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
342 effect_monster_ptr->dam = 0;
346 effect_monster_ptr->note = _("には耐性がある。", " resists.");
347 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
349 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_WATE);
356 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
357 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_CHAO)
359 effect_monster_ptr->note = _("には耐性がある。", " resists.");
360 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
361 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_CHAO);
363 else if ((effect_monster_ptr->r_ptr->flags3 & RF3_DEMON) && one_in_(3))
365 effect_monster_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
366 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
367 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
371 effect_monster_ptr->do_poly = TRUE;
372 effect_monster_ptr->do_conf = (5 + randint1(11) + effect_monster_ptr->r) / (effect_monster_ptr->r + 1);
379 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
380 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_SHAR)
382 effect_monster_ptr->note = _("には耐性がある。", " resists.");
383 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
384 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_SHAR);
391 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
392 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_SHAR)
394 effect_monster_ptr->note = _("はいくらか耐性を示した。", " resists somewhat.");
395 effect_monster_ptr->dam /= 2;
396 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_SHAR);
403 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
404 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_SOUN)
406 effect_monster_ptr->note = _("には耐性がある。", " resists.");
407 effect_monster_ptr->dam *= 2; effect_monster_ptr->dam /= randint1(6) + 6;
408 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_SOUN);
411 effect_monster_ptr->do_stun = (10 + randint1(15) + effect_monster_ptr->r) / (effect_monster_ptr->r + 1);
417 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
418 if (effect_monster_ptr->r_ptr->flags3 & RF3_NO_CONF)
420 effect_monster_ptr->note = _("には耐性がある。", " resists.");
421 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
422 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
425 effect_monster_ptr->do_conf = (10 + randint1(15) + effect_monster_ptr->r) / (effect_monster_ptr->r + 1);
431 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
432 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_DISE)
434 effect_monster_ptr->note = _("には耐性がある。", " resists.");
435 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
436 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_DISE);
443 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
444 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_NEXU)
446 effect_monster_ptr->note = _("には耐性がある。", " resists.");
447 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
448 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_NEXU);
455 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
456 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_WALL)
458 effect_monster_ptr->note = _("には耐性がある。", " resists.");
459 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
460 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_WALL);
463 effect_monster_ptr->do_stun = (randint1(15) + effect_monster_ptr->r) / (effect_monster_ptr->r + 1);
469 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
470 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_INER)
472 effect_monster_ptr->note = _("には耐性がある。", " resists.");
473 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
474 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_INER);
478 /* Powerful monsters can resist */
479 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
480 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
482 effect_monster_ptr->obvious = FALSE;
484 /* Normal monsters slow down */
487 if (set_monster_slow(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_SLOW(effect_monster_ptr->m_ptr) + 50))
489 effect_monster_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
498 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
499 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_TIME)
501 effect_monster_ptr->note = _("には耐性がある。", " resists.");
502 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
503 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_TIME);
506 effect_monster_ptr->do_time = (effect_monster_ptr->dam + 1) / 2;
512 bool resist_tele = FALSE;
514 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
515 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_TELE)
517 if (effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE))
519 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
520 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected!");
523 else if (effect_monster_ptr->r_ptr->level > randint1(100))
525 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
526 effect_monster_ptr->note = _("には耐性がある!", " resists!");
531 if (!resist_tele) effect_monster_ptr->do_dist = 10;
532 else effect_monster_ptr->do_dist = 0;
534 if (caster_ptr->riding && (effect_monster_ptr->g_ptr->m_idx == caster_ptr->riding)) effect_monster_ptr->do_dist = 0;
536 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_GRAV)
538 effect_monster_ptr->note = _("には耐性がある!", " resists!");
539 effect_monster_ptr->dam *= 3; effect_monster_ptr->dam /= randint1(6) + 6;
540 effect_monster_ptr->do_dist = 0;
541 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_GRAV);
546 /* Powerful monsters can resist */
547 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
548 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
550 effect_monster_ptr->obvious = FALSE;
552 /* Normal monsters slow down */
555 if (set_monster_slow(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_SLOW(effect_monster_ptr->m_ptr) + 50))
557 effect_monster_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
562 effect_monster_ptr->do_stun = damroll((effect_monster_ptr->caster_lev / 20) + 3, (effect_monster_ptr->dam)) + 1;
564 /* Attempt a saving throw */
565 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
566 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
569 effect_monster_ptr->do_stun = 0;
570 /* No effect_monster_ptr->obvious effect */
571 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected!");
572 effect_monster_ptr->obvious = FALSE;
582 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
585 case GF_DISINTEGRATE:
587 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
588 if (effect_monster_ptr->r_ptr->flags3 & RF3_HURT_ROCK)
590 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
591 effect_monster_ptr->note = _("の皮膚がただれた!", " loses some skin!");
592 effect_monster_ptr->note_dies = _("は蒸発した!", " evaporates!");
593 effect_monster_ptr->dam *= 2;
600 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
601 if (!(los(caster_ptr, effect_monster_ptr->m_ptr->fy, effect_monster_ptr->m_ptr->fx, caster_ptr->y, caster_ptr->x)))
603 if (effect_monster_ptr->seen_msg)
604 msg_format(_("%sはあなたが見えないので影響されない!", "%^s can't see you, and isn't affected!"), effect_monster_ptr->m_name);
605 effect_monster_ptr->skipped = TRUE;
609 if (effect_monster_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
611 effect_monster_ptr->dam = 0;
612 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
613 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
616 else if ((effect_monster_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
617 (effect_monster_ptr->r_ptr->flags3 & RF3_ANIMAL) ||
618 (effect_monster_ptr->r_ptr->level > randint1(3 * effect_monster_ptr->dam)))
620 effect_monster_ptr->note = _("には耐性がある!", " resists!");
621 effect_monster_ptr->dam /= 3;
624 * Powerful demons & undead can turn a mindcrafter's
625 * attacks back on them
627 if ((effect_monster_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
628 (effect_monster_ptr->r_ptr->level > caster_ptr->lev / 2) &&
631 effect_monster_ptr->note = NULL;
632 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
633 (effect_monster_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
634 "%^ss corrupted mind backlashes your attack!")), effect_monster_ptr->m_name);
636 if ((randint0(100 + effect_monster_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
638 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
642 /* Injure +/- confusion */
643 monster_desc(caster_ptr, effect_monster_ptr->killer, effect_monster_ptr->m_ptr, MD_WRONGDOER_NAME);
644 take_hit(caster_ptr, DAMAGE_ATTACK, effect_monster_ptr->dam, effect_monster_ptr->killer, -1); /* has already been /3 */
645 if (one_in_(4) && !CHECK_MULTISHADOW(caster_ptr))
650 set_confused(caster_ptr, caster_ptr->confused + 3 + randint1(effect_monster_ptr->dam));
653 set_stun(caster_ptr, caster_ptr->stun + randint1(effect_monster_ptr->dam));
657 if (effect_monster_ptr->r_ptr->flags3 & RF3_NO_FEAR)
658 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
660 set_afraid(caster_ptr, caster_ptr->afraid + 3 + randint1(effect_monster_ptr->dam));
664 if (!caster_ptr->free_act)
665 (void)set_paralyzed(caster_ptr, caster_ptr->paralyzed + randint1(effect_monster_ptr->dam));
671 effect_monster_ptr->dam = 0;
675 if ((effect_monster_ptr->dam > 0) && one_in_(4))
680 effect_monster_ptr->do_conf = 3 + randint1(effect_monster_ptr->dam);
683 effect_monster_ptr->do_stun = 3 + randint1(effect_monster_ptr->dam);
686 effect_monster_ptr->do_fear = 3 + randint1(effect_monster_ptr->dam);
689 effect_monster_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
690 effect_monster_ptr->do_sleep = 3 + randint1(effect_monster_ptr->dam);
695 effect_monster_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
700 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
701 if (effect_monster_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
703 effect_monster_ptr->dam = 0;
704 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
706 else if ((effect_monster_ptr->r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
707 (effect_monster_ptr->r_ptr->flags3 & RF3_ANIMAL) ||
708 (effect_monster_ptr->r_ptr->level > randint1(3 * effect_monster_ptr->dam)))
710 effect_monster_ptr->note = _("には耐性がある!", " resists!");
711 effect_monster_ptr->dam /= 3;
714 * Powerful demons & undead can turn a mindcrafter's
715 * attacks back on them
717 if ((effect_monster_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
718 (effect_monster_ptr->r_ptr->level > caster_ptr->lev / 2) &&
721 effect_monster_ptr->note = NULL;
722 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
723 (effect_monster_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
724 "%^ss corrupted mind backlashes your attack!")), effect_monster_ptr->m_name);
725 if ((randint0(100 + effect_monster_ptr->r_ptr->level / 2) < caster_ptr->skill_sav) && !CHECK_MULTISHADOW(caster_ptr))
727 msg_print(_("あなたは効力を跳ね返した!", "You resist the effects!"));
731 monster_desc(caster_ptr, effect_monster_ptr->killer, effect_monster_ptr->m_ptr, MD_WRONGDOER_NAME);
732 if (!CHECK_MULTISHADOW(caster_ptr))
734 msg_print(_("超能力パワーを吸いとられた!", "Your psychic energy is drained!"));
735 caster_ptr->csp -= damroll(5, effect_monster_ptr->dam) / 2;
736 if (caster_ptr->csp < 0) caster_ptr->csp = 0;
737 caster_ptr->redraw |= PR_MANA;
738 caster_ptr->window |= (PW_SPELL);
740 take_hit(caster_ptr, DAMAGE_ATTACK, effect_monster_ptr->dam, effect_monster_ptr->killer, -1); /* has already been /3 */
743 effect_monster_ptr->dam = 0;
746 else if (effect_monster_ptr->dam > 0)
748 int b = damroll(5, effect_monster_ptr->dam) / 4;
749 concptr str = (caster_ptr->pclass == CLASS_MINDCRAFTER) ? _("超能力パワー", "psychic energy") : _("魔力", "mana");
750 concptr msg = _("あなたは%sの苦痛を%sに変換した!",
751 (effect_monster_ptr->seen ? "You convert %s's pain into %s!" :
752 "You convert %ss pain into %s!"));
753 msg_format(msg, effect_monster_ptr->m_name, str);
755 b = MIN(caster_ptr->msp, caster_ptr->csp + b);
757 caster_ptr->redraw |= PR_MANA;
758 caster_ptr->window |= (PW_SPELL);
761 effect_monster_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
766 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
769 if (caster_ptr->riding && (effect_monster_ptr->g_ptr->m_idx == caster_ptr->riding)) effect_monster_ptr->do_dist = 0;
770 else effect_monster_ptr->do_dist = 7;
773 effect_monster_ptr->do_stun = damroll((effect_monster_ptr->caster_lev / 20) + 3, effect_monster_ptr->dam) + 1;
774 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
775 (effect_monster_ptr->r_ptr->level > 5 + randint1(effect_monster_ptr->dam)))
777 effect_monster_ptr->do_stun = 0;
778 effect_monster_ptr->obvious = FALSE;
785 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
790 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
795 if (!is_hostile(effect_monster_ptr->m_ptr)) break;
796 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
797 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) ||
798 (effect_monster_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
799 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
801 if (effect_monster_ptr->r_ptr->flags3 & RF3_NO_CONF)
803 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
806 effect_monster_ptr->do_conf = 0;
809 * Powerful demons & undead can turn a mindcrafter's
810 * attacks back on them
812 if ((effect_monster_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_DEMON)) &&
813 (effect_monster_ptr->r_ptr->level > caster_ptr->lev / 2) &&
816 effect_monster_ptr->note = NULL;
817 msg_format(_("%^sの堕落した精神は攻撃を跳ね返した!",
818 (effect_monster_ptr->seen ? "%^s's corrupted mind backlashes your attack!" :
819 "%^ss corrupted mind backlashes your attack!")), effect_monster_ptr->m_name);
822 if (randint0(100 + effect_monster_ptr->r_ptr->level / 2) < caster_ptr->skill_sav)
824 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
828 /* Confuse, stun, terrify */
832 set_stun(caster_ptr, caster_ptr->stun + effect_monster_ptr->dam / 2);
835 set_confused(caster_ptr, caster_ptr->confused + effect_monster_ptr->dam / 2);
839 if (effect_monster_ptr->r_ptr->flags3 & RF3_NO_FEAR)
840 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
842 set_afraid(caster_ptr, caster_ptr->afraid + effect_monster_ptr->dam);
849 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
850 effect_monster_ptr->obvious = FALSE;
855 if (!common_saving_throw_charm(caster_ptr, effect_monster_ptr->dam, effect_monster_ptr->m_ptr))
857 effect_monster_ptr->note = _("があなたに隷属した。", " is in your thrall!");
858 set_pet(caster_ptr, effect_monster_ptr->m_ptr);
865 effect_monster_ptr->do_stun = effect_monster_ptr->dam / 2;
868 effect_monster_ptr->do_conf = effect_monster_ptr->dam / 2;
871 effect_monster_ptr->do_fear = effect_monster_ptr->dam;
876 effect_monster_ptr->dam = 0;
881 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
882 effect_monster_ptr->do_stun = (randint1(15) + 1) / (effect_monster_ptr->r + 1);
883 if (effect_monster_ptr->r_ptr->flagsr & RFR_IM_COLD)
885 effect_monster_ptr->note = _("にはかなり耐性がある!", " resists a lot.");
886 effect_monster_ptr->dam /= 9;
887 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_IM_COLD);
889 else if (effect_monster_ptr->r_ptr->flags3 & (RF3_HURT_COLD))
891 effect_monster_ptr->note = _("はひどい痛手をうけた。", " is hit hard.");
892 effect_monster_ptr->dam *= 2;
893 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_COLD);
900 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
901 if (!monster_living(effect_monster_ptr->m_ptr->r_idx))
903 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr))
905 if (effect_monster_ptr->r_ptr->flags3 & RF3_DEMON) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
906 if (effect_monster_ptr->r_ptr->flags3 & RF3_UNDEAD) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
907 if (effect_monster_ptr->r_ptr->flags3 & RF3_NONLIVING) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
909 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
910 effect_monster_ptr->obvious = FALSE;
911 effect_monster_ptr->dam = 0;
914 effect_monster_ptr->do_time = (effect_monster_ptr->dam + 7) / 8;
920 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
921 if (!monster_living(effect_monster_ptr->m_ptr->r_idx))
923 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr))
925 if (effect_monster_ptr->r_ptr->flags3 & RF3_DEMON) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
926 if (effect_monster_ptr->r_ptr->flags3 & RF3_UNDEAD) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
927 if (effect_monster_ptr->r_ptr->flags3 & RF3_NONLIVING) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NONLIVING);
929 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
930 effect_monster_ptr->obvious = FALSE;
931 effect_monster_ptr->dam = 0;
933 else if (((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) &&
934 (randint1(888) != 666)) ||
935 (((effect_monster_ptr->r_ptr->level + randint1(20)) > randint1((effect_monster_ptr->caster_lev / 2) + randint1(10))) &&
936 randint1(100) != 66))
938 effect_monster_ptr->note = _("には耐性がある!", " resists!");
939 effect_monster_ptr->obvious = FALSE;
940 effect_monster_ptr->dam = 0;
947 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
948 effect_monster_ptr->do_poly = TRUE;
950 /* Powerful monsters can resist */
951 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
952 (effect_monster_ptr->r_ptr->flags1 & RF1_QUESTOR) ||
953 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
955 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
956 effect_monster_ptr->do_poly = FALSE;
957 effect_monster_ptr->obvious = FALSE;
960 effect_monster_ptr->dam = 0;
965 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
967 if ((floor_ptr->inside_arena) || is_pet(effect_monster_ptr->m_ptr) || (effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (effect_monster_ptr->r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2)))
969 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
973 effect_monster_ptr->m_ptr->hp = effect_monster_ptr->m_ptr->maxhp;
974 if (multiply_monster(caster_ptr, effect_monster_ptr->g_ptr->m_idx, TRUE, 0L))
976 effect_monster_ptr->note = _("が分裂した!", " spawns!");
980 effect_monster_ptr->dam = 0;
985 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
987 (void)set_monster_csleep(caster_ptr, effect_monster_ptr->g_ptr->m_idx, 0);
989 if (effect_monster_ptr->m_ptr->maxhp < effect_monster_ptr->m_ptr->max_maxhp)
991 if (effect_monster_ptr->seen_msg) msg_format(_("%^sの強さが戻った。", "%^s recovers %s vitality."), effect_monster_ptr->m_name, effect_monster_ptr->m_poss);
992 effect_monster_ptr->m_ptr->maxhp = effect_monster_ptr->m_ptr->max_maxhp;
995 if (!effect_monster_ptr->dam)
997 if (caster_ptr->health_who == effect_monster_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
998 if (caster_ptr->riding == effect_monster_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
1005 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1008 (void)set_monster_csleep(caster_ptr, effect_monster_ptr->g_ptr->m_idx, 0);
1009 if (MON_STUNNED(effect_monster_ptr->m_ptr))
1011 if (effect_monster_ptr->seen_msg) msg_format(_("%^sは朦朧状態から立ち直った。", "%^s is no longer stunned."), effect_monster_ptr->m_name);
1012 (void)set_monster_stunned(caster_ptr, effect_monster_ptr->g_ptr->m_idx, 0);
1014 if (MON_CONFUSED(effect_monster_ptr->m_ptr))
1016 if (effect_monster_ptr->seen_msg) msg_format(_("%^sは混乱から立ち直った。", "%^s is no longer confused."), effect_monster_ptr->m_name);
1017 (void)set_monster_confused(caster_ptr, effect_monster_ptr->g_ptr->m_idx, 0);
1019 if (MON_MONFEAR(effect_monster_ptr->m_ptr))
1021 if (effect_monster_ptr->seen_msg) msg_format(_("%^sは勇気を取り戻した。", "%^s recovers %s courage."), effect_monster_ptr->m_name, effect_monster_ptr->m_poss);
1022 (void)set_monster_monfear(caster_ptr, effect_monster_ptr->g_ptr->m_idx, 0);
1025 if (effect_monster_ptr->m_ptr->hp < 30000) effect_monster_ptr->m_ptr->hp += effect_monster_ptr->dam;
1026 if (effect_monster_ptr->m_ptr->hp > effect_monster_ptr->m_ptr->maxhp) effect_monster_ptr->m_ptr->hp = effect_monster_ptr->m_ptr->maxhp;
1028 if (!effect_monster_ptr->who)
1030 chg_virtue(caster_ptr, V_VITALITY, 1);
1032 if (effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE)
1033 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
1035 if (is_friendly(effect_monster_ptr->m_ptr))
1036 chg_virtue(caster_ptr, V_HONOUR, 1);
1037 else if (!(effect_monster_ptr->r_ptr->flags3 & RF3_EVIL))
1039 if (effect_monster_ptr->r_ptr->flags3 & RF3_GOOD)
1040 chg_virtue(caster_ptr, V_COMPASSION, 2);
1042 chg_virtue(caster_ptr, V_COMPASSION, 1);
1045 if (effect_monster_ptr->r_ptr->flags3 & RF3_ANIMAL)
1046 chg_virtue(caster_ptr, V_NATURE, 1);
1049 if (effect_monster_ptr->m_ptr->r_idx == MON_LEPER)
1051 effect_monster_ptr->heal_leper = TRUE;
1052 if (!effect_monster_ptr->who) chg_virtue(caster_ptr, V_COMPASSION, 5);
1055 if (caster_ptr->health_who == effect_monster_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
1056 if (caster_ptr->riding == effect_monster_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
1058 effect_monster_ptr->note = _("は体力を回復したようだ。", " looks healthier.");
1060 effect_monster_ptr->dam = 0;
1065 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1067 if (set_monster_fast(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_FAST(effect_monster_ptr->m_ptr) + 100))
1069 effect_monster_ptr->note = _("の動きが速くなった。", " starts moving faster.");
1072 if (!effect_monster_ptr->who)
1074 if (effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE)
1075 chg_virtue(caster_ptr, V_INDIVIDUALISM, 1);
1076 if (is_friendly(effect_monster_ptr->m_ptr))
1077 chg_virtue(caster_ptr, V_HONOUR, 1);
1080 effect_monster_ptr->dam = 0;
1085 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1087 /* Powerful monsters can resist */
1088 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1089 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
1091 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1092 effect_monster_ptr->obvious = FALSE;
1096 if (set_monster_slow(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_SLOW(effect_monster_ptr->m_ptr) + 50))
1098 effect_monster_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
1102 effect_monster_ptr->dam = 0;
1107 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1109 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1110 (effect_monster_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
1111 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
1113 if (effect_monster_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
1115 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
1118 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1119 effect_monster_ptr->obvious = FALSE;
1123 effect_monster_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
1124 effect_monster_ptr->do_sleep = 500;
1127 effect_monster_ptr->dam = 0;
1130 case GF_STASIS_EVIL:
1132 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1134 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1135 !(effect_monster_ptr->r_ptr->flags3 & RF3_EVIL) ||
1136 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
1138 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1139 effect_monster_ptr->obvious = FALSE;
1143 effect_monster_ptr->note = _("は動けなくなった!", " is suspended!");
1144 effect_monster_ptr->do_sleep = 500;
1147 effect_monster_ptr->dam = 0;
1152 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1154 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1155 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
1157 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1158 effect_monster_ptr->obvious = FALSE;
1162 effect_monster_ptr->note = _("は動けなくなった!", " is suspended!");
1163 effect_monster_ptr->do_sleep = 500;
1166 effect_monster_ptr->dam = 0;
1172 vir = virtue_number(caster_ptr, V_HARMONY);
1175 effect_monster_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1178 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1181 effect_monster_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1184 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1186 if (common_saving_throw_charm(caster_ptr, effect_monster_ptr->dam, effect_monster_ptr->m_ptr))
1188 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1189 effect_monster_ptr->obvious = FALSE;
1191 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1193 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1195 effect_monster_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1196 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1200 effect_monster_ptr->note = _("は突然友好的になったようだ!", " suddenly seems friendly!");
1201 set_pet(caster_ptr, effect_monster_ptr->m_ptr);
1203 chg_virtue(caster_ptr, V_INDIVIDUALISM, -1);
1204 if (effect_monster_ptr->r_ptr->flags3 & RF3_ANIMAL)
1205 chg_virtue(caster_ptr, V_NATURE, 1);
1208 effect_monster_ptr->dam = 0;
1211 case GF_CONTROL_UNDEAD:
1214 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1216 vir = virtue_number(caster_ptr, V_UNLIFE);
1219 effect_monster_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1222 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1225 effect_monster_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1228 if (common_saving_throw_control(caster_ptr, effect_monster_ptr->dam, effect_monster_ptr->m_ptr) ||
1229 !(effect_monster_ptr->r_ptr->flags3 & RF3_UNDEAD))
1231 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1232 effect_monster_ptr->obvious = FALSE;
1233 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1235 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1237 effect_monster_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1238 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1242 effect_monster_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
1243 set_pet(caster_ptr, effect_monster_ptr->m_ptr);
1246 effect_monster_ptr->dam = 0;
1249 case GF_CONTROL_DEMON:
1252 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1254 vir = virtue_number(caster_ptr, V_UNLIFE);
1257 effect_monster_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1260 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1263 effect_monster_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1266 if (common_saving_throw_control(caster_ptr, effect_monster_ptr->dam, effect_monster_ptr->m_ptr) ||
1267 !(effect_monster_ptr->r_ptr->flags3 & RF3_DEMON))
1269 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1270 effect_monster_ptr->obvious = FALSE;
1271 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1273 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1275 effect_monster_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1276 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1280 effect_monster_ptr->note = _("は既にあなたの奴隷だ!", " is in your thrall!");
1281 set_pet(caster_ptr, effect_monster_ptr->m_ptr);
1284 effect_monster_ptr->dam = 0;
1287 case GF_CONTROL_ANIMAL:
1290 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1292 vir = virtue_number(caster_ptr, V_NATURE);
1295 effect_monster_ptr->dam += caster_ptr->virtues[vir - 1] / 10;
1298 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1301 effect_monster_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1304 if (common_saving_throw_control(caster_ptr, effect_monster_ptr->dam, effect_monster_ptr->m_ptr) ||
1305 !(effect_monster_ptr->r_ptr->flags3 & RF3_ANIMAL))
1307 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1308 effect_monster_ptr->obvious = FALSE;
1309 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1311 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1313 effect_monster_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1314 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1318 effect_monster_ptr->note = _("はなついた。", " is tamed!");
1319 set_pet(caster_ptr, effect_monster_ptr->m_ptr);
1320 if (effect_monster_ptr->r_ptr->flags3 & RF3_ANIMAL)
1321 chg_virtue(caster_ptr, V_NATURE, 1);
1324 effect_monster_ptr->dam = 0;
1327 case GF_CHARM_LIVING:
1331 vir = virtue_number(caster_ptr, V_UNLIFE);
1332 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1334 vir = virtue_number(caster_ptr, V_UNLIFE);
1337 effect_monster_ptr->dam -= caster_ptr->virtues[vir - 1] / 10;
1340 vir = virtue_number(caster_ptr, V_INDIVIDUALISM);
1343 effect_monster_ptr->dam -= caster_ptr->virtues[vir - 1] / 20;
1346 msg_format(_("%sを見つめた。", "You stare into %s."), effect_monster_ptr->m_name);
1348 if (common_saving_throw_charm(caster_ptr, effect_monster_ptr->dam, effect_monster_ptr->m_ptr) ||
1349 !monster_living(effect_monster_ptr->m_ptr->r_idx))
1351 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1352 effect_monster_ptr->obvious = FALSE;
1353 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1355 else if (caster_ptr->cursed & TRC_AGGRAVATE)
1357 effect_monster_ptr->note = _("はあなたに敵意を抱いている!", " hates you too much!");
1358 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
1362 effect_monster_ptr->note = _("を支配した。", " is tamed!");
1363 set_pet(caster_ptr, effect_monster_ptr->m_ptr);
1364 if (effect_monster_ptr->r_ptr->flags3 & RF3_ANIMAL)
1365 chg_virtue(caster_ptr, V_NATURE, 1);
1368 effect_monster_ptr->dam = 0;
1373 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1375 effect_monster_ptr->do_conf = damroll(3, (effect_monster_ptr->dam / 2)) + 1;
1376 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1377 (effect_monster_ptr->r_ptr->flags3 & (RF3_NO_CONF)) ||
1378 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
1380 if (effect_monster_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1382 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1385 effect_monster_ptr->do_conf = 0;
1386 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1387 effect_monster_ptr->obvious = FALSE;
1390 effect_monster_ptr->dam = 0;
1395 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1397 effect_monster_ptr->do_stun = damroll((effect_monster_ptr->caster_lev / 20) + 3, (effect_monster_ptr->dam)) + 1;
1398 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1399 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
1401 effect_monster_ptr->do_stun = 0;
1402 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1403 effect_monster_ptr->obvious = FALSE;
1406 effect_monster_ptr->dam = 0;
1411 if (!effect_monster_ptr->dam)
1413 effect_monster_ptr->skipped = TRUE;
1417 if (effect_monster_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1419 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1421 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1423 effect_monster_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1424 effect_monster_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1428 effect_monster_ptr->dam = 0;
1435 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1437 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_LITE)
1439 effect_monster_ptr->note = _("には耐性がある!", " resists!");
1440 effect_monster_ptr->dam *= 2; effect_monster_ptr->dam /= (randint1(6) + 6);
1441 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_LITE);
1443 else if (effect_monster_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
1445 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
1446 effect_monster_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
1447 effect_monster_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
1448 effect_monster_ptr->dam *= 2;
1454 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1456 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_DARK)
1458 effect_monster_ptr->note = _("には耐性がある!", " resists!");
1459 effect_monster_ptr->dam *= 2; effect_monster_ptr->dam /= (randint1(6) + 6);
1460 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= (RFR_RES_DARK);
1467 if (effect_monster_ptr->r_ptr->flags3 & (RF3_HURT_ROCK))
1469 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1471 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_ROCK);
1473 effect_monster_ptr->note = _("の皮膚がただれた!", " loses some skin!");
1474 effect_monster_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1478 effect_monster_ptr->dam = 0;
1483 case GF_AWAY_UNDEAD:
1485 if (effect_monster_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1487 bool resists_tele = FALSE;
1489 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_TELE)
1491 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (effect_monster_ptr->r_ptr->flagsr & RFR_RES_ALL))
1493 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1494 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1495 resists_tele = TRUE;
1497 else if (effect_monster_ptr->r_ptr->level > randint1(100))
1499 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1500 effect_monster_ptr->note = _("には耐性がある!", " resists!");
1501 resists_tele = TRUE;
1507 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1508 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1509 effect_monster_ptr->do_dist = effect_monster_ptr->dam;
1514 effect_monster_ptr->skipped = TRUE;
1517 effect_monster_ptr->dam = 0;
1522 if (effect_monster_ptr->r_ptr->flags3 & (RF3_EVIL))
1524 bool resists_tele = FALSE;
1526 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_TELE)
1528 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (effect_monster_ptr->r_ptr->flagsr & RFR_RES_ALL))
1530 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1531 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1532 resists_tele = TRUE;
1534 else if (effect_monster_ptr->r_ptr->level > randint1(100))
1536 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1537 effect_monster_ptr->note = _("には耐性がある!", " resists!");
1538 resists_tele = TRUE;
1544 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1545 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1546 effect_monster_ptr->do_dist = effect_monster_ptr->dam;
1551 effect_monster_ptr->skipped = TRUE;
1554 effect_monster_ptr->dam = 0;
1559 bool resists_tele = FALSE;
1560 if (effect_monster_ptr->r_ptr->flagsr & RFR_RES_TELE)
1562 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (effect_monster_ptr->r_ptr->flagsr & RFR_RES_ALL))
1564 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1565 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1566 resists_tele = TRUE;
1568 else if (effect_monster_ptr->r_ptr->level > randint1(100))
1570 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flagsr |= RFR_RES_TELE;
1571 effect_monster_ptr->note = _("には耐性がある!", " resists!");
1572 resists_tele = TRUE;
1578 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1580 effect_monster_ptr->do_dist = effect_monster_ptr->dam;
1583 effect_monster_ptr->dam = 0;
1586 case GF_TURN_UNDEAD:
1588 if (effect_monster_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1590 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1592 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1594 effect_monster_ptr->do_fear = damroll(3, (effect_monster_ptr->dam / 2)) + 1;
1595 if (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10)
1597 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1598 effect_monster_ptr->obvious = FALSE;
1599 effect_monster_ptr->do_fear = 0;
1604 effect_monster_ptr->skipped = TRUE;
1607 effect_monster_ptr->dam = 0;
1612 if (effect_monster_ptr->r_ptr->flags3 & (RF3_EVIL))
1614 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1616 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1618 effect_monster_ptr->do_fear = damroll(3, (effect_monster_ptr->dam / 2)) + 1;
1619 if (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10)
1621 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1622 effect_monster_ptr->obvious = FALSE;
1623 effect_monster_ptr->do_fear = 0;
1628 effect_monster_ptr->skipped = TRUE;
1631 effect_monster_ptr->dam = 0;
1636 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1638 effect_monster_ptr->do_fear = damroll(3, (effect_monster_ptr->dam / 2)) + 1;
1639 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
1640 (effect_monster_ptr->r_ptr->flags3 & (RF3_NO_FEAR)) ||
1641 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
1643 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1644 effect_monster_ptr->obvious = FALSE;
1645 effect_monster_ptr->do_fear = 0;
1648 effect_monster_ptr->dam = 0;
1651 case GF_DISP_UNDEAD:
1653 if (effect_monster_ptr->r_ptr->flags3 & (RF3_UNDEAD))
1655 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1657 /* Learn about effect_monster_ptr->effect_type */
1658 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD);
1660 effect_monster_ptr->note = _("は身震いした。", " shudders.");
1661 effect_monster_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1665 effect_monster_ptr->skipped = TRUE;
1666 effect_monster_ptr->dam = 0;
1673 if (effect_monster_ptr->r_ptr->flags3 & (RF3_EVIL))
1675 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1677 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_EVIL);
1679 effect_monster_ptr->note = _("は身震いした。", " shudders.");
1680 effect_monster_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1684 effect_monster_ptr->skipped = TRUE;
1685 effect_monster_ptr->dam = 0;
1692 if (effect_monster_ptr->r_ptr->flags3 & (RF3_GOOD))
1694 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1696 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
1698 effect_monster_ptr->note = _("は身震いした。", " shudders.");
1699 effect_monster_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1703 effect_monster_ptr->skipped = TRUE;
1704 effect_monster_ptr->dam = 0;
1709 case GF_DISP_LIVING:
1711 if (monster_living(effect_monster_ptr->m_ptr->r_idx))
1713 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1715 effect_monster_ptr->note = _("は身震いした。", " shudders.");
1716 effect_monster_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1720 effect_monster_ptr->skipped = TRUE;
1721 effect_monster_ptr->dam = 0;
1728 if (effect_monster_ptr->r_ptr->flags3 & (RF3_DEMON))
1730 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1732 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_DEMON);
1734 effect_monster_ptr->note = _("は身震いした。", " shudders.");
1735 effect_monster_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1739 effect_monster_ptr->skipped = TRUE;
1740 effect_monster_ptr->dam = 0;
1747 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1748 effect_monster_ptr->note = _("は身震いした。", " shudders.");
1749 effect_monster_ptr->note_dies = _("はドロドロに溶けた!", " dissolves!");
1754 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1755 if ((effect_monster_ptr->r_ptr->flags4 & ~(RF4_NOMAGIC_MASK)) || (effect_monster_ptr->r_ptr->a_ability_flags1 & ~(RF5_NOMAGIC_MASK)) || (effect_monster_ptr->r_ptr->a_ability_flags2 & ~(RF6_NOMAGIC_MASK)))
1757 if (effect_monster_ptr->who > 0)
1759 if (effect_monster_ptr->m_caster_ptr->hp < effect_monster_ptr->m_caster_ptr->maxhp)
1761 effect_monster_ptr->m_caster_ptr->hp += effect_monster_ptr->dam;
1762 if (effect_monster_ptr->m_caster_ptr->hp > effect_monster_ptr->m_caster_ptr->maxhp) effect_monster_ptr->m_caster_ptr->hp = effect_monster_ptr->m_caster_ptr->maxhp;
1763 if (caster_ptr->health_who == effect_monster_ptr->who) caster_ptr->redraw |= (PR_HEALTH);
1764 if (caster_ptr->riding == effect_monster_ptr->who) caster_ptr->redraw |= (PR_UHEALTH);
1766 if (effect_monster_ptr->see_s_msg)
1768 monster_desc(caster_ptr, effect_monster_ptr->killer, effect_monster_ptr->m_caster_ptr, 0);
1769 msg_format(_("%^sは気分が良さそうだ。", "%^s appears healthier."), effect_monster_ptr->killer);
1775 msg_format(_("%sから精神エネルギーを吸いとった。", "You draw psychic energy from %s."), effect_monster_ptr->m_name);
1776 (void)hp_player(caster_ptr, effect_monster_ptr->dam);
1781 if (effect_monster_ptr->see_s_msg) msg_format(_("%sには効果がなかった。", "%s is unaffected."), effect_monster_ptr->m_name);
1784 effect_monster_ptr->dam = 0;
1789 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1790 if (!effect_monster_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), effect_monster_ptr->m_name);
1792 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1793 (effect_monster_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1794 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->caster_lev - 10) < 1 ? 1 : (effect_monster_ptr->caster_lev - 10)) + 10))
1796 if (effect_monster_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1798 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1801 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1802 effect_monster_ptr->dam = 0;
1804 else if (effect_monster_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1806 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1807 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
1808 effect_monster_ptr->dam = 0;
1810 else if (effect_monster_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1812 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1813 effect_monster_ptr->note = _("には耐性がある。", " resists.");
1814 effect_monster_ptr->dam /= 3;
1818 effect_monster_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1819 effect_monster_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1821 if (effect_monster_ptr->who > 0) effect_monster_ptr->do_conf = randint0(4) + 4;
1822 else effect_monster_ptr->do_conf = randint0(8) + 8;
1827 case GF_BRAIN_SMASH:
1829 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1830 if (!effect_monster_ptr->who) msg_format(_("%sをじっと睨んだ。", "You gaze intently at %s."), effect_monster_ptr->m_name);
1832 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
1833 (effect_monster_ptr->r_ptr->flags3 & RF3_NO_CONF) ||
1834 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->caster_lev - 10) < 1 ? 1 : (effect_monster_ptr->caster_lev - 10)) + 10))
1836 if (effect_monster_ptr->r_ptr->flags3 & (RF3_NO_CONF))
1838 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_CONF);
1841 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1842 effect_monster_ptr->dam = 0;
1844 else if (effect_monster_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
1846 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
1847 effect_monster_ptr->note = _("には完全な耐性がある!", " is immune.");
1848 effect_monster_ptr->dam = 0;
1850 else if (effect_monster_ptr->r_ptr->flags2 & RF2_WEIRD_MIND)
1852 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
1853 effect_monster_ptr->note = _("には耐性がある!", " resists!");
1854 effect_monster_ptr->dam /= 3;
1858 effect_monster_ptr->note = _("は精神攻撃を食らった。", " is blasted by psionic energy.");
1859 effect_monster_ptr->note_dies = _("の精神は崩壊し、肉体は抜け殻となった。", " collapses, a mindless husk.");
1860 if (effect_monster_ptr->who > 0)
1862 effect_monster_ptr->do_conf = randint0(4) + 4;
1863 effect_monster_ptr->do_stun = randint0(4) + 4;
1867 effect_monster_ptr->do_conf = randint0(8) + 8;
1868 effect_monster_ptr->do_stun = randint0(8) + 8;
1870 (void)set_monster_slow(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_SLOW(effect_monster_ptr->m_ptr) + 10);
1877 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1878 if (!effect_monster_ptr->who) msg_format(_("%sを指差して呪いをかけた。", "You point at %s and curse."), effect_monster_ptr->m_name);
1879 if (randint0(100 + (effect_monster_ptr->caster_lev / 2)) < (effect_monster_ptr->r_ptr->level + 35))
1881 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1882 effect_monster_ptr->dam = 0;
1889 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1890 if (!effect_monster_ptr->who) msg_format(_("%sを指差して恐ろしげに呪いをかけた。", "You point at %s and curse horribly."), effect_monster_ptr->m_name);
1892 if (randint0(100 + (effect_monster_ptr->caster_lev / 2)) < (effect_monster_ptr->r_ptr->level + 35))
1894 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1895 effect_monster_ptr->dam = 0;
1902 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1903 if (!effect_monster_ptr->who) msg_format(_("%sを指差し、恐ろしげに呪文を唱えた!", "You point at %s, incanting terribly!"), effect_monster_ptr->m_name);
1905 if (randint0(100 + (effect_monster_ptr->caster_lev / 2)) < (effect_monster_ptr->r_ptr->level + 35))
1907 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1908 effect_monster_ptr->dam = 0;
1915 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1916 if (!effect_monster_ptr->who)
1917 msg_format(_("%sの秘孔を突いて、「お前は既に死んでいる」と叫んだ。",
1918 "You point at %s, screaming the word, 'DIE!'."), effect_monster_ptr->m_name);
1920 if ((randint0(100 + (effect_monster_ptr->caster_lev / 2)) < (effect_monster_ptr->r_ptr->level + 35)) && ((effect_monster_ptr->who <= 0) || (effect_monster_ptr->m_caster_ptr->r_idx != MON_KENSHIROU)))
1922 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1923 effect_monster_ptr->dam = 0;
1929 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
1930 if (effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE)
1932 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
1933 effect_monster_ptr->dam = 0;
1937 if ((effect_monster_ptr->who > 0) ? ((effect_monster_ptr->caster_lev + randint1(effect_monster_ptr->dam)) > (effect_monster_ptr->r_ptr->level + 10 + randint1(20))) :
1938 (((effect_monster_ptr->caster_lev / 2) + randint1(effect_monster_ptr->dam)) > (effect_monster_ptr->r_ptr->level + randint1(200))))
1940 effect_monster_ptr->dam = ((40 + randint1(20)) * effect_monster_ptr->m_ptr->hp) / 100;
1942 if (effect_monster_ptr->m_ptr->hp < effect_monster_ptr->dam) effect_monster_ptr->dam = effect_monster_ptr->m_ptr->hp - 1;
1946 /* todo 乱数で破滅のを弾いた結果が「耐性を持っている」ことになるのはおかしい */
1947 effect_monster_ptr->note = _("は耐性を持っている!", "resists!");
1948 effect_monster_ptr->dam = 0;
1957 if ((floor_ptr->inside_quest && (quest[floor_ptr->inside_quest].type == QUEST_TYPE_KILL_ALL) && !is_pet(effect_monster_ptr->m_ptr)) ||
1958 (effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (effect_monster_ptr->r_ptr->flags7 & (RF7_NAZGUL)) || (effect_monster_ptr->r_ptr->flags7 & (RF7_UNIQUE2)) || (effect_monster_ptr->r_ptr->flags1 & RF1_QUESTOR) || effect_monster_ptr->m_ptr->parent_m_idx)
1960 msg_format(_("%sには効果がなかった。", "%s is unaffected."), effect_monster_ptr->m_name);
1961 effect_monster_ptr->skipped = TRUE;
1965 if (is_pet(effect_monster_ptr->m_ptr)) nokori_hp = effect_monster_ptr->m_ptr->maxhp * 4L;
1966 else if ((caster_ptr->pclass == CLASS_BEASTMASTER) && monster_living(effect_monster_ptr->m_ptr->r_idx))
1967 nokori_hp = effect_monster_ptr->m_ptr->maxhp * 3 / 10;
1969 nokori_hp = effect_monster_ptr->m_ptr->maxhp * 3 / 20;
1971 if (effect_monster_ptr->m_ptr->hp >= nokori_hp)
1973 msg_format(_("もっと弱らせないと。", "You need to weaken %s more."), effect_monster_ptr->m_name);
1974 effect_monster_ptr->skipped = TRUE;
1976 else if (effect_monster_ptr->m_ptr->hp < randint0(nokori_hp))
1978 if (effect_monster_ptr->m_ptr->mflag2 & MFLAG2_CHAMELEON) choose_new_monster(caster_ptr, effect_monster_ptr->g_ptr->m_idx, FALSE, MON_CHAMELEON);
1979 msg_format(_("%sを捕えた!", "You capture %^s!"), effect_monster_ptr->m_name);
1980 cap_mon = effect_monster_ptr->m_ptr->r_idx;
1981 cap_mspeed = effect_monster_ptr->m_ptr->mspeed;
1982 cap_hp = effect_monster_ptr->m_ptr->hp;
1983 cap_maxhp = effect_monster_ptr->m_ptr->max_maxhp;
1984 cap_nickname = effect_monster_ptr->m_ptr->nickname;
1985 if (effect_monster_ptr->g_ptr->m_idx == caster_ptr->riding)
1987 if (rakuba(caster_ptr, -1, FALSE))
1989 msg_format(_("地面に落とされた。", "You have fallen from %s."), effect_monster_ptr->m_name);
1993 delete_monster_idx(caster_ptr, effect_monster_ptr->g_ptr->m_idx);
1999 msg_format(_("うまく捕まえられなかった。", "You failed to capture %s."), effect_monster_ptr->m_name);
2000 effect_monster_ptr->skipped = TRUE;
2007 return py_attack(caster_ptr, effect_monster_ptr->y, effect_monster_ptr->x, effect_monster_ptr->dam);
2014 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2015 if (effect_monster_ptr->r_ptr->flags2 & RF2_EMPTY_MIND)
2017 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
2018 effect_monster_ptr->dam = 0;
2019 effect_monster_ptr->skipped = TRUE;
2020 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
2023 if (MON_CSLEEP(effect_monster_ptr->m_ptr))
2025 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
2026 effect_monster_ptr->dam = 0;
2027 effect_monster_ptr->skipped = TRUE;
2031 if (one_in_(5)) effect = 1;
2032 else if (one_in_(4)) effect = 2;
2033 else if (one_in_(3)) effect = 3;
2038 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
2039 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
2041 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
2042 effect_monster_ptr->obvious = FALSE;
2046 if (set_monster_slow(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_SLOW(effect_monster_ptr->m_ptr) + 50))
2048 effect_monster_ptr->note = _("の動きが遅くなった。", " starts moving slower.");
2052 else if (effect == 2)
2054 effect_monster_ptr->do_stun = damroll((caster_ptr->lev / 10) + 3, (effect_monster_ptr->dam)) + 1;
2055 if ((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
2056 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
2058 effect_monster_ptr->do_stun = 0;
2059 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
2060 effect_monster_ptr->obvious = FALSE;
2063 else if (effect == 3)
2065 if ((effect_monster_ptr->r_ptr->flags1 & RF1_UNIQUE) ||
2066 (effect_monster_ptr->r_ptr->flags3 & RF3_NO_SLEEP) ||
2067 (effect_monster_ptr->r_ptr->level > randint1((effect_monster_ptr->dam - 10) < 1 ? 1 : (effect_monster_ptr->dam - 10)) + 10))
2069 if (effect_monster_ptr->r_ptr->flags3 & RF3_NO_SLEEP)
2071 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_SLEEP);
2074 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
2075 effect_monster_ptr->obvious = FALSE;
2079 /* Go to sleep (much) later */
2080 effect_monster_ptr->note = _("は眠り込んでしまった!", " falls asleep!");
2081 effect_monster_ptr->do_sleep = 500;
2087 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
2090 effect_monster_ptr->dam = 0;
2095 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2096 if (genocide_aux(caster_ptr, effect_monster_ptr->g_ptr->m_idx, effect_monster_ptr->dam, !effect_monster_ptr->who, (effect_monster_ptr->r_ptr->level + 1) / 2, _("モンスター消滅", "Genocide One")))
2098 if (effect_monster_ptr->seen_msg) msg_format(_("%sは消滅した!", "%^s disappeared!"), effect_monster_ptr->m_name);
2099 chg_virtue(caster_ptr, V_VITALITY, -1);
2103 effect_monster_ptr->skipped = TRUE;
2108 if (!effect_monster_ptr->who)
2109 msg_format(_("%sを写真に撮った。", "You take a photograph of %s."), effect_monster_ptr->m_name);
2111 if (effect_monster_ptr->r_ptr->flags3 & (RF3_HURT_LITE))
2113 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2115 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_HURT_LITE);
2117 effect_monster_ptr->note = _("は光に身をすくめた!", " cringes from the light!");
2118 effect_monster_ptr->note_dies = _("は光を受けてしぼんでしまった!", " shrivels away in the light!");
2122 effect_monster_ptr->dam = 0;
2125 effect_monster_ptr->photo = effect_monster_ptr->m_ptr->r_idx;
2128 case GF_BLOOD_CURSE:
2130 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2135 bool success = FALSE;
2136 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2138 if ((effect_monster_ptr->r_ptr->flags3 & (RF3_GOOD)) && !floor_ptr->inside_arena)
2140 if (effect_monster_ptr->r_ptr->flags3 & (RF3_NO_CONF)) effect_monster_ptr->dam -= 50;
2141 if (effect_monster_ptr->dam < 1) effect_monster_ptr->dam = 1;
2143 if (is_pet(effect_monster_ptr->m_ptr))
2145 effect_monster_ptr->note = _("の動きが速くなった。", " starts moving faster.");
2146 (void)set_monster_fast(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_FAST(effect_monster_ptr->m_ptr) + 100);
2149 else if ((effect_monster_ptr->r_ptr->flags1 & (RF1_QUESTOR)) ||
2150 (effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
2151 (effect_monster_ptr->m_ptr->mflag2 & MFLAG2_NOPET) ||
2152 (caster_ptr->cursed & TRC_AGGRAVATE) ||
2153 ((effect_monster_ptr->r_ptr->level + 10) > randint1(effect_monster_ptr->dam)))
2155 if (one_in_(4)) effect_monster_ptr->m_ptr->mflag2 |= MFLAG2_NOPET;
2159 effect_monster_ptr->note = _("を支配した。", " is tamed!");
2160 set_pet(caster_ptr, effect_monster_ptr->m_ptr);
2161 (void)set_monster_fast(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_FAST(effect_monster_ptr->m_ptr) + 100);
2163 if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr)) effect_monster_ptr->r_ptr->r_flags3 |= (RF3_GOOD);
2170 if (!(effect_monster_ptr->r_ptr->flags3 & RF3_NO_FEAR))
2172 effect_monster_ptr->do_fear = randint1(90) + 10;
2174 else if (is_original_ap_and_seen(caster_ptr, effect_monster_ptr->m_ptr))
2175 effect_monster_ptr->r_ptr->r_flags3 |= (RF3_NO_FEAR);
2178 effect_monster_ptr->dam = 0;
2183 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2185 if (randint0(100 + effect_monster_ptr->dam) < (effect_monster_ptr->r_ptr->level + 50))
2187 effect_monster_ptr->note = _("には効果がなかった。", " is unaffected.");
2188 effect_monster_ptr->dam = 0;
2194 effect_monster_ptr->skipped = TRUE;
2195 effect_monster_ptr->dam = 0;
2201 if (effect_monster_ptr->skipped) return FALSE;
2203 if (effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE)) effect_monster_ptr->do_poly = FALSE;
2204 if (effect_monster_ptr->r_ptr->flags1 & RF1_QUESTOR) effect_monster_ptr->do_poly = FALSE;
2205 if (caster_ptr->riding && (effect_monster_ptr->g_ptr->m_idx == caster_ptr->riding))
2206 effect_monster_ptr->do_poly = FALSE;
2208 if (((effect_monster_ptr->r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (effect_monster_ptr->r_ptr->flags7 & RF7_NAZGUL)) && !caster_ptr->phase_out)
2210 if (effect_monster_ptr->who && (effect_monster_ptr->dam > effect_monster_ptr->m_ptr->hp)) effect_monster_ptr->dam = effect_monster_ptr->m_ptr->hp;
2213 if (!effect_monster_ptr->who && effect_monster_ptr->slept)
2215 if (!(effect_monster_ptr->r_ptr->flags3 & RF3_EVIL) || one_in_(5)) chg_virtue(caster_ptr, V_COMPASSION, -1);
2216 if (!(effect_monster_ptr->r_ptr->flags3 & RF3_EVIL) || one_in_(5)) chg_virtue(caster_ptr, V_HONOUR, -1);
2219 int tmp = effect_monster_ptr->dam;
2220 effect_monster_ptr->dam = mon_damage_mod(caster_ptr, effect_monster_ptr->m_ptr, effect_monster_ptr->dam, (bool)(effect_monster_ptr->effect_type == GF_PSY_SPEAR));
2221 if ((tmp > 0) && (effect_monster_ptr->dam == 0)) effect_monster_ptr->note = _("はダメージを受けていない。", " is unharmed.");
2223 if (effect_monster_ptr->dam > effect_monster_ptr->m_ptr->hp)
2225 effect_monster_ptr->note = effect_monster_ptr->note_dies;
2229 if (effect_monster_ptr->do_stun &&
2230 !(effect_monster_ptr->r_ptr->flagsr & (RFR_RES_SOUN | RFR_RES_WALL)) &&
2231 !(effect_monster_ptr->r_ptr->flags3 & RF3_NO_STUN))
2233 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2235 if (MON_STUNNED(effect_monster_ptr->m_ptr))
2237 effect_monster_ptr->note = _("はひどくもうろうとした。", " is more dazed.");
2238 tmp = MON_STUNNED(effect_monster_ptr->m_ptr) + (effect_monster_ptr->do_stun / 2);
2242 effect_monster_ptr->note = _("はもうろうとした。", " is dazed.");
2243 tmp = effect_monster_ptr->do_stun;
2246 (void)set_monster_stunned(caster_ptr, effect_monster_ptr->g_ptr->m_idx, tmp);
2247 effect_monster_ptr->get_angry = TRUE;
2250 if (effect_monster_ptr->do_conf &&
2251 !(effect_monster_ptr->r_ptr->flags3 & RF3_NO_CONF) &&
2252 !(effect_monster_ptr->r_ptr->flagsr & RFR_EFF_RES_CHAO_MASK))
2254 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2256 if (MON_CONFUSED(effect_monster_ptr->m_ptr))
2258 effect_monster_ptr->note = _("はさらに混乱したようだ。", " looks more confused.");
2259 tmp = MON_CONFUSED(effect_monster_ptr->m_ptr) + (effect_monster_ptr->do_conf / 2);
2263 effect_monster_ptr->note = _("は混乱したようだ。", " looks confused.");
2264 tmp = effect_monster_ptr->do_conf;
2267 (void)set_monster_confused(caster_ptr, effect_monster_ptr->g_ptr->m_idx, tmp);
2268 effect_monster_ptr->get_angry = TRUE;
2271 if (effect_monster_ptr->do_time)
2273 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2275 if (effect_monster_ptr->do_time >= effect_monster_ptr->m_ptr->maxhp) effect_monster_ptr->do_time = effect_monster_ptr->m_ptr->maxhp - 1;
2277 if (effect_monster_ptr->do_time)
2279 effect_monster_ptr->note = _("は弱くなったようだ。", " seems weakened.");
2280 effect_monster_ptr->m_ptr->maxhp -= effect_monster_ptr->do_time;
2281 if ((effect_monster_ptr->m_ptr->hp - effect_monster_ptr->dam) > effect_monster_ptr->m_ptr->maxhp) effect_monster_ptr->dam = effect_monster_ptr->m_ptr->hp - effect_monster_ptr->m_ptr->maxhp;
2284 effect_monster_ptr->get_angry = TRUE;
2287 if (effect_monster_ptr->do_poly && (randint1(90) > effect_monster_ptr->r_ptr->level))
2289 if (polymorph_monster(caster_ptr, effect_monster_ptr->y, effect_monster_ptr->x))
2291 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2293 effect_monster_ptr->note = _("が変身した!", " changes!");
2294 effect_monster_ptr->dam = 0;
2297 effect_monster_ptr->m_ptr = &floor_ptr->m_list[effect_monster_ptr->g_ptr->m_idx];
2298 effect_monster_ptr->r_ptr = &r_info[effect_monster_ptr->m_ptr->r_idx];
2301 if (effect_monster_ptr->do_dist)
2303 if (effect_monster_ptr->seen) effect_monster_ptr->obvious = TRUE;
2305 effect_monster_ptr->note = _("が消え去った!", " disappears!");
2307 if (!effect_monster_ptr->who) chg_virtue(caster_ptr, V_VALOUR, -1);
2309 teleport_away(caster_ptr, effect_monster_ptr->g_ptr->m_idx, effect_monster_ptr->do_dist,
2310 (!effect_monster_ptr->who ? TELEPORT_DEC_VALOUR : 0L) | TELEPORT_PASSIVE);
2312 effect_monster_ptr->y = effect_monster_ptr->m_ptr->fy;
2313 effect_monster_ptr->x = effect_monster_ptr->m_ptr->fx;
2314 effect_monster_ptr->g_ptr = &floor_ptr->grid_array[effect_monster_ptr->y][effect_monster_ptr->x];
2317 if (effect_monster_ptr->do_fear)
2319 (void)set_monster_monfear(caster_ptr, effect_monster_ptr->g_ptr->m_idx, MON_MONFEAR(effect_monster_ptr->m_ptr) + effect_monster_ptr->do_fear);
2320 effect_monster_ptr->get_angry = TRUE;
2324 if (effect_monster_ptr->effect_type == GF_DRAIN_MANA)
2326 /* Drain mana does nothing */
2329 /* If another monster did the damage, hurt the monster by hand */
2330 else if (effect_monster_ptr->who)
2332 if (caster_ptr->health_who == effect_monster_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_HEALTH);
2333 if (caster_ptr->riding == effect_monster_ptr->g_ptr->m_idx) caster_ptr->redraw |= (PR_UHEALTH);
2335 (void)set_monster_csleep(caster_ptr, effect_monster_ptr->g_ptr->m_idx, 0);
2336 effect_monster_ptr->m_ptr->hp -= effect_monster_ptr->dam;
2337 if (effect_monster_ptr->m_ptr->hp < 0)
2341 if (is_pet(effect_monster_ptr->m_ptr) && !(effect_monster_ptr->m_ptr->ml))
2344 if (effect_monster_ptr->known && effect_monster_ptr->note)
2346 monster_desc(caster_ptr, effect_monster_ptr->m_name, effect_monster_ptr->m_ptr, MD_TRUE_NAME);
2347 if (effect_monster_ptr->see_s_msg)
2349 msg_format("%^s%s", effect_monster_ptr->m_name, effect_monster_ptr->note);
2353 floor_ptr->monster_noise = TRUE;
2357 if (effect_monster_ptr->who > 0) monster_gain_exp(caster_ptr, effect_monster_ptr->who, effect_monster_ptr->m_ptr->r_idx);
2359 monster_death(caster_ptr, effect_monster_ptr->g_ptr->m_idx, FALSE);
2360 delete_monster_idx(caster_ptr, effect_monster_ptr->g_ptr->m_idx);
2363 msg_print(_("少し悲しい気分がした。", "You feel sad for a moment."));
2368 if (effect_monster_ptr->note && effect_monster_ptr->seen_msg)
2369 msg_format("%^s%s", effect_monster_ptr->m_name, effect_monster_ptr->note);
2370 else if (effect_monster_ptr->see_s_msg)
2372 message_pain(caster_ptr, effect_monster_ptr->g_ptr->m_idx, effect_monster_ptr->dam);
2376 floor_ptr->monster_noise = TRUE;
2379 if (effect_monster_ptr->do_sleep) (void)set_monster_csleep(caster_ptr, effect_monster_ptr->g_ptr->m_idx, effect_monster_ptr->do_sleep);
2382 else if (effect_monster_ptr->heal_leper)
2384 if (effect_monster_ptr->seen_msg)
2385 msg_print(_("不潔な病人は病気が治った!", "The Mangy looking leper is healed!"));
2387 if (record_named_pet && is_pet(effect_monster_ptr->m_ptr) && effect_monster_ptr->m_ptr->nickname)
2389 char m2_name[MAX_NLEN];
2391 monster_desc(caster_ptr, m2_name, effect_monster_ptr->m_ptr, MD_INDEF_VISIBLE);
2392 exe_write_diary(caster_ptr, DIARY_NAMED_PET, RECORD_NAMED_PET_HEAL_LEPER, m2_name);
2395 delete_monster_idx(caster_ptr, effect_monster_ptr->g_ptr->m_idx);
2398 /* If the player did it, give him experience, check fear */
2402 if (mon_take_hit(caster_ptr, effect_monster_ptr->g_ptr->m_idx, effect_monster_ptr->dam, &fear, effect_monster_ptr->note_dies))
2408 if (effect_monster_ptr->do_sleep) anger_monster(caster_ptr, effect_monster_ptr->m_ptr);
2410 if (effect_monster_ptr->note && effect_monster_ptr->seen_msg)
2411 msg_format(_("%s%s", "%^s%s"), effect_monster_ptr->m_name, effect_monster_ptr->note);
2412 else if (effect_monster_ptr->known && (effect_monster_ptr->dam || !effect_monster_ptr->do_fear))
2414 message_pain(caster_ptr, effect_monster_ptr->g_ptr->m_idx, effect_monster_ptr->dam);
2417 if (((effect_monster_ptr->dam > 0) || effect_monster_ptr->get_angry) && !effect_monster_ptr->do_sleep)
2418 anger_monster(caster_ptr, effect_monster_ptr->m_ptr);
2420 if ((fear || effect_monster_ptr->do_fear) && effect_monster_ptr->seen)
2423 msg_format(_("%^sは恐怖して逃げ出した!", "%^s flees in terror!"), effect_monster_ptr->m_name);
2426 if (effect_monster_ptr->do_sleep) (void)set_monster_csleep(caster_ptr, effect_monster_ptr->g_ptr->m_idx, effect_monster_ptr->do_sleep);
2430 if ((effect_monster_ptr->effect_type == GF_BLOOD_CURSE) && one_in_(4))
2432 blood_curse_to_enemy(caster_ptr, effect_monster_ptr->who);
2435 if (caster_ptr->phase_out)
2437 caster_ptr->health_who = effect_monster_ptr->g_ptr->m_idx;
2438 caster_ptr->redraw |= (PR_HEALTH);
2439 handle_stuff(caster_ptr);
2442 if (effect_monster_ptr->m_ptr->r_idx) update_monster(caster_ptr, effect_monster_ptr->g_ptr->m_idx, FALSE);
2444 lite_spot(caster_ptr, effect_monster_ptr->y, effect_monster_ptr->x);
2445 if ((caster_ptr->monster_race_idx == effect_monster_ptr->m_ptr->r_idx) && (effect_monster_ptr->seen || !effect_monster_ptr->m_ptr->r_idx))
2447 caster_ptr->window |= (PW_MONSTER);
2450 if ((effect_monster_ptr->dam > 0) && !is_pet(effect_monster_ptr->m_ptr) && !is_friendly(effect_monster_ptr->m_ptr))
2452 if (!effect_monster_ptr->who)
2454 if (!(effect_monster_ptr->flag & PROJECT_NO_HANGEKI))
2456 set_target(effect_monster_ptr->m_ptr, monster_target_y, monster_target_x);
2459 else if ((effect_monster_ptr->who > 0) && is_pet(effect_monster_ptr->m_caster_ptr) && !player_bold(caster_ptr, effect_monster_ptr->m_ptr->target_y, effect_monster_ptr->m_ptr->target_x))
2461 set_target(effect_monster_ptr->m_ptr, effect_monster_ptr->m_caster_ptr->fy, effect_monster_ptr->m_caster_ptr->fx);
2465 if (caster_ptr->riding && (caster_ptr->riding == effect_monster_ptr->g_ptr->m_idx) && (effect_monster_ptr->dam > 0))
2467 if (effect_monster_ptr->m_ptr->hp > effect_monster_ptr->m_ptr->maxhp / 3) effect_monster_ptr->dam = (effect_monster_ptr->dam + 1) / 2;
2468 rakubadam_m = (effect_monster_ptr->dam > 200) ? 200 : effect_monster_ptr->dam;
2471 if (effect_monster_ptr->photo)
2476 object_prep(q_ptr, lookup_kind(TV_STATUE, SV_PHOTO));
2477 q_ptr->pval = effect_monster_ptr->photo;
2478 q_ptr->ident |= (IDENT_FULL_KNOWN);
2479 (void)drop_near(caster_ptr, q_ptr, -1, caster_ptr->y, caster_ptr->x);
2483 project_m_x = effect_monster_ptr->x;
2484 project_m_y = effect_monster_ptr->y;
2485 return (effect_monster_ptr->obvious);