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`.