impl_diff: ГСЧ разведён по доменам (у оригинала один сид)
This commit is contained in:
@@ -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`.
|
||||||
|
|||||||
Reference in New Issue
Block a user