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> { 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 }