From 7f040d35d99d2c78e151822ba1fbcd99bcff613a Mon Sep 17 00:00:00 2001 From: kraflab Date: Sat, 7 Aug 2021 18:08:12 +0200 Subject: [PATCH] Track reference splits --- prboom2/src/dsda/intermission_display.c | 8 ++++++-- prboom2/src/dsda/split_tracker.c | 22 +++++++++++++++++----- prboom2/src/dsda/split_tracker.h | 2 ++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/prboom2/src/dsda/intermission_display.c b/prboom2/src/dsda/intermission_display.c index ac4d6a205..d6d100370 100644 --- a/prboom2/src/dsda/intermission_display.c +++ b/prboom2/src/dsda/intermission_display.c @@ -54,6 +54,10 @@ void dsda_InitIntermissionDisplay(patchnum_t* font) { extern int leveltime, totalleveltimes; +static int dsda_SplitComparisonDelta(dsda_split_time_t* split_time) { + return split_time->ref ? split_time->ref_delta : split_time->best_delta; +} + static void dsda_UpdateIntermissionTime(dsda_split_t* split) { char* s; char delta[16]; @@ -66,7 +70,7 @@ static void dsda_UpdateIntermissionTime(dsda_split_t* split) { const char* sign; int diff; - diff = split->leveltime.best_delta; + diff = dsda_SplitComparisonDelta(&split->leveltime); sign = diff >= 0 ? "+" : "-"; color = diff >= 0 ? 0x30 + g_cr_gray : 0x30 + g_cr_green; diff = abs(diff); @@ -112,7 +116,7 @@ static void dsda_UpdateIntermissionTotal(dsda_split_t* split) { const char* sign; int diff; - diff = split->totalleveltimes.best_delta / 35; + diff = dsda_SplitComparisonDelta(&split->totalleveltimes) / 35; sign = diff >= 0 ? "+" : "-"; color = diff >= 0 ? 0x30 + g_cr_gray : 0x30 + g_cr_green; diff = abs(diff); diff --git a/prboom2/src/dsda/split_tracker.c b/prboom2/src/dsda/split_tracker.c index 8cbdd8c11..d62cd1613 100644 --- a/prboom2/src/dsda/split_tracker.c +++ b/prboom2/src/dsda/split_tracker.c @@ -85,6 +85,8 @@ static void dsda_InitSplitTime(dsda_split_time_t* split_time) { split_time->best_delta = 0; split_time->session_best = 0; split_time->session_best_delta = 0; + split_time->ref = 0; + split_time->ref_delta = 0; } static void dsda_LoadSplits(void) { @@ -102,7 +104,7 @@ static void dsda_LoadSplits(void) { return; if (M_ReadFile(path, &buffer) != -1) { - int episode, map, tics, total_tics, exits, count, i; + int episode, map, tics, total_tics, exits, count, i, ref_tics, ref_total_tics; char* line; line = strtok(buffer, "\n"); @@ -113,8 +115,13 @@ static void dsda_LoadSplits(void) { } while (line) { - count = sscanf(line, "%i %i %i %i %i", &episode, &map, &tics, &total_tics, &exits); - if (count != 5) + ref_tics = ref_total_tics = 0; + count = sscanf( + line, "%i %i %i %i %i %i %i", + &episode, &map, &tics, &total_tics, &exits, + &ref_tics, &ref_total_tics + ); + if (count < 5) break; i = dsda_splits_count; @@ -126,6 +133,8 @@ static void dsda_LoadSplits(void) { dsda_splits[i].map = map; dsda_splits[i].leveltime.best = tics; dsda_splits[i].totalleveltimes.best = total_tics; + dsda_splits[i].leveltime.ref = ref_tics; + dsda_splits[i].totalleveltimes.ref = ref_total_tics; dsda_splits[i].exits = exits; dsda_splits[i].run_counter = 0; @@ -153,12 +162,14 @@ void dsda_WriteSplits(void) { for (i = 0; i < dsda_splits_count; ++i) { p += sprintf( - p, "%i %i %i %i %i\n", + p, "%i %i %i %i %i %i %i\n", dsda_splits[i].episode, dsda_splits[i].map, dsda_splits[i].leveltime.best, dsda_splits[i].totalleveltimes.best, - dsda_splits[i].exits + dsda_splits[i].exits, + dsda_splits[i].leveltime.ref, + dsda_splits[i].totalleveltimes.ref ); } @@ -170,6 +181,7 @@ static void dsda_TrackSplitTime(dsda_split_time_t* split_time, int current) { split_time->current = current; split_time->best_delta = current - split_time->best; split_time->session_best_delta = current - split_time->session_best; + split_time->ref_delta = current - split_time->ref; if (current < split_time->best || !split_time->best) split_time->best = current; diff --git a/prboom2/src/dsda/split_tracker.h b/prboom2/src/dsda/split_tracker.h index e08f74e8e..c743ddf8f 100644 --- a/prboom2/src/dsda/split_tracker.h +++ b/prboom2/src/dsda/split_tracker.h @@ -24,6 +24,8 @@ typedef struct { int best_delta; int session_best; int session_best_delta; + int ref; + int ref_delta; } dsda_split_time_t; typedef struct {