From ff07b92f18403aaf3ef247c5a38d6fd9cfd71a60 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 27 Jan 2024 04:23:38 -0800 Subject: [PATCH] Gamedata: save SPB Attack times separately from normal Time Attack Bumps gamedata version! Gamedata version 10 -> 11 --- src/doomstat.h | 1 + src/g_game.c | 22 ++++++++++++++++++++-- src/k_menudraw.c | 3 ++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/doomstat.h b/src/doomstat.h index 40240362c..6e3742752 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -162,6 +162,7 @@ struct recorddata_t { UINT8 mapvisited; recordtimes_t timeattack; ///< Best times for Time Attack + recordtimes_t spbattack; ///< Best times for SPB Attack }; #define KARTSPEED_AUTO -1 diff --git a/src/g_game.c b/src/g_game.c index 1461d4942..bb10672b0 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -536,7 +536,9 @@ void G_TickTimeStickerMedals(void) void G_UpdateRecords(void) { UINT8 earnedEmblems; - recordtimes_t *record = &mapheaderinfo[gamemap-1]->records.timeattack; + recordtimes_t *record = (modeattacking & ATTACKING_SPB) ? + &mapheaderinfo[gamemap-1]->records.spbattack : + &mapheaderinfo[gamemap-1]->records.timeattack; if (modeattacking & ATTACKING_TIME) { @@ -4685,7 +4687,7 @@ void G_LoadGameSettings(void) } #define GD_VERSIONCHECK 0xBA5ED123 // Change every major version, as usual -#define GD_VERSIONMINOR 10 // Change every format update +#define GD_VERSIONMINOR 11 // Change every format update // You can't rearrange these without a special format update typedef enum @@ -5073,6 +5075,16 @@ void G_LoadGameData(void) dummyrecord.timeattack.time = (tic_t)READUINT32(save.p); dummyrecord.timeattack.lap = (tic_t)READUINT32(save.p); + if (versionMinor < 11) + { + memset(&dummyrecord.spbattack, 0, sizeof dummyrecord.spbattack); + } + else + { + dummyrecord.spbattack.time = (tic_t)READUINT32(save.p); + dummyrecord.spbattack.lap = (tic_t)READUINT32(save.p); + } + if (mapnum < nummapheaders && mapheaderinfo[mapnum]) { // Valid mapheader, time to populate with record data. @@ -5084,6 +5096,8 @@ void G_LoadGameData(void) (dummyrecord.mapvisited & MV_BEATEN) || dummyrecord.timeattack.time != 0 || dummyrecord.timeattack.lap != 0 + || dummyrecord.spbattack.time != 0 + || dummyrecord.spbattack.lap != 0 ) { // Invalid, but we don't want to lose all the juicy statistics. @@ -5687,6 +5701,8 @@ void G_SaveGameData(void) WRITEUINT32(save.p, mapheaderinfo[i]->records.timeattack.time); WRITEUINT32(save.p, mapheaderinfo[i]->records.timeattack.lap); + WRITEUINT32(save.p, mapheaderinfo[i]->records.spbattack.time); + WRITEUINT32(save.p, mapheaderinfo[i]->records.spbattack.lap); if (--numgamedatamapheaders == 0) break; @@ -5705,6 +5721,8 @@ void G_SaveGameData(void) WRITEUINT32(save.p, unloadedmap->records.timeattack.time); WRITEUINT32(save.p, unloadedmap->records.timeattack.lap); + WRITEUINT32(save.p, unloadedmap->records.spbattack.time); + WRITEUINT32(save.p, unloadedmap->records.spbattack.lap); if (--numgamedatamapheaders == 0) break; diff --git a/src/k_menudraw.c b/src/k_menudraw.c index 31a1e844b..682f95681 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -3503,7 +3503,8 @@ void M_DrawTimeAttack(void) if (currentMenu == &PLAY_TimeAttackDef) { - recordtimes_t *record = &mapheaderinfo[map]->records.timeattack; + recorddata_t *rcp = &mapheaderinfo[map]->records; + recordtimes_t *record = cv_dummyspbattack.value ? &rcp->spbattack : &rcp->timeattack; tic_t timerec = record->time; tic_t laprec = record->lap; UINT32 timeheight = 82;