Решили: десять дуэлей за меню записаны headless — прямо в execute_code собран тот же стек
сима, что и боевой скоуп (реальная RuntimeUnitFactory + системы + AI + конфиги из GameConfig),
прогнан до исхода, снят в ленту BattleTapeRecorder и записан ReplayFileWriter в
StreamingAssets/Replays/menu_duel_{i}.gmrp. Меню поднимает воспроизведение вариантом префаба
BattleScopeReplay (наследует BattleScope, переопределяет _mode = Replay), а не живой бой.
Почему headless, а не запись из play mode: живой прогон потребовал бы рабочего боевого скоупа с сессией и расстановкой — той самой машинерии, мимо которой мы и уходим. Headless-сборка переиспользует реальную фабрику (каскад статов, AI из данных релика), гоняет все десять дуэлей одним циклом без редакторных заходов и сохраняет файлы напрямую. Все десять вышли настоящим боем до победы (10–68 с, разные победители).
Почему вариант префаба, а не рантайм-переключение режима: Configure скоупа не может прочитать
регистрации, которые создатель добавляет через установщик CreateChildFromPrefab — они применяются
ПОСЛЕ Configure. Значит роль обязана быть известна скоупу до сборки: либо сериализованным полем на
префабе, либо из предка. Сериализованное поле на варианте — единственный владелец проводки
(конфиги наследуются от базового BattleScope, отличается только _mode), и Configure читает своё
же поле. Байты файла при этом всё-таки едут установщиком (ReplayPlaybackRequest) — их плеер
резолвит лениво, уже после установки, как и BattleScopeParams.
Сказано: «Давай не будем делать костыли а сделаем норм реализацию “повторов”… Компакт и погнали» и «показываем реальный баланс, поедет так поедет» (04.08.2026, сессия 0768278b).
Грабли:
- Резолв реплей-скоупа проверяется только в play mode. Проверено: скоуп
[Menu Replay]поднялся, четыре юнита рисуются из файла, ноль ошибок DI. Компилятор и тесты этого не ловят. - Простаивающий сим всё же нужен.
BattlePresenterBinderдержитCombatSimulationссылкой (для дев-оверлеев) — реплей-скоуп его конструирует, но не тикает (петли нет) и не спавнит (расстановки нет). Состав приходит из файла в реестр черезRegisterRemote. - Не доделано — визуал (глаз Макса): камера кадрирует бой широко (юниты мелкие, сбоку), и нет затемнения фона под меню («приглушим черным», Макс). Это следующий шаг подачи, не каркаса.
Владелец правды: Game/Flow/MenuBattleDirector.cs, Game/Flow/MenuReplayScope.cs,
Game/WorldLifetimeScope.cs, префаб Prefabs/Systems/BattleScopeReplay.prefab,
данные ScriptableObjects/Configs/MenuBattleConfig.asset.