Зелёная фаза: записана идея G8 — пометка соседа узкой полосой
Идея пользователя 2026-08-17. При падении плиты помечаются ДВА тайла, и сосед перезапекается ЦЕЛИКОМ и ПОВТОРНО (draw_tile для него зовётся дважды), хотя потревожили у него только левые 28 px — там, куда свисает правая грань упавшего тайла. В записи разведено, что 60 = 32 свой тайл + 28 СОБСТВЕННЫЙ свес (сужать нельзя), и сузить можно только пометку «изменился мой ЛЕВЫЙ сосед». Плюс три условия: pop_floor_bake общая (кнопка/зеркало/предмет/щебень) и нужен отдельный вход; вертикальные диапазоны двух запечек НЕ совпадают (20 строк против 39), поэтому просто снять вторую пометку нельзя; ширину полосы брать по максимальному свесу. Брать ПОСЛЕ обхода всех уровней — решение пользователя. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -181,7 +181,52 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1), проверять придётся пр
|
||||
Остаётся `mob_tick_one` (~4 500 на кусок = 27 000 на кадр) — то же лечение
|
||||
file-scope, что у `draw_tile`.
|
||||
|
||||
### G8. Снять временную оснастку
|
||||
### G8. Пометка соседа — узкой полосой, а не полным тайлом (идея пользователя)
|
||||
|
||||
**Ожидание: заметное, но не мерено. Взять ПОСЛЕ обхода всех уровней**
|
||||
(решение пользователя 2026-08-17: пока идёт отлов багов слоёв, каждая правка
|
||||
добавляет переменных в картину).
|
||||
|
||||
Когда плита (1,8) падает, помечаются ДВА тайла:
|
||||
|
||||
| пометка | что делает |
|
||||
|---|---|
|
||||
| `(1,8)` → `RD_LOOSE_GONE` | бар 40 на своём x, бар 32 на соседе, `draw_tile(1,8)` + `draw_tile(1,9)` |
|
||||
| `(1,9)` → `RD_FLOOR` | бар **60** на x соседа, `draw_tile(1,9)` ЕЩЁ РАЗ |
|
||||
|
||||
То есть сосед перезапекается ЦЕЛИКОМ и ПОВТОРНО, хотя потревожили у него
|
||||
только левые 28 пикселей — там, куда свисает правая грань упавшего тайла.
|
||||
`draw_tile(1,9)` при этом вызывается дважды на одну пометку.
|
||||
|
||||
Что такое эти числа (чтобы не сузить лишнего):
|
||||
|
||||
- **60 = 32 свой тайл + 28 СОБСТВЕННЫЙ свес.** Правая грань пола (кадр 42,
|
||||
26 px) рисуется в клетке соседа с `x+32`, занимая `x+32..x+57`. Для запечки
|
||||
САМОГО тайла 60 уже минимальны — сужать их нельзя;
|
||||
- сузить можно только тот случай, когда тайл помечен ПОТОМУ ЧТО ИЗМЕНИЛСЯ ЕГО
|
||||
ЛЕВЫЙ СОСЕД: тогда нужна полоса 28 px у левого края, а не весь тайл.
|
||||
|
||||
Почему выигрыш не символический: `pop_floor_bake` стоит **179 914** тактов,
|
||||
из них 105 500 — сами блиты. Узкая полоса срезала бы и площадь бара
|
||||
(60×39 → 28×39), и часть блитов — окно клипа там теперь стоит обязательным
|
||||
(см. §4), так что отсев достаётся даром.
|
||||
|
||||
**Условия, из-за которых это не «просто уменьшить число»:**
|
||||
|
||||
1. `pop_floor_bake` — ОБЩАЯ функция: её же зовут кнопка (`pop_button_redraw`),
|
||||
зеркало, подобранный предмет и щебень на месте посадки. Там меняется сам
|
||||
тайл и 60 нужны целиком. Значит нужен отдельный вход (напр.
|
||||
`pop_floor_bake_edge(row, col)`) или параметр-прямоугольник — именно под
|
||||
пометку «изменился мой левый сосед».
|
||||
2. Прежде чем выкидывать вторую пометку целиком, сверить ВЕРТИКАЛЬНЫЕ
|
||||
диапазоны: `pop_loose_bake_empty` кроет `63*row+46 .. +65` (20 строк), а
|
||||
`pop_floor_bake` — `yb+26 .. yb+64` (39 строк). То есть сосед покрыт
|
||||
ВТОРЫМ баром не полностью, и просто снять пометку нельзя.
|
||||
3. Ширина полосы = свес ЛЕВОГО тайла, а он зависит от типа тайла (у loose это
|
||||
8 px по комментарию в `pop_loose_bake_empty`, у пола 26). Брать по
|
||||
максимуму (28) — безопасно.
|
||||
|
||||
### G9. Снять временную оснастку
|
||||
|
||||
Шесть `pop_dbg_b1..b6` внутри `pop_blit_b` — ~400 такта на блит; при 15
|
||||
блитах зелёной это 6 000 на кадр. Плюс `pop_dbg_kind`/`m16` (2 вызова на
|
||||
|
||||
Reference in New Issue
Block a user