From 10b920f156fa136e6e2a7051c8de5d217197f485 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Thu, 20 Aug 2026 09:43:07 +0300 Subject: [PATCH] =?UTF-8?q?impl=5Fdiff:=20=D0=93=D0=A1=D0=A7=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=B2=D0=B5=D0=B4=D1=91=D0=BD=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=BC=D0=B5=D0=BD=D0=B0=D0=BC=20(=D1=83=20=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B3=D0=B8=D0=BD=D0=B0=D0=BB=D0=B0=20=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD=20=D1=81=D0=B8=D0=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/PoP/docs/impl_diff.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/applications/PoP/docs/impl_diff.md b/applications/PoP/docs/impl_diff.md index 0763856..ba91ef0 100644 --- a/applications/PoP/docs/impl_diff.md +++ b/applications/PoP/docs/impl_diff.md @@ -480,3 +480,27 @@ BUG-CHEAT-FIGHT-1 (выход из боя), и лечится там же. вывод сделан чтением трёх мест кода. Если понадобится подтверждение, сценарий короткий: любой бой у правого края комнаты, вытеснить стража за край и добить. + +## ГСЧ разведён по доменам (у оригинала он ОДИН) + +**Оригинал.** `random_seed` один на всё: кладка стены, анимация тайлов, +броски боя, модификаторы падающих плит — всё тянет из одной +последовательности (`seg009` PRNG, 32-битный LCG). Поэтому в оригинале +бой воспроизводим вместе со всем остальным: тот же сид — тот же бой. + +**У нас.** Сидов несколько: `pop_t_seed` (кладка, `pop_tile.h`), +`pop_fight_seed` (броски боя, `pop_guard.h`), отдельные у trob и loose. +Сам генератор тот же (`pop_prandom`), таблицы вероятностей — +побайтно те же, что в `data.h`. + +**Чем платим.** Конкретный бой у нас и в SDLPoP разойдётся: порядок +бросков другой, значит блоки/удары лягут иначе. Статистически поведение +то же (те же вероятности, тот же генератор), но «сверить бой кадр в кадр +с SDLPoP» нельзя, и QuickSave обязан сохранять ВСЕ сиды, а не один. + +**Что проверять при регрессе.** Если страж кажется сильнее/слабее +оригинала — сначала проверить не таблицы (они сверены), а **режим +скорости**: `fight_speed` у оригинала 100 мс, а в нашем FASTEST бой идёт +61,4 мс, то есть в реальном времени на 63 % быстрее, и на глаз это ровно +«страж давит сильнее». Режим NORMAL (дефолт) даёт 102,4 мс — см. +`frame_pacing_plan.md`.