From f206a4cca6d9c45493315085dfb11c8fd25a2fb2 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 2 Sep 2026 18:32:11 +0300 Subject: [PATCH] =?UTF-8?q?SprPoP:=20=D0=B7=D0=B0=D0=B2=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20CHANGELOG,=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=B0=D1=82=D0=B0=20=E2=80=94=20=D0=B8=D0=B7=20?= =?UTF-8?q?git-=D1=82=D0=B5=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit До сих пор «что изменилось» восстанавливалось только из git log, а он устроен по ПРИЧИНАМ правок, а не по тому, что заметит игрок. Заводим отдельный файл — как это уже сделано у mdview2 (changelog в репозитории ведётся на приложение, а корневой RELEASE_NOTES.md описывает тулчейн и живёт своей жизнью). Начат с v0.9.6: зацеп, зацикленный взмах клинка, кнопка в паласе. Более ранняя история остаётся в git log и досках — переписывать её задним числом смысла нет. ВЕРСИЯ И ДАТА БЕРУТСЯ ИЗ GIT, а не проставляются руками: заголовок записи = имя аннотированного тега, дата = дата его создания (`git for-each-ref refs/tags/<тег>`). Так запись не может разойтись с историей. Правило записано в CLAUDE.md рядом с дисциплиной досок, иначе файл заведётся один раз и умрёт. В запись идёт только то, что видно ИГРОКУ или меняет сборку/запуск, по схеме «симптом -> причина одной фразой -> хеш»; полный разбор остаётся в сообщении коммита и не дублируется. Файл в UTF-8, как остальные доки SprPoP. CP866 у mdview2 — вынужденная мера (его changelog читает сам MDView), здесь такого требования нет. Ссылка добавлена во входные точки docs/README.md. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018T2k4VZrSyERwk6H97Sfi1 --- applications/SprPoP/CHANGELOG.md | 49 ++++++++++++++++++++++++++++++ applications/SprPoP/CLAUDE.md | 10 ++++++ applications/SprPoP/docs/README.md | 1 + 3 files changed, 60 insertions(+) create mode 100644 applications/SprPoP/CHANGELOG.md diff --git a/applications/SprPoP/CHANGELOG.md b/applications/SprPoP/CHANGELOG.md new file mode 100644 index 0000000..be4e7b2 --- /dev/null +++ b/applications/SprPoP/CHANGELOG.md @@ -0,0 +1,49 @@ +# SprPoP — CHANGELOG + +Заметные изменения по релизам. **Версия и дата каждой записи берутся из +git** — из аннотированного тега (`git for-each-ref refs/tags`), а не +проставляются руками, поэтому расходиться с историей они не могут. +Заголовок записи = имя тега, дата = дата его создания. + +Здесь только то, что видно ИГРОКУ или меняет способ сборки/запуска. +Разбор причин живёт в сообщениях коммитов, открытые баги — в +`docs/BUGS_OPEN.md`, закрытые — в архиве roomtest. + +Файл начат с релиза v0.9.6; более ранняя история — в `git log` и в +досках задач. + +## v0.9.6-hang-sound-button — 2026-09-02 + +Три бага, найденные в живой игре и проверенные в MAME после исправления. + +- **Зацеп срывался на следующем кадре** (регресс, тянулся с 4e12aa5). + Кид цеплялся за кромку, поза зацепа рисовалась — и он тут же падал. + Ловилось на длинном прыжке уровня 3 (комната 7) и в attract-демо, где + Кид вместо подъёма на кромку (0,2) улетал на пики. Причина: страж + «падения сквозь стену» принимал кладку под кромкой за стену, в которую + персонаж влетел, и отменял только что состоявшийся захват. Теперь + удачный зацеп отменяет этого стража. `38fb3c0` + +- **Непрерывный взмах клинка у безоружного Кида.** На подъёме шёл + нескончаемый свист меча, которого у Кида нет. Причина: в порт не + доехали два условия оригинала, включая гард, который автор SDLPoP + подписал прямым текстом как «фикс зацикленного звука взмаха». `cb995bf` + +- **Кнопка под Кидом заливалась кладкой** на дворцовых уровнях. Кид + подтягивается на открывающую кнопку, и кромка, которая его прячет, + нарисована кирпичом (уровень 4, комната 18). Причина: подстановка + спрайта «кнопка без пола слева» действует только в подземелье, и это + условие было потеряно в перерисовке поверх персонажа — при том что в + статической отрисовке комнаты оно есть. `8548aa9` + +Сопутствующее, для разработки: + +- В доске исправлено толкование звука 11: это индикатор ПРОМАХА, а не + «любого укола». Прежняя запись описывала наш собственный код вместо + оригинала, и из-за неё в CLIMB-VS-GUARD зря отодвинули версию про порог + дистанции. `400f5cb` +- Новый набор host-тестов `t_hang`: мерит не «вис наступил», а «вис + ДЕРЖИТСЯ» — прежние наборы регресс зацепа не видели именно поэтому. + Входит в `38fb3c0`. +- В `CLAUDE.md` записан путь запуска на HDD-образе: игра лежит в + `D:\GAMES\SPRPOP`, а не в корне диска. `aaa480d` diff --git a/applications/SprPoP/CLAUDE.md b/applications/SprPoP/CLAUDE.md index c1fdaef..86b1b20 100644 --- a/applications/SprPoP/CLAUDE.md +++ b/applications/SprPoP/CLAUDE.md @@ -60,6 +60,16 @@ seqtbl, `seg007` mob/loose/падающие объекты, `seg008` отрис нового бага грепни архив по симптому: корень мог уже разбираться. Открытые файлы обязаны читаться целиком за раз. +**CHANGELOG. Ставишь релизный тег — добавь запись в `CHANGELOG.md`.** +Версия и дата в заголовке берутся ИЗ GIT, руками не проставляются: + + git for-each-ref --format='%(refname:short) | %(creatordate:short)' \ + refs/tags/<тег> + +В запись идёт только то, что видно ИГРОКУ или меняет сборку/запуск, — по +одному пункту «симптом -> причина одной фразой -> хеш коммита». Полный +разбор живёт в сообщении коммита, дублировать его сюда не надо. + Индекс документации с отметками актуальности — **`docs/README.md`**, начинать чтение оттуда. diff --git a/applications/SprPoP/docs/README.md b/applications/SprPoP/docs/README.md index 3c39d45..572563f 100644 --- a/applications/SprPoP/docs/README.md +++ b/applications/SprPoP/docs/README.md @@ -10,6 +10,7 @@ |----------|-------| | [`TASKS_OPEN.md`](TASKS_OPEN.md) | **Что берётся в работу сейчас** — начинать отсюда | | [`BUGS_OPEN.md`](BUGS_OPEN.md) | Открытые баги и незакрытые оптимизации | +| [`../CHANGELOG.md`](../CHANGELOG.md) | **Что менялось по релизам** глазами игрока; версия и дата берутся из git-тега | | [`impl_diff.md`](impl_diff.md) | **Осознанные расхождения с SDLPoP**: где сделано не дословно и почему. Новое расхождение — записью сюда, а не только комментарием в коде | | [`keys.txt`](keys.txt) | **Целевая раскладка управления**, к которой подгоняем SprPoP | | [`keys_plan.md`](keys_plan.md) | План перевода на неё: что совпадает, что переназначить, каких функций нет вовсе |