63 lines
1.6 KiB
Rust
Executable File
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
|
|
}
|
|
}
|