3449f6f8c9
Катсцены шли ~8,2 fps вместо десяти. Делитель тут ни при чём: у оригинала cutscene_frame_time = 6 тиков по 1/60 с (reset_cutscene, seg001:527; его зовёт load_intro прямо перед сценой) = 100 мс, у нас 5 кадров луча по 50 Гц = те же 100 мс. Причина в том, ГДЕ отсчитывался интервал: сначала рисовали кадр целиком, и только потом ждали vsync и ещё четыре — то есть отрисовка ПРИБАВЛЯЛАСЬ к делителю. Полноэкранная gfx_copy_page стоит ~547 000 тактов = 1,27 кадра, отсюда 6+ кадров вместо 5 (замер PV-RENDER-BOUND: 49 тиков/с вместо 60). Теперь отрисовка разложена на блоки, каждый из которых заведомо влезает в кадровый интервал, и после каждого честно ждём vsync: фон верхняя половина -> vsync | фон нижняя половина -> vsync | актёры и декорации -> vsync (+ флип) | служебный блок (звук, подкачка трека) и добор до CUT_FRAME_VSYNC. Фон восстанавливаем только по картинке (200 строк с POP_YOFF), а не по всем 256: сверху и снизу чёрная рамка. Общий хелпер pv_restore_bg на все три цикла — cut_run (сцены 8/9/12 и финал), pre_room_animated (2_6/4/12 и time_expired) и intro_pv_draw_frame (сцена с Джафаром); последний теперь возвращает 3 кадра вместо 1 (13 вместо 11 со вспышкой), вызывающий их и так учитывал. Сверка делителей с SDLPoP: у всех сцен 6 тиков = 5 наших кадров; плавает только pv_scene (6 -> 8 -> 7, seg001:434/455) — это уже сделано кумулятивно через pv_seq_period + POP_T60, и минимальный бюджет (5 кадров) больше трёх съедаемых блоками. Замер в MAME пока НЕ сделан: до финальной сцены на отладочном старте LEVEL=14 не добраться (решётка перед комнатой 5 закрывается по таймеру, а Ctrl-комбинации через MCP-мост до игры не доходят). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>