From b55d4d11e3b50bdc62458ea48b34cf954be0e044 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Mon, 31 Aug 2026 19:57:42 +0300 Subject: [PATCH] =?UTF-8?q?SprPoP:=20=D0=B0=D1=83=D0=B4=D0=B8=D1=82=20?= =?UTF-8?q?=E2=80=94=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=2012=20=D0=B8?= =?UTF-8?q?=2013=20=D0=BD=D0=B5=D0=B4=D0=B5=D0=BB=D0=B8=D0=BC=D1=8B=20(?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B6=D0=B8=D0=B2=D0=BE=D0=B9=20=D0=BC=D0=B0=D1=88?= =?UTF-8?q?=D0=B8=D0=BD=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правка 13 (перенос прижатия к полу в ветки пережитого удара, как в оригинале) была сделана в изоляции и СЛОМАЛА смерть: страж убивает Кида, а вместо тела и паузы идут вспышка, стопкадр и мгновенный выход в заставку. Причина: у нас прижатие к полу работало КОМПЕНСАЦИЕЙ отсутствующей ветки «убит и сброшен с уступа» (находка 12). Без неё мёртвый остаётся с ненулевой fall_y, физика ведёт его вниз, он пересекает нижнюю границу, взводится pop_fell_out — и приложение уходит на рестарт РАНЬШЕ отрисовки, поэтому тела не видно вовсе. Оценка «чистое перемещение двух строк, риск низкий» была неверной. В документе исправлено: риск ВЫСОКИЙ, пока ветка 12 отсутствует; обе находки — одна правка, и порядок внутри неё обратный: сперва добавить seq_81 с экспортом тайловых запросов, убедиться, что смерть на краю отыгрывается ею, и только потом снимать страховку. Правка откачена, дерево вернулось к проверенному состоянию. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY --- applications/SprPoP/docs/sdlpop_audit.md | 26 +++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/applications/SprPoP/docs/sdlpop_audit.md b/applications/SprPoP/docs/sdlpop_audit.md index 383b3f0..eca8ab8 100644 --- a/applications/SprPoP/docs/sdlpop_audit.md +++ b/applications/SprPoP/docs/sdlpop_audit.md @@ -593,7 +593,27 @@ ## Разбор по находкам -### 12 + 13 (ранг А) — смерть на краю. Чинится, цена нулевая +### 12 + 13 (ранг А) — смерть на краю. ТОЛЬКО ВМЕСТЕ, НЕ ПООТДЕЛЬНОСТИ + +> **Проверено на живой машине 2026-08-31 и провалилось.** Правка 13 была +> сделана в изоляции (прижатие к полу перенесено в ветки пережитого +> удара) — и сломала смерть: страж бьёт Кида, тот погибает, а вместо +> нормальной смерти идут вспышка, стопкадр и немедленный выход в +> заставку. +> +> Причина: у нас прижатие к полу работало КОМПЕНСАЦИЕЙ отсутствующей +> ветки «убит и сброшен с уступа» (находка 12). Убрав компенсацию и не +> добавив то, что она компенсировала, мы оставляем мёртвого персонажа с +> ненулевой `fall_y` и незакреплённой `Char.y` — физика продолжает вести +> его вниз, он проваливается за пределы уровня, и срабатывает аварийный +> путь. +> +> Вывод: обе находки — ОДНА правка. Оценка «чистое перемещение строк, +> риск низкий» была неверной; риск ВЫСОКИЙ, пока ветка 12 отсутствует. +> Порядок внутри правки: сперва добавить ветку `seq_81` (с экспортом +> тайловых запросов), убедиться, что смерть на краю отыгрывается ею, и +> только затем убирать безусловное прижатие. + *Место:* `guards.c`, `hurt_by_sword` — холодный путь. @@ -700,8 +720,8 @@ rodata банка 1 и обращаться к ней напрямую — ст | приоритет | находки | почему | |---|---|---| -| 1 | 13, 24 | по одной-две строки, риск низкий, оба в узле «смерть/стена» | -| 2 | 12, 14 | нужен экспорт двух функций; закрывают наблюдения пользователя | +| 1 | 24 | одна строка, риск низкий, готовая экспортированная функция | +| 2 | 12+13 ВМЕСТЕ | порознь ломают смерть (проверено); нужен экспорт двух функций | | 3 | 18, 8 | обе УСКОРЯЮТ или бесплатны; 8 — по дешёвому варианту | | 4 | 2, 3, 20 | перестановки и копия таблицы; нужны прогоны | | 5 | 1, 7 | риск средний: обе могут компенсировать наши отличия в другом месте |