diff --git a/core/src/game.rs b/core/src/game.rs index a729d4d0..50f16861 100644 --- a/core/src/game.rs +++ b/core/src/game.rs @@ -494,14 +494,19 @@ impl Game { self.resolve(Cast { skill, ..cast }); } - if cast.skill.aoe() { - if cast.skill.cast_animation() { - self.action(cast, Action::Cast); + let casts = self.modify_cast(cast); + + let castable = casts.clone() + .into_iter() + .any(|c| !self.construct(c.target).is_ko() && !self.construct(c.target).immune(c.skill).is_some()); + + if castable { + self.action(cast, Action::Cast); + if cast.skill.aoe() { + self.action(cast, Action::HitAoe); } - self.action(cast, Action::HitAoe); } - let casts = self.modify_cast(cast); for cast in casts { self.execute(cast); } @@ -520,11 +525,6 @@ impl Game { return self; } - // For normal skills we show the cast as long as the target isn't ko - if !cast.skill.aoe() && cast.skill.cast_animation() { - self.action(cast, Action::Cast); - } - // maybe this should be done with a status immunity if self.construct(cast.target).affected(Effect::Reflect) && cast.skill.colours().contains(&Colour::Blue) && !cast.skill.is_tick() { self.add_resolution(&cast, &Event::Reflection { construct: cast.target }); @@ -538,7 +538,9 @@ impl Game { return self.resolve(Cast { target: cast.source, ..cast }); } - self.action(cast, Action::Hit); + if !cast.skill.aoe() { + self.action(cast, Action::Hit); + } cast.resolve(self);