em_ptr->dam = 0;
return GF_SWITCH_CONTINUE;
}
+
+
+gf_switch_result effect_monster_stasis(effect_monster_type *em_ptr, bool to_evil)
+{
+ if (em_ptr->seen) em_ptr->obvious = TRUE;
+
+ int stasis_damage = (em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10);
+ bool has_resistance = (em_ptr->r_ptr->flags1 & RF1_UNIQUE) != 0;
+ has_resistance |= em_ptr->r_ptr->level > randint1(stasis_damage) + 10;
+ if (to_evil) has_resistance |= (em_ptr->r_ptr->flags3 & RF3_EVIL) == 0;
+
+ if (has_resistance)
+ {
+ em_ptr->note = _("には効果がなかった。", " is unaffected.");
+ em_ptr->obvious = FALSE;
+ }
+ else
+ {
+ em_ptr->note = _("は動けなくなった!", " is suspended!");
+ em_ptr->do_sleep = 500;
+ }
+
+ em_ptr->dam = 0;
+ return GF_SWITCH_CONTINUE;
+}
+
+
+gf_switch_result effect_monster_stun(effect_monster_type *em_ptr)
+{
+ if (em_ptr->seen) em_ptr->obvious = TRUE;
+
+ em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
+ if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
+ (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
+ {
+ em_ptr->do_stun = 0;
+ em_ptr->note = _("には効果がなかった。", " is unaffected.");
+ em_ptr->obvious = FALSE;
+ }
+
+ em_ptr->dam = 0;
+ return GF_SWITCH_CONTINUE;
+}
gf_switch_result effect_monster_old_slow(player_type *caster_ptr, effect_monster_type *em_ptr);
gf_switch_result effect_monster_old_sleep(player_type *caster_ptr, effect_monster_type *em_ptr);
gf_switch_result effect_monster_old_conf(player_type *caster_ptr, effect_monster_type *em_ptr);
+gf_switch_result effect_monster_stasis(effect_monster_type *em_ptr, bool to_evil);
+gf_switch_result effect_monster_stun(effect_monster_type *em_ptr);
/*!
+ * todo どうしても「その他」に分類せざるを得ない魔法種別が残った
+ * 本ファイル内の行数はまともなレベルに落ち着いているので、一旦ここに留め置くこととする
* @brief 魔法種別による各種処理切り替え
* @date 2020/04/29
* @author Hourier
gf_switch_result effect_monster_hypodynamia(player_type *caster_ptr, effect_monster_type *em_ptr)
{
if (em_ptr->seen) em_ptr->obvious = TRUE;
+
if (monster_living(em_ptr->m_ptr->r_idx))
{
em_ptr->do_time = (em_ptr->dam + 7) / 8;
}
-gf_switch_result effect_monster_stasis(effect_monster_type *em_ptr, bool to_evil)
-{
- if (em_ptr->seen) em_ptr->obvious = TRUE;
-
- int stasis_damage = (em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10);
- bool has_resistance = (em_ptr->r_ptr->flags1 & RF1_UNIQUE) != 0;
- has_resistance |= em_ptr->r_ptr->level > randint1(stasis_damage) + 10;
- if (to_evil) has_resistance |= (em_ptr->r_ptr->flags3 & RF3_EVIL) == 0;
-
- if (has_resistance)
- {
- em_ptr->note = _("には効果がなかった。", " is unaffected.");
- em_ptr->obvious = FALSE;
- }
- else
- {
- em_ptr->note = _("は動けなくなった!", " is suspended!");
- em_ptr->do_sleep = 500;
- }
-
- em_ptr->dam = 0;
- return GF_SWITCH_CONTINUE;
-}
-
-
-gf_switch_result effect_monster_stun(effect_monster_type *em_ptr)
-{
- if (em_ptr->seen) em_ptr->obvious = TRUE;
-
- em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1;
- if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) ||
- (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10))
- {
- em_ptr->do_stun = 0;
- em_ptr->note = _("には効果がなかった。", " is unaffected.");
- em_ptr->obvious = FALSE;
- }
-
- em_ptr->dam = 0;
- return GF_SWITCH_CONTINUE;
-}
-
-
gf_switch_result effect_monster_kill_wall(player_type *caster_ptr, effect_monster_type *em_ptr)
{
if ((em_ptr->r_ptr->flags3 & (RF3_HURT_ROCK)) == 0)