diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2025-12-11 21:10:19 -0600 |
|---|---|---|
| committer | iwubcode <iwubcode@users.noreply.github.com> | 2026-01-19 16:03:19 -0600 |
| commit | 9656332356fcf29f61a1e7db1ab2ed1a6bb68f7b (patch) | |
| tree | 2c50c4b1bb5907454ba208b5b9131a64c3fa60d3 /Source/Core | |
| parent | 710905138c481f2332c3cd7df07c06611985410b (diff) | |
Core: add game id to fifo logs, this makes it easier to test graphical enhancements which use the game id to load
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/ConfigManager.cpp | 11 | ||||
| -rw-r--r-- | Source/Core/Core/ConfigManager.h | 2 | ||||
| -rw-r--r-- | Source/Core/Core/FifoPlayer/FifoDataFile.cpp | 28 | ||||
| -rw-r--r-- | Source/Core/Core/FifoPlayer/FifoDataFile.h | 4 |
4 files changed, 42 insertions, 3 deletions
diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index a2c2ac1f0f..b2e682c42f 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -435,7 +435,16 @@ struct SetGameMetadata *region = DiscIO::Region::NTSC_U; system.SetIsWii(dff_file->GetIsWii()); - Host_TitleChanged(); + + const std::string& game_id = dff_file->GetGameId(); + if (game_id == DEFAULT_GAME_ID) + { + Host_TitleChanged(); + } + else + { + config->SetRunningGameMetadata(game_id); + } return true; } diff --git a/Source/Core/Core/ConfigManager.h b/Source/Core/Core/ConfigManager.h index e255974d8b..4cb78d88b8 100644 --- a/Source/Core/Core/ConfigManager.h +++ b/Source/Core/Core/ConfigManager.h @@ -42,6 +42,8 @@ class TMDReader; struct BootParameters; +static constexpr std::string_view DEFAULT_GAME_ID = "00000000"; + struct SConfig { // Settings diff --git a/Source/Core/Core/FifoPlayer/FifoDataFile.cpp b/Source/Core/Core/FifoPlayer/FifoDataFile.cpp index 27899d6e3e..1e7ec5d77e 100644 --- a/Source/Core/Core/FifoPlayer/FifoDataFile.cpp +++ b/Source/Core/Core/FifoPlayer/FifoDataFile.cpp @@ -12,11 +12,12 @@ #include "Common/IOFile.h" #include "Common/MsgHandler.h" #include "Core/Config/MainSettings.h" +#include "Core/ConfigManager.h" #include "Core/HW/Memmap.h" #include "Core/System.h" constexpr u32 FILE_ID = 0x0d01f1f0; -constexpr u32 VERSION_NUMBER = 5; +constexpr u32 VERSION_NUMBER = 6; constexpr u32 MIN_LOADER_VERSION = 1; // This value is only used if the DFF file was created with overridden RAM sizes. // If the MIN_LOADER_VERSION ever exceeds this, it's alright to remove it. @@ -46,9 +47,11 @@ struct FileHeader // will crash and burn with mismatched settings. See PR #8722. u32 mem1_size; u32 mem2_size; - u8 reserved[32]; + char gameid[8]; + u8 reserved[24]; }; static_assert(sizeof(FileHeader) == 128, "FileHeader should be 128 bytes"); +static_assert(DEFAULT_GAME_ID.size() == sizeof(FileHeader::gameid), "Default game id size changed"); struct FileFrameInfo { @@ -167,6 +170,17 @@ bool FifoDataFile::Save(const std::string& filename) header.mem1_size = memory.GetRamSizeReal(); header.mem2_size = memory.GetExRamSizeReal(); + const auto gameid = SConfig::GetInstance().GetGameID(); + if (gameid.size() > DEFAULT_GAME_ID.size()) + { + // Custom game id? Won't fit, just use default + std::memcpy(header.gameid, DEFAULT_GAME_ID.data(), DEFAULT_GAME_ID.size()); + } + else + { + std::strncpy(header.gameid, gameid.c_str(), DEFAULT_GAME_ID.size()); + } + file.Seek(0, File::SeekOrigin::Begin); file.WriteBytes(&header, sizeof(FileHeader)); @@ -253,6 +267,16 @@ std::unique_ptr<FifoDataFile> FifoDataFile::Load(const std::string& filename, bo dataFile->m_Flags = header.flags; dataFile->m_Version = header.file_version; + // Official support for game id was added in version 6 + if (header.file_version < 6) + { + dataFile->m_game_id = DEFAULT_GAME_ID; + } + else + { + dataFile->m_game_id = std::string{header.gameid, DEFAULT_GAME_ID.size()}; + } + if (flagsOnly) { // Force settings to match those used when the DFF was created. This is sort of a hack. diff --git a/Source/Core/Core/FifoPlayer/FifoDataFile.h b/Source/Core/Core/FifoPlayer/FifoDataFile.h index dc4f7915da..f0fd098eaa 100644 --- a/Source/Core/Core/FifoPlayer/FifoDataFile.h +++ b/Source/Core/Core/FifoPlayer/FifoDataFile.h @@ -9,6 +9,7 @@ #include <vector> #include "Common/CommonTypes.h" +#include "Core/ConfigManager.h" #include "VideoCommon/XFMemory.h" namespace File @@ -71,6 +72,7 @@ public: u8* GetTexMem() { return m_TexMem.data(); } u32 GetRamSizeReal() { return m_ram_size_real; } u32 GetExRamSizeReal() { return m_exram_size_real; } + const std::string& GetGameId() const { return m_game_id; } void AddFrame(const FifoFrameInfo& frameInfo); const FifoFrameInfo& GetFrame(u32 frame) const { return m_Frames[frame]; } @@ -102,6 +104,8 @@ private: u32 m_ram_size_real = 0; u32 m_exram_size_real = 0; + std::string m_game_id = std::string{DEFAULT_GAME_ID}; + u32 m_Flags = 0; u32 m_Version = 0; |
