use crate::common_usings::*; script!(Struggle, "struggle"); impl Script for Struggle { fn new() -> Self { Self {} } fn get_name(&self) -> &'static str { Self::get_const_name() } fn get_capabilities(&self) -> &[ScriptCapabilities] { &[ ScriptCapabilities::ChangeEffectiveness, ScriptCapabilities::IsInvulnerable, ScriptCapabilities::ChangeNumberOfHits, ScriptCapabilities::OnSecondaryEffect, ] } fn change_number_of_hits( &self, _choice: TurnChoice, number_of_hits: &mut u8, ) -> PkmnResult<()> { *number_of_hits = 1; Ok(()) } fn is_invulnerable( &self, _move: ExecutingMove, _target: Pokemon, invulnerable: &mut bool, ) -> PkmnResult<()> { *invulnerable = false; Ok(()) } fn change_effectiveness( &self, _move: ExecutingMove, _target: Pokemon, _hit: u8, effectiveness: &mut f32, ) -> PkmnResult<()> { *effectiveness = 1.0; Ok(()) } fn on_secondary_effect(&self, mv: ExecutingMove, _target: Pokemon, _hit: u8) -> PkmnResult<()> { let mut damage = mv.user().max_health()? / 4; if damage == 0 { damage = 1 } mv.user().damage(damage, DamageSource::Struggle)?; Ok(()) } fn as_any(&self) -> &dyn Any { self } }