From 448495c91c317518a972aa47c2cc040a54e2fc33 Mon Sep 17 00:00:00 2001 From: JugadorXEI Date: Sun, 20 Apr 2025 15:08:58 +0200 Subject: [PATCH] Make loop end point thing sorting consistent (fixes loop desyncs) --- src/p_setup.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/p_setup.c b/src/p_setup.c index 9c2cbdd58..4894fdf32 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -757,9 +757,13 @@ static int cmp_loopends(const void *a, const void *b) *mt2 = *(const mapthing_t*const*)b; // weighted sorting; tag takes precedence over type - return - intsign(mt1->tid - mt2->tid) * 2 + + const int maincomp = intsign(mt1->tid - mt2->tid) * 2 + intsign(mt1->args[0] - mt2->args[0]); + + // JugadorXEI (04/20/25): If a qsort comparison ends up with an equal result, + // it results in UNSPECIFIED BEHAVIOR, so assuming the previous two comparisons + // are equal, let's make it consistent with Linux behaviour (ascending order). + return maincomp != 0 ? maincomp : intsign((mt1 - mapthings) - (mt2 - mapthings)); } static void P_SpawnMapThings(boolean spawnemblems)