From 52ac64e9b332682fd3d182092f65f99f758ef1e3 Mon Sep 17 00:00:00 2001 From: Luxferre Date: Sat, 24 Oct 2026 09:44:24 +0300 Subject: [PATCH] games: fix timing drift with cumulative nextTick, 30fps render, 90 pps base Root cause of unstable speed: nextTick was reset to 'now + speed' each step, accumulating timing drift. Now uses 'nextTick += speed' with a floor (if nextTick < now, reset to now) to prevent drift and catch-up spirals. - Both games: 30 fps render cap (FRAME_MS = 33 ms), nextTick updated cumulatively to eliminate drift. - Snake: base speed 90 px/sec (~100 ms per step at cell=9), turn queue unchanged, edge wrap unchanged. - Tetris: gravity step uses cumulative nextTick, controls unchanged. --- overlay/rootfs/usr/bin/snake | Bin 13716 -> 13716 bytes overlay/rootfs/usr/bin/tetris | Bin 17812 -> 17812 bytes prebuilt/games/usr/bin/snake | Bin 13716 -> 13716 bytes prebuilt/games/usr/bin/tetris | Bin 17812 -> 17812 bytes src/games/snake.cpp | 8 +++++--- src/games/tetris.cpp | 5 +++-- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/overlay/rootfs/usr/bin/snake b/overlay/rootfs/usr/bin/snake index 4f100a5ffa31a09e4fcc87fd8d47196f2f4a5e6d..a731467da43c040e06e38ef182c641a7008ade5f 100755 GIT binary patch delta 3126 zcma)@OckHT#cAYNHPP?FXhplMTvV@QlqR`x{!QB0>V0Y`-nf~$1 z`Of(s=bZ06?#bSgy(M)j>cje^)ad+K2u)CL*(k1oT21|lvxVC(YMVh~5 zxAdx8U)vaHub@r~sZZMt;+qn>$$&H-wrQCQ&-DfEU!1;N=wTak)lM6+2a%9tnn$Xz z*vc`{BTh5N350!=cwZo=-QAs$SpaM6A%=HRnBzzYmJufR;IObMhC(a9<)PELg*2fad9g=#j>#5-^yr1h0yll!0r1+!{BY}91HqdkB3X1Wc|tV6pkqMpsp zdP`J?vHC2`bnp!pcfpFH;HL3|tipthdwSZuDA;v>1q|ekg*_*|NS}KGktkgPF*GHd zp3v>Lrg zYY%cJ6x4#|%J-UkEi=8)o(Vp5PywoQ->ZgOrhyX$!J?qO>HGGZEn*l--4Z=x8m!lrHxLMW*_PlMzE9=u_jZjzccnaJ4=>=`&f}lbXz5g z!NS`ql34f7ut*-)P#cz{*oXSdKlLA@XnRm4JcothX;0gSyxZ)-6yXJbhC&!tY%`Bu zs*%2bja}L)yb*PqiZZW??S7VBYHF}BJw;G9T1I=`vkA17xZ%a}fyO-P0T(944VLQe zLpJIAm00NS6kHw_#AM&SCOKre+ao=&&n7)oiL+UgOpc2j{7$#iW3E>@=A8eBhvJfd zk4*x{0yg!QqZaGsT{iw$CF6Y-I%IBnYJh^v8|M|oKa z>4uMjzcNqicHtzId~*!$VjU*=gRAK4Q;~jqC~7OsFXG`3<=(CN4qX-A=z#0~YuiSU7)Z9()wcKtxy+IY{htYo90e)adGNV#eB!m()H+KJrTwO`0;`=I zb8v`)C%{KT9Fsz9%A_QV0wELdToyvpp;Q24nFxJNs+D?r@pOdl%}1yg$Oi<#JfLqL zLKlE$pbn@2UINwwD!>YSG#8=6z+PZ>20}-T2w^C@pj-#!0LOtn0Gkf>z&2nFfB{!J z(xEI64gxx$-+<7RNqGy%T?nCcvMfu+IV8_rOP&2d{+; zcr9eWTj6OJhSvgdt9DGi2X+yl4}f9ml8U7tfH)6WNA@KdsCP(5Qn|!2NHuWG7P2Jy zsTm?4>KKQoVIPG5@(F|-yepJ%L7S7*C#O;wq%FCUiY0T^bE4BgBLV~xvR<7R7CYiB3*tI+S%#|0^&A6ajzHfgTtG4hvzM01A-1 zv@j(on>4URK)x=LR{tb!BW#;V4JLrw%oRIQn#JRL#o_NB43Z?Fd7? zSzMDp4*GU#)^4fzq6(pMBAqt}-sYL}S}7=Q&i}2DIzygWkUFIkI_T7pNS2c9Sr9t~ p!N`%8ythCnHN)h2VhOcCPWnJO@kf9JKv@L}9uco>&sgZB{tNSzay|e6 delta 3044 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 delta 3398 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 delta 3044 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 delta 3398 zcmbVP4OCQh7Qg?Q0cM7;K@P3fH*=0C`lY91Jm)XnawChc_~uc+UqFKEwWqef2|bxH%D?dS}RX^ zWCSwpCtbpk-40*PdOThDjsdg8OQ+T|5nQTV^_~2xk~03@rGLNjh+IWo!b_ze+3{If z$82JxQ$@aMM2be!D6IhJL^)o<=n&clUQT);=)=+w-KzTdt3rT zM`LHQ28&BLdwUJjyDYi#q1NR#2M2N+_xV#`Skd0;=Kkywpil}Hw6)9zrg!2n#yh|D zr4rz@jV@vM_MpYqo=+~F_bix_yYZ+;ZUigsIe3Y1n}i+0)NHVB>3Q!G7^m%ptxD6h zt%dfV?-BWP-f1nMnF-uj!#aEpH&oArD`WI6O;N-;vXWH7W;&|5t2s^`@hw#1-%7eL zZVnsY;PC5y*Mg`2s?p(BPH+|I$Dx8+^p44uS%Hgfa0&0>T8fnQjX6!1u%u72%o&t} z)y8$8{>}noIwmmYke1sSi(1d!)H>gDMkvlbBjm;RjzW~2lVfSC!lPJD9(6{rnU{5a zItub?MiR(}8su>8K$T0l|LA>s7+Msc)i%yNdflb|N&rxA?e=Cxc6+mRy56Sc#w{ll8SZ)zra>*}(nwhPqYCL5*`4>V8W1PDx7qgS}U<<+_CSe?-!y`sF1U z0=R@X=$BK{S#?uZo8)*@bM&@id&u#a7u7F^od4Jz3!wm<$g8(wkl9f?B47CoX-4H7 z`)y329k{g^8gO$O6?w0fT*Yp)U$zoz=gim`w5o$LW2xL8+8Kr?l?AaUMMkx`{D*1b_{phb*5#a{TBLE zPJ%a2^is+kM@ z6;9dfO9i7QlF{Dv{tZ$58u3;@6vL2qjR)~80YIL;xe*flR61$k|9(Gs4*R`FKlR{S z>Gfcwx6-+p74}DIxz&sRi`<2&cKAi9JieX#{!$(+>WO|;>yc570!#(FUmv5D3DenX z6_}MflkL$%^-!?qkZ{&kt%nyy-adG0pbuwEAC8mIj8Qj7;ehEA@+JpN-QB?f(tt60vsoWx*i-aJvd(O#(O&#cZzYqG+no_9~}{F z^w;IJ%!5`D$?5@u_h;@tshx2Y#*6%cLF+_IOAU?RMOUTvR#PyG{PDpR zW$M-%CP}-rGLkulmmz*)xTd_#^gps<_`TEn zftxp0c5zWTQ&x+&F196gwQi#{In=Kl7K-DgS=PTdvR~w%87wZ>n~F<`@!Mt9j1Iq2 zeI8;E`Iy1*9DuI?V0aEba)HKb)7j>1fY%Te2rZ%%F_Hz~zYXB&B$Od_;`$N93y5Mw zC1N}gU|=@N5a$qE5C;(JCwVQ(6Oi9I3*acC9wG5IL>9t?c)}wj;KH|h)sy&=<_r5YpssVpf|Mn5i31m?a-;AMM+lG=@|fhh~xA(xOyA8HpDi% zE6H4B@Q8eus4o9@neH7`X*DDAAGnE0iB(Uo(sV*s9cr#k2e^Rt%aA{bG$#RIF};zL zlsNA0bSrIbm!K;Fb^1}JN1ZElcJd0Dat3`qIdk3`cb{M|*XsK`CrG!4tmzh@N#v_> zcb2)&b6g|x_q)42@Zb-$1ZDjL=*Sv+IXUsJ<*1oGsafFeMp>;sq%YYN`7(FJkXnwm zpOI{nd6K1|q}Uxc@mmDCob(=@nJDQx-9|D%FYD4(?lgcyh)py_pH7sAG)GmH`6`H3MPPS5LS=ld@EO&B1)BX!A}W`O2sfJ~$n2n)&z-*@;**H2vxMo6z? z4E6vYLl>qb;kgf`Si>}^b%_2cg(f|A8M;0|{gqLeTqAZB@{-Mjj{NCfLe@~T;f^~? zN1*G10b2h%-S_qalz-JAktiIg-z4Sel2Fn@Xr%y;%{6P99 zeZV|BF)$?Q@0chembE}R1GWeFDB5B+lW%CJIh8Q^#IleYEKwacOI^f#y+>qm7d{>o+4lX4`syKxD(h{-NOwoqGhUJ1 zqkN}+CsIjo%c#g65JgrY;JSlk%VW@%GVB^2@iJ8{$dLY<$ywkeG1oItd-C&= nextTick) { if (state == PLAYING) step(); - nextTick = now + (state == PLAYING ? speed : 80); + if (nextTick < now) nextTick = now; + nextTick += (state == PLAYING ? speed : 80); } // Render every frame diff --git a/src/games/tetris.cpp b/src/games/tetris.cpp index f539ac2..48ebfd1 100644 --- a/src/games/tetris.cpp +++ b/src/games/tetris.cpp @@ -520,7 +520,7 @@ int main() { render(); int xfd = ConnectionNumber(dpy); - const unsigned long FRAME_MS = 1000 / 60; // 60 fps rendering + const unsigned long FRAME_MS = 1000 / 30; // 30 fps rendering unsigned long frameStart = now_ms(); while (running) { @@ -538,7 +538,8 @@ int main() { // Game logic step at its own rate if (now >= nextTick) { if (state == PLAYING) step(); - nextTick = now + (state == PLAYING ? speed : 80); + if (nextTick < now) nextTick = now; + nextTick += (state == PLAYING ? speed : 80); } // Render every frame