Gen7ScriptsRs/gen_7_scripts/src/moves/double_power_user_damaged_b...

54 lines
1.4 KiB
Rust

use crate::common_usings::*;
use crate::pokemon::double_power_user_damaged_by_target_in_turn::DoublePowerUserDamagedByTargetInTurnData;
use pkmn_lib_interface::PkmnResult;
script!(
DoublePowerUserDamagedByTargetInTurn,
"double_power_user_damaged_by_target_in_turn"
);
impl Script for DoublePowerUserDamagedByTargetInTurn {
fn new() -> Self {
Self {}
}
fn get_name(&self) -> &'static str {
Self::get_const_name()
}
fn get_capabilities(&self) -> &[ScriptCapabilities] {
&[
ScriptCapabilities::OnBeforeTurn,
ScriptCapabilities::ChangeBasePower,
]
}
fn on_before_turn(&self, choice: TurnChoice) -> PkmnResult<()> {
let user = choice.user();
user.add_volatile(DoublePowerUserDamagedByTargetInTurnData::create())?;
Ok(())
}
fn change_base_power(
&self,
_move: ExecutingMove,
target: Pokemon,
_hit: u8,
base_power: &mut Saturating<u8>,
) -> PkmnResult<()> {
if let Some(s) = get_volatile_as::<DoublePowerUserDamagedByTargetInTurnData>(
target.battle_side()?.as_ref(),
DoublePowerUserDamagedByTargetInTurnData::get_const_name(),
)? {
if s.has_been_hit_by_pokemon(&target) {
*base_power *= 2;
}
}
Ok(())
}
fn as_any(&self) -> &dyn Any {
self
}
}