From 4824b5d434c48ecfa5d1c19414081d066d03147c Mon Sep 17 00:00:00 2001 From: Eidolon Date: Wed, 21 Feb 2024 18:40:35 -0600 Subject: [PATCH] Allow cup records in gamedata to be flexibly-sized --- src/g_gamedata.cpp | 10 +++++----- src/g_gamedata.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/g_gamedata.cpp b/src/g_gamedata.cpp index 6daf1f21a..9268f6b98 100644 --- a/src/g_gamedata.cpp +++ b/src/g_gamedata.cpp @@ -182,7 +182,7 @@ void srb2::save_ng_gamedata() } srb2::GamedataCupJson cupdata {}; cupdata.name = std::string(cup->name); - for (int i = 0; i < 4; i++) + for (size_t i = 0; i < std::min(KARTGP_MAX, cupdata.records.size()); i++) { cupdata.records[i].bestgrade = cup->windata[i].best_grade; cupdata.records[i].bestplacement = cup->windata[i].best_placement; @@ -622,7 +622,7 @@ void srb2::load_ng_gamedata() for (auto& cuppair : js.cups) { - cupwindata_t dummywindata[4] {{}}; + std::array dummywindata {{}}; cupheader_t* cup = nullptr; // Find the loaded cup @@ -636,7 +636,7 @@ void srb2::load_ng_gamedata() } // Digest its data... - for (size_t j = 0; j < (size_t)KARTGP_MAX; j++) + for (size_t j = 0; j < std::min(KARTGP_MAX, cuppair.second.records.size()); j++) { dummywindata[j].best_placement = cuppair.second.records[j].bestplacement; dummywindata[j].best_grade = static_cast(cuppair.second.records[j].bestgrade); @@ -682,7 +682,7 @@ void srb2::load_ng_gamedata() { // We found a cup, so assign the windata. - memcpy(cup->windata, dummywindata, sizeof(cup->windata)); + memcpy(cup->windata, dummywindata.data(), sizeof(cup->windata)); } else if (dummywindata[0].best_placement != 0) { @@ -704,7 +704,7 @@ void srb2::load_ng_gamedata() unloadedcupheaders = unloadedcup; // Finally, copy into. - memcpy(unloadedcup->windata, dummywindata, sizeof(cup->windata)); + memcpy(unloadedcup->windata, dummywindata.data(), sizeof(cup->windata)); } } diff --git a/src/g_gamedata.h b/src/g_gamedata.h index 385e83f38..72fac373c 100644 --- a/src/g_gamedata.h +++ b/src/g_gamedata.h @@ -179,7 +179,7 @@ struct GamedataCupRecordsJson final struct GamedataCupJson final { std::string name; - std::array records; + std::vector records; NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(GamedataCupJson, name, records) };