From e14b6745f71032924f5db764a1c5b25d6ef24f87 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 15 Jul 2026 10:42:28 +0300 Subject: [PATCH] =?UTF-8?q?examples/rpgwalk:=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=20FPS-?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D1=8F=20(1/2/3)=20?= =?UTF-8?q?=E2=80=94=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=B5=D0=B9=D1=81=D0=B8=D0=BD=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Клавиши 1/2/3 зовут gfx_set_fps_div(n) на лету (дефолт n=1 не меняет поведение). Проверено в MAME: при n=2 FPS-метр стоит РОВНО на 024 (48.83/2) все 8 секунд без плавания — логический кадр = ровно 2 vsync'а, скорость персонажей (пиксель/сек) постоянна. +808 Б (демо тянет код делителя). Co-Authored-By: Claude Opus 4.8 --- docs/size_baseline.tsv | 2 +- examples/rpgwalk/rpgwalk.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/size_baseline.tsv b/docs/size_baseline.tsv index f219f63..893b964 100644 --- a/docs/size_baseline.tsv +++ b/docs/size_baseline.tsv @@ -43,7 +43,7 @@ openenv 6124 palfile 5406 ptime 5744 rpgprof 12082 -rpgwalk 9501 +rpgwalk 10309 rt_test 4892 seek 4188 simple 955 diff --git a/examples/rpgwalk/rpgwalk.c b/examples/rpgwalk/rpgwalk.c index 7e1d346..bd2687f 100644 --- a/examples/rpgwalk/rpgwalk.c +++ b/examples/rpgwalk/rpgwalk.c @@ -184,8 +184,17 @@ int main(void) last_sec = dt.second; for (;;) { - if (kbhit() && getch() == 27) - break; + if (kbhit()) { + int c = getch(); + if (c == 27) + break; + /* 1/2/3 — FPS-делитель: логический кадр = n vsync'ов. + * Скорость персонажей (пикселей на итерацию) не меняется, но + * итераций/сек делится на n — визуальная проверка стабильности + * тайминга (метр стоит ровно на 50/25/16). */ + if (c >= '1' && c <= '9') + gfx_set_fps_div((uint8_t)(c - '0')); + } for (i = 0; i < NCHR; i++) if (!sprite_moving(&sp[i])) {