Фикс чистки факелов при перевороте: чистим в СТАРОЙ системе координат
На скриншоте пользователя после U остался чёрный квадрат в стороне от факела, а у двух факелов пропало пламя. Причина — система координат: pop_upside переключается в главном цикле ДО pop_flip_screen, а картинка на экране к этому моменту нарисована ещё в прежней. pop_torch_wipe считала координаты уже зеркально, поэтому чёрный бар ложился в отражённое место (там и остался квадрат), а само пламя не стиралось. Чистка теперь идёт при временно возвращённом старом значении pop_upside — то есть ровно по той картинке, что на экране.
This commit is contained in:
@@ -530,12 +530,19 @@ void pop_flip_screen(void) __banked
|
||||
* прямую копию уже чистой картинки. Дешевле полной перерисовки комнаты
|
||||
* на порядок: 0..4 тайла против 6.2 млн тактов (14.5 кадра, замер MAME
|
||||
* 2026-08-12) — а копия отражения стоит всего 2.1 кадра. */
|
||||
/* ВНИМАНИЕ на систему координат: pop_upside к этому моменту УЖЕ
|
||||
* переключён (главный цикл делает это перед вызовом), а картинка на
|
||||
* экране нарисована ещё в СТАРОЙ. Чистить её надо по старым
|
||||
* координатам, иначе чёрный бар ложится в зеркальное место — на экране
|
||||
* оставался чёрный квадрат, а пламя так и не стиралось. */
|
||||
pop_upside = (uint8_t)!pop_upside; /* временно: система ЭКРАНА */
|
||||
gfx_set_draw_page(front);
|
||||
for (i = 0; i < 30; i++) {
|
||||
uint8_t t = room_fg[i];
|
||||
if (t == 19 || t == 30) /* факел / факел с щебнем */
|
||||
pop_torch_wipe(i / 10, i % 10);
|
||||
}
|
||||
pop_upside = (uint8_t)!pop_upside; /* вернуть новое состояние */
|
||||
|
||||
gfx_set_draw_page(back);
|
||||
gfx_copy_page(&area, GFX_COPY_VFLIP); /* источник — видимая страница */
|
||||
|
||||
Reference in New Issue
Block a user