From 12053fd7fbf64cce01ff028c67906d7721bfa283 Mon Sep 17 00:00:00 2001 From: OBilo <54061981+Keshash@users.noreply.github.com> Date: Sun, 15 Feb 2026 22:49:38 +0200 Subject: [PATCH 1/2] Add shooting skill comparison to sway stat page --- Defs/Stats/Stats_Weapons_Ranged.xml | 1 + Languages/English/Keyed/Stats.xml | 1 + .../StatWorkers/StatWorker_SwayFactor.cs | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_SwayFactor.cs diff --git a/Defs/Stats/Stats_Weapons_Ranged.xml b/Defs/Stats/Stats_Weapons_Ranged.xml index 9b4c307a2a..b1d4d448de 100644 --- a/Defs/Stats/Stats_Weapons_Ranged.xml +++ b/Defs/Stats/Stats_Weapons_Ranged.xml @@ -98,6 +98,7 @@ FloatTwo false 894 + CombatExtended.StatWorker_SwayFactor
  • diff --git a/Languages/English/Keyed/Stats.xml b/Languages/English/Keyed/Stats.xml index f609818007..d78fc9571a 100644 --- a/Languages/English/Keyed/Stats.xml +++ b/Languages/English/Keyed/Stats.xml @@ -11,5 +11,6 @@ Long range radio Picks the lowest value of available Picks the highest value of available + Baseline shooting skill needed to reduce {0} sway to {1} degrees of error: \ No newline at end of file diff --git a/Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_SwayFactor.cs b/Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_SwayFactor.cs new file mode 100644 index 0000000000..f83c510c90 --- /dev/null +++ b/Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_SwayFactor.cs @@ -0,0 +1,41 @@ +using System.Drawing; +using System.Text; +using Verse; +using RimWorld; + +namespace CombatExtended; + +public class StatWorker_SwayFactor : StatWorker +{ + private float CalculateRequiredSkill(float swayFactor, float benchmarkSwayAmplitude, out float weaponHandling) + { + weaponHandling = -((benchmarkSwayAmplitude / swayFactor) - 4.5f); + + float shootingPoints = StatDefOf.ShootingAccuracyPawn.postProcessCurve.EvaluateInverted(weaponHandling); + + if (StatDefOf.ShootingAccuracyPawn.skillNeedOffsets.Find(x => x is SkillNeed_BaseBonus) is SkillNeed_BaseBonus baseStats) + { + return (shootingPoints - baseStats.baseValue) / baseStats.bonusPerLevel; + } + + return 0f; + } + + + public override string GetExplanationFinalizePart(StatRequest req, ToStringNumberSense numberSense, float finalVal) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append(base.GetExplanationFinalizePart(req, numberSense, finalVal)); + + float benchmarkSwayAmplitude = 3.0f; + float weaponHandling = 0f; + float skillLevel = CalculateRequiredSkill(finalVal, benchmarkSwayAmplitude, out weaponHandling); + stringBuilder.AppendLine("\n\n" + "CE_StatWorker_Sway_Explanation".Translate(finalVal.ToStringByStyle(ToStringStyle.FloatTwo), + benchmarkSwayAmplitude) + + "\n" + skillLevel.ToStringByStyle(ToStringStyle.FloatOne) + + " (" + weaponHandling.ToStringByStyle(ToStringStyle.PercentZero) + " " + + StatDefOf.ShootingAccuracyPawn.label + ")"); + + return stringBuilder.ToString().TrimEndNewlines(); + } +} From eb463fbd0f4b159c8543809c514778b8d5283aef Mon Sep 17 00:00:00 2001 From: n7huntsman Date: Tue, 17 Feb 2026 21:09:03 -0500 Subject: [PATCH 2/2] caps --- Languages/English/Keyed/Stats.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Languages/English/Keyed/Stats.xml b/Languages/English/Keyed/Stats.xml index d78fc9571a..0f56457b1f 100644 --- a/Languages/English/Keyed/Stats.xml +++ b/Languages/English/Keyed/Stats.xml @@ -11,6 +11,6 @@ Long range radio Picks the lowest value of available Picks the highest value of available - Baseline shooting skill needed to reduce {0} sway to {1} degrees of error: + Baseline Shooting skill needed to reduce {0} sway to {1} degrees of error: \ No newline at end of file