Извлечено из замороженного
10-reference/combat-model.
Решили: каскад статов резолвится одним общим кодом — и игрой, и балансным инструментарием.
Почему: до этого каскад был переписан в трёх местах, и балансный аудитор пропускал два слоя —
классовый и слой вида. Последствие было хуже расхождения кода: таблицы, по которым принимались
балансные решения, показывали MaxHP и MoveSpeed, которых в игре не бывает. То есть баланс правился
по числам, не существующим на арене.
Это тот же дефект двух владельцев, но в самой опасной форме: расходились не текст и код, а инструмент измерения и измеряемое. Ошибка при этом не выглядит ошибкой — она выглядит как цифра в отчёте.
Грабли: любой новый потребитель статов (бенч, витрина, тултип, редактор) обязан идти через тот же резолвер, а не «посчитать быстренько на месте». Свой мини-расчёт — это возврат к трём местам, и в следующий раз о нём узнают снова через неверный балансный отчёт.
Владелец правды: Assets/_Project/Scripts/Combat/Stats/ (резолвер каскада и Stats.Explain);
потребители — Balance/ и UI; классовый слой — memory combat-classes-cascade.