diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e4f199..0cd6cfd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ option(SHARED "Whether we should build a shared library, instead of a static one option(TESTS "Whether the test executable should be build as well." OFF) option(STATICC "Whether gcc and stdc++ should be linked statically to the library." OFF) set(SCRIPT_PROVIDER "angelscript" CACHE STRING "Which script provider to use.") +set(LEVEL_SIZE "8" CACHE STRING "Number of bits to store the level as. Can be 8, 16, 32, or 64") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") add_compile_options(-fconcepts) @@ -33,6 +34,18 @@ message(STATUS "Using: \t CXX ABI ${CMAKE_CXX_COMPILER_ABI} \t C++ Version ${CMAKE_CXX_STANDARD}") +if (LEVEL_SIZE STREQUAL "8") + add_definitions(-DLEVEL_U8) +elseif (LEVEL_SIZE STREQUAL "16") + add_definitions(-DLEVEL_U16) +elseif (LEVEL_SIZE STREQUAL "32") + add_definitions(-DLEVEL_U32) +elseif (LEVEL_SIZE STREQUAL "64") + add_definitions(-DLEVEL_U64) +else () + message(FATAL_ERROR, "Invalid level size was given.") +endif () + include(CmakeConanSetup.cmake) SetupConan() diff --git a/CmakeConanSetup.cmake b/CmakeConanSetup.cmake index f3449d4..3b7b36c 100644 --- a/CmakeConanSetup.cmake +++ b/CmakeConanSetup.cmake @@ -11,10 +11,23 @@ function(SetupConan) if (NOT WINDOWS) execute_process(COMMAND conan install ${CMAKE_SOURCE_DIR} --install-folder=${CMAKE_BINARY_DIR} --build outdated - -s compiler=clang -s compiler.libcxx=libstdc++11 -o *:shared=True -o *:staticC=${CONAN_STATIC_C} -o AngelScript:link_std_statically=True) + -s compiler=clang + -s compiler.libcxx=libstdc++11 + -o *:shared=True + -o *:staticC=${CONAN_STATIC_C} + -o AngelScript:link_std_statically=True + -o CreatureLib:level_size=${LEVEL_SIZE} + ) else () execute_process(COMMAND conan install ${CMAKE_SOURCE_DIR} --install-folder=${CMAKE_BINARY_DIR} --build outdated - -s compiler=gcc -s compiler.libcxx=libstdc++11 -s os=Windows -o *:shared=True -o *:staticC=${CONAN_STATIC_C} -o AngelScript:link_std_statically=True) + -s compiler=gcc + -s compiler.libcxx=libstdc++11 + -s os=Windows + -o *:shared=True + -o *:staticC=${CONAN_STATIC_C} + -o AngelScript:link_std_statically=True + -o CreatureLib:level_size=${LEVEL_SIZE} + ) endif () endif () include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) diff --git a/src/Battling/Library/ExperienceLibrary.cpp b/src/Battling/Library/ExperienceLibrary.cpp index 20865a9..f20b3a8 100644 --- a/src/Battling/Library/ExperienceLibrary.cpp +++ b/src/Battling/Library/ExperienceLibrary.cpp @@ -3,7 +3,7 @@ #include "../PkmnScriptHook.hpp" #include "../Pokemon/Pokemon.hpp" -static inline uint32_t CalculateDynamicExperience(uint8_t level, float v1, +static inline uint32_t CalculateDynamicExperience(level_int_t level, float v1, ArbUt::BorrowedPtr op, ArbUt::BorrowedPtr faintedMon) { float a = 2 * level + 10; diff --git a/src/Battling/Library/ExperienceLibrary.hpp b/src/Battling/Library/ExperienceLibrary.hpp index 1e61c54..8225e75 100644 --- a/src/Battling/Library/ExperienceLibrary.hpp +++ b/src/Battling/Library/ExperienceLibrary.hpp @@ -2,6 +2,8 @@ #define PKMNLIB_EXPERIENCELIBRARY_HPP #include +#include + namespace PkmnLib::Battling { class ExperienceLibrary : public CreatureLib::Battling::ExperienceLibrary { public: diff --git a/src/Battling/Pokemon/CreatePokemon.hpp b/src/Battling/Pokemon/CreatePokemon.hpp index ae42239..8882853 100644 --- a/src/Battling/Pokemon/CreatePokemon.hpp +++ b/src/Battling/Pokemon/CreatePokemon.hpp @@ -9,7 +9,7 @@ namespace PkmnLib::Battling { ArbUt::BorrowedPtr _library; ArbUt::StringView _species = ""_cnc; ArbUt::StringView _forme = "default"_cnc; - uint8_t _level; + level_int_t _level; std::string _nickname = ""; ArbUt::StringView _ability = ""_cnc; diff --git a/src/Battling/Pokemon/Pokemon.hpp b/src/Battling/Pokemon/Pokemon.hpp index dcf94fe..8a72893 100644 --- a/src/Battling/Pokemon/Pokemon.hpp +++ b/src/Battling/Pokemon/Pokemon.hpp @@ -20,7 +20,7 @@ namespace PkmnLib::Battling { public: Pokemon(ArbUt::BorrowedPtr library, const ArbUt::BorrowedPtr& species, - const ArbUt::BorrowedPtr& forme, uint8_t level, uint32_t experience, + const ArbUt::BorrowedPtr& forme, level_int_t level, uint32_t experience, uint32_t uid, CreatureLib::Library::Gender gender, uint8_t coloring, ArbUt::BorrowedPtr heldItem, const std::string& nickname, const CreatureLib::Library::TalentIndex& talent, diff --git a/src/ScriptResolving/AngelScript/TypeRegistry/Library/RegisterGrowthRateTypes.cpp b/src/ScriptResolving/AngelScript/TypeRegistry/Library/RegisterGrowthRateTypes.cpp index f80ed81..6da3b08 100644 --- a/src/ScriptResolving/AngelScript/TypeRegistry/Library/RegisterGrowthRateTypes.cpp +++ b/src/ScriptResolving/AngelScript/TypeRegistry/Library/RegisterGrowthRateTypes.cpp @@ -23,7 +23,7 @@ static uint8_t CalculateLevel(const CreatureLib::Library::GrowthRateLibrary* obj return obj->CalculateLevel(str, experience); } static uint32_t CalculateExperience(const CreatureLib::Library::GrowthRateLibrary* obj, const ArbUt::StringView& str, - uint8_t level) { + level_int_t level) { return obj->CalculateExperience(str, level); }