diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 16edc703..b7ca0b92 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -682,6 +682,7 @@ PlayerSettings: webEnableSubmoduleStrippingCompatibility: 0 scriptingDefineSymbols: Standalone: FISHNET;FISHNET_V4 + WebGL: FISHNET;FISHNET_V4 additionalCompilerArguments: {} platformArchitecture: {} scriptingBackend: diff --git a/docs/gameplay/attribute-reference.md b/docs/gameplay/attribute-reference.md new file mode 100644 index 00000000..c87e2db5 --- /dev/null +++ b/docs/gameplay/attribute-reference.md @@ -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. diff --git a/docs/gameplay/attribute-stats-visibility-mvp.md b/docs/gameplay/attribute-stats-visibility-mvp.md new file mode 100644 index 00000000..2e6242ca --- /dev/null +++ b/docs/gameplay/attribute-stats-visibility-mvp.md @@ -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 и легковесную реализацию. diff --git a/docs/gameplay/attribute-system-gdd.md b/docs/gameplay/attribute-system-gdd.md new file mode 100644 index 00000000..cacd6787 --- /dev/null +++ b/docs/gameplay/attribute-system-gdd.md @@ -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 + +Система атрибутов строится вокруг пяти осей: давление, скорость, магия, живучесть и мастерство применения. Ее уникальность не в переименовании классических статов, а в четком разделении боевых ролей и наличии `Мастерства` как отдельного инструмента билдовой идентичности. + +Это позволяет сохранить читаемость, избежать доминирующего суперстата и подготовить фундамент для расширения классовой системы без переработки базовой модели персонажа. diff --git a/docs/gameplay/combat-resolution-gdd.md b/docs/gameplay/combat-resolution-gdd.md new file mode 100644 index 00000000..1a7f2847 --- /dev/null +++ b/docs/gameplay/combat-resolution-gdd.md @@ -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 механик и должен жить как отдельный серверный слой, а не как замена физическому попаданию. diff --git a/docs/gameplay/stat-catalog-mvp.md b/docs/gameplay/stat-catalog-mvp.md new file mode 100644 index 00000000..b60aa459 --- /dev/null +++ b/docs/gameplay/stat-catalog-mvp.md @@ -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 должен опираться на полный согласованный каталог и единые системные связи. diff --git a/docs/tasks/Index.md b/docs/tasks/Index.md index 25fe6352..0a1f7c1e 100644 --- a/docs/tasks/Index.md +++ b/docs/tasks/Index.md @@ -68,3 +68,4 @@ | 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-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 и интеграцию с классами Воина, Мага и Лучника. | \ No newline at end of file diff --git a/docs/tasks/items/TASK-0011.md b/docs/tasks/items/TASK-0011.md index 4416f71d..6f8b4fc6 100644 --- a/docs/tasks/items/TASK-0011.md +++ b/docs/tasks/items/TASK-0011.md @@ -13,8 +13,10 @@ depends_on: - TASK-0008 - TASK-0009 - TASK-0010 + - TASK-0027 canonical_docs: - docs/tasks/Index.md + - docs/gameplay/attribute-system-gdd.md related_files: - Assets/Features/VoxelWorld/Scenes/VoxelWorldTestScene.unity --- @@ -43,7 +45,7 @@ related_files: ## Current Context -Пока нет классового слоя. Конкретные умения по классам вынесены в отдельные задачи ниже. +Пока нет классового слоя. Система атрибутов отдельно зафиксирована в `docs/gameplay/attribute-system-gdd.md`, а ее runtime-интеграция выделена в `docs/tasks/items/TASK-0027.md`. Конкретные умения по классам вынесены в отдельные задачи ниже. ## Source Of Truth @@ -51,6 +53,8 @@ related_files: - `docs/tasks/items/TASK-0008.md` - `docs/tasks/items/TASK-0009.md` - `docs/tasks/items/TASK-0010.md` +- `docs/gameplay/attribute-system-gdd.md` +- `docs/tasks/items/TASK-0027.md` ## Read First @@ -58,10 +62,13 @@ related_files: - `docs/tasks/items/TASK-0008.md` - `docs/tasks/items/TASK-0009.md` - `docs/tasks/items/TASK-0010.md` +- `docs/gameplay/attribute-system-gdd.md` +- `docs/tasks/items/TASK-0027.md` ## Scope In - базовая class definition для персонажа +- интеграция class definition с каноническими атрибутами и их приоритетами - стартовые параметры и ограничения экипировки - выбор класса в рамках player profile - точки расширения для классовых навыков MVP @@ -75,6 +82,7 @@ related_files: - различия классов должны строиться поверх общих систем, а не через форки кода - выбор класса должен сохраняться в player save +- классовые стартовые параметры и identity должны опираться на общую систему атрибутов ## If You Find Drift @@ -83,12 +91,13 @@ related_files: ## Suggested Approach 1. Определить базовую class definition модель. -2. Связать класс со стартовыми характеристиками и стартовым loadout. +2. Связать класс с системой атрибутов, стартовыми характеристиками и стартовым loadout. 3. Подготовить интеграцию с character selection menu и отдельными skill tasks. ## Acceptance Criteria - в системе существуют Воин, Маг и Лучник как валидные классы персонажа +- каждый класс имеет явную связь с канонической системой атрибутов - класс влияет на стартовую конфигурацию без дублирования core systems - класс можно выбрать и сохранить в player profile @@ -100,6 +109,7 @@ related_files: ## Risks / Open Questions - нужно определить, насколько жестко класс ограничивает тип оружия в MVP +- нужно определить, где именно хранить class affinity к атрибутам: в class definition, стартовом профиле или в обоих слоях ## Human Decisions Needed @@ -108,6 +118,7 @@ related_files: ## Decision Log - `2026-03-30` - общий классовый каркас выделен до конкретных отдельных навыков Воина, Мага и Лучника. +- `2026-04-09` - классовая модель явно привязана к канонической системе атрибутов и отдельной задаче на ее runtime-внедрение. ## Handoff Notes diff --git a/docs/tasks/items/TASK-0029.md b/docs/tasks/items/TASK-0029.md new file mode 100644 index 00000000..cca25f70 --- /dev/null +++ b/docs/tasks/items/TASK-0029.md @@ -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.