11 KiB
Attribute Stats Visibility MVP
Purpose
Этот документ фиксирует, какие derived stats должны быть видимы игроку в MVP, какие можно показывать только в расширенном виде, а какие должны оставаться внутренними runtime-параметрами.
Отдельная цель документа - зафиксировать легковесный подход к обновлению статов: система не должна постоянно пересчитывать весь набор характеристик, если можно применять только минимальные изменения к уже подготовленным значениям.
Related Docs
docs/gameplay/attribute-system-gdd.mddocs/gameplay/attribute-reference.mddocs/gameplay/stat-catalog-mvp.mddocs/gameplay/combat-resolution-gdd.md
UI Philosophy
Для MVP игрок должен видеть минимум информации, но этот минимум должен быть полезным.
- игрок должен понимать, что прокачка реально меняет боевую эффективность
- экран характеристик не должен превращаться в таблицу внутренних коэффициентов
- основные сложные расчеты должны оставаться под капотом
- вторичные и технические derived stats лучше не показывать, если они не помогают принимать решения в билде
Главный принцип: отображать только те числа, которые игрок может быстро связать со своим ощущением в бою.
Performance Philosophy
Система статов должна быть легковесной и быстрой.
- не пересчитывать весь stat sheet каждый кадр
- не пересчитывать все derived stats при любом мелком изменении
- хранить базовые атрибуты и заранее выделенные группы derived stats отдельно
- применять только минимальные модификаторы к затронутым группам статов
- обновлять итоговые значения по событию, а не по постоянному polling
Рекомендуемый runtime-подход для MVP:
- есть
base attributes - есть
derived stat buckets - есть
modifiersот экипировки, класса, бафов и навыков - есть
dirty flagsили аналогичная пометка затронутых групп - при изменении источника обновляется только нужный bucket, а не весь персонаж целиком
Пример групп пересчета:
- offensive bucket: damage, attack speed, crit, penetration
- caster bucket: spell power, resource, resource regen, cast speed, status power
- defense bucket: HP, HP regen, armor, control resist, stagger resist
- utility bucket: move speed, projectile speed, reload modifiers, class-specific mastery bonuses
Если меняется только Стойкость, нет причины пересчитывать весь ranged или caster stack. Если меняется только бонус на projectile speed, не нужно заново собирать защитные статы.
MVP Main Stats
Это основные числа, которые стоит показывать в базовом MVP UI.
HPResourceDamageAttack SpeedArmorMove Speed
Правила показа:
Damageдолжен быть приведен к понятной игроку форме, без раскрытия всех внутренних коэффициентовResourceдолжен отображаться как основной кастерский или классовый ресурсArmorлучше показывать как единое защитное число для MVP, если отдельный breakdown еще не нуженMove Speedполезен, потому что напрямую ощущается руками в top-down action RPG
Почему именно этот набор:
- он достаточно мал, чтобы не перегружать интерфейс
- он покрывает offensive, defensive и utility-изменения
- игрок видит, что числа меняются от атрибутов, оружия и экипировки
- сложные производные параметры при этом остаются скрытыми
Advanced Stats
Эти статы не обязаны быть видны в основном экране, но могут отображаться в detail view, tooltip, расширенной панели или отладочном UI.
HP RegenResource RegenCast SpeedCrit ChanceMagic ResistArmor PenetrationControl ResistStatus PowerBlock PowerProjectile SpeedMastery Bonus
Правила показа:
Mastery Bonusлучше показывать не как абстрактное число, а как контекстный бонус класса, оружия или archetypeCrit ChanceиCast Speedполезны только если соответствующий archetype реально на них опираетсяMagic Resistне нужно тащить в основной экран, если магические угрозы еще не занимают большую долю MVP-бояProjectile SpeedиBlock Powerстоит показывать только когда игрок использует подходящее оружие или билд
Почему это не main UI:
- эти статы уже полезны для билдостроения, но не нужны каждую секунду
- без контекста они быстро создают лишний визуальный шум
- часть из них зависит от класса или weapon archetype и не обязана быть всегда релевантной
Hidden Runtime Stats
Эти значения должны оставаться внутренними runtime-параметрами и не обязаны отображаться игроку в MVP.
crit qualityweak spot multiplierheadshot precision bonusdebuff duration reductionкак отдельное техническое числоstagger threshold modifiersinterrupt resistance coefficientsanti-slow coefficientsfriendly fire reductionprojectile control coefficientsreload window modifiers- внутренние
mastery conversion rules - soft cap thresholds и post-cap diminishing returns
- служебные class-specific multipliers
- промежуточные коэффициенты скейлинга оружия и навыков
Почему эти статы нужно скрывать:
- они в основном полезны движку, а не игроку
- многие из них не читаются без длинного системного контекста
- их отображение повышает шум, но не улучшает качество решений в MVP
- часть этих параметров еще может меняться при балансировке и не должна закрепляться в UI слишком рано
Attribute To UI Mapping
Чтобы игрок видел связь атрибутов с результатом, но без перегруза, для MVP рекомендуется такой уровень читаемости:
Мощьв основном проявляется черезDamageЛовкостьв основном проявляется черезAttack Speedи частичноMove SpeedФокусв основном проявляется черезResourceСтойкостьв основном проявляется черезHPи частичноArmorМастерствов основном проявляется через контекстныйMastery Bonusв advanced view, а не как центральный main stat
Это дает игроку понятную обратную связь, но не заставляет UI раскрывать весь внутренний combat math.
Runtime Update Model
Для MVP рекомендуется событийная модель обновления статов.
Источники изменений:
- изменение атрибутов персонажа
- смена класса или class state
- экипировка или снятие предмета
- применение бафа или дебафа
- смена оружия
- активация временного skill modifier
Правила обновления:
- каждое изменение должно помечать только затронутые stat buckets
- derived stats пересчитываются только по dirty-группам
- UI обновляется только если изменились отображаемые main или advanced stats
- hidden runtime stats могут обновляться вместе со своим bucket, но не должны триггерить лишние UI refresh
Для MVP нежелательно:
- полный пересчет всех статов на каждом тике
- хранение одной гигантской формулы для всех классов и всех источников сразу
- постоянная сборка UI-строк из runtime-модели без кэша итоговых значений
Recommended MVP Contract
Минимальный контракт для практической реализации:
MVP Main StatsHPResourceDamageAttack SpeedArmorMove Speed
Advanced StatsHP RegenResource RegenCast SpeedCrit ChanceMagic ResistArmor PenetrationControl ResistStatus PowerBlock PowerProjectile SpeedMastery Bonus
Hidden Runtime Stats- все внутренние коэффициенты, soft caps, class hooks и промежуточные combat modifiers
Final Position
Для MVP UI нужно показывать мало, но полезно. Игрок должен видеть, что его персонаж стал сильнее, быстрее или живучее, не погружаясь в технические детали формул.
Основной массив derived stats должен оставаться под капотом. Runtime-система должна обновлять только затронутые группы характеристик и не выполнять полный пересчет без необходимости. Это даст одновременно чистый UI и легковесную реализацию.