summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2025-12-11 21:10:19 -0600
committeriwubcode <iwubcode@users.noreply.github.com>2026-01-19 16:03:19 -0600
commit9656332356fcf29f61a1e7db1ab2ed1a6bb68f7b (patch)
tree2c50c4b1bb5907454ba208b5b9131a64c3fa60d3 /Source/Core
parent710905138c481f2332c3cd7df07c06611985410b (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.cpp11
-rw-r--r--Source/Core/Core/ConfigManager.h2
-rw-r--r--Source/Core/Core/FifoPlayer/FifoDataFile.cpp28
-rw-r--r--Source/Core/Core/FifoPlayer/FifoDataFile.h4
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;