From 8ccfdb8d445874cf9be17696bcf715e49477ecb3 Mon Sep 17 00:00:00 2001 From: Luxferre Date: Sat, 24 Oct 2026 08:54:25 +0300 Subject: [PATCH] games: 30 fps render loop + immediate Snake turns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switched both games to a 30 fps render cap (FRAME_MS = 33 ms) for smoother, more predictable frame pacing. Snake base speed raised to 150 px/sec (~60 ms per step at cell=9) so turn commands take effect at the next step without perceived lag. The buffered-direction model (latest keypress wins) is unchanged — turns apply at the next step, which is immediate in snake terms. Progressive difficulty (+1 px/sec per 5 food in Snake, +1 px/sec per 10 lines in Tetris), edge wrap, Gameboy-style beveled blocks, and all controls are unchanged. --- overlay/rootfs/usr/bin/snake | Bin 13672 -> 13672 bytes overlay/rootfs/usr/bin/tetris | Bin 17764 -> 17764 bytes prebuilt/games/usr/bin/snake | Bin 13672 -> 13672 bytes prebuilt/games/usr/bin/tetris | Bin 17764 -> 17764 bytes src/games/snake.cpp | 8 ++++---- src/games/tetris.cpp | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) diff --git a/overlay/rootfs/usr/bin/snake b/overlay/rootfs/usr/bin/snake index ed4eb6158f5d3651b5ebdb67c5855d56fe256e9c..c8bf935a4116ca9b9192788bc428f43245be120d 100755 GIT binary patch delta 340 zcmV-a0jvJ#YUpaPWC0XmA-{6F6(J?)$oI-zpRvzCW=~JEcma?D0m-uo1w{%6AuA|G zsJ|hzRS!V}0U)!N5<>$4mb2Rx{Re;F?JXVyD@1xkBV`gx(^wj41)EwxPw)T(0nrDr@V)-`0Pg_5 zlYkx|6|5ov016@i01zPn05Bo|0N4Nk0HTw%9y_uhWdjJS27qAv|9=6qaUz!sli(f% mlL#&>0m-v9E~^0n$+O`vYXbowlT9-p1;`!%0LZg(Gxq`SXoS-M delta 325 zcmV-L0lNO^YUpaPWC0Ys2)X>4yiK%Qs_v&C)Pg!ppOGN5cma?D0lBjY1w{%65GyD~ zsJ{@iRS!V}0S~j65<>$4WV729{Re+=wFDvG?Io) zL;)gxL__)CD#Psr3&ZUO8?j&~OejfwM0rFfOQmGXSQ}^slTYvf10!h0=>sC=WC|hz z`vdbOV<;=QzbGSfVgL7y{Uu~6MrcO<_WZdPE~-5lhop8fXQZT0l?m00RNh2C#6w{`Us&laL-D6`&#j00<%g05Bo| z00tod0N4Nk0I-wA9y_z}9(4l$4mb2Rx{Re;F?JXVyD@1xkBV`gx(^wj41)EwxPw)T(0nrDr@V)-`0Pg_5 zlYkx|6|5ov016@i01zPn05Bo|0N4Nk0HTw%9y_uhWdjJS27qAv|9=6qaUz!sli(f% mlL#&>0m-v9E~^0n$+O`vYXbowlT9-p1;`!%0LZg(Gxq`SXoS-M delta 325 zcmV-L0lNO^YUpaPWC0Ys2)X>4yiK%Qs_v&C)Pg!ppOGN5cma?D0lBjY1w{%65GyD~ zsJ{@iRS!V}0S~j65<>$4WV729{Re+=wFDvG?Io) zL;)gxL__)CD#Psr3&ZUO8?j&~OejfwM0rFfOQmGXSQ}^slTYvf10!h0=>sC=WC|hz z`vdbOV<;=QzbGSfVgL7y{Uu~6MrcO<_WZdPE~-5lhop8fXQZT0l?m00RNh2C#6w{`Us&laL-D6`&#j00<%g05Bo| z00tod0N4Nk0I-wA9y_z}9(4l best) best = score; int food = score / 10; // food items eaten so far - pps = 100 + food / 5; // +1 px/sec per 5 food eaten (progressive difficulty) + pps = 150 + food / 5; // +1 px/sec per 5 food eaten (progressive difficulty) update_speed(); place_food(); } @@ -375,7 +375,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 lastFrame = now_ms(); while (running) { diff --git a/src/games/tetris.cpp b/src/games/tetris.cpp index 86b0d81..d19bfb4 100644 --- a/src/games/tetris.cpp +++ b/src/games/tetris.cpp @@ -499,7 +499,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 lastFrame = now_ms(); while (running) {