3a0e847353
КОД НЕ МЕНЯЛСЯ. Построчный разбор наших реализаций против оригинала: 26 позиций за пять проходов, каждая с рангом вероятности (А..Д), с описанием «чем грозит» и сценарием проверки. Расхождения группируются в три узла, и это главный вывод аудита: 1. СМЕРТЬ ПРИ АКТИВНОЙ ФИЗИКЕ — здесь все находки ранга А. У нас смерть это флаг, а физика продолжает вести персонажа как живого: нет ветки «убит и сброшен с уступа» (оригинал выбирает её по тайлу позади), прижатие к полу в hurt_by_sword стало безусловным (в оригинале только для выжившего удара), в land лишний пересчёт колонки. Этим объясняется наблюдение пользователя: заколотый на краю Кид доезжает этажом ниже и садится в присед. 2. ГРАНИЦЫ МОДУЛЕЙ — pop_map не отдаёт наружу тайловые запросы от произвольного Char, wall_type и загрузку кадра. Три ветки упрощены НЕ по логике, а по доступности функций: отсутствующая ветка уступа, «стена впереди» сужена у стражей до одного тайла (оригинал считает преградой ещё ворота, верх двери, зеркало и чомпер), in_wall не перезагружает кадр. Чинить это заплатками неправильно — сначала расширять интерфейс pop_map. 3. МОМЕНТ ПОБОЧНЫХ ДЕЙСТВИЙ — делаем то же самое, но раньше или позже: сброс fall_x, побудка чомперов (у нас отложена до конца play_seq), звук удара, перезагрузка кадра. По отдельности мелочь, вместе — сдвиг состояния на кадр. Восемь позиций СВЕРЕНЫ И СОВПАДАЮТ (диспетчер control, все 15 опкодов seqtbl, control_with_sword, parry, swordfight, sword_strike, check_sword_hurt, check_hurting, bumped_fall, таблицы кадров) — их не нужно перепроверять. Дважды по ходу работы едва не записана ложная находка из-за чтения отфильтрованного вывода; отсюда правило: фиксировать расхождение только после чтения обеих реализаций целиком. Отдельно: второе наблюдение пользователя (падение частично в стене) — у SDLPoP есть ТРИ опциональных фикса ровно про это, то есть в ванили баг присутствует, и мы его намеренно повторяем. Но найдены два места, где мы можем быть хуже ванили (гард curr_row<=2 в do_fall и in_wall выше). Незакрытое перечислено в файле: тела autocontrol_*, check_grab, check_bumped_look_left, старшие биты байта клинка. Также отмечено, что ни одно найденное осознанное отличие не занесено в docs/impl_diff.md, хотя правило проекта этого требует. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY