Combat¶
Концепт боевого баланса: stealth должен побеждать силу, но прямой бой должен быть читаемым и переживаемым.
Принципы¶
- Backstab - главный способ убивать цель выше своего Power.
- Прямой бой - длительный, но не мгновенно смертельный: ошибка наказывается, но дает окно для dodge/extract.
- Ranged-мобы стреляют редко, сильно и с telegraph.
- Melee-мобы давят позицией, а не безостановочным DPS.
- Rival raiders скейлятся от игрока и остаются PvP-угрозой.
- Power влияет на прямой урон, но не отменяет stealth.
Power¶
playerPower = ATK*6 + HP*0.9 + Crit*4 + Speed*2
mobPower = mobHp*0.9 + mobAtk*6 + visR*0.8
raiderPower = playerPower * random(0.62, 1.25)
UI-оценка врага:
| Условие | Цвет | Значение |
|---|---|---|
| enemyPower <= playerPower * 0.8 | Green | Можно брать в прямой бой |
| enemyPower >= playerPower * 1.25 | Red | Лучше избегать/backstab |
| Иначе | Amber | Рискованный бой |
Power-check damage¶
ratio = attackerPower / defenderPower
damage *= clamp(ratio ^ 0.35, 0.55, 1.70)
Исключения:
- Backstab не проходит Power-check.
- Урон моба по игроку не демпится Power-check: если игрок был раскрыт, попадание должно быть страшным.
- PvP с rival raider остается симметричным.
Player damage¶
meleeDamage = ATK
backstabDamage = ATK * (1.5 + Crit/100) * backstabBonus
rangedDamage = ATK * 0.6 * weapon.dmgMult
mobSetDamage = damage * 1.30, если активен Hunter и цель mob
Backstab arcs:
| Параметр | Значение | Смысл |
|---|---|---|
| backstabArc | 0.55 * PI | Широкая rear/side зона для committed hit |
| autoBackstabArc | 0.72 * PI | Более строгая зона для пассивного auto-backstab |
| meleeReach | 25px | Добавка к радиусам удара |
| meleeCd | 0.9s | КД игрока |
| meleeToFireLock | 0.5s | Пауза автоогня после silent backstab |
Weapon timings¶
| Архетип | Mag | FireCd | Reload | DmgMult | Роль |
|---|---|---|---|---|---|
| Assault | 5 | 0.26s | 1.8s | 1.00 | baseline |
| SMG | 6 | 0.13s | 1.3s | 0.85 | close sustained |
| Shotgun | 5 | 0.55s | 2.0s | 0.45 x 6 pellets | close burst |
| Sniper | 2 | 1.0s | 2.8s | 1.90 | poke / punish |
Mob combat timings¶
| Система | Значение | Смысл |
|---|---|---|
| enemy atkCdMul | 1.5 | Все враги атакуют реже, но не слабее за удар |
| mobMeleeCd | 0.7s * atkCdMul | Базовый melee swing |
| lunge windup | 0.65s | Читаемый старт рывка |
| lunge lockLead | 0.18s | Момент фиксации направления |
| lungeTime | 0.30s | Сам рывок |
| lungeSpeed | 480 px/s | Скорость рывка |
| lungeDmg | ATK * 2.0 | Тяжелое попадание |
| lungeCd | 1.7s * atkCdMul | Окно между рывками |
| simpleMelee | ATK * 0.7 | Ближний простой удар |
Armor / weak point¶
front cone < 0.95 rad: damage *= 0.25
rear angle > 2.1 rad: damage *= 1.60
flank: damage *= 0.65
backstab: armor ignored
Это делает прямую стрельбу в лицо плохим решением, но оставляет понятные альтернативы: фланг, тыл, backstab, dodge через wind-up.
Detection timings¶
detectionFillRate = proximityMultiplier / detectTime
detectTime = 0.9s
proximityMultiplier = lerp(0.5, 1.8, closeness)
inBushFill *= 0.5
Suspicion/spotted threshold сейчас общий: alertSpotted = 0.5. Чем ближе игрок и чем хуже cover, тем быстрее моб переходит в бой.