Implement Arch and some additional changes

This commit is contained in:
2026-07-09 18:32:52 +02:00
parent 95cebf8df0
commit 1e53968c36
31 changed files with 980 additions and 79 deletions
+28 -2
View File
@@ -70,6 +70,7 @@ namespace KernelPanic.Combat
amount = ApplyResistancesAndWeaknesses(amount, request);
int finalAmount = ApplyShieldAndUptime(amount, request, out int absorbedAmount, out int shieldDamage, out int uptimeDamage);
ApplyArchRollingReleaseSave(request);
GameEvents.RaiseDamageDealt(new DamageDealtEvent(request.Source, request.Target, finalAmount, request.Language, amount, absorbedAmount, wasCritical, shieldDamage, uptimeDamage));
bool defeated = false;
@@ -93,7 +94,8 @@ namespace KernelPanic.Combat
}
int multiplier = request.Source == null ? 100 : Mathf.Max(0, request.Source.DamageMultiplierPercent);
return Mathf.RoundToInt(amount * (multiplier / 100f));
int currentCardMultiplier = request.Source == null ? 100 : Mathf.Max(0, request.Source.CurrentCardDamageMultiplierPercent);
return Mathf.RoundToInt(amount * (multiplier / 100f) * (currentCardMultiplier / 100f));
}
private static int ApplyFlatAdditions(int amount, DamageRequest request)
@@ -103,6 +105,11 @@ namespace KernelPanic.Combat
amount += Mathf.Max(0, request.Source.JavaScriptFlatDamageBonus);
}
if (request.Source != null && (request.Language == Language.C || request.Language == Language.Rust))
{
amount += Mathf.Max(0, request.Source.ArchBtwStacks) * Mathf.Max(1, request.Source.ArchBtwDamagePerStack);
}
return amount;
}
@@ -114,10 +121,29 @@ namespace KernelPanic.Combat
return amount;
}
wasCritical = RandomRoll.RollRange(1, 100, new RollContext(request.Source)) <= 25;
int critChance = request.Language == Language.C ? 50 : 25;
wasCritical = RandomRoll.RollRange(1, 100, new RollContext(request.Source)) <= critChance;
return wasCritical ? Mathf.CeilToInt(amount * 1.5f) : amount;
}
private static void ApplyArchRollingReleaseSave(DamageRequest request)
{
CombatantState target = request.Target;
if (target == null || target.CurrentUptime > 0 || target.ArchRollingReleaseSavesRemaining <= 0)
{
return;
}
target.ArchRollingReleaseSavesRemaining--;
target.ArchRollingReleaseAvailableThisWave = target.ArchRollingReleaseSavesRemaining > 0;
target.ArchBtwStacks = 0;
target.CurrentUptime = 1;
target.Shield += Mathf.Max(0, target.ArchRollingReleaseShieldOnSave);
target.Cycles += Mathf.Max(0, target.ArchRollingReleaseCyclesOnSave);
target.IsDefeated = false;
target.ArchRollingReleaseRecoveredThisHit = true;
}
private static int ApplyResistancesAndWeaknesses(int amount, DamageRequest request)
{
// TODO: Enemy resistances/reductions are not authored yet. Mint V5 should re-resolve