diff --git a/applications/SprPoP/src/pop_bg.c b/applications/SprPoP/src/pop_bg.c index 0632cb1..89eca09 100644 --- a/applications/SprPoP/src/pop_bg.c +++ b/applications/SprPoP/src/pop_bg.c @@ -771,15 +771,26 @@ static void overlay_mid_tile(int row, int col) pop_env_b(42, x, pop_tile_table[1].right_y + dmy); { /* draw_tile_base (seg008:0A8E) — ЦЕЛИКОМ, вместе с подстановками id: * у loose верх плиты берётся из loose_fram_left (в pop_tile_table base_id=0), - * у opener'а без пола слева — 148. Раньше здесь стоял голый base_id, и + * у opener'а без пола слева — 148, НО только в ПОДЗЕМЕЛЬЕ. Условие + * `tbl_level_type[current_level] == 0` в оригинале стоит третьим + * (seg008:628) и у нас было потеряно ИМЕННО ЗДЕСЬ: статическая + * отрисовка (pop_room.c, draw_tile_base) его имеет, а оверлей — нет. + * Отсюда симптом «кнопка, на которую лезет Кид, залита кирпичом»: + * пока тайл рисует статика, кнопка правильная, но как только Kid + * встаёт под кромку, оверлей перерисовывает её поверх него уже + * спрайтом 148, а во дворце это другая картинка (кладку палас + * вообще рисует заливками, а не спрайтами). Уровень 4, комната 18, + * кнопка (0,4) — найдено пользователем 2026-09-02. + * + * Раньше здесь стоял голый base_id, и * верх loose-плиты в оверлей не попадал: передняя грань ложилась поверх * Kid (foretable), а сама плита — нет, и подтягивающийся Kid рисовался * поверх её верхней плоскости (комната 12). */ uint8_t base_id = t->base_id; if (code == 11 && row >= 0) base_id = POP_LOOSE_FRAM_LEFT[pop_loose_frame(pop_loose_modif[row * 10 + col])]; - else if (code == 0x0F && lcode == 0) - base_id = 148; + else if (code == 0x0F && lcode == 0 && !pop_palace) + base_id = 148; /* ТОЛЬКО ПОДЗЕМЕЛЬЕ (seg008:628) */ if (base_id) pop_env_b(base_id, x, t->base_y + dmy); }