diff --git a/applications/PoP/roomtest/pop_trob.c b/applications/PoP/roomtest/pop_trob.c index 83298b7..b8f54a1 100644 --- a/applications/PoP/roomtest/pop_trob.c +++ b/applications/PoP/roomtest/pop_trob.c @@ -345,12 +345,29 @@ uint8_t pop_trob_room_active(uint8_t room) return 0; } -static uint8_t torch_tick; /* делитель скорости анимации пламени */ + +/* Темп анимации пламени в ЛОГИЧЕСКИХ кадрах (один логический кадр = 3 + * vsync и соответствует игровому тику оригинала): + * 1 — кадр пламени каждый тик, как в оригинале; кадры при этом ровные по + * тактам, что нужно для счёта бюджета; + * 2 — вдвое реже (так было до 2026-07-30; пламя шло на половинной + * скорости, а бюджет кадра «прыгал» на 6.2 % от того, попал кадр на + * анимацию или нет). */ +#define TORCH_ANIM_DIV 1 + +#if TORCH_ANIM_DIV > 1 +static uint8_t torch_tick; +#define TORCH_ANIM_NOW ((uint8_t)(torch_tick % TORCH_ANIM_DIV) == 0) +#else +#define TORCH_ANIM_NOW 1 +#endif void pop_process_trobs(uint8_t cur_room) { uint8_t i, w = 0; +#if TORCH_ANIM_DIV > 1 torch_tick++; +#endif /* Перерисовка «покоя» законченных пик/кнопок (обе страницы). * row/col ведём бегущими счётчиками, а НЕ через i/10, i%10: иначе SDCC @@ -394,11 +411,9 @@ void pop_process_trobs(uint8_t cur_room) break; case TILE_TORCH: case TILE_TORCH_DEBRIS: - /* animate_torch (seg007:03C1): кадр пламени; анимация вечная — - * type остаётся 1, пока комната отрисована. Смена кадра — через - * ЛОГИЧЕСКИЙ кадр (torch_tick): у нас кадр короче игрового тика - * оригинала, и пламя «кипело» вдвое быстрее нужного. */ - if (room == cur_room && (torch_tick & 1) == 0) + /* animate_torch (seg007:03C1): анимация вечная — type остаётся + * 1, пока комната отрисована. Темп — TORCH_ANIM_DIV. */ + if (room == cur_room && TORCH_ANIM_NOW) mod[tp] = get_torch_frame(mod[tp]); break; case TILE_POTION: