From 5fd7f4ee65b16101bfccdfbb2e6712df66f20828 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 2 Mar 2024 12:24:07 -0600 Subject: [PATCH] Allow G_LoadDemoInfo to load TA demos --- src/g_demo.cpp | 16 ++++++++++++++-- src/g_demo.h | 2 +- src/menus/class-egg-tv/EggTVData.cpp | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/g_demo.cpp b/src/g_demo.cpp index 56a0f83e9..00e5dc91d 100644 --- a/src/g_demo.cpp +++ b/src/g_demo.cpp @@ -2563,7 +2563,7 @@ static bool load_ubjson_standing(menudemo_t* pdemo, tcb::span slice, return true; } -void G_LoadDemoInfo(menudemo_t *pdemo) +void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer) { savebuffer_t info = {0}; UINT8 *extrainfo_p; @@ -2652,7 +2652,7 @@ void G_LoadDemoInfo(menudemo_t *pdemo) pdemoflags = READUINT16(info.p); // temp? - if (!(pdemoflags & DF_MULTIPLAYER)) + if (!(pdemoflags & DF_MULTIPLAYER) && !allownonmultiplayer) { CONS_Alert(CONS_ERROR, M_GetText("%s is not a multiplayer replay and can't be listed on this menu fully yet.\n"), pdemo->filepath); goto badreplay; @@ -2678,6 +2678,18 @@ void G_LoadDemoInfo(menudemo_t *pdemo) goto badreplay; } + if ((pdemoflags & DF_ATTACKMASK)) + { + if ((pdemoflags & ATTACKING_TIME)) + { + info.p += 4; // time + } + if ((pdemoflags & ATTACKING_LAP)) + { + info.p += 4; // lap + } + } + for (i = 0; i < PRNUMSYNCED; i++) { info.p += 4; // RNG seed diff --git a/src/g_demo.h b/src/g_demo.h index 68d7bb6ed..48a7bce1d 100644 --- a/src/g_demo.h +++ b/src/g_demo.h @@ -227,7 +227,7 @@ void G_DoneLevelLoad(void); void G_StopDemo(void); boolean G_CheckDemoStatus(void); -void G_LoadDemoInfo(menudemo_t *pdemo); +void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer); void G_DeferedPlayDemo(const char *demo); void G_SaveDemo(void); diff --git a/src/menus/class-egg-tv/EggTVData.cpp b/src/menus/class-egg-tv/EggTVData.cpp index f8fdd66c2..50c33f97b 100644 --- a/src/menus/class-egg-tv/EggTVData.cpp +++ b/src/menus/class-egg-tv/EggTVData.cpp @@ -216,7 +216,7 @@ EggTVData::Replay::Replay(Folder::Cache::ReplayRef& ref) : ref_(&ref) std::copy_n(path.string().c_str(), path.native().size() + 1, info.filepath); - G_LoadDemoInfo(&info); + G_LoadDemoInfo(&info, /*allownonmultiplayer*/ false); if (info.type != MD_LOADED) {