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