Одержимость: прицел мимо своего тела, плевок мутанта в прицел

- AimPoint пропускает тело одержимого: у крупных зомби луч камеры упирался в свою спину - прицел не краснел, удары и выстрелы шли в себя.
- Плевок мутанта (E): скорость снарядов пересчитывается навесом в цель под прицелом (до 15 м), вместо ванильного веера под ноги; подсказка на 13 языках.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-13 13:05:25 +03:00
co-authored by Claude Opus 5.5
parent 5b69e0c04f
commit 85a7c2721e
3 changed files with 60 additions and 6 deletions
+24
View File
@@ -352,4 +352,28 @@ namespace NecromancerTome
}
}
}
/// <summary>Плевок одержимого мутанта - в прицел (указание 13.10: «у мутанта атака не целится»). Ванильный
/// ItemActionVomit мутанта бросает снаряды веером под ноги (SpreadVerticalOffset -50, разброс 90° вбок) со
/// скоростью 4.5 м/с - ИИ так поливает того, кто вплотную. Здесь после вылета скорость каждого снаряда
/// пересчитывается навесом в Possession.SpitTarget, как ProjectileMoveScript.Fire делает для _isBallistic, с
/// небольшим разбросом между снарядами очереди.</summary>
[HarmonyPatch(typeof(ProjectileMoveScript), nameof(ProjectileMoveScript.Fire))]
public static class Patch_ProjectileMoveScript_Fire_PossessedSpit
{
public static void Postfix(ProjectileMoveScript __instance, Vector3 _idealStartPos, Entity _firingEntity)
{
if (!Possession.IsPossessed(_firingEntity) || PossessionPowers.Current != PossessionPowers.Kind.Mutant ||
__instance.itemActionProjectile == null || __instance.itemActionProjectile.FlyTime < 0f)
{
return;
}
Vector3 from = _idealStartPos.y != 0f ? _idealStartPos : __instance.transform.position + Origin.position;
Vector3 d = Possession.SpitTarget(from) + Random.insideUnitSphere * 0.4f - from;
float t = Mathf.Clamp(d.magnitude / 12f, 0.2f, 1.2f);
__instance.velocity = d / t;
__instance.velocity.y -= __instance.gravity * 0.5f * t;
__instance.flyDirection = __instance.velocity.normalized;
}
}
}