Gen7ScriptsRs/gen_7_scripts/src/registered_scripts.rs

72 lines
2.2 KiB
Rust
Executable File

use crate::moves::*;
use crate::pokemon;
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,
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,
crate::moves::heal_each_end_of_turn::HealEachEndOfTurn,
multi_hit_move::MultiHitMove,
struggle::Struggle,
};
}
ScriptCategory::Ability => {}
ScriptCategory::Status => {}
ScriptCategory::Pokemon => {
resolve_match! {
name.hash(),
infatuated::Infatuated,
pokemon::heal_each_end_of_turn::HealEachEndOfTurnEffect,
}
}
ScriptCategory::Battle => {
resolve_match! {name.hash(), crate::util_scripts::ForceEffectTriggerScript,}
}
ScriptCategory::Side => {}
ScriptCategory::ItemBattleTrigger => {}
ScriptCategory::Weather => {}
}
None
}