Решили: размерности статов в StatKinds держим тестом по конвенции имени, а не только веткой
switch. Суффикс имени объявлен несущим: …RegenFlat обязан быть PerSecond, …Eff — Multiplier,
…Pct — Percent.
Почему: switch с веткой default не умеет сообщать о пропуске. Новый стат, забытый в таблице,
не даёт ни ошибки, ни предупреждения — он просто становится Flat и показывается игроку в чужой
размерности. Отвергнутая альтернатива — убрать default и перечислить все 33 стата явно: компилятор
тогда ругался бы на неполноту, но десять честно плоских статов пришлось бы держать списком, который
устаревает при каждом добавлении. Тест по имени ловит тот же класс ошибки и не требует переписывать
таблицу.
Грабли: нашлось на живом стате. ResourceRegenFlat (заведён 31.07) в таблицу не попал, а
RegenSystem складывает его со скоростью набора ресурса и умножает на dt. Мана-дрейн гоблина
печатался бы как «-4» вместо «-4/с» — разовое списание вместо скорости, ошибка на порядок. Из кода
это не видно ниоткуда: файл таблицы про стат просто молчит.
Владелец правды: тест StatKindsTests, таблица StatKinds.KindOf.