Решили: семь треш-реликвий (по одной на боевой класс) авторятся Override-статами в 70% от
классовой нормы, а урон подбирается под уже квантованный тиками темп атаки, а не под записанный
в ассете.
Почему: сим работает на 30 Гц, интервал атаки — целое число тиков, поэтому темп 0.55 бой читает
как 0.5, а 0.85 как 0.9. Наивный расчёт «урон × темп из ассета» дал Танку 38.5 DPS на бумаге и
35 в бою (−9%), Дальнику — 92.4 против 99 (+7%). Числа правились после сборки юнита через боевой
каскад (UnitStatPreview считает тем же путём, что фабрика), а не по калькулятору. Альтернатива —
подбирать дробный темп так, чтобы после квантизации вышло ровно нужное, — отвергнута: она прячет
зависимость в неочевидном числе, тогда как правка урона оставляет обе величины читаемыми.
Грабли: три штуки, все стоили времени.
AssetDatabase.SaveAssets()изexecute_codeуносит чужое несохранённое: вместе с лок-таблицами на диск уехала открытая в редакторе сценаMaxSceneForTests.unity. Правильный путь —SaveAssetIfDirtyна конкретные ассеты, для лок-таблиц этоCollection.StringTables.run-tests.ps1 -Filter <класс>без-Mode EditModeпечатает «Some tests failed», даже когда EditMode-часть зелёная: под фильтр не попал ни один PlayMode-тест, а пустой прогон считается провалом. Узкую проверку гонять с-Mode EditMode.- Стенд баланса
internalцеликом (BalanceAssets,SimEnvironment), изexecute_codeон недоступен. Собрать юнита «как в бою» снаружи можно черезGuildmaster.Combat.UnitStatPreview— он публичный и по контракту считает тем же путём.
Владелец правды: ассеты ScriptableObjects/Relics/Trash*.asset и Effects/Trash*.asset,
числа норм — ClassBalanceConfig.asset, карточки замысла — docs/wiki/gdd/relics/trash-*.md.