Пункт 0: отсев кладки по окну fore-клипа; закрыт BUG-CHEAT-FIGHT-1
Три шага пункта 0 из docs/perf_backlog.md. 1. Ранний выход из wall_pattern_palace по окну fore-клипа: узор целиком лежит в x [xh*8, xh*8+32), y [dmy-59, dby], и если окно его не задевает — возврат до первой заливки. Замер: от входа в узор до конца всего прохода 6 055 тактов вместо ~60 000 на тайл. 2. Отсев КАЖДОГО декаля (wp_blit) по реальному габариту. pop_blit_b тоже отсеивает до маппинга страницы, но по заведомо большему 64x64 — куски кладки высотой 3..12 px он пропускал и платил полный atlas_image + gfx_w0_map (~9 760 тактов на блит), чтобы там обнаружить, что рисовать нечего. Размеры сняты из каталогов атласов и заданы верхней границей по группе. 3. То же для ПОДЗЕМЕЛЬЯ: ранний выход wall_pattern (габарит выше — левая марка уходит на dby+POP_YOFF-67) плюс wp_blit на RNDBLOCK, обоих разделителях и обеих марках. Замер (уровень 4, комната 18, Кид сдвигается читом ] по пикселю, skip выключен, шесть тайлов в fore-окне, три из них — дворцовая стена): тайл стены ~12 700 вместо 60 000-74 000, fore-проход целиком 70 681 вместо 171 693, работа за кадр 419 839, период 3 растровых кадра вместо 4. Уровень 1 (подземелье) проверен снимком — кладка, марки, разделители на месте. Остаток в проходе — пролог pop_char_fore 17 208 тактов (пункт 1 backlog'а). Отдельно записано: на ШВЕ пролог разбухает до 134 730, причина не разобрана. BUG-CHEAT-FIGHT-1 (заведён 2026-08-07) закрыт по своему же плану: ветка ROOMNAV после kid_init/pop_kid_hp_reset гасит состояние схватки (Kid.sword = SWORD_0_SHEATHED, holding_sword, offguard, guard_refrac). Меч в инвентаре не теряется. Это болезнь чита: в оригинале телепорта между комнатами нет и в режим боя без соперника попасть нечем. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -97,11 +97,14 @@ MAME (`z80_profiling_method`) на роомтесте, уровень 1 комн
|
||||
|
||||
---
|
||||
|
||||
## 0. Дворцовая кладка в fore-проходе — 27 % кадра НА НОЛЬ ПИКСЕЛЕЙ
|
||||
## 0. Дворцовая кладка в fore-проходе — **СДЕЛАНО 2026-08-10**
|
||||
|
||||
**Цена: 139 863 такта за кадр (32 % растрового кадра), полезных пикселей —
|
||||
ровно ноль.** Самая дорогая известная позиция; снятие её одной уводит
|
||||
работу с 517 609 до ~378 000, то есть период с **4 растровых кадров на 3**.
|
||||
Все три шага выполнены; замер после — в конце пункта. Ниже сохранён исходный
|
||||
разбор: он объясняет, почему предфильтра `fore_tile` мало и откуда взялись
|
||||
габариты кусков.
|
||||
|
||||
**Было: 139 863 такта за кадр (32 % растрового кадра), полезных пикселей —
|
||||
ровно ноль.**
|
||||
|
||||
Замер (уровень 4, Кид на (1,7)). Окно fore-клипа в этот момент —
|
||||
`x 229..241, y 106..147` (прочитано из `pop_t_fclip_*` брейкпоинтом).
|
||||
@@ -154,6 +157,38 @@ fclip_y0`) намеренно грубый — габарит 40×78 на тай
|
||||
составом, а тем, что оригинал складывает всё в `foretable` и рисует одним
|
||||
`draw_table()`, у которого «посетить тайл» стоит копейки (см. п. 6).
|
||||
|
||||
### Что сделано и сколько дало
|
||||
|
||||
1. **Ранний выход** из `wall_pattern_palace` по окну fore-клипа (узор целиком
|
||||
в `x [xh*8, xh*8+32)`, `y [dmy−59, dby]`).
|
||||
2. **Отсев каждого декаля** (`wp_blit`) по реальному габариту вместо
|
||||
заведомо большего 64×64 в `pop_blit_b`. Размеры сняты из каталогов
|
||||
атласов: `pal_wall.atl` — группы 3..5 = 8×7, 6..8 и 9..11 = 32×12,
|
||||
12..14 = 30×5, 15..17 = 32×3.
|
||||
3. **То же для ПОДЗЕМЕЛЬЯ**: ранний выход `wall_pattern` (габарит там выше —
|
||||
левая марка уходит на `dby+POP_YOFF−67`) плюс `wp_blit` на RNDBLOCK
|
||||
(32×21), обоих разделителях (9×21) и обеих марках (`pop_wall.atl`:
|
||||
16/17 = 7×10, 14/15 = 14×5).
|
||||
|
||||
Замер: уровень 4, комната 18, Кид сдвигается читом `]` по пикселю (skip
|
||||
выключен, идёт полный путь), в fore-окне ШЕСТЬ тайлов, ТРИ из них —
|
||||
дворцовая стена.
|
||||
|
||||
| участок | тактов |
|
||||
|---|---:|
|
||||
| пролог `pop_char_fore` до первого `fore_tile` | 17 208 |
|
||||
| обычный тайл | 4 000 – 4 600 |
|
||||
| **тайл стены (было 60 000 – 74 000)** | **~12 700** |
|
||||
| хвост + чистка бортов | 6 055 |
|
||||
| **fore-проход целиком (было 171 693)** | **70 681** |
|
||||
|
||||
Кадр целиком в этой сцене: работа **419 839**, период **3** растровых кадра
|
||||
(было 517 609 и 4).
|
||||
|
||||
Остаток в проходе — пролог 17 208, это уже пункт 1 ниже (футпринт из физики).
|
||||
Отдельная находка: когда Кид стоит НА ШВЕ (окно `x −8..5`), пролог разбухает
|
||||
до **134 730** — 86 % прохода; причина не разобрана, см. пункт 1.
|
||||
|
||||
---
|
||||
|
||||
## 1. Футпринт персонажа — брать из физики, а не считать заново
|
||||
|
||||
Reference in New Issue
Block a user