Два независимых фикса, оба проверены в MAME.
1. ПРИЗЕМЛЕНИЕ МЁРТВОГО (симптом «убили Кида, а он сел этажом ниже»).
Оригинал спрашивает у приземляющегося, жив ли он (seg005:0173): вся
развязка «мягко / средне / разбиться» отведена ЖИВОМУ, телу — своя
ветка (добить HP, звук падения насмерть, seq_22). У нас развилки не
было, и в глаза это не бросалось только из-за высоты: тело, сброшенное
ударом с ОДНОГО ряда, набирает fall_y < 22 — урона нет, «последнее HP»
не тратится, ветка «разбился» не выбирается никогда. Труп уходил в
мягкое приземление и садился (кадр 109).
Цена — один тест байта на вызов land(), то есть на событие касания
земли, а не на кадр. Живой путь не изменился ни на операцию.
2. ЗАЛИПАВШАЯ НАДПИСЬ «Press Button to Continue». Счётчик кадров смерти
живёт снаружи главного витка и потому переживает возврат на заставку.
Ответ игрока кнопкой его обнулял, а выход по таймауту (24 с молчания
-> title) уходил мимо сброса. Дальше счётчик оставался израсходованным
на всю сессию, и в следующей игре ПЕРВАЯ же смерть мгновенно уводила в
title, не показав надписи; лечилось только перезапуском программы.
Сброс поставлен на входе в игровой маршрут — закрывает и остальные
боковые дороги (выпадение за нижнюю границу, смена уровня).
Здесь же довезена связка находок 12/13 аудита: смерть безоружного у
обрыва уходит в свою последовательность (seq_81), а прижатие к полу
осталось страховкой для прочих веток — снять его целиком не вышло дважды,
подробности в комментарии guards.c.
Тесты: t_death дополнен обеими сторонами развилки (мёртвый обязан
разбиться, живой с той же высоты — сесть без урона), 18 проверок; все 16
наборов host-тестов зелёные.
В доску записан CLIMB-VS-GUARD: Кид подтягивается к стражу этажом выше —
у нас удар порой смертелен, в оригинале Кид срывается без урона. Цепочка
засчитывания удара сверена с оригиналом и совпадает дословно, расходятся
входные данные. Лучшая зацепка — ЗВУК: оригинал играет взмах клинка (11)
при любом уколе, до всякой проверки попадания, а у нас слышен упор в
стену (8) — значит страж не атакует, а сталкивается. Набор звуков
проверен и не виноват. Отложено по решению пользователя.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY
КОД ИГРЫ НЕ МЕНЯЛСЯ. Новый набор t_death — 9 проверок, всего наборов 16.
Заведён ПЕРЕД правкой находок 12/13, чтобы поймать деградацию: правка 13 в
изоляции уже ломала смерть (мёртвый оставался с ненулевой скоростью
падения, проваливался за нижнюю границу, игра уходила на рестарт, не
показав тела). Поэтому проверяется ровно то, на что эти правки влияют:
* удар не в боевой стойке смертелен независимо от запаса HP;
* удар с мечом снимает одно HP, на последнем — убивает;
* ПЕРЕЖИВШИЙ удар ставится на пол своего ряда с нулевой скоростью падения
(в оригинале это единственная ветка, где координата трогается);
* тело после смерти остаётся в своём ряду — и на ровном полу, и у самого
обрыва (целевая сцена находки 12; после правки ожидание изменится
осознанно).
По дороге тест дважды показал не баг движка, а мои ошибки в самой сцене:
обвязка выставляет признак «жив» только стражу, а урон применяется не
сразу — удар выставляет дельту, и HP меняет отдельный шаг кадра, как в
оригинале. Оба раза чинился тест.
VANILLA/BUGFIXED: записано, что переключатель уже существует в настройках
и зафиксирован в положении VANILLA, второй заводить не нужно. Отмечено
главное следствие — наш «ванильный» билд УЖЕ не чистая ваниль (часть
ванильных багов пофикшена), поэтому при разделении режимов придётся
пройтись по сделанным отступлениям и распределить их; отдельные фиксы
(падение сквозь стену) могут быть сделаны и в нынешнем билде.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY