diff --git a/src/ffi/dynamic_data/libraries/battle_stat_calculator.rs b/src/ffi/dynamic_data/libraries/battle_stat_calculator.rs index 6f2401e..469ca27 100644 --- a/src/ffi/dynamic_data/libraries/battle_stat_calculator.rs +++ b/src/ffi/dynamic_data/libraries/battle_stat_calculator.rs @@ -1,5 +1,6 @@ use crate::dynamic_data::{BattleStatCalculator, Gen7BattleStatCalculator}; -use crate::ffi::IdentifiablePointer; +use crate::ffi::{IdentifiablePointer, OwnedPtr}; +use std::ptr::drop_in_place; /// Creates a new Gen 7 battle stat calculator #[no_mangle] @@ -9,3 +10,9 @@ extern "C" fn gen_7_battle_stat_calculator_new() -> IdentifiablePointer>) { + unsafe { drop_in_place(ptr) }; +} diff --git a/src/ffi/dynamic_data/libraries/damage_library.rs b/src/ffi/dynamic_data/libraries/damage_library.rs index 35e462e..592e80c 100644 --- a/src/ffi/dynamic_data/libraries/damage_library.rs +++ b/src/ffi/dynamic_data/libraries/damage_library.rs @@ -1,5 +1,6 @@ use crate::dynamic_data::{DamageLibrary, Gen7DamageLibrary}; -use crate::ffi::IdentifiablePointer; +use crate::ffi::{IdentifiablePointer, OwnedPtr}; +use std::ptr::drop_in_place; /// Creates a new generation 7 damage library. `has_randomness` defines whether a random damage /// modifier (0.85x - 1.00x) is applied to the calculated damage. @@ -10,3 +11,9 @@ extern "C" fn gen_7_damage_library_new(randomness: u8) -> IdentifiablePointer>) { + unsafe { drop_in_place(ptr) }; +} diff --git a/src/ffi/dynamic_data/libraries/dynamic_library.rs b/src/ffi/dynamic_data/libraries/dynamic_library.rs index aeab133..cd5c231 100644 --- a/src/ffi/dynamic_data/libraries/dynamic_library.rs +++ b/src/ffi/dynamic_data/libraries/dynamic_library.rs @@ -3,6 +3,7 @@ use crate::dynamic_data::{ }; use crate::ffi::{IdentifiablePointer, OwnedPtr}; use crate::static_data::StaticData; +use std::ptr::drop_in_place; use std::sync::Arc; /// Instantiates a new DynamicLibrary with given parameters. @@ -25,3 +26,9 @@ extern "C" fn dynamic_library_new( a.into() } } + +/// Drops a dynamic library. +#[no_mangle] +extern "C" fn dynamic_library_drop(ptr: OwnedPtr>) { + unsafe { drop_in_place(ptr) }; +} diff --git a/src/ffi/dynamic_data/libraries/misc_library.rs b/src/ffi/dynamic_data/libraries/misc_library.rs index 25a875d..c339e6a 100644 --- a/src/ffi/dynamic_data/libraries/misc_library.rs +++ b/src/ffi/dynamic_data/libraries/misc_library.rs @@ -1,5 +1,6 @@ use crate::dynamic_data::{Gen7MiscLibrary, MiscLibrary}; -use crate::ffi::IdentifiablePointer; +use crate::ffi::{IdentifiablePointer, OwnedPtr}; +use std::ptr::drop_in_place; /// Instantiates a new MiscLibrary. #[no_mangle] @@ -9,3 +10,9 @@ extern "C" fn gen_7_misc_library_new() -> IdentifiablePointer>) { + unsafe { drop_in_place(ptr) }; +} diff --git a/src/ffi/dynamic_data/libraries/script_resolver.rs b/src/ffi/dynamic_data/libraries/script_resolver.rs index 75966ae..b40968b 100644 --- a/src/ffi/dynamic_data/libraries/script_resolver.rs +++ b/src/ffi/dynamic_data/libraries/script_resolver.rs @@ -1,5 +1,6 @@ use crate::dynamic_data::{EmptyScriptResolver, ScriptResolver}; -use crate::ffi::IdentifiablePointer; +use crate::ffi::{IdentifiablePointer, OwnedPtr}; +use std::ptr::drop_in_place; /// Instantiates a basic empty script resolver, that always returns None. #[no_mangle] @@ -12,6 +13,12 @@ extern "C" fn empty_script_resolver_new() -> IdentifiablePointer>) { + unsafe { drop_in_place(ptr) }; +} + /// Foreign function interfaces for the Webassembly script resolver. #[cfg(feature = "wasm")] mod web_assembly_script_resolver { diff --git a/src/ffi/dynamic_data/models/pokemon.rs b/src/ffi/dynamic_data/models/pokemon.rs index 6d9ad2b..e005623 100644 --- a/src/ffi/dynamic_data/models/pokemon.rs +++ b/src/ffi/dynamic_data/models/pokemon.rs @@ -14,7 +14,7 @@ extern "C" fn pokemon_new( library: ExternPointer>, species: ExternPointer>, form: ExternPointer>, - hidden_ability: bool, + hidden_ability: u8, ability_index: u8, level: LevelInt, unique_identifier: u32, @@ -28,7 +28,7 @@ extern "C" fn pokemon_new( species.as_ref().clone(), form.as_ref(), AbilityIndex { - hidden: hidden_ability, + hidden: hidden_ability == 1, index: ability_index, }, level, @@ -246,7 +246,7 @@ extern "C" fn pokemon_get_battle_side_index(ptr: ExternPointer>) -> } /// Get the index of the slot on the side of the battle the Pokemon is in. If the Pokemon -// is not on the battlefield, this always returns 0. +/// is not on the battlefield, this always returns 0. #[no_mangle] extern "C" fn pokemon_get_battle_index(ptr: ExternPointer>) -> u8 { ptr.as_ref().get_battle_index().unwrap_or_default()