From 9656332356fcf29f61a1e7db1ab2ed1a6bb68f7b Mon Sep 17 00:00:00 2001 From: iwubcode Date: Thu, 11 Dec 2025 21:10:19 -0600 Subject: [PATCH] Core: add game id to fifo logs, this makes it easier to test graphical enhancements which use the game id to load --- Source/Core/Core/ConfigManager.cpp | 11 +++++++- Source/Core/Core/ConfigManager.h | 2 ++ Source/Core/Core/FifoPlayer/FifoDataFile.cpp | 28 ++++++++++++++++++-- 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::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 #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;