From 2ff3e0db35759d3e3441121f709030e8e6f2504e358130ec7051bbb9b69ade6d Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Wed, 2 Mar 2022 12:37:07 +0000 Subject: [PATCH] - Add 0001-Fix-integer-overflow-during-multiplication-with-real.patch to resolve jaggy motion when gamespeed!=100 and when the program has run for 25+ minutes. OBS-URL: https://build.opensuse.org/package/show/games/prboom-plus?expand=0&rev=47 --- ...flow-during-multiplication-with-real.patch | 61 +++++++++++++++++++ prboom-plus.changes | 7 +++ prboom-plus.spec | 1 + 3 files changed, 69 insertions(+) create mode 100644 0001-Fix-integer-overflow-during-multiplication-with-real.patch diff --git a/0001-Fix-integer-overflow-during-multiplication-with-real.patch b/0001-Fix-integer-overflow-during-multiplication-with-real.patch new file mode 100644 index 0000000..0cb8113 --- /dev/null +++ b/0001-Fix-integer-overflow-during-multiplication-with-real.patch @@ -0,0 +1,61 @@ +From 247c27d7dfe44712975c75a9d741b69cca36d895 Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Tue, 15 Feb 2022 20:28:48 +0100 +Subject: [PATCH] Fix integer overflow during multiplication with + realtic_clock_rate (#476) + +When the program has run for about 26 minutes and SDL_GetTicks has +accrued a reasonably large value, multiplication by realtic_clock_rate +overflows "int" on contemporary platforms, manifesting in jagged +motion. + +Fixes: v2.6.1um-29-ga7bafe07 +Closes #471 +--- + prboom2/src/SDL/i_main.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/prboom2/src/SDL/i_main.c b/prboom2/src/SDL/i_main.c +index c0fc0288..a29ccda7 100644 +--- prboom2/src/SDL/i_main.c ++++ prboom2/src/SDL/i_main.c +@@ -100,8 +100,8 @@ int ms_to_next_tick; + + int I_GetTime_RealTime (void) + { +- int t = I_GetTime_MS(); +- int i = t * TICRATE / 1000; ++ int64_t t = I_GetTime_MS(); ++ int64_t i = t * TICRATE / 1000; + + ms_to_next_tick = (i + 1) * 1000 / TICRATE - t; + ms_to_next_tick = BETWEEN(0, 1000 / TICRATE, ms_to_next_tick); +@@ -113,8 +113,8 @@ int realtic_clock_rate = 100; + + static int I_GetTime_Scaled(void) + { +- int t = I_GetTime_MS(); +- int i = t * TICRATE * realtic_clock_rate / 100000; ++ int64_t t = I_GetTime_MS(); ++ int64_t i = t * TICRATE * realtic_clock_rate / 100000; + + ms_to_next_tick = (i + 1) * 100000 / realtic_clock_rate / TICRATE - t; + ms_to_next_tick = BETWEEN(0, 100000 / realtic_clock_rate / TICRATE, ms_to_next_tick); +@@ -147,12 +147,12 @@ static int I_TickElapsedTime_FastDemo(void) + + static int I_TickElapsedTime_RealTime(void) + { +- return I_GetTime_MS() * TICRATE % 1000 * FRACUNIT / 1000; ++ return (int64_t)I_GetTime_MS() * TICRATE % 1000 * FRACUNIT / 1000; + } + + static int I_TickElapsedTime_Scaled(void) + { +- return I_GetTime_MS() * realtic_clock_rate * TICRATE / 100 % 1000 * FRACUNIT / 1000; ++ return (int64_t)I_GetTime_MS() * realtic_clock_rate * TICRATE / 100 % 1000 * FRACUNIT / 1000; + } + + int (*I_TickElapsedTime)(void) = I_TickElapsedTime_RealTime; +-- +2.35.1 + diff --git a/prboom-plus.changes b/prboom-plus.changes index 89de9a4..4070beb 100644 --- a/prboom-plus.changes +++ b/prboom-plus.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Mar 2 12:24:56 UTC 2022 - Jan Engelhardt + +- Add 0001-Fix-integer-overflow-during-multiplication-with-real.patch + to resolve jaggy motion when gamespeed!=100 and when the + program has run for 25+ minutes. + ------------------------------------------------------------------- Sat Feb 19 16:19:14 UTC 2022 - Jan Engelhardt diff --git a/prboom-plus.spec b/prboom-plus.spec index 137e4f6..ec3ac68 100644 --- a/prboom-plus.spec +++ b/prboom-plus.spec @@ -27,6 +27,7 @@ URL: http://prboom-plus.sf.net/ #Git-Clone: https://github.com/coelckers/prboom-plus Source: https://github.com/coelckers/prboom-plus/archive/refs/tags/v%version.tar.gz Patch1: prboom-nodatetime.diff +Patch2: 0001-Fix-integer-overflow-during-multiplication-with-real.patch Patch3: prboom-hbar-all.diff Patch4: prboom-hbar-gradient.diff BuildRequires: Mesa-devel