🇺🇦
Ukrainian
StoriesTechnicalsMechanicsEnglish
  • 👋Добро пожаловать в Xeus!
  • Mechanics
    • Fighting system
    • Armor system
    • Tech evolution
      • PVE-Ветка
      • MID-Ветка
      • PVP-Ветка
      • ADD-Ветка
  • Technical
    • Design Document
      • Character State
      • Game world
      • Equipment
      • Building
      • Alchemy and craft
      • Gameplay experience
  • Alexander's stories
    • Robot
    • Alchemiest and his tools
Powered by GitBook
On this page
  • Одежда
  • BLV
  • Расчет урона
  • Ячейки для одежды
  • Перекрытие
  • Расчет перекрытия
  • Совокупность эффектов
  • Финальная формула
  1. Mechanics

Armor system

Система брони и повреждений

Одежда

Одежда обладает возможностью обеспечивать защиту от неблагоприятных условий, представляющих опасность для жизнедеятельности. Каждый компонент брони обладает уникальным уровнем сопротивления по отношению к определенному типу повреждений, который выражается в числовом значении, на которое происходит деление.

BLV

BLV - Base limb vulnerability (Базовая уязвимость конечности)

BLV∈[0;2]BLV ∈ [0;2]BLV∈[0;2]

BLV На примере куртки

Тип урона
Значение

Колотый

1.1

Режущий

2

Рубящий

1.1

Ударный

1

Пулевой

1

Рваный

1.5

Расчет урона

y=ar−BLV+1y = \frac{a}{r - BLV + 1}y=r−BLV+1a​
Переменная
Описание

a

Количество наносимого урона

r

Сопротивление этого типа одежды

BLV

Базовая уязвимость конечности

Примеры расчета урона

Пример расчета формул при ударе тяжелым топором с хар-ками Ру-40, У10:

damage = 40 / (1.1 - бук + 1) // 36.36 Рубящего урона

damage = 10 / (1.0 - бук + 1) // 10.00 Ударного урона

Ячейки для одежды

Любая одежда, бронежилет, например, должен быть размещен только в специально предназначенном слоте для бронежилета и не может быть помещен в слот, предназначенный для другого типа одежды, такого как штаны.

Кроме того, броня может предоставлять дополнительные слоты инвентаря, что позволяет носителю хранить и переносить больше предметов. Эти дополнительные ячейки инвентаря могут быть использованы для размещения различных предметов, включая медицинские принадлежности, дополнительные боеприпасы или другие необходимые инструменты.

Перекрытие

Броня распространяется не только на соответствующие ей части тела, но и на соседние. Например, куртка может защищать еще и живот с руками. Защита зависит от модификатора покрытия. Чем он значительнее, тем больше защита.

Покрытие на примере куртки

Часть тела
Перекрытие

Голова

0.0

Грудь

1.0

Живот

1.0

Правая рука

0.5

Левая рука

0.5

Правая нога

0.0

Левая нога

0.0

Расчет перекрытия

y=(a−1)∗p)+1y = (a-1 )* p)+1y=(a−1)∗p)+1

a

Защита

p

Покрытие конечности

То-есть, для груди и живота процент защиты соответствует вышеизложенному. Для рук выходит такая формула:

overlap = ((1.1 - 1) * 0.5) + 1 // 1.05 damage = 40 / (1.1 - BLV + 1 ) // 38.09

Совокупность эффектов

Эффекты от разной брони работают в совокупности, например на руке есть защита от рубящего урона от наплечника, налокотника и куртки 1.1, 1.1 и 1.05 соответственно. Результат рассчитывается так:

r = (1.1 + 1.1 + 1.05) // 1.25 damage = 40 \ (r - 1.0 + 1) // 32.0

Финальная формула

Pi=(((mi−1)∗hi)+1)−b+1P_{i} =(((m_{i} - 1) * h_{i}) + 1) - b + 1 Pi​=(((mi​−1)∗hi​)+1)−b+1

i - индекс элемента на конечности

C=(∑i=0n−1Pi)−nC=(\sum_{i=0}^{n-1}P_{i}) - nC=(i=0∑n−1​Pi​)−n

С - сумма результатов всех элементов брони на данной конечности

y=VCy =\frac{V}{C}y=CV​

V

Входной урон

C

Коэфециент защиты для данной конечности

P

Защита каждого элемента брони на данной конечности

n

Количество элементов брони на данной конечности

m

Модификатор защиты

h

Модификатор перекрытия

b

BLV, Base limb vulnerability (Базовая уязвимость конечности)

double UArmor::CalculateBlockElement(double blv) const{
    return (((m - 1) * h) + 1) - blv + 1;
}
double UManager::CalculateBlockCoeficient(EHitbox hitbox, double blv) const{
    auto armor = GetArmor(hitbox);
    double sum = 0.0f;
    for(const auto& var : armor){
        sum += var->CalculateBlockElement(blv);
    }
    return sum - armor.Num();
}
double UManager::CalculateDamage(float initialDamage, 
    EDamageType damageType, EHitbox hitbox) const{
    double blv = GetBlv(damageType, hitbox);
    double c = CalculateBlockCoeficient(hitbox, blv);
    return initialDamage / c;
}
PreviousFighting systemNextTech evolution

Last updated 1 year ago