diff --git a/librecomp/include/librecomp/game.hpp b/librecomp/include/librecomp/game.hpp index c7b7c48..9f11854 100644 --- a/librecomp/include/librecomp/game.hpp +++ b/librecomp/include/librecomp/game.hpp @@ -9,12 +9,22 @@ #include namespace recomp { + enum class SaveType { + None, + Eep4k, + Eep16k, + Sram, + Flashram, + AllowAll, // Allows all save types to work and reports eeprom size as 16kbit. + }; + struct GameEntry { uint64_t rom_hash; std::string internal_name; std::u8string game_id; std::string mod_game_id; std::span cache_data; + SaveType save_type = SaveType::None; bool is_enabled; gpr entrypoint_address; @@ -65,15 +75,6 @@ namespace recomp { void do_rom_pio(uint8_t* rdram, gpr ram_address, uint32_t physical_addr); const Version& get_project_version(); - enum class SaveType { - None, - Eep4k, - Eep16k, - Sram, - Flashram, - AllowAll, // Allows all save types to work and reports eeprom size as 16kbit. - }; - /** * The following arguments contain mandatory callbacks that need to be registered (i.e., can't be `nullptr`): * - `rsp_callbacks` @@ -82,7 +83,6 @@ namespace recomp { * It must be called only once and it must be called before `ultramodern::preinit`. */ void start( - SaveType save_type, const Version& project_version, ultramodern::renderer::WindowHandle window_handle, const recomp::rsp::callbacks_t& rsp_callbacks, diff --git a/librecomp/src/recomp.cpp b/librecomp/src/recomp.cpp index 9e8a3dd..f7caffc 100644 --- a/librecomp/src/recomp.cpp +++ b/librecomp/src/recomp.cpp @@ -66,6 +66,8 @@ std::unordered_map game_roms {}; std::unique_ptr mod_context = std::make_unique(); // The project's version. recomp::Version project_version; +// The current game's save type. +recomp::SaveType save_type = recomp::SaveType::None; std::u8string recomp::GameEntry::stored_filename() const { return game_id + u8".z64"; @@ -547,6 +549,7 @@ bool wait_for_game_started(uint8_t* rdram, recomp_context* context) { recomp::init_heap(rdram, recomp::mod_rdram_start + mod_ram_used); + save_type = game_entry.save_type; ultramodern::init_saving(rdram); ultramodern::load_shader_cache(game_entry.cache_data); @@ -566,33 +569,30 @@ bool wait_for_game_started(uint8_t* rdram, recomp_context* context) { } } -static recomp::SaveType _save_type = recomp::SaveType::None; - recomp::SaveType recomp::get_save_type() { - return _save_type; + return save_type; } bool recomp::eeprom_allowed() { return - _save_type == SaveType::Eep4k || - _save_type == SaveType::Eep16k || - _save_type == SaveType::AllowAll; + save_type == SaveType::Eep4k || + save_type == SaveType::Eep16k || + save_type == SaveType::AllowAll; } bool recomp::sram_allowed() { return - _save_type == SaveType::Sram || - _save_type == SaveType::AllowAll; + save_type == SaveType::Sram || + save_type == SaveType::AllowAll; } bool recomp::flashram_allowed() { return - _save_type == SaveType::Flashram || - _save_type == SaveType::AllowAll; + save_type == SaveType::Flashram || + save_type == SaveType::AllowAll; } void recomp::start( - SaveType save_type, const recomp::Version& version, ultramodern::renderer::WindowHandle window_handle, const recomp::rsp::callbacks_t& rsp_callbacks, @@ -604,7 +604,6 @@ void recomp::start( const ultramodern::error_handling::callbacks_t& error_handling_callbacks, const ultramodern::threads::callbacks_t& threads_callbacks ) { - _save_type = save_type; project_version = version; recomp::check_all_stored_roms();