From b275a14ec2b91f4443dfe1c14feb34aa27e613a4 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 12 Feb 2024 18:10:26 -0800 Subject: [PATCH] Egg TV: detect Prisons mode --- src/g_demo.c | 3 +++ src/g_demo.h | 1 + src/menus/class-egg-tv/EggTVData.cpp | 4 ++-- src/menus/class-egg-tv/EggTVData.hpp | 22 +++++++++++++++++++--- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/g_demo.c b/src/g_demo.c index 587054845..87e43d750 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -2667,6 +2667,9 @@ void G_LoadDemoInfo(menudemo_t *pdemo) if (pdemoflags & DF_ENCORE) pdemo->kartspeed |= DF_ENCORE; + if (pdemoflags & DF_GRANDPRIX) + pdemo->gp = true; + // Read standings! count = 0; diff --git a/src/g_demo.h b/src/g_demo.h index 501f8da72..808f3ff25 100644 --- a/src/g_demo.h +++ b/src/g_demo.h @@ -89,6 +89,7 @@ struct menudemo_t { INT16 gametype; SINT8 kartspeed; // Add OR DF_ENCORE for encore mode, idk UINT8 numlaps; + UINT8 gp; struct { UINT8 ranking; diff --git a/src/menus/class-egg-tv/EggTVData.cpp b/src/menus/class-egg-tv/EggTVData.cpp index 78078e9c5..f8fdd66c2 100644 --- a/src/menus/class-egg-tv/EggTVData.cpp +++ b/src/menus/class-egg-tv/EggTVData.cpp @@ -237,7 +237,7 @@ EggTVData::Replay::Replay(Folder::Cache::ReplayRef& ref) : ref_(&ref) if (info.gametype == GT_RACE) { - gametype_ = Gametype(GT_RACE, Gametype::Race { + gametype_ = Gametype(GT_RACE, info.gp, Gametype::Race { info.numlaps, kartspeed_cons_t[(info.kartspeed & ~(DF_ENCORE)) + 1].strvalue, (info.kartspeed & DF_ENCORE) != 0, @@ -245,7 +245,7 @@ EggTVData::Replay::Replay(Folder::Cache::ReplayRef& ref) : ref_(&ref) } else { - gametype_ = Gametype(info.gametype); + gametype_ = Gametype(info.gametype, info.gp); } for (const auto& data : info.standings) diff --git a/src/menus/class-egg-tv/EggTVData.hpp b/src/menus/class-egg-tv/EggTVData.hpp index b898ee45a..d7de9517d 100644 --- a/src/menus/class-egg-tv/EggTVData.hpp +++ b/src/menus/class-egg-tv/EggTVData.hpp @@ -193,12 +193,12 @@ public: }; explicit Gametype() {} - explicit Gametype(INT16 gt, Race race) : gametype_(get(gt)), var_(race) {} - explicit Gametype(INT16 gt) : gametype_(get(gt)) {} + explicit Gametype(INT16 gt, bool gp) : gametype_(get(gt)), name_(get_name(gt, gp)) {} + explicit Gametype(INT16 gt, bool gp, Race race) : Gametype(gt, gp) { var_ = race; } bool valid() const { return gametype_; } - std::string_view name() const { return valid() ? gametype_->name : ""; } + std::string_view name() const { return name_; } UINT32 rules() const { return valid() ? gametype_->rules : 0u; } bool ranks_time() const { return !ranks_points(); } @@ -208,8 +208,24 @@ public: private: const gametype_t* gametype_ = nullptr; + std::string_view name_; std::variant var_; + std::string_view get_name(INT16 gt, bool gp) const + { + if (!valid()) + { + return ""; + } + + if ((rules() & GTR_PRISONS) && gp) + { + return "Prison Break"; + } + + return gametype_->name; + } + static gametype_t* get(INT16 gt) { return gt >= 0 && gt < numgametypes ? gametypes[gt] : nullptr; } };