Решили: размерности статов в StatKinds держим тестом по конвенции имени, а не только веткой switch. Суффикс имени объявлен несущим: …RegenFlat обязан быть PerSecond, …EffMultiplier, …PctPercent.

Почему: switch с веткой default не умеет сообщать о пропуске. Новый стат, забытый в таблице, не даёт ни ошибки, ни предупреждения — он просто становится Flat и показывается игроку в чужой размерности. Отвергнутая альтернатива — убрать default и перечислить все 33 стата явно: компилятор тогда ругался бы на неполноту, но десять честно плоских статов пришлось бы держать списком, который устаревает при каждом добавлении. Тест по имени ловит тот же класс ошибки и не требует переписывать таблицу.

Грабли: нашлось на живом стате. ResourceRegenFlat (заведён 31.07) в таблицу не попал, а RegenSystem складывает его со скоростью набора ресурса и умножает на dt. Мана-дрейн гоблина печатался бы как «-4» вместо «-4/с» — разовое списание вместо скорости, ошибка на порядок. Из кода это не видно ниоткуда: файл таблицы про стат просто молчит.

Владелец правды: тест StatKindsTests, таблица StatKinds.KindOf.