Gen7ScriptsRs/gen_7_scripts/src/registered_scripts.rs

66 lines
2.0 KiB
Rust
Executable File

use crate::moves::*;
use crate::pokemon::*;
use alloc::boxed::Box;
use pkmn_lib_interface::app_interface::{get_hash, StringKey};
use pkmn_lib_interface::handling::{Script, ScriptCategory};
macro_rules! resolve_match {
(
$mid:expr,
$(
$script:ty,
)*
) => (
match $mid {
$(
const { get_hash(<$script>::get_const_name()) } => {
return Some(Box::new(<$script>::new()))
}
)*
_ => {}
}
)
}
pub fn get_script(category: ScriptCategory, name: &StringKey) -> Option<Box<dyn Script>> {
match category {
ScriptCategory::Move => {
resolve_match!(
name.hash(),
acrobatics::Acrobatics,
acupressure::Acupressure,
after_you::AfterYou,
assist::Assist,
assurance::Assurance,
multi_hit_move::MultiHitMove,
attract::Attract,
aurora_veil::AuroraVeil,
automize::Automize,
change_all_target_stats::ChangeAllTargetStats,
change_target_stats::ChangeTargetAttack,
change_target_stats::ChangeTargetDefense,
change_target_stats::ChangeTargetSpecialAttack,
change_target_stats::ChangeTargetSpecialDefense,
change_target_stats::ChangeTargetSpeed,
cure_party_status::CurePartyStatus,
drain::Drain,
flinch::Flinch,
struggle::Struggle,
);
}
ScriptCategory::Ability => {}
ScriptCategory::Status => {}
ScriptCategory::Pokemon => {
resolve_match!(name.hash(), infatuated::Infatuated,)
}
ScriptCategory::Battle => {
resolve_match!(name.hash(), crate::util_scripts::ForceEffectTriggerScript,)
}
ScriptCategory::Side => {}
ScriptCategory::ItemBattleTrigger => {}
ScriptCategory::Weather => {}
}
None
}