Реестр: P16 закрыт, P14 уточнён замером трупа
P16 (цианные проверки) — минус 25 818 тремя правками: снимок без построения структуры, guard_over_kid только когда кого-то рисуем, проверка слота без пяти аргументов. Записан и отрицательный результат внутри третьей: обёртка, которая внутри всё равно звала pop_cd_hit с пятью аргументами, сделала хуже. P14 уточнён: fore-проход не «62 778…89 000», а от 4 122 (персонаж пропущен) до 117 570 (труп Кида в челюстях — широкий кадр в тайле с передним слоем). Значит в бою он будет ближе к сотне тысяч. Бюджет лёгкой позиции: 801 768 -> 438 978. До цели 430 000 осталось 8 978 — одна правка. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -188,9 +188,55 @@
|
|||||||
инициализация — пустая колонка обозначается `ymin = 255`, а нули от crt0
|
инициализация — пустая колонка обозначается `ymin = 255`, а нули от crt0
|
||||||
читались бы как «затронута строка 0».
|
читались бы как «затронута строка 0».
|
||||||
|
|
||||||
### P14. Fore-проход персонажа — 62 778…89 000 НА ПЕРСОНАЖА [замер 2026-08-19]
|
### P16. Цианные проверки ✅ СДЕЛАНО 2026-08-19 — −25 818
|
||||||
|
|
||||||
**Самая дорогая единичная статья кадра: около 152 000 на двоих, 20 % работы.**
|
Раскладка остатка цианной фазы (59 406) показала, что 47 883 из них — три
|
||||||
|
вызова, а не отрисовка:
|
||||||
|
|
||||||
|
| вызов | было | стало |
|
||||||
|
|---|---:|---:|
|
||||||
|
| `pop_loose_mob_draw` | 978 | 978 (гейт `mobs_live` работает) |
|
||||||
|
| `guard_over_kid` | 14 424 | **0** |
|
||||||
|
| `pop_char_skip_mask` | 28 605 | ~21 000 |
|
||||||
|
|
||||||
|
Три правки:
|
||||||
|
|
||||||
|
1. **`cd_sig_same`** — сравнение снимка БЕЗ построения структуры.
|
||||||
|
`cd_sig_make` записывал тринадцать полей в стековый кадр (через
|
||||||
|
`-n(ix)`), и лишь потом шёл побайтовый цикл; теперь сравнение идёт прямо
|
||||||
|
с источником и выходит на первом расхождении. **−8 016**;
|
||||||
|
2. **`guard_over_kid` по условию** — вопрос «кто поверх кого» не имеет
|
||||||
|
смысла, когда не рисуется никто. Вызов перенесён ПОСЛЕ `skip_mask` и
|
||||||
|
идёт только при `skip != 3`. **−14 118**;
|
||||||
|
3. **`pop_cd_hit_slot`** — проверка «задет ли слот» брала пять аргументов,
|
||||||
|
три из них стеком (45 % тактов на IX). Теперь координаты берутся из
|
||||||
|
`pop_cd`, а сравнение вынесено в `hit_rect` с file-scope аргументами.
|
||||||
|
**−3 684**.
|
||||||
|
|
||||||
|
**Отрицательный результат внутри третьей правки** (не повторять): первая
|
||||||
|
версия была обёрткой, которая внутри всё равно звала `pop_cd_hit` с пятью
|
||||||
|
аргументами — стало ХУЖЕ (1799 тактов Z80 вместо 1318). Снимать аргументы
|
||||||
|
со стека надо у того, кто их читает, а не этажом выше.
|
||||||
|
|
||||||
|
### P14. Fore-проход персонажа — от 4 122 до 117 570 [замеры 2026-08-19]
|
||||||
|
|
||||||
|
**Самая НЕСТАБИЛЬНАЯ статья кадра.** Замеры на одной и той же сцене:
|
||||||
|
|
||||||
|
| ситуация | fore-проход |
|
||||||
|
|---|---:|
|
||||||
|
| персонаж пропущен (`skip`) | 4 122 |
|
||||||
|
| стоящий страж | 62 778 |
|
||||||
|
| живой Кид у чомпера | ~89 000 |
|
||||||
|
| **труп Кида в челюстях** | **117 570** |
|
||||||
|
|
||||||
|
Растёт от двух вещей: ширины футпринта (широкий кадр смерти, вынутый меч
|
||||||
|
добавляет колонку) и числа тайлов с передним слоем внутри футпринта (здесь
|
||||||
|
чомпер со своими зубьями). Отсюда практический вывод: **в бою проход будет
|
||||||
|
ближе к сотне тысяч, чем к шестидесяти** — кадры выпадов и ударов широкие.
|
||||||
|
|
||||||
|
Замер трупа сделан по просьбе пользователя. Сама по себе эта ситуация не
|
||||||
|
игровая («когда Кид — труп, игры нет»), но именно она показала верхнюю
|
||||||
|
границу цены.
|
||||||
|
|
||||||
`pop_char_fore` = два трамплина в банк 2 (`pop_fore_set_clip` +
|
`pop_char_fore` = два трамплина в банк 2 (`pop_fore_set_clip` +
|
||||||
`pop_fore_over_char`) плюс обход тайлов футпринта, в каждом `fore_tile`.
|
`pop_fore_over_char`) плюс обход тайлов футпринта, в каждом `fore_tile`.
|
||||||
@@ -387,6 +433,7 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
|||||||
| # | что | факт |
|
| # | что | факт |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| P15 | точность метки «фон трогали» + раздельная проверка клинка | **−163 746** лёгкая / **−140 871** тяжёлая |
|
| P15 | точность метки «фон трогали» + раздельная проверка клинка | **−163 746** лёгкая / **−140 871** тяжёлая |
|
||||||
|
| P16 | цианные проверки: снимок без структуры, `guard_over_kid` по условию, `hit_slot` без пяти аргументов | **−25 818** |
|
||||||
| P5 | `loose_tick`: гейты холостого хода | **−33 840** (ждали −28 000) |
|
| P5 | `loose_tick`: гейты холостого хода | **−33 840** (ждали −28 000) |
|
||||||
| P1 | чомпер: перерисовка только при фазе < 6 | **−110 802** (ждали −160 000) |
|
| P1 | чомпер: перерисовка только при фазе < 6 | **−110 802** (ждали −160 000) |
|
||||||
| P2b | луч видимости: колонки + один банковый вызов | **−26 448** (ждали −30 000) |
|
| P2b | луч видимости: колонки + один банковый вызов | **−26 448** (ждали −30 000) |
|
||||||
@@ -400,7 +447,7 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
|||||||
| # | что | ожидание | риск | комментарий |
|
| # | что | ожидание | риск | комментарий |
|
||||||
|---|---|---:|---|---|
|
|---|---|---:|---|---|
|
||||||
|
|
||||||
| **P14** | **fore-проход персонажа** — 62 778 у стража, ~89 000 у Кида | **до −80 000** | высокий | самая дорогая статья кадра (20 %). Включает P10 как первый шаг |
|
| **P14** | **fore-проход персонажа** — 62 778 стоящий страж … **117 570** широкий кадр | **до −80 000** | высокий | самая нестабильная статья. Включает P10 как первый шаг |
|
||||||
| P4 | накладные блита (4 правки) | −28 000 | низкий | 6 126 фиксированных на любой блит |
|
| P4 | накладные блита (4 правки) | −28 000 | низкий | 6 126 фиксированных на любой блит |
|
||||||
| P11 | мелочи с известной ценой | −26 000 | низкий | `clip_char_top` 8 658 подтверждён замером |
|
| P11 | мелочи с известной ценой | −26 000 | низкий | `clip_char_top` 8 658 подтверждён замером |
|
||||||
| P10 | футпринт персонажа из физики | −23 000 | средний | часть P14 |
|
| P10 | футпринт персонажа из физики | −23 000 | средний | часть P14 |
|
||||||
@@ -421,7 +468,8 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
|||||||
| **после P2b (лёгкая позиция)** | **628 542** | 259 500 | 181 068 | 187 761 | 4 |
|
| **после P2b (лёгкая позиция)** | **628 542** | 259 500 | 181 068 | 187 761 | 4 |
|
||||||
| ТЯЖЁЛАЯ позиция (Кид на шаг правее) | 758 358 | 257 520 | 180 870 | 319 842 | **4 и 5** |
|
| ТЯЖЁЛАЯ позиция (Кид на шаг правее) | 758 358 | 257 520 | 180 870 | 319 842 | **4 и 5** |
|
||||||
| **после P15, лёгкая** | **464 796** | 223 902 | 181 494 | **59 406** | 4 |
|
| **после P15, лёгкая** | **464 796** | 223 902 | 181 494 | **59 406** | 4 |
|
||||||
| **после P15, тяжёлая** | **617 487** | 245 808 | 181 761 | 192 090 | **4 везде** |
|
| после P15, тяжёлая | 617 487 | 245 808 | 181 761 | 192 090 | **4 везде** |
|
||||||
|
| **после P16, лёгкая** | **438 978** | 218 052 | 181 494 | **39 438** | 4 |
|
||||||
|
|
||||||
Итог восьми позиций: **801 768 → 464 796 в лёгкой позиции (−42 %)** и
|
Итог восьми позиций: **801 768 → 464 796 в лёгкой позиции (−42 %)** и
|
||||||
**758 358 → 617 487 в тяжёлой (−19 %)**. Отдельно важно: в тяжёлой позиции
|
**758 358 → 617 487 в тяжёлой (−19 %)**. Отдельно важно: в тяжёлой позиции
|
||||||
@@ -432,8 +480,8 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
|
|||||||
Цель: работа ≤ 430 000, тогда период станет 3 растра (хвост кадра — три
|
Цель: работа ≤ 430 000, тогда период станет 3 растра (хвост кадра — три
|
||||||
`gfx_wait_vsync`).
|
`gfx_wait_vsync`).
|
||||||
|
|
||||||
- в ЛЁГКОЙ позиции снять надо **35 000** (после P15 — рукой подать);
|
- в ЛЁГКОЙ позиции снять надо **8 978** — одна правка;
|
||||||
- в ТЯЖЁЛОЙ — **187 000**.
|
- в ТЯЖЁЛОЙ — около **187 000** (замер после P16 не повторялся).
|
||||||
|
|
||||||
Всё оставшееся в списке, кроме P13, даёт по оценкам **порядка 100 000** — и
|
Всё оставшееся в списке, кроме P13, даёт по оценкам **порядка 100 000** — и
|
||||||
это оптимистично. **Арифметика не сходится:** сцена с двумя персонажами,
|
это оптимистично. **Арифметика не сходится:** сцена с двумя персонажами,
|
||||||
|
|||||||
Reference in New Issue
Block a user