From 9adbd273583f2c0a70da04e824ea194e544439b7 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 21 May 2022 20:46:04 +0200 Subject: [PATCH] Adds WASM type registry for species and formes. --- src/Library/Species/PokemonSpecies.hpp | 15 +++-- .../Library/WASMFormeRegistry.cpp | 50 +++++++++++++++ .../Library/WASMFormeRegistry.hpp | 14 +++++ .../Library/WASMItemRegistry.cpp | 1 - .../Library/WASMSpeciesRegistry.cpp | 57 ++++++++++++++++++ .../Library/WASMSpeciesRegistry.hpp | 14 +++++ .../WASM/InterfaceMethods/TypeRegistry.hpp | 7 ++- .../InterfaceMethods/gen7_scripts_rs.wasm | Bin 28462 -> 0 bytes .../WASM/InterfaceMethods/pkmn_lib.wit | 32 +++++++++- 9 files changed, 183 insertions(+), 7 deletions(-) create mode 100644 src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.cpp create mode 100644 src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.hpp create mode 100644 src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.cpp create mode 100644 src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.hpp delete mode 100755 src/ScriptResolving/WASM/InterfaceMethods/gen7_scripts_rs.wasm diff --git a/src/Library/Species/PokemonSpecies.hpp b/src/Library/Species/PokemonSpecies.hpp index 7cd73a6..eaa421f 100644 --- a/src/Library/Species/PokemonSpecies.hpp +++ b/src/Library/Species/PokemonSpecies.hpp @@ -12,10 +12,9 @@ namespace PkmnLib::Library { ArbUt::List _eggGroups; public: - PokemonSpecies(u16 id, const ArbUt::StringView& name, const PokemonForme* non_null defaultForme, float genderRatio, - const ArbUt::StringView& growthRate, u8 captureRate, u8 baseHappiness, - const ArbUt::List& eggGroups, - std::unordered_set flags = {}) noexcept + PokemonSpecies(u16 id, const ArbUt::StringView& name, const PokemonForme* non_null defaultForme, + float genderRatio, const ArbUt::StringView& growthRate, u8 captureRate, u8 baseHappiness, + const ArbUt::List& eggGroups, std::unordered_set flags = {}) noexcept : CreatureSpecies(id, name, defaultForme, genderRatio, growthRate, captureRate, flags), _baseHappiness(baseHappiness), _eggGroups(eggGroups) {} @@ -45,6 +44,14 @@ namespace PkmnLib::Library { const ArbUt::UniquePtrList& GetEvolutions() const noexcept { return _evolutions; } bool HasEggGroup(const ArbUt::StringView& sv) const noexcept { return _eggGroups.Contains(sv); } + bool HasEggGroup(u32 hash) const noexcept { + for (auto& eg : _eggGroups) { + if (eg == hash) { + return true; + } + } + return false; + } const ArbUt::List& GetEggGroups() const noexcept { return _eggGroups; } }; } diff --git a/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.cpp b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.cpp new file mode 100644 index 0000000..7f11217 --- /dev/null +++ b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.cpp @@ -0,0 +1,50 @@ +#include "WASMFormeRegistry.hpp" +#include "../../../../Battling/Library/BattleLibrary.hpp" +#include "../../WebAssemblyScriptResolver.hpp" +#include "../WASMHelperFile.hpp" +#include "wasm.h" + +using namespace CreatureLib::Library; +using namespace PkmnLib::Library; + +wasm_func_t* Forme_GetType(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme, size_t index) -> u8 { + return forme->GetType(index); + }}); +} + +wasm_func_t* Forme_GetBaseStatistic(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme, + CreatureLib::Library::Statistic stat) -> u16 { return forme->GetStatistic(stat); }}); +} + +wasm_func_t* Forme_GetAbility(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme, bool hidden, u8 index) -> const Talent* { + return forme->GetTalent(TalentIndex(hidden, index)).GetRaw(); + }}); +} + +wasm_func_t* Forme_HasFlagByHash(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme, u32 flag) -> bool { + return forme->HasFlag(flag); + }}); +} + +void WASMFormeRegistry::Register(ArbUt::Dictionary& externs, + WebAssemblyScriptResolver* resolver) { + REGISTER_GETTER("forme_get_name", SpeciesVariant, GetName, resolver) + REGISTER_GETTER("forme_get_height", SpeciesVariant, GetHeight, resolver) + REGISTER_GETTER("forme_get_weight", SpeciesVariant, GetWeight, resolver) + REGISTER_GETTER("forme_get_base_experience", SpeciesVariant, GetBaseExperience, resolver) + REGISTER_GETTER("forme_get_type_count", SpeciesVariant, GetTypeCount, resolver) + externs.Insert("forme_get_type", Forme_GetType(resolver)); + externs.Insert("forme_get_statistic", Forme_GetBaseStatistic(resolver)); + REGISTER_GETTER("forme_get_ability_count", SpeciesVariant, GetTalentCount, resolver) + REGISTER_GETTER("forme_get_hidden_ability_count", SpeciesVariant, GetSecretTalentCount, resolver) + externs.Insert("forme_get_ability", Forme_GetAbility(resolver)); + externs.Insert("forme_has_flag_by_hash", Forme_HasFlagByHash(resolver)); +} diff --git a/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.hpp b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.hpp new file mode 100644 index 0000000..9dd74cc --- /dev/null +++ b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.hpp @@ -0,0 +1,14 @@ +#ifndef PKMNLIB_WASMFORMEREGISTRY_HPP +#define PKMNLIB_WASMFORMEREGISTRY_HPP +#include +#include + +class WebAssemblyScriptResolver; + +class WASMFormeRegistry { +public: + static void Register(ArbUt::Dictionary& externs, + WebAssemblyScriptResolver* resolver); +}; + +#endif // PKMNLIB_WASMFORMEREGISTRY_HPP diff --git a/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMItemRegistry.cpp b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMItemRegistry.cpp index 68c1aea..0d13ddc 100644 --- a/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMItemRegistry.cpp +++ b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMItemRegistry.cpp @@ -10,7 +10,6 @@ wasm_func_t* Item_HasFlagByHash(WebAssemblyScriptResolver* resolver) { return WasmHelpers::CreateFunc( resolver, {[](WebAssemblyScriptResolver*, Item* item, u32 flag) -> bool { return item->HasFlag(flag); }}); } - void WASMItemRegistry::Register(ArbUt::Dictionary& externs, WebAssemblyScriptResolver* resolver) { REGISTER_GETTER("item_get_name", Item, GetName, resolver) diff --git a/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.cpp b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.cpp new file mode 100644 index 0000000..547abff --- /dev/null +++ b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.cpp @@ -0,0 +1,57 @@ +#include "WASMSpeciesRegistry.hpp" +#include "../../../../Battling/Library/BattleLibrary.hpp" +#include "../../WebAssemblyScriptResolver.hpp" +#include "../WASMHelperFile.hpp" +#include "wasm.h" + +using namespace CreatureLib::Library; +using namespace PkmnLib::Library; + +wasm_func_t* Species_HasFormeByHash(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, {[](WebAssemblyScriptResolver*, const CreatureSpecies* species, u32 flag) -> bool { + return species->HasVariant(flag); + }}); +} + +wasm_func_t* Species_GetFormeByHash(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, + {[](WebAssemblyScriptResolver*, const CreatureSpecies* species, u32 variant) -> const SpeciesVariant* { + auto opt = species->TryGetVariant(variant); + if (opt.has_value()) { + return opt.value(); + } + return nullptr; + }}); +} + +wasm_func_t* Species_HasFlagByHash(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, {[](WebAssemblyScriptResolver*, const CreatureSpecies* species, u32 flag) -> bool { + return species->HasFlag(flag); + }}); +} + +wasm_func_t* Species_HasEggGroupByHash(WebAssemblyScriptResolver* resolver) { + return WasmHelpers::CreateFunc( + resolver, {[](WebAssemblyScriptResolver*, const PokemonSpecies* species, u32 flag) -> bool { + return species->HasEggGroup(flag); + }}); +} + + +void WASMSpeciesRegistry::Register(ArbUt::Dictionary& externs, + WebAssemblyScriptResolver* resolver) { + REGISTER_GETTER("species_get_id", CreatureSpecies, GetId, resolver) + REGISTER_GETTER("species_get_name", CreatureSpecies, GetName, resolver) + REGISTER_GETTER("species_get_gender_rate", CreatureSpecies, GetGenderRate, resolver) + REGISTER_GETTER("species_get_growth_rate", CreatureSpecies, GetGrowthRate, resolver) + REGISTER_GETTER("species_get_capture_rate", CreatureSpecies, GetCaptureRate, resolver) + REGISTER_GETTER("species_get_base_happiness", PokemonSpecies, GetBaseHappiness, resolver) + + externs.Insert("species_has_forme_by_hash", Species_HasFormeByHash(resolver)); + externs.Insert("species_get_forme_by_hash", Species_GetFormeByHash(resolver)); + externs.Insert("species_has_flag_by_hash", Species_HasFlagByHash(resolver)); + externs.Insert("species_has_egg_group_by_hash", Species_HasEggGroupByHash(resolver)); +} diff --git a/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.hpp b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.hpp new file mode 100644 index 0000000..28c4a60 --- /dev/null +++ b/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMSpeciesRegistry.hpp @@ -0,0 +1,14 @@ +#ifndef PKMNLIB_WASMSPECIESREGISTRY_HPP +#define PKMNLIB_WASMSPECIESREGISTRY_HPP +#include +#include + +class WebAssemblyScriptResolver; + +class WASMSpeciesRegistry { +public: + static void Register(ArbUt::Dictionary& externs, + WebAssemblyScriptResolver* resolver); +}; + +#endif // PKMNLIB_WASMSPECIESREGISTRY_HPP diff --git a/src/ScriptResolving/WASM/InterfaceMethods/TypeRegistry.hpp b/src/ScriptResolving/WASM/InterfaceMethods/TypeRegistry.hpp index a2a551b..c27fdd9 100644 --- a/src/ScriptResolving/WASM/InterfaceMethods/TypeRegistry.hpp +++ b/src/ScriptResolving/WASM/InterfaceMethods/TypeRegistry.hpp @@ -5,8 +5,10 @@ #include "../WebAssemblyScriptResolver.hpp" #include "Arbutils/Collections/Dictionary.hpp" #include "Library/LibraryMethods.hpp" -#include "Library/WASMMoveDataRegistry.hpp" #include "Library/WASMItemRegistry.hpp" +#include "Library/WASMMoveDataRegistry.hpp" +#include "Library/WASMSpeciesRegistry.hpp" +#include "Library/WASMFormeRegistry.hpp" #include "WASMCoreMethods.hpp" #include "WASMStringView.hpp" @@ -18,6 +20,9 @@ public: LibraryMethods::Register(externs, resolver); WASMMoveDataRegistry::Register(externs, resolver); WASMItemRegistry::Register(externs, resolver); + WASMSpeciesRegistry::Register(externs, resolver); + WASMFormeRegistry::Register(externs, resolver); + } }; diff --git a/src/ScriptResolving/WASM/InterfaceMethods/gen7_scripts_rs.wasm b/src/ScriptResolving/WASM/InterfaceMethods/gen7_scripts_rs.wasm deleted file mode 100755 index 89c7b41fb2bafd11d8b990efdd4ff42dd82ae774..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28462 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 diff --git a/src/ScriptResolving/WASM/InterfaceMethods/pkmn_lib.wit b/src/ScriptResolving/WASM/InterfaceMethods/pkmn_lib.wit index 80d3ffd..a60bb5d 100644 --- a/src/ScriptResolving/WASM/InterfaceMethods/pkmn_lib.wit +++ b/src/ScriptResolving/WASM/InterfaceMethods/pkmn_lib.wit @@ -33,6 +33,8 @@ type species = u64 type move = u64 type item = u64 type nature = u64 +type forme = u64 +type ability = u64 enum Statistic { Health, @@ -120,4 +122,32 @@ item_get_category: function(item) -> ItemCategory item_get_battle_category: function(item) -> ItemBattleCategory item_get_price: function(item) -> s32 item_get_fling_power: function(item) -> u8 -item_has_flag_by_hash: function(item, u32 hash) -> bool \ No newline at end of file +item_has_flag_by_hash: function(item, u32 hash) -> bool + +// Species class +species_get_id: function(species) -> u16 +species_get_name: function(species) -> const_string +species_get_gender_rate: function(species) -> f32 +species_get_growth_rate: function(species) -> const_string +species_get_capture_rate: function(species) -> u8 +species_get_base_happiness: function(species) -> u8 +species_has_forme_by_hash: function(species, u32) -> bool +species_get_forme_by_hash: function(species, u32) -> forme +species_has_flag_by_hash: function(species, u32) -> bool +species_has_egg_group_by_hash: function(species, u32) -> bool + +// Forme class +forme_get_name: function(forme) -> const_string +forme_get_height: function(forme) -> float +forme_get_weight: function(forme) -> float +forme_get_base_experience: function(forme) -> u32 +forme_get_type_count: function(forme) -> u64 +forme_get_type: function(forme, u64) -> u8 +forme_get_statistic: function(forme, Statistic) -> u16 +forme_get_ability_count: function(forme) -> u64 +forme_get_hidden_ability_count: function(forme) -> u64 +forme_get_ability: function(forme, bool hidden, u8 index) -> ability +forme_has_flag_by_hash: function(forme, u32) -> bool + + +