13 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
- resource bucket: mana, mana regen, stamina, stamina regen
- caster bucket: spell power, 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.
HPStaminaManaDamageAttack SpeedArmorMove Speed
Правила показа:
Damageдолжен быть приведен к понятной игроку форме, без раскрытия всех внутренних коэффициентовStaminaдолжна отображаться как ресурс сильных физических действий, dodge/sprint и weapon-heavy commitments, а не как постоянный налог на базовый бойManaдолжна отображаться как магический ресурс каста и spell-oriented уменийArmorлучше показывать как единое защитное число для MVP, если отдельный breakdown еще не нуженMove Speedполезен, потому что напрямую ощущается руками в top-down action RPG
Почему именно этот набор:
- он достаточно мал, чтобы не перегружать интерфейс
- он покрывает offensive, defensive и utility-изменения
- игрок видит, что числа меняются от атрибутов, оружия и экипировки
- сложные производные параметры при этом остаются скрытыми
Advanced Stats
Эти статы не обязаны быть видны в основном экране, но могут отображаться в detail view, tooltip, расширенной панели или отладочном UI.
HP RegenStamina RegenMana RegenCast SpeedCrit ChanceMagic ResistArmor PenetrationControl ResistStatus PowerBlock PowerProjectile SpeedMastery Bonus
Правила показа:
Mastery Bonusлучше показывать не как абстрактное число, а как контекстный бонус класса, оружия или archetypeCrit ChanceиCast Speedполезны только если соответствующий archetype реально на них опираетсяMagic Resistне нужно тащить в основной экран, если магические угрозы еще не занимают большую долю MVP-бояProjectile SpeedиBlock Powerстоит показывать только когда игрок использует подходящее оружие или билдMagic Resistв advanced view должна читаться как итог изФокуса,Мастерстваи экипировки, а не как прямой показатель одного атрибута
Почему это не 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Фокусв основном проявляется черезManaСтойкостьв основном проявляется черезHPи частичноArmorStaminaв основном читается как отдельный физический ресурс, который поддерживаетсяСтойкостью,Ловкостью, классом и экипировкойМастерствов основном проявляется через контекстный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
- ресурсные пулы и их автопополнение должны обновляться отдельно от offense/defense bucket, если изменение не затрагивает другие группы
Staminaизменения должны отдельно обновлять pool и regen, чтобы heavy-weapon pressure или dodge-расход не вызывали лишний пересчет unrelated боевых bucket
Для MVP нежелательно:
- полный пересчет всех статов на каждом тике
- хранение одной гигантской формулы для всех классов и всех источников сразу
- постоянная сборка UI-строк из runtime-модели без кэша итоговых значений
Recommended MVP Contract
Минимальный контракт для практической реализации:
MVP Main StatsHPStaminaManaDamageAttack SpeedArmorMove Speed
Advanced StatsHP RegenStamina RegenMana 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 и легковесную реализацию.