Fore потолка поверх падающей плиты: в разборе пометок не было ряда -1
Найдено пользователем (2026-08-17, уровень 1 комната 6): падающая плита (-1,5) перекрывает собой кромку потолка (-1,6), чего физически быть не может. Дыра архитектурная: pop_fore_needed обходил только ряды 0..2, ряда -1 в переднем слое не было вовсе. Сверено с оригиналом. redraw_needed_tiles (seg008:1B06) обходит ряды 2,1,0, а ПОТОМ отдельным проходом ряд 2 комнаты сверху (redraw_needed_above), и его draw_tile_fore кладёт куски в FOREtable. Падающая плита идёт в MIDtable (draw_mobs). draw_tables рисует back -> mid -> fore (seg008:1373), поэтому у оригинала кромка потолка оказывается поверх плиты сама собой. Порт: - pop_fore_needed: проход по ряду -1 добавлен и идёт ПОСЛЕДНИМ, как в оригинале. Свой набор пометок (rdfa/rdfa_pending) — как и у самих перерисовок ряда -1 (rda_*), это отдельный проход, а не 11-я колонка; - новый лист pop_ceil_fore_tile_b (pop_bg.c) — тот же redraw_needed_above, что уже рисовался над персонажем (ceil_over_kid_tile), плюс окно клипа ровно на полосу столбца и ov_mark (полоса идёт банком без тени, на второй странице её восстановит pop_fore_heal); - mob_mark_neighbour помечает ряд -1, пока кусок достаёт до кромки. Кромка живёт в трёх верхних строках поля (dby = 2 при клипе по POP_YOFF), спрайт куска занимает mob_y-16 .. mob_y, отсюда условие mob_y <= 18 — три кадра после отрыва (y = 2, 5, 11 при ускорении 3). Помечаются ОБА столбца, которые кусок накрывает по x (mob_x .. mob_x+62 = col и col+1); именно поэтому страдал сосед. По бюджету работа появляется только в эти три кадра на кусок и попадает в циановую фазу, где сейчас запас (270 тыс. из 400 тыс.). Замер на ур.13 — следующим шагом. 8 наборов tests-host зелёные. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -901,6 +901,31 @@ void pop_fore_tile_b(int row, int col) __banked
|
||||
pop_t_fclip_on = saved;
|
||||
}
|
||||
|
||||
/* Передний слой полосы кладки У ПОТОЛКА (ряд −1) для ОДНОГО столбца — вход для
|
||||
* прохода по пометкам (pop_fore_needed, ряд −1 идёт там последним).
|
||||
*
|
||||
* Тот же redraw_needed_above (seg008:0221), что и над персонажем: обход ряда −1
|
||||
* стоит в redraw_needed_tiles ПОСЛЕДНИМ, а его draw_tile_fore кладёт куски в
|
||||
* foretable, то есть поверх midtable (там лежат падающие плиты) и поверх
|
||||
* объектов. Без этого кусок, пролетающий у потолка, накрывает собой кромку
|
||||
* потолка — физически невозможная картинка (найдено пользователем 2026-08-17,
|
||||
* уровень 1 комната 6: плита (−1,5) перекрывала потолок (−1,6)).
|
||||
*
|
||||
* Окно — ровно полоса этого столбца: передние куски потолка живут в трёх
|
||||
* верхних строках (dby = 2 при клипе по POP_YOFF), рисовать шире незачем.
|
||||
* ov_mark — как у персонажа: полоса рисуется банком без тени, и на второй
|
||||
* странице её надо будет восстановить (pop_fore_heal). */
|
||||
void pop_ceil_fore_tile_b(int col) __banked
|
||||
{
|
||||
int x = POP_COL_XH[col] * 8;
|
||||
ov_mark(x, 0, 64, CEIL_BAND_H);
|
||||
pop_t_clip_top = POP_YOFF;
|
||||
pop_t_win_set(x, POP_YOFF, 64, CEIL_BAND_H);
|
||||
ceil_over_kid_tile(col);
|
||||
pop_t_win_clear();
|
||||
pop_t_clip_top = 0;
|
||||
}
|
||||
|
||||
/* Банк на ВЕСЬ проход пометок, а не на каждый тайл: помеченных тайлов за
|
||||
* кадр бывает больше десятка, и две смены банка на каждый — заметная доля
|
||||
* прохода, который сам по себе дешёвый. */
|
||||
|
||||
Reference in New Issue
Block a user