Gen7ScriptsRs/gen_7_scripts/src/moves/double_power_if_target_dama...

63 lines
1.6 KiB
Rust
Executable File

use crate::common_usings::*;
use crate::side::double_power_if_target_damaged_in_turn_data::DoublePowerIfTargetDamagedInTurnData;
use pkmn_lib_interface::PkmnResult;
script!(
DoublePowerIfTargetDamagedInTurn,
"double_power_if_target_damaged_in_turn"
);
impl Script for DoublePowerIfTargetDamagedInTurn {
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<()> {
if let TurnChoice::Move(data) = &choice {
let side: BattleSide = choice
.user()
.battle()?
.unwrap()
.sides()
.get(data.target_side() as usize)
.unwrap()
.clone();
side.add_volatile(DoublePowerIfTargetDamagedInTurnData::create_for_assurance())?;
}
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::<DoublePowerIfTargetDamagedInTurnData>(
target.battle_side()?.as_ref(),
DoublePowerIfTargetDamagedInTurnData::get_const_name(),
)? {
if s.has_hit_for_pokemon(&target) {
*base_power *= 2;
}
}
Ok(())
}
fn as_any(&self) -> &dyn Any {
self
}
}