feature/attrubute-system-gdd #8
@@ -682,6 +682,7 @@ PlayerSettings:
|
|||||||
webEnableSubmoduleStrippingCompatibility: 0
|
webEnableSubmoduleStrippingCompatibility: 0
|
||||||
scriptingDefineSymbols:
|
scriptingDefineSymbols:
|
||||||
Standalone: FISHNET;FISHNET_V4
|
Standalone: FISHNET;FISHNET_V4
|
||||||
|
WebGL: FISHNET;FISHNET_V4
|
||||||
additionalCompilerArguments: {}
|
additionalCompilerArguments: {}
|
||||||
platformArchitecture: {}
|
platformArchitecture: {}
|
||||||
scriptingBackend:
|
scriptingBackend:
|
||||||
|
|||||||
@@ -0,0 +1,308 @@
|
|||||||
|
# Attribute Reference
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Этот документ фиксирует атрибуты в компактной рабочей форме: что делает каждый атрибут, какие derived stats он двигает, от каких систем зависит и куда отдает влияние.
|
||||||
|
|
||||||
|
## Related Docs
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/gameplay/stat-catalog-mvp.md`
|
||||||
|
- `docs/gameplay/combat-resolution-gdd.md`
|
||||||
|
|
||||||
|
## System Position
|
||||||
|
|
||||||
|
Атрибуты находятся между базовой конфигурацией персонажа и итоговыми боевыми расчетами.
|
||||||
|
|
||||||
|
Поток данных:
|
||||||
|
|
||||||
|
`Class Definition / Level / Equipment / Buffs / Skills` -> `Attributes` -> `Derived Stats / Resource Pools` -> `Combat Resolution`
|
||||||
|
|
||||||
|
## Attribute Sources
|
||||||
|
|
||||||
|
Каждый атрибут может получать значение из следующих источников:
|
||||||
|
|
||||||
|
- базовое стартовое значение персонажа
|
||||||
|
- класс и class affinity
|
||||||
|
- уровень персонажа
|
||||||
|
- экипировка
|
||||||
|
- временные бафы и дебафы
|
||||||
|
- weapon-specific modifiers
|
||||||
|
- skill-specific modifiers
|
||||||
|
|
||||||
|
## Attribute Rules
|
||||||
|
|
||||||
|
- атрибуты не должны напрямую дублировать друг друга
|
||||||
|
- offensive и defensive ценность должны быть разведены
|
||||||
|
- derived stats считаются из атрибутов по stat buckets, а не через один общий полный пересчет
|
||||||
|
- `Мастерство` не заменяет основной классовый атрибут, а усиливает специализацию
|
||||||
|
|
||||||
|
## Attributes
|
||||||
|
|
||||||
|
### Мощь
|
||||||
|
|
||||||
|
Роль:
|
||||||
|
|
||||||
|
- силовое давление
|
||||||
|
- пробивание защиты
|
||||||
|
- тяжелая физическая подача
|
||||||
|
|
||||||
|
Основные derived stats:
|
||||||
|
|
||||||
|
- `Damage` для melee
|
||||||
|
- `Heavy Projectile Scaling`
|
||||||
|
- `Armor Penetration`
|
||||||
|
- `Block Power`
|
||||||
|
|
||||||
|
Вторичные эффекты:
|
||||||
|
|
||||||
|
- усиление силовых weapon skills
|
||||||
|
- усиление shield/guard-oriented действий
|
||||||
|
|
||||||
|
Зависит от:
|
||||||
|
|
||||||
|
- класса
|
||||||
|
- уровня персонажа
|
||||||
|
- оружия
|
||||||
|
- экипировки
|
||||||
|
- временных offensive бафов
|
||||||
|
|
||||||
|
Влияет на системы:
|
||||||
|
|
||||||
|
- базовый урон оружия
|
||||||
|
- skill damage scaling
|
||||||
|
- penetration pass в combat resolution
|
||||||
|
- блок, щит и guard interactions
|
||||||
|
|
||||||
|
Основные классы:
|
||||||
|
|
||||||
|
- Воин: основной
|
||||||
|
- Лучник: вторичный для heavy build
|
||||||
|
- Маг: почти не нужен
|
||||||
|
|
||||||
|
### Ловкость
|
||||||
|
|
||||||
|
Роль:
|
||||||
|
|
||||||
|
- скорость действий
|
||||||
|
- точность и контроль оружия
|
||||||
|
- качество критических окон
|
||||||
|
|
||||||
|
Основные derived stats:
|
||||||
|
|
||||||
|
- `Attack Speed`
|
||||||
|
- `Crit Chance`
|
||||||
|
- `Crit Quality`
|
||||||
|
- `Projectile Speed`
|
||||||
|
- `Move Speed`
|
||||||
|
|
||||||
|
Вторичные эффекты:
|
||||||
|
|
||||||
|
- reload/draw speed
|
||||||
|
- precision handling
|
||||||
|
- ограниченные anti-slow бонусы
|
||||||
|
|
||||||
|
Зависит от:
|
||||||
|
|
||||||
|
- класса
|
||||||
|
- уровня персонажа
|
||||||
|
- оружия
|
||||||
|
- экипировки
|
||||||
|
- mobility и precision бафов
|
||||||
|
|
||||||
|
Влияет на системы:
|
||||||
|
|
||||||
|
- attack cadence
|
||||||
|
- crit resolution
|
||||||
|
- projectile handling
|
||||||
|
- movement utility
|
||||||
|
|
||||||
|
Основные классы:
|
||||||
|
|
||||||
|
- Лучник: основной
|
||||||
|
- Воин: вторичный
|
||||||
|
- Маг: ситуативный для battle-mage
|
||||||
|
|
||||||
|
### Фокус
|
||||||
|
|
||||||
|
Роль:
|
||||||
|
|
||||||
|
- магическая сила
|
||||||
|
- контроль каста
|
||||||
|
- мана и статусное давление
|
||||||
|
|
||||||
|
Основные derived stats:
|
||||||
|
|
||||||
|
- `Mana`
|
||||||
|
- `Mana Regen`
|
||||||
|
- `Spell Power`
|
||||||
|
- `Status Power`
|
||||||
|
- часть `Magic Resist`
|
||||||
|
|
||||||
|
Вторичные эффекты:
|
||||||
|
|
||||||
|
- `Cast Speed`
|
||||||
|
- AOE scaling там, где это задается skill archetype
|
||||||
|
- spell penetration hooks через mastery/skill layer
|
||||||
|
- часть магической защиты через совместный scaling с `Мастерством`
|
||||||
|
|
||||||
|
Зависит от:
|
||||||
|
|
||||||
|
- класса
|
||||||
|
- уровня персонажа
|
||||||
|
- оружия или cast source
|
||||||
|
- экипировки
|
||||||
|
- caster-бафов
|
||||||
|
|
||||||
|
Влияет на системы:
|
||||||
|
|
||||||
|
- mana-based skill resource hooks
|
||||||
|
- spell damage scaling
|
||||||
|
- status application
|
||||||
|
- magic mitigation
|
||||||
|
|
||||||
|
Основные классы:
|
||||||
|
|
||||||
|
- Маг: основной
|
||||||
|
- Воин: нужен гибридам
|
||||||
|
- Лучник: почти не нужен
|
||||||
|
|
||||||
|
### Стойкость
|
||||||
|
|
||||||
|
Роль:
|
||||||
|
|
||||||
|
- выживание
|
||||||
|
- удержание темпа боя
|
||||||
|
- сопротивление срывам действий
|
||||||
|
|
||||||
|
Основные derived stats:
|
||||||
|
|
||||||
|
- `HP`
|
||||||
|
- `HP Regen`
|
||||||
|
- `Stamina`
|
||||||
|
- `Armor`
|
||||||
|
- `Control Resist`
|
||||||
|
- `Stagger Resist`
|
||||||
|
|
||||||
|
Вторичные эффекты:
|
||||||
|
|
||||||
|
- `Debuff Duration Reduction`
|
||||||
|
- small mitigation
|
||||||
|
- interrupt resistance
|
||||||
|
- часть физической выносливости и recovery stability
|
||||||
|
|
||||||
|
Зависит от:
|
||||||
|
|
||||||
|
- класса
|
||||||
|
- уровня персонажа
|
||||||
|
- экипировки
|
||||||
|
- defensive бафов
|
||||||
|
|
||||||
|
Влияет на системы:
|
||||||
|
|
||||||
|
- max health pool
|
||||||
|
- stamina pool support
|
||||||
|
- defense pass
|
||||||
|
- control and stagger resolution
|
||||||
|
- sustain
|
||||||
|
|
||||||
|
Основные классы:
|
||||||
|
|
||||||
|
- Воин: основной или второй основной
|
||||||
|
- Маг: defensive stat
|
||||||
|
- Лучник: defensive stat
|
||||||
|
|
||||||
|
### Мастерство
|
||||||
|
|
||||||
|
Роль:
|
||||||
|
|
||||||
|
- качество билда
|
||||||
|
- class-specific специализация
|
||||||
|
- усиление archetype identity
|
||||||
|
|
||||||
|
Основные derived stats:
|
||||||
|
|
||||||
|
- `Mastery Bonus`
|
||||||
|
- `Weak Spot Bonus`
|
||||||
|
- `Projectile Control`
|
||||||
|
- `Cast Refinement`
|
||||||
|
- часть `Magic Resist`
|
||||||
|
- class-specific scaling hooks
|
||||||
|
|
||||||
|
Вторичные эффекты:
|
||||||
|
|
||||||
|
- cleave quality
|
||||||
|
- bleed/stagger intensity
|
||||||
|
- precision bonuses
|
||||||
|
- spell shaping
|
||||||
|
- resource efficiency hooks по archetype
|
||||||
|
|
||||||
|
Зависит от:
|
||||||
|
|
||||||
|
- класса
|
||||||
|
- weapon archetype
|
||||||
|
- skill archetype
|
||||||
|
- экипировки
|
||||||
|
- mastery-бафов
|
||||||
|
|
||||||
|
Влияет на системы:
|
||||||
|
|
||||||
|
- class mechanic scaling
|
||||||
|
- skill specialization
|
||||||
|
- weak spot logic
|
||||||
|
- status quality
|
||||||
|
- magic mitigation synergy
|
||||||
|
- weapon-specific hooks
|
||||||
|
|
||||||
|
Основные классы:
|
||||||
|
|
||||||
|
- важен для всех
|
||||||
|
- масштабируется по-разному по archetype
|
||||||
|
|
||||||
|
## Dependency Map
|
||||||
|
|
||||||
|
### Resource Links
|
||||||
|
|
||||||
|
- `Стойкость` -> `HP`, `HP Regen`, `Stamina Pool`
|
||||||
|
- `Ловкость` -> `Stamina Regen`, tempo recovery, mobility efficiency
|
||||||
|
- `Фокус` -> `Mana`, `Mana Regen`, spell-facing resource scaling, part of magic mitigation
|
||||||
|
- `Мастерство` -> class-specific resource efficiency hooks
|
||||||
|
|
||||||
|
`Magic Resist` собирается не из одного источника, а из сочетания `Фокуса`, `Мастерства` и экипировки.
|
||||||
|
|
||||||
|
`HP`, `Stamina` и `Mana` являются разными ресурсными пулами. `Фокус` не является главным источником `Stamina`.
|
||||||
|
|
||||||
|
`Stamina` не должна выступать постоянным налогом на базовый loop. В MVP она ограничивает сильные физические действия, dodge/sprint и weapon-heavy commitments.
|
||||||
|
|
||||||
|
### Upstream To Attributes
|
||||||
|
|
||||||
|
- `Class Definition` задает стартовые значения и приоритеты
|
||||||
|
- `Level Progression` добавляет рост или allocation points
|
||||||
|
- `Equipment` дает flat и percent modifiers
|
||||||
|
- `Buff System` дает временные modifiers
|
||||||
|
- `Weapon` и `Skill` могут добавлять context-specific modifiers
|
||||||
|
|
||||||
|
### Attributes To Derived Stats
|
||||||
|
|
||||||
|
- `Мощь` -> physical offense bucket
|
||||||
|
- `Ловкость` -> speed/crit/projectile bucket и stamina recovery hooks
|
||||||
|
- `Фокус` -> caster/mana bucket и part of magic mitigation
|
||||||
|
- `Стойкость` -> defense/sustain bucket и stamina pool support
|
||||||
|
- `Мастерство` -> specialization hooks, quality modifiers и part of magic mitigation
|
||||||
|
|
||||||
|
### Derived Stats To Combat Systems
|
||||||
|
|
||||||
|
- offense stats -> damage build, crit resolution, penetration
|
||||||
|
- caster stats -> mana checks, spell scaling, status apply
|
||||||
|
- defense stats -> mitigation, HP pool, stamina pool, control resistance
|
||||||
|
- mastery hooks -> weak spot, proc quality, archetype-specific modifiers
|
||||||
|
|
||||||
|
## Implementation Notes
|
||||||
|
|
||||||
|
- атрибуты должны быть каноническим intermediate layer между class/equipment data и combat formulas
|
||||||
|
- derived stats нельзя рассчитывать напрямую из UI или отдельных skill-скриптов
|
||||||
|
- каждая система должна брать итоговые derived stats, а не заново интерпретировать атрибуты по своим правилам
|
||||||
|
|
||||||
|
## Final Position
|
||||||
|
|
||||||
|
Атрибуты должны быть компактным и стабильным слоем данных: немного входов, предсказуемые выходы, минимум дублирования. Основные связи должны идти через общие derived stat buckets и общий combat pipeline.
|
||||||
@@ -0,0 +1,212 @@
|
|||||||
|
# Attribute Stats Visibility MVP
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Этот документ фиксирует, какие derived stats должны быть видимы игроку в MVP, какие можно показывать только в расширенном виде, а какие должны оставаться внутренними runtime-параметрами.
|
||||||
|
|
||||||
|
Отдельная цель документа - зафиксировать легковесный подход к обновлению статов: система не должна постоянно пересчитывать весь набор характеристик, если можно применять только минимальные изменения к уже подготовленным значениям.
|
||||||
|
|
||||||
|
## Related Docs
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/gameplay/attribute-reference.md`
|
||||||
|
- `docs/gameplay/stat-catalog-mvp.md`
|
||||||
|
- `docs/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.
|
||||||
|
|
||||||
|
- `HP`
|
||||||
|
- `Stamina`
|
||||||
|
- `Mana`
|
||||||
|
- `Damage`
|
||||||
|
- `Attack Speed`
|
||||||
|
- `Armor`
|
||||||
|
- `Move 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 Regen`
|
||||||
|
- `Stamina Regen`
|
||||||
|
- `Mana Regen`
|
||||||
|
- `Cast Speed`
|
||||||
|
- `Crit Chance`
|
||||||
|
- `Magic Resist`
|
||||||
|
- `Armor Penetration`
|
||||||
|
- `Control Resist`
|
||||||
|
- `Status Power`
|
||||||
|
- `Block Power`
|
||||||
|
- `Projectile Speed`
|
||||||
|
- `Mastery Bonus`
|
||||||
|
|
||||||
|
Правила показа:
|
||||||
|
|
||||||
|
- `Mastery Bonus` лучше показывать не как абстрактное число, а как контекстный бонус класса, оружия или archetype
|
||||||
|
- `Crit 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 quality`
|
||||||
|
- `weak spot multiplier`
|
||||||
|
- `headshot precision bonus`
|
||||||
|
- `debuff duration reduction` как отдельное техническое число
|
||||||
|
- `stagger threshold modifiers`
|
||||||
|
- `interrupt resistance coefficients`
|
||||||
|
- `anti-slow coefficients`
|
||||||
|
- `friendly fire reduction`
|
||||||
|
- `projectile control coefficients`
|
||||||
|
- `reload 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` и частично `Armor`
|
||||||
|
- `Stamina` в основном читается как отдельный физический ресурс, который поддерживается `Стойкостью`, `Ловкостью`, классом и экипировкой
|
||||||
|
- `Мастерство` в основном проявляется через контекстный `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 Stats`
|
||||||
|
- `HP`
|
||||||
|
- `Stamina`
|
||||||
|
- `Mana`
|
||||||
|
- `Damage`
|
||||||
|
- `Attack Speed`
|
||||||
|
- `Armor`
|
||||||
|
- `Move Speed`
|
||||||
|
- `Advanced Stats`
|
||||||
|
- `HP Regen`
|
||||||
|
- `Stamina Regen`
|
||||||
|
- `Mana Regen`
|
||||||
|
- `Cast Speed`
|
||||||
|
- `Crit Chance`
|
||||||
|
- `Magic Resist`
|
||||||
|
- `Armor Penetration`
|
||||||
|
- `Control Resist`
|
||||||
|
- `Status Power`
|
||||||
|
- `Block Power`
|
||||||
|
- `Projectile Speed`
|
||||||
|
- `Mastery Bonus`
|
||||||
|
- `Hidden Runtime Stats`
|
||||||
|
- все внутренние коэффициенты, soft caps, class hooks и промежуточные combat modifiers
|
||||||
|
|
||||||
|
## Final Position
|
||||||
|
|
||||||
|
Для MVP UI нужно показывать мало, но полезно. Игрок должен видеть, что его персонаж стал сильнее, быстрее или живучее, не погружаясь в технические детали формул.
|
||||||
|
|
||||||
|
Основной массив derived stats должен оставаться под капотом. Runtime-система должна обновлять только затронутые группы характеристик и не выполнять полный пересчет без необходимости. Это даст одновременно чистый UI и легковесную реализацию.
|
||||||
@@ -0,0 +1,348 @@
|
|||||||
|
# Attribute System GDD
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Этот документ фиксирует канонический дизайн системы атрибутов для боевого ядра, классов, оружия и навыков. Система должна давать игроку понятные и ощущаемые боевые эффекты от прокачки, но при этом не схлопываться в 1-2 обязательных суперстата.
|
||||||
|
|
||||||
|
## Design Goals
|
||||||
|
|
||||||
|
- каждый атрибут должен конвертироваться в понятный gameplay-эффект, который игрок чувствует в бою
|
||||||
|
- один атрибут должен влиять сразу на несколько связанных боевых показателей, а не быть узкой +1 характеристикой
|
||||||
|
- урон и живучесть не должны быть слиты в один лучший стат
|
||||||
|
- система должна одинаково хорошо поддерживать Воина, Лучника, Мага и будущие классы
|
||||||
|
- рост параметров должен быть контролируемым, чтобы малые бонусы оставались значимыми на протяжении всей игры
|
||||||
|
- у билдов должен быть отдельный слой идентичности, а не только линейный рост raw stats
|
||||||
|
|
||||||
|
## Design Principles
|
||||||
|
|
||||||
|
Система вдохновляется не буквальной схемой `STR/AGI/INT`, а принципом, при котором атрибуты сразу переводятся в боевые последствия. Игрок должен понимать, зачем он вкладывается в стат, без необходимости читать сложные формулы.
|
||||||
|
|
||||||
|
Ключевой принцип баланса: offensive pressure и defensive survivability разведены по разным атрибутам. Если один и тот же стат одновременно дает лучший урон и лучшую выживаемость, то он становится доминирующей инвестицией и ломает разнообразие билдов.
|
||||||
|
|
||||||
|
Третий принцип - bounded scaling. Атрибуты должны усиливать персонажа заметно, но в контролируемых пределах. Система не должна быстро приходить к состоянию, где старые бонусы теряют смысл, а различия между сборками превращаются в чисто математический отрыв.
|
||||||
|
|
||||||
|
## Attribute Summary
|
||||||
|
|
||||||
|
| Атрибут | Роль | Основные эффекты | Кому важен |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Мощь | давление и силовой урон | melee damage, heavy projectile scaling, armor penetration, shield/block power | Воин, heavy Лучник |
|
||||||
|
| Ловкость | скорость и контроль оружия | attack speed, projectile handling, crit quality, move speed in soft cap | Лучник, mobile Воин |
|
||||||
|
| Фокус | магическая сила и контроль маны | spell power, mana pool, mana regen, status power, part of magic resistance | Маг, hybrid классы |
|
||||||
|
| Стойкость | живучесть и удержание темпа боя | HP, HP regen, debuff resistance, stagger resistance, small general mitigation | Воин, defensive сборки |
|
||||||
|
| Мастерство | качество билда и class-specific scaling | weapon/skill specialization, class mechanic efficiency, application quality | все классы |
|
||||||
|
|
||||||
|
## Why Five Attributes
|
||||||
|
|
||||||
|
Пять атрибутов закрывают базовые боевые потребности без перегруза системы.
|
||||||
|
|
||||||
|
- `Мощь` отвечает за силовое давление и пробивание защиты.
|
||||||
|
- `Ловкость` отвечает за скорость, контроль и отзывчивость оружия.
|
||||||
|
- `Фокус` отвечает за магию, ману и статусное давление.
|
||||||
|
- `Стойкость` отвечает за выживание и стабильность в бою.
|
||||||
|
- `Мастерство` отвечает за качество применения архетипа, оружия и умений.
|
||||||
|
|
||||||
|
Первые четыре атрибута закрывают фундаментальные боевые оси. Пятый нужен для того, чтобы билды различались не только величиной урона, скорости или здоровья, но и стилем применения инструментов персонажа.
|
||||||
|
|
||||||
|
## Attribute Details
|
||||||
|
|
||||||
|
## Resource Model
|
||||||
|
|
||||||
|
В MVP используются три отдельные ресурсные оси:
|
||||||
|
|
||||||
|
- `HP` - запас жизни, в основном зависит от `Стойкости`
|
||||||
|
- `Stamina` - ресурс сильных физических, мобильных и weapon-heavy действий
|
||||||
|
- `Mana` - ресурс магии, каста и spell-oriented действий
|
||||||
|
|
||||||
|
У каждого ресурса есть свой стат автопополнения:
|
||||||
|
|
||||||
|
- `HP Regen`
|
||||||
|
- `Stamina Regen`
|
||||||
|
- `Mana Regen`
|
||||||
|
|
||||||
|
Правила модели:
|
||||||
|
|
||||||
|
- `Фокус` усиливает `Mana` и `Mana Regen`, а не любой абстрактный ресурс
|
||||||
|
- `Stamina` не является магическим ресурсом и не должна жить внутри `Фокуса`
|
||||||
|
- `Стойкость` отвечает за `HP` и поддерживает физическую выносливость через `Stamina Pool`
|
||||||
|
- `Ловкость` поддерживает темп физических действий через `Stamina Regen` и связанные recovery-модификаторы
|
||||||
|
- базовый бой не должен часто упираться в пустую `Stamina`; этот ресурс ограничивает прежде всего сильные действия, а не core-rotation персонажа
|
||||||
|
- `Stamina Regen` должен быть быстрым, чтобы не ломать темп open world ARPG
|
||||||
|
- если `Stamina` уходит в ноль, система должна скорее ограничивать burst-опции через short exhaustion pressure, чем надолго выключать игроку базовые действия
|
||||||
|
|
||||||
|
Рекомендуемая зона применения `Stamina` в MVP:
|
||||||
|
|
||||||
|
- dodge
|
||||||
|
- sprint
|
||||||
|
- block/guard upkeep
|
||||||
|
- heavy melee attacks
|
||||||
|
- charged ranged shots
|
||||||
|
- weapon-heavy abilities и силовые mobility skills
|
||||||
|
|
||||||
|
Что не должно становиться основным налогом `Stamina` в MVP:
|
||||||
|
|
||||||
|
- базовая легкая атака
|
||||||
|
- простая core-rotation без heavy-commitment действий
|
||||||
|
- обычное перемещение вне sprint state
|
||||||
|
|
||||||
|
### Мощь
|
||||||
|
|
||||||
|
`Мощь` - это атрибут силы удара и продавливания защиты.
|
||||||
|
|
||||||
|
Что усиливает:
|
||||||
|
|
||||||
|
- урон ближнего боя
|
||||||
|
- часть урона тяжелых projectile-атак и тяжелых weapon skills
|
||||||
|
- пробивание брони или физического сопротивления
|
||||||
|
- силу щитов, блоков и силовых defensive interactions у воина
|
||||||
|
|
||||||
|
Почему атрибут нужен:
|
||||||
|
|
||||||
|
- каждая инвестиция должна делать силовой билд ощутимо опаснее
|
||||||
|
- Воин должен чувствовать, что стат усиливает давление, а не просто увеличивает запас здоровья
|
||||||
|
- Лучник с тяжелым арбалетом или другим медленным силовым ranged archetype может частично использовать этот стат
|
||||||
|
|
||||||
|
Классовый приоритет:
|
||||||
|
|
||||||
|
- Воин: основной
|
||||||
|
- Лучник: вторичный для heavy build
|
||||||
|
- Маг: почти не нужен
|
||||||
|
|
||||||
|
Дизайн-ограничение:
|
||||||
|
|
||||||
|
`Мощь` не должна быть источником большого запаса HP. Иначе силовые билды автоматически получают и лучший урон, и лучшую танковость за одну и ту же инвестицию.
|
||||||
|
|
||||||
|
### Ловкость
|
||||||
|
|
||||||
|
`Ловкость` - это атрибут скорости, точности и контроля оружия или снаряда.
|
||||||
|
|
||||||
|
Что усиливает:
|
||||||
|
|
||||||
|
- скорость атаки
|
||||||
|
- скорость натяжения, выпуска или перезарядки projectile-оружия
|
||||||
|
- шанс крита, точность крита или общее качество критических попаданий
|
||||||
|
- скорость перемещения в мягком капе
|
||||||
|
- скорость projectile и контроль полета
|
||||||
|
- очень малый объем уклонения, анти-замедления или recovery от slow-эффектов
|
||||||
|
|
||||||
|
Почему атрибут нужен:
|
||||||
|
|
||||||
|
- это основной stat fantasy для лучника и мобильных билдов
|
||||||
|
- в top-down 3D скорость и отзывчивость особенно хорошо ощущаются руками
|
||||||
|
- стат должен давать чувство живости, а не быть абстрактной прибавкой к защите
|
||||||
|
|
||||||
|
Классовый приоритет:
|
||||||
|
|
||||||
|
- Лучник: основной
|
||||||
|
- Воин: вторичный
|
||||||
|
- Маг: ситуативный для battle-mage и мобильных гибридов
|
||||||
|
|
||||||
|
Дизайн-ограничение:
|
||||||
|
|
||||||
|
`Ловкость` не должна повторять классическую схему, где один стат одновременно дает много скорости, много защиты и высокую эффективность без trade-off. Defensive бонусы здесь должны оставаться малыми.
|
||||||
|
|
||||||
|
### Фокус
|
||||||
|
|
||||||
|
`Фокус` - это атрибут магической силы, контроля заклинания и маны.
|
||||||
|
|
||||||
|
Что усиливает:
|
||||||
|
|
||||||
|
- силу заклинаний
|
||||||
|
- максимальную ману
|
||||||
|
- реген маны
|
||||||
|
- силу или размер AOE-навыков, если это уместно для конкретного skill archetype
|
||||||
|
- шанс наложить статус, силу статуса или надежность применения status effects
|
||||||
|
- часть сопротивления магии вместе с `Мастерством`
|
||||||
|
|
||||||
|
Почему не `Интеллект`:
|
||||||
|
|
||||||
|
- этот стат не про ум персонажа, а про контроль магии и концентрацию
|
||||||
|
- название лучше подходит для action RPG без упора на диалоговую ролевую фантазию
|
||||||
|
- оно одинаково естественно звучит для мага, паладина, шамана, некроманта и других гибридов
|
||||||
|
|
||||||
|
Классовый приоритет:
|
||||||
|
|
||||||
|
- Маг: основной
|
||||||
|
- Воин: нужен только гибридным классам
|
||||||
|
- Лучник: почти не нужен
|
||||||
|
|
||||||
|
Дизайн-ограничение:
|
||||||
|
|
||||||
|
`Фокус` не должен превращаться в универсальный магический суперстат, который одновременно дает лучший урон, бесконечный ресурс и самодостаточную защиту от магии. Магическая защита должна собираться через сочетание `Фокуса`, `Мастерства` и экипировки, а не через один единственный stat.
|
||||||
|
|
||||||
|
### Стойкость
|
||||||
|
|
||||||
|
`Стойкость` - это атрибут живучести и удержания темпа боя.
|
||||||
|
|
||||||
|
Что усиливает:
|
||||||
|
|
||||||
|
- HP
|
||||||
|
- реген HP
|
||||||
|
- сопротивление контролю
|
||||||
|
- снижение длительности дебаффов
|
||||||
|
- устойчивость к stagger, interrupt и срывам действия
|
||||||
|
- немного брони или общего damage reduction
|
||||||
|
|
||||||
|
Почему атрибут критичен:
|
||||||
|
|
||||||
|
- живучесть должна иметь собственную цену в билде
|
||||||
|
- вынесение HP из `Мощи` убирает очевидный перекос в пользу силовых персонажей
|
||||||
|
- defensive investment должна быть осознанным выбором, а не бесплатным бонусом к offensive stat
|
||||||
|
|
||||||
|
Классовый приоритет:
|
||||||
|
|
||||||
|
- Воин: основной или второй основной
|
||||||
|
- Маг: нужен для выживания
|
||||||
|
- Лучник: нужен как defensive stat
|
||||||
|
|
||||||
|
Дизайн-ограничение:
|
||||||
|
|
||||||
|
`Стойкость` должна усиливать survivability и стабильность, но не делать персонажа пассивно неуязвимым. Главная цель - дать возможность держать бой, а не отключить угрозу от вражеских действий.
|
||||||
|
|
||||||
|
### Мастерство
|
||||||
|
|
||||||
|
`Мастерство` - это ключевой уникальный атрибут системы. Он не заменяет базовые offensive или defensive характеристики, а усиливает качество применения class-specific инструментов.
|
||||||
|
|
||||||
|
Что усиливает:
|
||||||
|
|
||||||
|
- эффективность классовой механики
|
||||||
|
- качество применения оружия или навыка
|
||||||
|
- точность и надежность archetype-specific взаимодействий
|
||||||
|
- специализацию билда без превращения ее в еще один raw damage stat
|
||||||
|
|
||||||
|
Примеры по классам:
|
||||||
|
|
||||||
|
- Воин: радиус взмаха, cleave, шанс вызвать bleed, сила stagger
|
||||||
|
- Маг: скорость каста, сила статусов, bonus radius, spell penetration, снижение friendly fire там, где это поддерживается дизайном
|
||||||
|
- Лучник: pierce, weak spot damage, скорость reload, projectile control, бонус к precision/headshot логике
|
||||||
|
|
||||||
|
Почему атрибут нужен:
|
||||||
|
|
||||||
|
- четыре базовых стата закрывают фундамент, но не дают достаточно места для выразительной специализации
|
||||||
|
- `Мастерство` позволяет собирать не просто более сильного персонажа, а более характерный билд
|
||||||
|
- через этот атрибут проще добавлять будущие классы, не ломая базовый каркас атрибутов
|
||||||
|
|
||||||
|
Классовый приоритет:
|
||||||
|
|
||||||
|
- важен для всех классов
|
||||||
|
- масштабируется по-разному в зависимости от archetype
|
||||||
|
- является главным stat identity для билда
|
||||||
|
|
||||||
|
Дизайн-ограничение:
|
||||||
|
|
||||||
|
`Мастерство` не должно полностью заменять основной стат класса. Оно усиливает стиль и специализацию, но не должно превращаться в обязательный лучший выбор для любого персонажа вне контекста конкретной сборки.
|
||||||
|
|
||||||
|
## Class Priorities
|
||||||
|
|
||||||
|
### Воин
|
||||||
|
|
||||||
|
- основные атрибуты: `Мощь`, `Стойкость`
|
||||||
|
- важный специализационный атрибут: `Мастерство`
|
||||||
|
- вторичные варианты: `Ловкость` для более живого melee-профиля, `Фокус` только для гибридов
|
||||||
|
|
||||||
|
Воин должен ощущаться как класс силового давления, который вкладывается в урон и выживание по разным осям. Это поддерживает выбор между bruiser, tankier frontline и weapon-specialist сборками.
|
||||||
|
|
||||||
|
### Лучник
|
||||||
|
|
||||||
|
- основные атрибуты: `Ловкость`, `Мастерство`
|
||||||
|
- вторичный атрибут: `Мощь` для heavy ranged build
|
||||||
|
- defensive fallback: `Стойкость`
|
||||||
|
|
||||||
|
Лучник должен чувствоваться быстрым, точным и техническим. Его билды должны различаться между мобильным pressure-профилем, тяжелым projectile-профилем и precision-специализацией.
|
||||||
|
|
||||||
|
### Маг
|
||||||
|
|
||||||
|
- основные атрибуты: `Фокус`, `Мастерство`
|
||||||
|
- defensive fallback: `Стойкость`
|
||||||
|
- ситуативный атрибут: `Ловкость` для battle-mage или кастера с мобильным ритмом
|
||||||
|
|
||||||
|
Маг должен строиться вокруг контроля ресурса, силы заклинаний и качества применения эффектов, а не вокруг прямого аналога `интеллект = все полезное для мага`.
|
||||||
|
|
||||||
|
## Derived Combat Directions
|
||||||
|
|
||||||
|
Атрибуты должны маппиться в производные боевые параметры, которые используются combat core, оружием и навыками. Канонический набор направлений на данном этапе такой:
|
||||||
|
|
||||||
|
- `Мощь`: melee damage, heavy projectile scaling, armor penetration, block/shield power
|
||||||
|
- `Ловкость`: attack speed, reload/draw speed, crit quality, projectile speed, limited move speed bonus
|
||||||
|
- `Фокус`: spell power, mana pool, mana regen, status application, part of magic resistance
|
||||||
|
- `Стойкость`: max HP, HP regen, control resistance, debuff duration reduction, stagger resistance, small mitigation
|
||||||
|
- `Мастерство`: class mechanic efficiency, weapon/skill specialization, archetype-specific bonuses
|
||||||
|
|
||||||
|
Этот документ фиксирует направления скейлинга, но не фиксирует окончательные формулы. Конкретные коэффициенты, soft caps и конверсии должны быть утверждены вместе с combat core и progression formulas.
|
||||||
|
|
||||||
|
## Balance Rules
|
||||||
|
|
||||||
|
- offensive и defensive ценность должны требовать разных инвестиций
|
||||||
|
- один атрибут не должен одновременно давать лучшую survivability и лучший damage throughput
|
||||||
|
- secondary defensive бонусы на `Ловкости` и `Фокусе` должны быть малыми и служить flavor/utility, а не заменой `Стойкости`
|
||||||
|
- `Мастерство` должно усиливать специализацию, а не быть универсальным глобальным damage multiplier для всех
|
||||||
|
- классовая эффективность должна строиться на сочетании core stat + optional specialization, а не на одном обязательном стате
|
||||||
|
- новый класс должен встраиваться в те же пять атрибутов без создания отдельного шестого stat-пула
|
||||||
|
- `Stamina` должна ограничивать сильные и commitment-heavy действия, но не должна постоянно отключать базовый loop немагических билдов
|
||||||
|
- `Magic Resist` не должна полностью сидеть в `Фокусе`; итоговая магическая защита должна собираться через `Фокус`, `Мастерство` и экипировку
|
||||||
|
|
||||||
|
## Scaling Philosophy
|
||||||
|
|
||||||
|
Система должна следовать bounded scaling-подходу.
|
||||||
|
|
||||||
|
- небольшие бонусы должны оставаться значимыми на протяжении игры
|
||||||
|
- soft caps предпочтительнее жестких капов там, где речь идет о скорости, мобильности и spam-sensitive показателях
|
||||||
|
- прирост эффективности должен быть читаемым, но не взрывным
|
||||||
|
- ранние инвестиции должны ощущаться особенно хорошо, а поздние не должны полностью ломать PvE-баланс
|
||||||
|
|
||||||
|
Это особенно важно для top-down action RPG, где игрок чувствует руками скорость атаки, скорость движения, время каста и контроль персонажа. Статы должны менять поведение персонажа не только на листе характеристик, но и в непосредственном управлении.
|
||||||
|
|
||||||
|
## Example Build Directions
|
||||||
|
|
||||||
|
### Warrior Bruiser
|
||||||
|
|
||||||
|
Опирается на `Мощь` + `Стойкость`, а `Мастерство` добирает cleave, bleed или stagger-oriented механику.
|
||||||
|
|
||||||
|
### Heavy Crossbow Archer
|
||||||
|
|
||||||
|
Опирается на `Ловкость` для handling и cadence, но заметно использует `Мощь` для тяжелого projectile-профиля. `Мастерство` усиливает pierce и precision windows.
|
||||||
|
|
||||||
|
### Control Mage
|
||||||
|
|
||||||
|
Опирается на `Фокус` как главный источник силы заклинаний и статусов, а `Мастерство` усиливает надежность контроля, radius tuning и penetration.
|
||||||
|
|
||||||
|
### Battle Mage
|
||||||
|
|
||||||
|
Опирается на `Фокус` как основу, но может частично забирать `Ловкость` ради ритма боя и `Стойкость` ради безопасного ведения ближне-средней дистанции.
|
||||||
|
|
||||||
|
### Heavy Weapon Fighter
|
||||||
|
|
||||||
|
Опирается на `Мощь` для давления и на `Стойкость` для `Stamina Pool`, а `Ловкость` поддерживает быстрое восстановление `Stamina` между тяжелыми commit-действиями. Такой билд должен ощущаться как серия мощных окон, а не как постоянная игра в пустую полоску выносливости.
|
||||||
|
|
||||||
|
## Integration Notes
|
||||||
|
|
||||||
|
Этот документ является каноническим design intent для следующих систем:
|
||||||
|
|
||||||
|
- базовые характеристики и derived stats в combat core
|
||||||
|
- стартовые и приоритетные статы классов
|
||||||
|
- scaling оружия и weapon archetypes
|
||||||
|
- skill scaling и class-specific specialization hooks
|
||||||
|
|
||||||
|
Связанный документ по слоям видимости статов и легковесному runtime-обновлению:
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-stats-visibility-mvp.md`
|
||||||
|
|
||||||
|
Связанные канонические документы по структуре атрибутов, каталогу статов и боевому pipeline:
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-reference.md`
|
||||||
|
- `docs/gameplay/stat-catalog-mvp.md`
|
||||||
|
- `docs/gameplay/combat-resolution-gdd.md`
|
||||||
|
|
||||||
|
Связанные документы и задачи:
|
||||||
|
|
||||||
|
- `docs/tasks/items/TASK-0007.md`
|
||||||
|
- `docs/tasks/items/TASK-0009.md`
|
||||||
|
- `docs/tasks/items/TASK-0010.md`
|
||||||
|
- `docs/tasks/items/TASK-0011.md`
|
||||||
|
|
||||||
|
Если в будущем runtime-формулы потребуют уточнений, этот GDD должен оставаться источником смысла и направлений, а не заменяться низкоуровневыми числовыми таблицами.
|
||||||
|
|
||||||
|
## Final Position
|
||||||
|
|
||||||
|
Система атрибутов строится вокруг пяти осей: давление, скорость, магия, живучесть и мастерство применения. Ее уникальность не в переименовании классических статов, а в четком разделении боевых ролей и наличии `Мастерства` как отдельного инструмента билдовой идентичности.
|
||||||
|
|
||||||
|
Это позволяет сохранить читаемость, избежать доминирующего суперстата и подготовить фундамент для расширения классовой системы без переработки базовой модели персонажа.
|
||||||
@@ -0,0 +1,344 @@
|
|||||||
|
# Combat Resolution GDD
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Этот документ фиксирует единый порядок расчета боевого действия, правила псевдорандома и место `crit`, `weak spot`, `status` и защитных расчетов в общем pipeline.
|
||||||
|
|
||||||
|
## Related Docs
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/gameplay/attribute-reference.md`
|
||||||
|
- `docs/gameplay/stat-catalog-mvp.md`
|
||||||
|
- `docs/gameplay/attribute-stats-visibility-mvp.md`
|
||||||
|
|
||||||
|
## Design Goals
|
||||||
|
|
||||||
|
- один общий combat pipeline для игрока, врага, оружия и навыков
|
||||||
|
- chance-based события должны ощущаться честно и стабильно
|
||||||
|
- в action RPG физический контакт не должен часто превращаться в нелогичный miss
|
||||||
|
- `crit`, `weak spot`, `penetration`, `status` и `stagger` должны быть частью одной цепочки, а не отдельными системами
|
||||||
|
- сервер должен быть источником истины для всех roll-based результатов
|
||||||
|
|
||||||
|
## Core Position
|
||||||
|
|
||||||
|
Для MVP pseudo-random distribution применяется к chance-based исходам, но не заменяет фактическую физику попадания.
|
||||||
|
|
||||||
|
То есть:
|
||||||
|
|
||||||
|
- hitbox, projectile impact и valid AoE contact сначала определяют, был ли контакт
|
||||||
|
- только после этого идут roll-based проверки
|
||||||
|
- псевдорандом используется для уменьшения длинных серий неудач и успехов
|
||||||
|
|
||||||
|
## Combat Pipeline
|
||||||
|
|
||||||
|
### 1. Action Start
|
||||||
|
|
||||||
|
Система получает попытку действия:
|
||||||
|
|
||||||
|
- melee attack
|
||||||
|
- projectile attack
|
||||||
|
- cast skill
|
||||||
|
- area effect
|
||||||
|
- block/guard reaction
|
||||||
|
|
||||||
|
Перед выполнением действия проверяется resource gate.
|
||||||
|
|
||||||
|
Проверяется:
|
||||||
|
|
||||||
|
- использует ли действие `Mana`, `Stamina` или не использует отдельный ресурс
|
||||||
|
- хватает ли нужного ресурса для старта
|
||||||
|
- есть ли специальные cost modifiers от класса, оружия, навыка или `Мастерства`
|
||||||
|
|
||||||
|
Правила resource gate для MVP:
|
||||||
|
|
||||||
|
- `Stamina` используется для dodge, sprint, block/guard upkeep, heavy attacks, charged attacks и weapon-heavy abilities
|
||||||
|
- базовая легкая атака и простой core loop не должны регулярно блокироваться отсутствием `Stamina`
|
||||||
|
- если `Stamina` исчерпана, игрок в первую очередь теряет доступ к сильным commit-действиям или получает short exhaustion pressure, а не полностью выключается из боя
|
||||||
|
- `Stamina Regen` должен быть быстрым, чтобы темп open world ARPG не разваливался даже в PvP и затяжных PvE-сценариях
|
||||||
|
|
||||||
|
На этом этапе определяются:
|
||||||
|
|
||||||
|
- источник действия
|
||||||
|
- тип действия
|
||||||
|
- weapon archetype
|
||||||
|
- skill archetype
|
||||||
|
- target rules
|
||||||
|
- resource type
|
||||||
|
- resource cost
|
||||||
|
|
||||||
|
### 2. Contact Resolution
|
||||||
|
|
||||||
|
Система определяет, был ли валидный контакт.
|
||||||
|
|
||||||
|
Примеры:
|
||||||
|
|
||||||
|
- melee через hitbox/overlap
|
||||||
|
- ranged через projectile collision
|
||||||
|
- spell через trace, overlap или target validation
|
||||||
|
- AoE через положение цели внутри области
|
||||||
|
|
||||||
|
Результат этапа:
|
||||||
|
|
||||||
|
- `No Contact` -> дальнейшие offensive roll-этапы не выполняются
|
||||||
|
- `Valid Contact` -> переход к следующему шагу
|
||||||
|
|
||||||
|
### 3. Server Validation
|
||||||
|
|
||||||
|
Сервер проверяет:
|
||||||
|
|
||||||
|
- допустимость действия
|
||||||
|
- валидность target
|
||||||
|
- допустимость дистанции, угла, времени и состояния
|
||||||
|
- отсутствие фальшивого попадания со стороны клиента
|
||||||
|
|
||||||
|
### 4. Hit Quality Resolution
|
||||||
|
|
||||||
|
Для MVP рекомендуется модель без обязательного stat-based miss после уже произошедшего контакта.
|
||||||
|
|
||||||
|
То есть:
|
||||||
|
|
||||||
|
- если действие физически попало и прошло валидацию сервера, это считается попаданием
|
||||||
|
- `Accuracy` и `Evasion` не являются обязательным MVP-слоем
|
||||||
|
|
||||||
|
Если позже потребуется accuracy-модель:
|
||||||
|
|
||||||
|
- она должна стоять здесь
|
||||||
|
- она должна использовать отдельный PRD accumulator
|
||||||
|
- ее нельзя смешивать с crit или status rolls
|
||||||
|
|
||||||
|
### 5. Critical Resolution
|
||||||
|
|
||||||
|
`Crit` считается как комбинация трех разных сущностей.
|
||||||
|
|
||||||
|
#### Crit Chance
|
||||||
|
|
||||||
|
Отвечает на вопрос: сработал ли крит.
|
||||||
|
|
||||||
|
Источники:
|
||||||
|
|
||||||
|
- `Ловкость`
|
||||||
|
- weapon modifiers
|
||||||
|
- buffs/debuffs
|
||||||
|
- часть `Мастерства` у precision-архетипов
|
||||||
|
|
||||||
|
Правило:
|
||||||
|
|
||||||
|
- `Crit Chance` является chance-based stat
|
||||||
|
- для него используется PRD
|
||||||
|
|
||||||
|
#### Crit Quality
|
||||||
|
|
||||||
|
Отвечает на вопрос: насколько сильным будет крит.
|
||||||
|
|
||||||
|
Источники:
|
||||||
|
|
||||||
|
- `Ловкость`
|
||||||
|
- `Мастерство`
|
||||||
|
- weapon archetype
|
||||||
|
- skill modifiers
|
||||||
|
|
||||||
|
Правило:
|
||||||
|
|
||||||
|
- `Crit Quality` не определяет факт крита
|
||||||
|
- `Crit Quality` определяет величину бонуса при уже успешном crit roll
|
||||||
|
|
||||||
|
#### Weak Spot Logic
|
||||||
|
|
||||||
|
Отвечает на вопрос: было ли точное позиционное или skill-based попадание в уязвимую зону.
|
||||||
|
|
||||||
|
Источники:
|
||||||
|
|
||||||
|
- hit zone
|
||||||
|
- angle or position check
|
||||||
|
- weapon type
|
||||||
|
- skill archetype
|
||||||
|
- `Мастерство`
|
||||||
|
|
||||||
|
Правило:
|
||||||
|
|
||||||
|
- `Weak Spot` не заменяет `Crit Chance`
|
||||||
|
- `Weak Spot` является skill-based усилителем
|
||||||
|
- при наличии weak spot попадание может усиливать crit или давать отдельный bonus layer
|
||||||
|
|
||||||
|
## Recommended Crit Model
|
||||||
|
|
||||||
|
Каноническая схема для MVP:
|
||||||
|
|
||||||
|
1. определить факт контакта
|
||||||
|
2. выполнить `Crit Chance` через PRD
|
||||||
|
3. при успехе применить `Crit Quality`
|
||||||
|
4. если сработал `Weak Spot`, усилить итог крита или применить отдельный precision bonus
|
||||||
|
|
||||||
|
Это дает:
|
||||||
|
|
||||||
|
- случайность для крита
|
||||||
|
- контролируемую силу крита
|
||||||
|
- отдельную награду за точное исполнение
|
||||||
|
|
||||||
|
## Base Damage Build
|
||||||
|
|
||||||
|
После того как подтверждено попадание и разрешены crit/precision-модификаторы, строится базовый урон.
|
||||||
|
|
||||||
|
В расчет входят:
|
||||||
|
|
||||||
|
- weapon base values
|
||||||
|
- skill coefficients
|
||||||
|
- уровень оружия
|
||||||
|
- relevant derived offense stats
|
||||||
|
- `Мощь`, `Фокус` и другие атрибутные конверсии через derived stats
|
||||||
|
- `Мастерство` как specialization modifier
|
||||||
|
|
||||||
|
Правило:
|
||||||
|
|
||||||
|
- оружие и навыки не должны считать урон по собственным отдельным формулам в обход общего offense build
|
||||||
|
|
||||||
|
## Penetration And Defense Pass
|
||||||
|
|
||||||
|
После построения offense value применяется защитный проход.
|
||||||
|
|
||||||
|
Участвуют:
|
||||||
|
|
||||||
|
- `Armor`
|
||||||
|
- `Magic Resist`
|
||||||
|
- `Armor Penetration`
|
||||||
|
- `Spell Penetration`, если введен для archetype
|
||||||
|
- small mitigation и другие defense modifiers
|
||||||
|
|
||||||
|
Правило источников магической защиты:
|
||||||
|
|
||||||
|
- `Magic Resist` формируется из сочетания `Фокуса`, `Мастерства` и экипировки
|
||||||
|
- ни `Фокус`, ни `Мастерство` по отдельности не должны давать самодостаточную магическую защиту
|
||||||
|
|
||||||
|
Порядок на MVP:
|
||||||
|
|
||||||
|
1. определить тип урона
|
||||||
|
2. выбрать релевантную защиту
|
||||||
|
3. применить penetration
|
||||||
|
4. применить mitigation
|
||||||
|
|
||||||
|
## Block And Guard Pass
|
||||||
|
|
||||||
|
Если у цели есть активный или пассивный defensive response, он обрабатывается после основного defense pass или как его часть, но в одном каноническом месте.
|
||||||
|
|
||||||
|
Участвуют:
|
||||||
|
|
||||||
|
- `Block Power`
|
||||||
|
- shield modifiers
|
||||||
|
- guard state
|
||||||
|
- directional defense rules
|
||||||
|
|
||||||
|
## Status Resolution
|
||||||
|
|
||||||
|
После разрешения основного урона система считает статусные эффекты.
|
||||||
|
|
||||||
|
Участвуют:
|
||||||
|
|
||||||
|
- `Status Power`
|
||||||
|
- skill status modifiers
|
||||||
|
- target resist hooks
|
||||||
|
- mastery hooks
|
||||||
|
|
||||||
|
Если эффект chance-based:
|
||||||
|
|
||||||
|
- применяется отдельный PRD accumulator
|
||||||
|
|
||||||
|
Примеры:
|
||||||
|
|
||||||
|
- bleed
|
||||||
|
- burn
|
||||||
|
- poison
|
||||||
|
- shock
|
||||||
|
- slow proc
|
||||||
|
|
||||||
|
## Stagger And Control Resolution
|
||||||
|
|
||||||
|
После урона и статусов обрабатываются control-related последствия.
|
||||||
|
|
||||||
|
Участвуют:
|
||||||
|
|
||||||
|
- stagger power
|
||||||
|
- `Stagger Resist`
|
||||||
|
- `Control Resist`
|
||||||
|
- `Debuff Duration Reduction`
|
||||||
|
- interrupt resistance
|
||||||
|
|
||||||
|
Правило:
|
||||||
|
|
||||||
|
- длительность и сила контроля не должны жить в отдельной автономной формуле вне общего pipeline
|
||||||
|
|
||||||
|
## Pseudo-Random Distribution Rules
|
||||||
|
|
||||||
|
### Scope
|
||||||
|
|
||||||
|
PRD используется только для chance-based событий.
|
||||||
|
|
||||||
|
Рекомендуемые MVP-области:
|
||||||
|
|
||||||
|
- `Crit Chance`
|
||||||
|
- chance-based `Status Apply`
|
||||||
|
- chance-based `Proc Effects`
|
||||||
|
|
||||||
|
Не использовать для MVP:
|
||||||
|
|
||||||
|
- фактического projectile contact
|
||||||
|
- melee hitbox contact
|
||||||
|
- AoE presence check
|
||||||
|
|
||||||
|
### PRD State
|
||||||
|
|
||||||
|
Для каждого roll type хранится отдельное состояние.
|
||||||
|
|
||||||
|
Минимальный состав:
|
||||||
|
|
||||||
|
- `roll type`
|
||||||
|
- `base chance`
|
||||||
|
- `failure streak`
|
||||||
|
- `current adjusted chance`
|
||||||
|
|
||||||
|
Разделять состояния по типам:
|
||||||
|
|
||||||
|
- `Crit PRD`
|
||||||
|
- `Status PRD`
|
||||||
|
- `Proc PRD`
|
||||||
|
- `Accuracy PRD`, только если accuracy-layer появится позже
|
||||||
|
|
||||||
|
### PRD Behavior
|
||||||
|
|
||||||
|
- после неуспеха шанс немного растет
|
||||||
|
- после успеха streak сбрасывается
|
||||||
|
- итоговый шанс не должен слишком быстро гарантировать успех
|
||||||
|
- PRD работает на сервере
|
||||||
|
- клиент может показывать только результат, но не хранить authoritative PRD state
|
||||||
|
|
||||||
|
## System Links
|
||||||
|
|
||||||
|
### Attributes To Combat
|
||||||
|
|
||||||
|
- `Мощь` -> physical damage, heavy impact, penetration, block power
|
||||||
|
- `Ловкость` -> cadence, crit chance, crit quality, projectile handling, stamina recovery
|
||||||
|
- `Фокус` -> spell power, mana, status power, part of magic mitigation
|
||||||
|
- `Стойкость` -> HP, stamina pool, mitigation, control resistance, stagger resistance
|
||||||
|
- `Мастерство` -> weak spot bonuses, proc quality, archetype specialization, part of magic mitigation
|
||||||
|
|
||||||
|
### Weapons To Combat
|
||||||
|
|
||||||
|
- задают base damage
|
||||||
|
- задают hit delivery method
|
||||||
|
- задают часть crit, penetration и block hooks
|
||||||
|
|
||||||
|
### Skills To Combat
|
||||||
|
|
||||||
|
- задают execution pattern
|
||||||
|
- задают mana consumption или stamina consumption
|
||||||
|
- задают coefficients и status hooks
|
||||||
|
- задают mastery-specific behavior
|
||||||
|
|
||||||
|
### Classes To Combat
|
||||||
|
|
||||||
|
- задают стартовые attribute priorities
|
||||||
|
- задают class affinity
|
||||||
|
- задают доступ к разным mastery conversion rules
|
||||||
|
|
||||||
|
## Final Position
|
||||||
|
|
||||||
|
Для MVP бой должен считаться в одном общем pipeline: контакт, валидация, crit/precision, offense build, defense pass, status, control. Псевдорандом нужен для chance-based механик и должен жить как отдельный серверный слой, а не как замена физическому попаданию.
|
||||||
@@ -0,0 +1,211 @@
|
|||||||
|
# Stat Catalog MVP
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Этот документ фиксирует единый список всех статов MVP, их системную роль, слой видимости и основные связи с атрибутами, классами, оружием, навыками и combat resolution.
|
||||||
|
|
||||||
|
## Related Docs
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/gameplay/attribute-reference.md`
|
||||||
|
- `docs/gameplay/attribute-stats-visibility-mvp.md`
|
||||||
|
- `docs/gameplay/combat-resolution-gdd.md`
|
||||||
|
|
||||||
|
## Stat Layers
|
||||||
|
|
||||||
|
Все статы делятся на четыре слоя:
|
||||||
|
|
||||||
|
- `Primary Attributes` - канонические атрибуты персонажа
|
||||||
|
- `Core Visible Stats` - минимум информации для основного UI
|
||||||
|
- `Advanced Stats` - детали для расширенного экрана или tooltip
|
||||||
|
- `Hidden Runtime Stats` - внутренние параметры для расчета, не обязательные к показу игроку
|
||||||
|
|
||||||
|
## Primary Attributes
|
||||||
|
|
||||||
|
| Stat | Layer | Main Sources | Main Outputs | Main Systems |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `Мощь` | Primary Attribute | class, level, equipment, buffs | physical offense, penetration, block power | weapons, skills, combat damage, guard |
|
||||||
|
| `Ловкость` | Primary Attribute | class, level, equipment, buffs | speed, crit, projectile handling | attacks, crit resolution, movement |
|
||||||
|
| `Фокус` | Primary Attribute | class, level, equipment, buffs | mana, spell power, status power, part of magic resist | skills, casting, status system |
|
||||||
|
| `Стойкость` | Primary Attribute | class, level, equipment, buffs | HP, stamina pool, defense, sustain, resist | survivability, control, defense |
|
||||||
|
| `Мастерство` | Primary Attribute | class, equipment, archetype bonuses, buffs | specialization quality, weak spot, class hooks, part of magic resist | classes, weapon archetypes, skill archetypes |
|
||||||
|
|
||||||
|
## Core Visible Stats
|
||||||
|
|
||||||
|
| Stat | Layer | Depends On | Used By | UI |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `HP` | Core Visible | `Стойкость`, level, gear, buffs | health system, survivability | main |
|
||||||
|
| `Stamina` | Core Visible | `Стойкость`, class, gear, buffs | dodge, sprint, heavy actions, weapon-heavy abilities | main |
|
||||||
|
| `Mana` | Core Visible | `Фокус`, class, gear, buffs | spells, casting, ability gates | main |
|
||||||
|
| `Damage` | Core Visible | `Мощь`, `Фокус`, weapon, skill, mastery hooks | damage build | main |
|
||||||
|
| `Attack Speed` | Core Visible | `Ловкость`, weapon cadence, buffs | attack execution | main |
|
||||||
|
| `Armor` | Core Visible | `Стойкость`, gear, buffs | defense pass | main |
|
||||||
|
| `Move Speed` | Core Visible | `Ловкость`, gear, buffs, slows | movement system | main |
|
||||||
|
|
||||||
|
## Advanced Stats
|
||||||
|
|
||||||
|
| Stat | Layer | Depends On | Used By | UI |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `HP Regen` | Advanced | `Стойкость`, gear, buffs | sustain | advanced |
|
||||||
|
| `Stamina Regen` | Advanced | `Ловкость`, `Стойкость`, class, gear, buffs | physical tempo sustain | advanced |
|
||||||
|
| `Mana Regen` | Advanced | `Фокус`, class, gear, buffs | sustain, cast flow | advanced |
|
||||||
|
| `Cast Speed` | Advanced | `Фокус`, `Ловкость`, skill hooks, buffs | cast execution | advanced |
|
||||||
|
| `Crit Chance` | Advanced | `Ловкость`, gear, buffs, mastery hooks | crit roll via PRD | advanced |
|
||||||
|
| `Magic Resist` | Advanced | `Фокус`, `Мастерство`, gear, buffs | magic defense pass | advanced |
|
||||||
|
| `Armor Penetration` | Advanced | `Мощь`, gear, weapon, buffs | physical penetration pass | advanced |
|
||||||
|
| `Control Resist` | Advanced | `Стойкость`, gear, buffs | control duration and severity | advanced |
|
||||||
|
| `Status Power` | Advanced | `Фокус`, skill hooks, mastery hooks | status apply and status strength | advanced |
|
||||||
|
| `Block Power` | Advanced | `Мощь`, shield state, gear, buffs | guard and block pass | advanced |
|
||||||
|
| `Projectile Speed` | Advanced | `Ловкость`, weapon, buffs | ranged delivery | advanced |
|
||||||
|
| `Mastery Bonus` | Advanced | `Мастерство`, class, weapon archetype, skill archetype | class-specific specialization | advanced/contextual |
|
||||||
|
|
||||||
|
## Hidden Runtime Stats
|
||||||
|
|
||||||
|
| Stat | Layer | Depends On | Used By | Notes |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `Crit Quality` | Hidden Runtime | `Ловкость`, `Мастерство`, weapon, skill | crit damage bonus | не определяет факт crit |
|
||||||
|
| `Mana Cost Modifier` | Hidden Runtime | `Фокус`, gear, skill, mastery | mana spending | cost tuning |
|
||||||
|
| `Stamina Cost Modifier` | Hidden Runtime | `Ловкость`, gear, skill, mastery | stamina spending | cost tuning for heavy and mobility actions |
|
||||||
|
| `Mana Efficiency` | Hidden Runtime | `Фокус`, mastery, buffs | cast economy | hidden for MVP |
|
||||||
|
| `Stamina Efficiency` | Hidden Runtime | `Ловкость`, `Мастерство`, buffs | physical economy | focused on dodge/heavy/commit actions |
|
||||||
|
| `Exhaustion Pressure` | Hidden Runtime | stamina state, gear, buffs | limits heavy actions under low stamina | should not fully disable core loop |
|
||||||
|
| `Resource Type Tag` | Hidden Runtime | weapon, skill, class | action gating | mana/stamina/none |
|
||||||
|
| `Weak Spot Bonus` | Hidden Runtime | `Мастерство`, weapon, hit zone logic | precision damage | skill-based layer |
|
||||||
|
| `Headshot Precision Bonus` | Hidden Runtime | weapon type, hit zone, mastery | ranged precision | contextual |
|
||||||
|
| `Heavy Projectile Scaling` | Hidden Runtime | `Мощь`, weapon archetype | heavy ranged damage | mostly heavy ranged only |
|
||||||
|
| `Spell Power` | Hidden Runtime | `Фокус`, skill, buffs | spell damage build | может не показываться отдельно в MVP |
|
||||||
|
| `Spell Penetration` | Hidden Runtime | `Фокус`, mastery, skill hooks | magic defense pass | optional MVP-hidden |
|
||||||
|
| `Debuff Duration Reduction` | Hidden Runtime | `Стойкость`, gear, buffs | debuff resolution | linked to control resist |
|
||||||
|
| `Stagger Resist` | Hidden Runtime | `Стойкость`, armor state, buffs | stagger resolution | hidden for MVP |
|
||||||
|
| `Stagger Power` | Hidden Runtime | weapon, skill, `Мощь`, mastery | stagger resolution | attacker-side stat |
|
||||||
|
| `Interrupt Resistance` | Hidden Runtime | `Стойкость`, buffs | cast/skill stability | hidden for MVP |
|
||||||
|
| `Anti-Slow Coefficient` | Hidden Runtime | `Ловкость`, buffs | movement recovery | keep hidden |
|
||||||
|
| `Projectile Control` | Hidden Runtime | `Ловкость`, `Мастерство`, weapon | ranged handling | contextual |
|
||||||
|
| `Reload Modifier` | Hidden Runtime | `Ловкость`, weapon, buffs | ranged cadence | hidden for MVP |
|
||||||
|
| `Proc Chance` | Hidden Runtime | weapon, skill, buffs, mastery | proc resolution via PRD | generic proc entry |
|
||||||
|
| `Proc Quality` | Hidden Runtime | mastery, skill, gear | proc strength | separate from proc chance |
|
||||||
|
| `PRD State` | Hidden Runtime | base chance, prior failures | crit/status/proc rolls | server authoritative |
|
||||||
|
| `Soft Cap Thresholds` | Hidden Runtime | system formulas | post-cap scaling | tuning-only |
|
||||||
|
| `Diminishing Returns` | Hidden Runtime | system formulas | post-cap scaling | tuning-only |
|
||||||
|
| `Class Conversion Rules` | Hidden Runtime | class design | attribute to derived hooks | not player-facing |
|
||||||
|
|
||||||
|
## Optional Future Stats
|
||||||
|
|
||||||
|
Эти статы допустимы как будущие расширения, но не должны входить в обязательный MVP core.
|
||||||
|
|
||||||
|
| Stat | Why Deferred |
|
||||||
|
| --- | --- |
|
||||||
|
| `Accuracy` | риск ложного miss в action combat |
|
||||||
|
| `Evasion` | требует аккуратного UX и точной анимационной читаемости |
|
||||||
|
| `Pierce Count` | лучше держать как weapon/skill-specific modifier |
|
||||||
|
| `Cleave Radius` | лучше держать как mastery or skill hook |
|
||||||
|
| `Bleed Chance` | лучше держать как частный proc, а не отдельную общую строку UI |
|
||||||
|
| `Burn Chance` | лучше держать как частный proc |
|
||||||
|
| `Poison Chance` | лучше держать как частный proc |
|
||||||
|
|
||||||
|
## System Links
|
||||||
|
|
||||||
|
### Class Definition
|
||||||
|
|
||||||
|
Класс задает:
|
||||||
|
|
||||||
|
- стартовые значения атрибутов
|
||||||
|
- приоритеты роста
|
||||||
|
- class conversion rules для `Мастерства`
|
||||||
|
- доступ к разным skill и weapon archetypes
|
||||||
|
|
||||||
|
### Level Progression
|
||||||
|
|
||||||
|
Прогрессия задает:
|
||||||
|
|
||||||
|
- базовый рост атрибутов
|
||||||
|
- allocation points или predetermined growth
|
||||||
|
- soft cap pressure через progression formulas
|
||||||
|
|
||||||
|
### Equipment
|
||||||
|
|
||||||
|
Экипировка задает:
|
||||||
|
|
||||||
|
- flat bonuses
|
||||||
|
- percent modifiers
|
||||||
|
- archetype-specific hooks
|
||||||
|
- часть visible и hidden stats
|
||||||
|
|
||||||
|
### Weapon System
|
||||||
|
|
||||||
|
Оружие использует:
|
||||||
|
|
||||||
|
- `Damage`
|
||||||
|
- `Attack Speed`
|
||||||
|
- `Projectile Speed`
|
||||||
|
- `Armor Penetration`
|
||||||
|
- `Block Power`
|
||||||
|
- `Stamina` для heavy/charged/commit actions, если это задано archetype
|
||||||
|
- hidden offensive/runtime modifiers
|
||||||
|
|
||||||
|
### Skill System
|
||||||
|
|
||||||
|
Навыки используют:
|
||||||
|
|
||||||
|
- `Mana` для spell-oriented действий
|
||||||
|
- `Mana Regen` для магического темпа
|
||||||
|
- `Stamina` для физических и weapon-heavy действий
|
||||||
|
- `Stamina Regen` для физического темпа
|
||||||
|
- `Spell Power`
|
||||||
|
- `Status Power`
|
||||||
|
- `Cast Speed`
|
||||||
|
- `Mastery` hooks
|
||||||
|
|
||||||
|
Для MVP `Stamina` не должна быть обязательной ценой каждой базовой немагической кнопки.
|
||||||
|
|
||||||
|
### Combat Resolution
|
||||||
|
|
||||||
|
Combat pipeline использует:
|
||||||
|
|
||||||
|
- contact data
|
||||||
|
- crit data
|
||||||
|
- offense stats
|
||||||
|
- defense stats
|
||||||
|
- status data
|
||||||
|
- control and stagger data
|
||||||
|
- PRD state для chance-based roll-слоя
|
||||||
|
|
||||||
|
## Recommended MVP Buckets
|
||||||
|
|
||||||
|
Для легковесного runtime-обновления рекомендуется группировать статы так:
|
||||||
|
|
||||||
|
- `Resource Bucket`
|
||||||
|
- `Stamina`
|
||||||
|
- `Stamina Regen`
|
||||||
|
- `Mana`
|
||||||
|
- `Mana Regen`
|
||||||
|
- `Mana Cost Modifier`
|
||||||
|
- `Stamina Cost Modifier`
|
||||||
|
- `Exhaustion Pressure`
|
||||||
|
- `Offense Bucket`
|
||||||
|
- `Damage`
|
||||||
|
- `Crit Chance`
|
||||||
|
- `Crit Quality`
|
||||||
|
- `Armor Penetration`
|
||||||
|
- `Stagger Power`
|
||||||
|
- `Caster Bucket`
|
||||||
|
- `Spell Power`
|
||||||
|
- `Status Power`
|
||||||
|
- `Cast Speed`
|
||||||
|
- `Defense Bucket`
|
||||||
|
- `HP`
|
||||||
|
- `HP Regen`
|
||||||
|
- `Armor`
|
||||||
|
- `Magic Resist`
|
||||||
|
- `Control Resist`
|
||||||
|
- `Stagger Resist`
|
||||||
|
- `Utility Bucket`
|
||||||
|
- `Move Speed`
|
||||||
|
- `Projectile Speed`
|
||||||
|
- `Projectile Control`
|
||||||
|
- `Reload Modifier`
|
||||||
|
- `Mastery Bonus`
|
||||||
|
|
||||||
|
## Final Position
|
||||||
|
|
||||||
|
Единый список статов нужен не ради большого character sheet, а ради общей канонической модели. В MVP игроку показывается только минимум, но runtime должен опираться на полный согласованный каталог и единые системные связи.
|
||||||
@@ -68,3 +68,4 @@
|
|||||||
| TASK-0026 | BackLog | High | ui | unassigned | 2d | docs/tasks/items/TASK-0026.md | Реализовать миникарту и механизм сохранения открытой карты у хоста так, чтобы состояние миникарты было общим для всех игроков мира. |
|
| TASK-0026 | BackLog | High | ui | unassigned | 2d | docs/tasks/items/TASK-0026.md | Реализовать миникарту и механизм сохранения открытой карты у хоста так, чтобы состояние миникарты было общим для всех игроков мира. |
|
||||||
| TASK-0027 | ToDo | Highest | gameplay-core | unassigned | 3d | docs/tasks/items/TASK-0027.md | Перевести player movement на host-authoritative NavMesh pipeline с server-side path planning и shared debug path preview для всех клиентов. |
|
| TASK-0027 | ToDo | Highest | gameplay-core | unassigned | 3d | docs/tasks/items/TASK-0027.md | Перевести player movement на host-authoritative NavMesh pipeline с server-side path planning и shared debug path preview для всех клиентов. |
|
||||||
| TASK-0028 | Done | Highest | ai | unassigned | 2d | docs/tasks/items/TASK-0028.md | Перевести основной runtime pathing mode на interest-cluster-based coverage windows, чтобы убрать seam-разрывы region-based NavMesh и учитывать multiplayer interest set. |
|
| TASK-0028 | Done | Highest | ai | unassigned | 2d | docs/tasks/items/TASK-0028.md | Перевести основной runtime pathing mode на interest-cluster-based coverage windows, чтобы убрать seam-разрывы region-based NavMesh и учитывать multiplayer interest set. |
|
||||||
|
| TASK-0029 | ToDo | Highest | gameplay-core | unassigned | 1d | docs/tasks/items/TASK-0027.md | Реализовать пять канонических атрибутов, их derived combat scaling и интеграцию с классами Воина, Мага и Лучника. |
|
||||||
@@ -13,8 +13,10 @@ depends_on:
|
|||||||
- TASK-0008
|
- TASK-0008
|
||||||
- TASK-0009
|
- TASK-0009
|
||||||
- TASK-0010
|
- TASK-0010
|
||||||
|
- TASK-0027
|
||||||
canonical_docs:
|
canonical_docs:
|
||||||
- docs/tasks/Index.md
|
- docs/tasks/Index.md
|
||||||
|
- docs/gameplay/attribute-system-gdd.md
|
||||||
related_files:
|
related_files:
|
||||||
- Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity
|
- Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity
|
||||||
---
|
---
|
||||||
@@ -43,7 +45,7 @@ related_files:
|
|||||||
|
|
||||||
## Current Context
|
## Current Context
|
||||||
|
|
||||||
Пока нет классового слоя. Конкретные умения по классам вынесены в отдельные задачи ниже.
|
Пока нет классового слоя. Система атрибутов отдельно зафиксирована в `docs/gameplay/attribute-system-gdd.md`, а ее runtime-интеграция выделена в `docs/tasks/items/TASK-0027.md`. Конкретные умения по классам вынесены в отдельные задачи ниже.
|
||||||
|
|
||||||
## Source Of Truth
|
## Source Of Truth
|
||||||
|
|
||||||
@@ -51,6 +53,8 @@ related_files:
|
|||||||
- `docs/tasks/items/TASK-0008.md`
|
- `docs/tasks/items/TASK-0008.md`
|
||||||
- `docs/tasks/items/TASK-0009.md`
|
- `docs/tasks/items/TASK-0009.md`
|
||||||
- `docs/tasks/items/TASK-0010.md`
|
- `docs/tasks/items/TASK-0010.md`
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/tasks/items/TASK-0027.md`
|
||||||
|
|
||||||
## Read First
|
## Read First
|
||||||
|
|
||||||
@@ -58,10 +62,13 @@ related_files:
|
|||||||
- `docs/tasks/items/TASK-0008.md`
|
- `docs/tasks/items/TASK-0008.md`
|
||||||
- `docs/tasks/items/TASK-0009.md`
|
- `docs/tasks/items/TASK-0009.md`
|
||||||
- `docs/tasks/items/TASK-0010.md`
|
- `docs/tasks/items/TASK-0010.md`
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/tasks/items/TASK-0027.md`
|
||||||
|
|
||||||
## Scope In
|
## Scope In
|
||||||
|
|
||||||
- базовая class definition для персонажа
|
- базовая class definition для персонажа
|
||||||
|
- интеграция class definition с каноническими атрибутами и их приоритетами
|
||||||
- стартовые параметры и ограничения экипировки
|
- стартовые параметры и ограничения экипировки
|
||||||
- выбор класса в рамках player profile
|
- выбор класса в рамках player profile
|
||||||
- точки расширения для классовых навыков MVP
|
- точки расширения для классовых навыков MVP
|
||||||
@@ -75,6 +82,7 @@ related_files:
|
|||||||
|
|
||||||
- различия классов должны строиться поверх общих систем, а не через форки кода
|
- различия классов должны строиться поверх общих систем, а не через форки кода
|
||||||
- выбор класса должен сохраняться в player save
|
- выбор класса должен сохраняться в player save
|
||||||
|
- классовые стартовые параметры и identity должны опираться на общую систему атрибутов
|
||||||
|
|
||||||
## If You Find Drift
|
## If You Find Drift
|
||||||
|
|
||||||
@@ -83,12 +91,13 @@ related_files:
|
|||||||
## Suggested Approach
|
## Suggested Approach
|
||||||
|
|
||||||
1. Определить базовую class definition модель.
|
1. Определить базовую class definition модель.
|
||||||
2. Связать класс со стартовыми характеристиками и стартовым loadout.
|
2. Связать класс с системой атрибутов, стартовыми характеристиками и стартовым loadout.
|
||||||
3. Подготовить интеграцию с character selection menu и отдельными skill tasks.
|
3. Подготовить интеграцию с character selection menu и отдельными skill tasks.
|
||||||
|
|
||||||
## Acceptance Criteria
|
## Acceptance Criteria
|
||||||
|
|
||||||
- в системе существуют Воин, Маг и Лучник как валидные классы персонажа
|
- в системе существуют Воин, Маг и Лучник как валидные классы персонажа
|
||||||
|
- каждый класс имеет явную связь с канонической системой атрибутов
|
||||||
- класс влияет на стартовую конфигурацию без дублирования core systems
|
- класс влияет на стартовую конфигурацию без дублирования core systems
|
||||||
- класс можно выбрать и сохранить в player profile
|
- класс можно выбрать и сохранить в player profile
|
||||||
|
|
||||||
@@ -100,6 +109,7 @@ related_files:
|
|||||||
## Risks / Open Questions
|
## Risks / Open Questions
|
||||||
|
|
||||||
- нужно определить, насколько жестко класс ограничивает тип оружия в MVP
|
- нужно определить, насколько жестко класс ограничивает тип оружия в MVP
|
||||||
|
- нужно определить, где именно хранить class affinity к атрибутам: в class definition, стартовом профиле или в обоих слоях
|
||||||
|
|
||||||
## Human Decisions Needed
|
## Human Decisions Needed
|
||||||
|
|
||||||
@@ -108,6 +118,7 @@ related_files:
|
|||||||
## Decision Log
|
## Decision Log
|
||||||
|
|
||||||
- `2026-03-30` - общий классовый каркас выделен до конкретных отдельных навыков Воина, Мага и Лучника.
|
- `2026-03-30` - общий классовый каркас выделен до конкретных отдельных навыков Воина, Мага и Лучника.
|
||||||
|
- `2026-04-09` - классовая модель явно привязана к канонической системе атрибутов и отдельной задаче на ее runtime-внедрение.
|
||||||
|
|
||||||
## Handoff Notes
|
## Handoff Notes
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,136 @@
|
|||||||
|
---
|
||||||
|
id: TASK-0027
|
||||||
|
title: Реализовать систему атрибутов и интеграцию с классами
|
||||||
|
summary: Ввести пять канонических атрибутов персонажа, их derived combat scaling и привязать классы Воина, Мага и Лучника к своим стартовым и приоритетным статам.
|
||||||
|
priority: Highest
|
||||||
|
area: gameplay-core
|
||||||
|
owner: unassigned
|
||||||
|
created: 2026-04-09
|
||||||
|
updated: 2026-04-09
|
||||||
|
execution_time: 1d
|
||||||
|
depends_on:
|
||||||
|
- TASK-0007
|
||||||
|
canonical_docs:
|
||||||
|
- docs/tasks/Index.md
|
||||||
|
- docs/gameplay/attribute-system-gdd.md
|
||||||
|
- docs/gameplay/attribute-reference.md
|
||||||
|
- docs/gameplay/stat-catalog-mvp.md
|
||||||
|
- docs/gameplay/combat-resolution-gdd.md
|
||||||
|
related_files:
|
||||||
|
- Assets/Features/
|
||||||
|
- Assets/Scripts/
|
||||||
|
---
|
||||||
|
|
||||||
|
# TASK-0027 - Реализовать систему атрибутов и интеграцию с классами
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Статус задачи ведется в `docs/tasks/Index.md` и является каноническим там.
|
||||||
|
|
||||||
|
Допустимые значения статуса:
|
||||||
|
|
||||||
|
- `BackLog`
|
||||||
|
- `ToDo`
|
||||||
|
- `InProgress`
|
||||||
|
- `Review`
|
||||||
|
- `Done`
|
||||||
|
|
||||||
|
## Why
|
||||||
|
|
||||||
|
Combat core и классовая система пока не имеют канонической runtime-модели атрибутов. Без этого классы останутся набором стартовых исключений, а боевые формулы не получат устойчивую точку расширения для билдов, оружия и навыков.
|
||||||
|
|
||||||
|
## Expected Outcome
|
||||||
|
|
||||||
|
В проекте существует единая система пяти атрибутов: `Мощь`, `Ловкость`, `Фокус`, `Стойкость`, `Мастерство`. Атрибуты конвертируются в понятные боевые эффекты, а классы Воин, Маг и Лучник используют их как часть стартовой конфигурации и class identity. Ресурсная модель явно разделяет `HP`, `Stamina` и `Mana`, причем у каждого ресурса есть свое автопополнение.
|
||||||
|
|
||||||
|
## Current Context
|
||||||
|
|
||||||
|
Канонический GDD по атрибутам уже зафиксирован в `docs/gameplay/attribute-system-gdd.md`, но отдельной реализации и явной интеграции с class model пока нет. Эта задача закрывает разрыв между design intent и runtime-моделью.
|
||||||
|
|
||||||
|
## Source Of Truth
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/gameplay/attribute-reference.md`
|
||||||
|
- `docs/gameplay/stat-catalog-mvp.md`
|
||||||
|
- `docs/gameplay/combat-resolution-gdd.md`
|
||||||
|
- `docs/tasks/items/TASK-0007.md`
|
||||||
|
- `docs/tasks/items/TASK-0011.md`
|
||||||
|
- runtime реализация combat stats и class definitions
|
||||||
|
|
||||||
|
## Read First
|
||||||
|
|
||||||
|
- `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- `docs/gameplay/attribute-reference.md`
|
||||||
|
- `docs/gameplay/stat-catalog-mvp.md`
|
||||||
|
- `docs/gameplay/combat-resolution-gdd.md`
|
||||||
|
- `docs/tasks/items/TASK-0007.md`
|
||||||
|
- `docs/tasks/items/TASK-0009.md`
|
||||||
|
- `docs/tasks/items/TASK-0010.md`
|
||||||
|
- `docs/tasks/items/TASK-0011.md`
|
||||||
|
|
||||||
|
## Scope In
|
||||||
|
|
||||||
|
- базовая runtime-модель пяти атрибутов персонажа
|
||||||
|
- конвертация атрибутов в derived combat stats по каноническим направлениям
|
||||||
|
- явное разделение `HP`, `Stamina` и `Mana` как разных runtime resource pools
|
||||||
|
- автопополнение для `HP`, `Stamina` и `Mana`
|
||||||
|
- стартовые или базовые классовые приоритеты атрибутов для Воина, Мага и Лучника
|
||||||
|
- интеграция атрибутов в class definition и стартовую конфигурацию персонажа
|
||||||
|
- точки расширения для weapon scaling, skill scaling и будущих гибридных классов
|
||||||
|
|
||||||
|
## Scope Out
|
||||||
|
|
||||||
|
- глубокая UI-визуализация всех статов и их breakdown на каждом экране
|
||||||
|
- полноценная talent tree или perk-система
|
||||||
|
- тонкая финальная балансировка числовых коэффициентов для late game
|
||||||
|
|
||||||
|
## Constraints
|
||||||
|
|
||||||
|
- реализовывать только пять канонических атрибутов из `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- не сливать offensive pressure и survivability в один стат
|
||||||
|
- `Мастерство` должно усиливать class-specific специализацию, а не заменять основной стат класса
|
||||||
|
- классы должны использовать общую систему атрибутов, а не отдельные class-only формулы
|
||||||
|
|
||||||
|
## If You Find Drift
|
||||||
|
|
||||||
|
- если код урона, оружия или навыков начинает обходить общую attribute-конвертацию, это drift
|
||||||
|
- если классы получают уникальные скрытые статы вместо работы через общую модель атрибутов, это drift
|
||||||
|
|
||||||
|
## Suggested Approach
|
||||||
|
|
||||||
|
1. Ввести каноническую runtime-структуру для пяти атрибутов персонажа.
|
||||||
|
2. Зафиксировать derived combat stats и правила конверсии без избыточного усложнения формул.
|
||||||
|
3. Добавить в class definitions стартовые значения, приоритеты или affinity по атрибутам для Воина, Мага и Лучника.
|
||||||
|
4. Проверить, что оружие и навыки могут опираться на эти атрибуты без class-specific обходов.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- в системе существуют `Мощь`, `Ловкость`, `Фокус`, `Стойкость`, `Мастерство` как канонические runtime-атрибуты
|
||||||
|
- атрибуты влияют на боевые параметры по правилам, совместимым с GDD
|
||||||
|
- `HP`, `Stamina` и `Mana` существуют как разные runtime resource pools
|
||||||
|
- у `HP`, `Stamina` и `Mana` есть отдельные механики автопополнения
|
||||||
|
- классы Воин, Маг и Лучник имеют явную интеграцию с системой атрибутов
|
||||||
|
- downstream системы могут использовать атрибуты без дублирования class-specific формул
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- вычитка runtime-модели против `docs/gameplay/attribute-system-gdd.md`
|
||||||
|
- ручная проверка, что классы получают разные стартовые stat priorities
|
||||||
|
- ручная проверка, что derived stats меняются от изменения атрибутов по ожидаемым направлениям
|
||||||
|
|
||||||
|
## Risks / Open Questions
|
||||||
|
|
||||||
|
- нужно решить, какие именно конверсии будут обязательными уже в MVP, а какие можно оставить extension points
|
||||||
|
- нужно не перегрузить class model слишком ранней детализацией формул
|
||||||
|
|
||||||
|
## Human Decisions Needed
|
||||||
|
|
||||||
|
- none currently
|
||||||
|
|
||||||
|
## Decision Log
|
||||||
|
|
||||||
|
- `2026-04-09` - задача добавлена после фиксации канонического GDD по атрибутам.
|
||||||
|
|
||||||
|
## Handoff Notes
|
||||||
|
|
||||||
|
Если позже появятся формульные документы по MVP-коэффициентам, они должны уточнять эту задачу, но не подменять канонический смысл атрибутов из GDD.
|
||||||
Reference in New Issue
Block a user