Каталог ран
Конкретные Ушибы, Раны и Увечья: как называются, что режут и кого бьют больнее всего. Механика слотов и каскада — Run - Injuries & Mettle; здесь только содержимое.
Заведено 2026-08-21. Все числа
proposedдо замера смертности бенчем забега.
Тон закрыт: рана — это медкарта
Имена медицинские, описания числовые («−35% к дальности атаки»). Пересказ ран в голосе мира отвергнут 2026-08-21: рана — счёт, который игрок оплачивает, и читаться должна как счёт.
Три правила, по которым собран каталог
1. Рана меняет РОЛЬ, а не просто режет числа. Реф — Battle Brothers: там ранение ноги мешает двигаться, ранение руки — бить, повреждённый глаз — видеть. Разница принципиальная: «−10% ко всему» делает бойца бледнее, а «не может держать дистанцию» делает его другим, и игрок вынужден перестраивать отряд, а не смиряться с минусом.
2. Каждая рана бьёт по конкретной роли больнее, чем по остальным. Поэтому в таблицах есть колонка «кому больнее»: рана — это ещё и вопрос «кого из четверых подставить под неё».
3. Что режется — максимум HP или запас на старте боя — задаёт сама рана (решение Макса 2026-08-21). Разница механическая: по максимуму не лечится ничем, по стартовому запасу отыгрывается хилом ценой маны и времени.
Стат стартового HP заведён 2026-08-21
StatType.StartHpPct— доля запаса на входе в бой, старт1.0. Именно доля, а не абсолют:MaxHPу нас двигают класс, вид, Судьба, предметы и пассивки, и абсолютный «старт 84 HP» разошёлся бы с потолком на первом же баффе. Рана вида «−30% стартового HP» кладётся какStartHpPct×0.7 и означает ровно это при любом максимуме.Раны каталога по-прежнему собраны на
MaxHPи прочих боевых статах — вторая полярность открыта для новых карточек, а не обязательна.
Все статы каталога — фазы 1 (реально считаются движком). Соблазнительные AbilityPower,
CooldownEff, ReceiveDebuffEff и HealShieldTakenEff помечены в StatType как Ф2: рана на них
просто ничего бы не сделала.
Ушибы — мелкие, 3 слота
Приходят за смерть в рядовом бою. Проходят сами примерно через 3 узла маршрута. Ощутимые: порядка −30% — мелкая не значит незаметная.
| Ушиб | Что делает | Стат | Кому больнее |
|---|---|---|---|
| Подвёрнутая нога | −30% скорости передвижения | MoveSpeed ×0.7 | Убийце и дальнику: первый не доезжает, второй не отрывается |
| Отбитое плечо | −30% наносимого урона | DamageDealtEff ×0.7 | любому дамагеру |
| Треснувшее ребро | −25% максимума HP | MaxHP ×0.75 | Танку: его роль и есть запас |
| Рассечённая бровь | −20% дальности атаки | AttackRange ×0.8 | стрелку: сдвигает его на шаг в свалку |
| Помятый доспех | −50% физической брони | PhysArmor ×0.5 | Танку и Брузеру |
| Дрожь в руках | −25% скорости атаки | AttackSpeed ×0.75 | тем, кто живёт частотой, а не силой удара |
Шесть на три слота — чтобы набор был разным от забега к забегу, а не одним и тем же трио.
Раны — средние, 2 слота
Приходят почти всегда переполнением: мелкая, которой некуда лечь. Сами не проходят — только за золото. Вдвое сильнее ушиба и добавляют условие.
| Рана | Что делает | Стат | Условие |
|---|---|---|---|
| Разорванное сухожилие | −50% скорости передвижения | MoveSpeed ×0.5 | — |
| Перебитая рука | −50% урона автоатаки | AutoAttackDamage ×0.5 | — |
| Пробитый бок | −40% максимума HP | MaxHP ×0.6 | нельзя ставить во фронтовую линию |
| Гниющая рана | +35% получаемого урона | DamageTakenEff ×1.35 | — |
| Отнявшийся глаз | −35% дальности, −20% скорости атаки | AttackRange ×0.65, AttackSpeed ×0.8 | — |
Условия расстановки — механика, которой пока нет. «Нельзя во фронт» требует, чтобы фаза расстановки умела запрещать зоны конкретному бойцу. Пока не умеет, «Пробитый бок» работает одними числами; условие — задел.
Увечья — тяжёлые, 1 слот
Приходят от уникальных атак элит и боссов, от тяжёлых ивентов и переполнением сверху. Ломают роль целиком: боец остаётся в строю, но играть им придётся иначе.
| Увечье | Что делает | Стат |
|---|---|---|
| Раздробленная нога | −70% скорости передвижения; боец фактически перестаёт быть подвижным | MoveSpeed ×0.3 |
| Отнятая рука | −60% урона автоатаки, −30% скорости атаки | AutoAttackDamage ×0.4, AttackSpeed ×0.7 |
| Пробитое лёгкое | −55% максимума HP, +25% получаемого урона | MaxHP ×0.45, DamageTakenEff ×1.25 |
Тяжёлых намеренно три, а не шесть: слот один, встречаются они редко, и каждое должно быть узнаваемым событием, а не строкой из длинного списка.
Цена снятия и имена ассетов
Ассеты заведены 2026-08-21. Цена снятия — одна на ступень (принято Максом в тот же день, journal-adr §2026-08-21 (9)): Ушиб 30, Рана 80, Увечье 200 золота при награде за бой 20 и предметах по 55-90. Внутри ступени цена одна на всех: раны различаются эффектом, а не ценником, и три числа читаются с одного взгляда.
Веса ролла — по единице у всех: внутри ступени раны равновероятны, пока замер не скажет иначе.
| Ушиб | Ассет | Рана | Ассет | Увечье | Ассет |
|---|---|---|---|---|---|
| Подвёрнутая нога | SprainedLeg | Разорванное сухожилие | TornTendon | Раздробленная нога | ShatteredLeg |
| Отбитое плечо | BruisedShoulder | Перебитая рука | BrokenArm | Отнятая рука | SeveredArm |
| Треснувшее ребро | CrackedRib | Пробитый бок | PiercedSide | Пробитое лёгкое | PiercedLung |
| Рассечённая бровь | SplitBrow | Гниющая рана | FesteringWound | ||
| Помятый доспех | DentedArmor | Отнявшийся глаз | BlindedEye | ||
| Дрожь в руках | ShakingHands |
Как это ложится на движок
Раны — слоистые стат-модификаторы с источником (source = "injury"), ровно тот же механизм, что
у перков (injuries-mettle §Общая модель). Новой машинерии не требуется. Операция —
PercentMult: раны обязаны множиться между собой, а не складываться, иначе три ушиба скорости
дали бы минус девяносто процентов и бойца, стоящего на месте.
В ассете лежит ДЕЛЬТА, а не множитель
Таблицы выше пишут «
MoveSpeed×0.7», а в полеValueкладётся −0.3: движок считаетΠ(1 + Value)(Stats.cs). Записать туда 0.7 значит выдать бойцу +70% к скорости — рана превратится в награду, и ни один тест этого не заметит.
Что реализуемо прямо сейчас, а что ждёт кода:
Тип ассета — ConsequenceData (полярность «травма/закалка», ступень, моды, срок истечения,
цена снятия). Отдельного типа под раны не заводили: он уже существовал под последствия боя, а второй
тип рядом был бы вторым владельцем одного факта.
| Нужно | Состояние |
|---|---|
| стат-модификаторы по всем статам каталога | есть — все статы фазы 1 |
| ступень травмы в данных | есть — InjuryGrade (Ушиб / Рана / Увечье) |
хранение ран на «Сосуде» в RunState | есть — RosterSlot.Injuries |
| каскад переполнения | есть — InjuryCascade, тесты InjuryCascadeTests |
| стат стартового HP | есть — StatType.StartHpPct (рамка выше) |
| раны применяются в бою | есть — последним слоем каскада, тесты InjuriesInBattleTests |
| истечение мелких по узлам | есть — InjuryLedger.AdvanceNode, зовётся при прохождении узла |
| выдача раны за смерть в бою | есть — команда InflictInjury, ролл по весам от сида |
| снятие у торговца и на привале | есть — команда HealInjury, оплата золотом или действием привала |
| выбывание «Сосуда» при переполнении всех шести слотов | нет — каскад исход сообщает, механики нет |
| условие «нельзя во фронт» | нет механики запрета зон |
| ассеты четырнадцати последствий | есть — ScriptableObjects/Consequences/, домен consequence.*, лок-ключи RU заведены |
| экраны: занятые слоты, полка лекаря, выбор раны на привале | нет — контракты готовы (ShopInjury) |
Открытые вопросы
- Видит ли игрок, какая именно рана прилетит, до входа в бой, или только ступень.
- Нужны ли раны с плюсом — вроде «сросшаяся кость: −20% скорости, +15% брони». Это уже почти Закалка, и граница между ними требует вердикта.