From bca7449d1552b6cf7aa7aeac074fff873b3b3bbb Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 31 May 2023 13:34:18 +0100 Subject: [PATCH] G_LoadGameData; Improve backfilling cup windata to do the job properly --- src/g_game.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 080ac382d..f65f0ba6d 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -5171,10 +5171,40 @@ void G_LoadGameData(void) } } - if (versionMinor < 3 && dummywindata[0].best_placement == 0) + if (versionMinor < 3) { - // We now require backfilling of placement information. - M_Memcpy(&dummywindata[0], &dummywindata[1], sizeof(dummywindata[0])); + // We now require backfilling of placement information. + + cupwindata_t bestwindata; + bestwindata.best_placement = 0; + + j = KARTGP_MAX; + while (j > 0) + { + j--; + + if (bestwindata.best_placement == 0) + { + if (dummywindata[j].best_placement != 0) + { + M_Memcpy(&bestwindata, &dummywindata[j], sizeof(bestwindata)); + } + continue; + } + + if (dummywindata[j].best_placement != 0) + { + if (dummywindata[j].best_placement < bestwindata.best_placement) + bestwindata.best_placement = dummywindata[j].best_placement; + + if (dummywindata[j].best_grade > bestwindata.best_grade) + bestwindata.best_grade = dummywindata[j].best_grade; + + bestwindata.got_emerald |= dummywindata[j].got_emerald; + } + + M_Memcpy(&dummywindata[j], &bestwindata, sizeof(dummywindata[j])); + } } if (cup)