diff --git a/applications/PoP/roomtest/TASKS_OPEN.md b/applications/PoP/roomtest/TASKS_OPEN.md index 711b2e2..5b721b7 100644 --- a/applications/PoP/roomtest/TASKS_OPEN.md +++ b/applications/PoP/roomtest/TASKS_OPEN.md @@ -230,8 +230,9 @@ fore-слоя, и клип (`clip_char`), и брызги; полоса HP и л | # | Задача | Что | Блокирует | |---|--------|-----|-----------| | — | [DRAW-COST](#draw-cost) | **кадр уложился в бюджет 2026-08-09**: 470 964 -> 425 600 тактов, период цикла 4 растровых кадра -> **3**. Дальнейшее — запас, не срочность | плавность на ВСЕХ уровнях | -| — | [L1-SPEED](#l1-speed) | игра на ~39 % быстрее оригинала | ощущение от ВСЕХ уровней; берётся в любой момент | +| ✔ | [L1-SPEED](#l1-speed) | **закрыта 2026-08-19** режимами скорости (NORMAL = 4/5 растров, как оригинал) | — | | — | [TUNE-1](#tune-1) | параметры движка → cfg-файл (сейчас `pop_tune.h`) | отладка таймингов и моды; берётся по мере надобности | +| — | [TUNE-2](#tune-2) | параметры СТРАЖЕЙ (6 таблиц по 12 градаций мастерства + HP) → cfg-файл | подбор сложности боя без пересборки | | — | [MEM](#mem-next) | следующий шаг разгрузки W1/W2 | берётся по факту нехватки места | Сделанное — в [`TASKS_CLOSED.md`](TASKS_CLOSED.md): L4-MIRROR, L3-CHOMP, @@ -1168,6 +1169,49 @@ HP/минуты, номера «особых» комнат и уровней ( **Оговорка по памяти.** Парсер и таблица параметров — холодный код, исполняется один раз при старте: кандидат в банк, а не в резидент W1. +### TUNE-2. Параметры СТРАЖЕЙ — в CFG-файл + +Частный, но самый востребованный срез [TUNE-1](#tune-1): сейчас весь ИИ +стража зашит константами, и чтобы попробовать «а если он будет блокировать +пореже» — надо пересобирать. + +**Что настраивать.** Всё, что индексируется мастерством (12 градаций, +`NUM_GUARD_SKILLS`), — таблицы в `guards.c`: + +| таблица | что решает | дефолт для навыка 4 | +|---|---|---:| +| `STRIKEPROB` | вероятность удара | 61 | +| `RESTRIKEPROB` | добить из своего парирования | 5 | +| `BLOCKPROB` | заблокировать замах | 200 | +| `IMPBLOCKPROB` | то же, когда Кид только что пробил блок | 100 | +| `ADVPROB` | наступать | 255 | +| `REFRACTIMER` | «отдышка» после ранения, кадров | 8 | +| `extrastrength` | надбавка HP (сейчас зашита как `skill == 4 ? 1 : 0`, `pop_guard_cold.c`) | 1 | + +Плюс не зависящее от навыка: `tbl_guard_hp[16]` (`pop_level_cold.c`) — база +HP по уровню, и навык скелета (`SKEL_SKILL`) / тени (`SHADOW_SKILL`). + +**Формат — как у SDLPoP**, чтобы правки переносились в обе стороны без +перевода: секции `[Skill 0]`..`[Skill 11]`, внутри `strikeprob=`, +`blockprob=` и т.д. (`options.c:439`, пример — `SDLPoP/SDLPoP.ini:562`). +Имена ключей брать ЕГО, регистр игнорировать. + +**Чего НЕ делать.** Навык конкретного стража живёт в данных уровня +(`level.guards_skill[комната-1]`, читаем в `pop_level_guard`) — его в CFG +не тащим, иначе разъедется с файлами уровней. Переопределение «в комнате +N навык M» — отдельная надобность, если понадобится, то как явная секция +`[Level N]`, а не подмена данных. + +**Зачем это стоит сделать.** Прогон 2026-08-20 (11/22, навык 4) дал +ощущение «страж тяжелее, чем в SDLPoP». Сверка кода расхождений не нашла +(протокол — в `../docs/impl_diff.md` и в ответе сессии: дистанция, +диспетчер, три ветки ИИ, шесть таблиц, `justblocked`, `check_hurting`, +`parry`, `swordfight`, порядок тиков, откат seq_74 = −10 — всё совпало +побайтно). Проверить такую гипотезу можно только подбором чисел на живом +прогоне, а для этого их надо крутить без пересборки. + +**Оговорка по памяти** — та же, что в TUNE-1: парсер холодный, в банк. + ### MEM. Следующий шаг разгрузки W1/W2 `pop_ctrl.c` уехал в банк 5 ([MEM-BANK5](TASKS_CLOSED.md#mem-bank5), куча