Made save type be a per-game setting

This commit is contained in:
Mr-Wiseguy 2024-10-26 22:27:16 -04:00
parent 1662d6de16
commit 4c756c4ffb
2 changed files with 21 additions and 22 deletions

View file

@ -9,12 +9,22 @@
#include <ultramodern/ultramodern.hpp>
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<const char> 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,

View file

@ -66,6 +66,8 @@ std::unordered_map<std::u8string, recomp::GameEntry> game_roms {};
std::unique_ptr<recomp::mods::ModContext> mod_context = std::make_unique<recomp::mods::ModContext>();
// 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();