Fire control Cut 6c.1/6c.2: Resolution becomes reciprocal, targeting degrades instead of throwing
6c.1 (operator ruling 2026-09-19): Resolution stays a benefit -- higher is better -- so HitProbability derives its sensor ceiling as the reciprocal of Resolution instead of reading Resolution as the ceiling directly. The authored 1-cell/2-cell targeting systems' Resolution values move to the new scale in the next (data) commit. 6c.2: LoadoutGenerator.FillInterior no longer throws InvalidLoadoutException when no targeting-system product is available to a galaxy -- it degrades to no targeting system and logs the gap, safe only because Cut 5.1 already gave unaided fire a floor (GameplaySettings.UnaidedTracking). Adds FireControlCut6cTests.cs pinning both: HigherResolutionYieldsHigherOrEqualHitProbability (dies if Resolution is read as the ceiling directly) and NoSellerDegradesToUnaidedInsteadOfThrowing (dies if the throw is restored). dotnet test tests/Aetheria.Shared.Tests: 210 passed, 0 failed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
063804801f
commit
29fcc3ee9e
4 changed files with 313 additions and 10 deletions
|
|
@ -147,7 +147,15 @@ public static class FireControl
|
|||
|
||||
var settings = source.ItemManager.GameplaySettings;
|
||||
var info = source.EntityInfoGathered.TryGetValue(target, out var gathered) ? gathered : 0f;
|
||||
var pSensor = saturate(unlerp(settings.TargetDetectionInfoThreshold, Resolution(source), info));
|
||||
// Cut 6c, 6c.1 (operator ruling 2026-09-19): Resolution stays a benefit -- higher is better -- so the
|
||||
// formula takes its reciprocal to derive the actual info ceiling instead of reading Resolution as
|
||||
// that ceiling directly. Resolution 1 (the unaided fallback above) yields a ceiling of 1: needs
|
||||
// complete information, the floor by construction. A higher Resolution pulls the ceiling down toward
|
||||
// the detection threshold, needing less info before sensor state stops limiting hits. The max guards
|
||||
// a zero or negative authored Resolution; no authored value should ever reach it.
|
||||
var demandCeiling = settings.TargetDetectionInfoThreshold +
|
||||
(1f - settings.TargetDetectionInfoThreshold) / max(Resolution(source), 1e-3f);
|
||||
var pSensor = saturate(unlerp(settings.TargetDetectionInfoThreshold, demandCeiling, info));
|
||||
|
||||
float pSpread;
|
||||
if (weapon.Spread > 0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue