Cut 6d: the dart-throw kernel replaces the coin-flip landing rule
FireControl.Commit used to place a hit with a coin flip between exactly the aimed item and a uniform-random hull cell -- no spatial term, so a near-miss on a stern item was as likely to land in the bow as the stern. One Gaussian kernel, in hull-schematic cell units, now decides both halves of "where will this shot go": w(cell) = exp(-d^2/2*sigma^2) over every occupied cell, sigma = 1/Precision. HitProbability folds the kernel's on-hull mass share (pOnHull) into PBase at fire time (R10/Q6 unaffected); Commit draws the landing cell from the same weights. A shot that passes the roll always lands on metal -- the off-hull chance is priced into that one roll, never resolved as a second miss stage. The uniform-random branch is deleted outright, not demoted. Precision now feeds every shot's pOnHull, aimed or not, so its unaided fallback (FireControl.Precision) reads GameplaySettings.UnaidedPrecision instead of a bare 0 -- the same shape as the existing UnaidedAccuracy/ UnaidedTracking floors. pOnHull is saturated: the discrete sum over- estimates the continuous kernel's integral once sigma drops below about one cell, and a mass share cannot exceed the whole kernel. Existing fixtures across FireAuthorityTests, FireControlCut4/5/6Tests and TargetingSystemTests authored Precision as 0 (or relied on the old 0 fallback) purely as a don't-care value under the coin-flip rule, where it only gated the aimed-item branch. Under the kernel it drives every shot's sigma, so those fixtures are re-authored to keep pOnHull near its ceiling and stay pinned on what they actually test. mutation_tests_fire_control_cut3.sh's two anchors into HitProbability's return line and the deleted coin-flip branch are updated to the equivalent lines/mutations on the new code.
This commit is contained in:
parent
077b08e662
commit
d528d88883
9 changed files with 168 additions and 33 deletions
|
|
@ -227,6 +227,18 @@ public class GameplaySettings
|
|||
// fire-time-projection deviation forgiveness is the first guess and the operator's knob, the same shape
|
||||
// as UnaidedAccuracy: authored deliberately bad, not authored broken.
|
||||
public float UnaidedTracking = 10f;
|
||||
// Cut 6d (docs/fire-control-cut.md): the unaided fallback for Precision, alongside UnaidedAccuracy and
|
||||
// UnaidedTracking above -- FireControl.Precision falls back to this the same way it already falls back to
|
||||
// UnaidedAccuracy/UnaidedTracking. Precision is now a grouping tightness (FireControl.Sigma = 1/Precision,
|
||||
// in hull-schematic cell units), not the old coin-flip probability, so the unaided floor has to be
|
||||
// authored on that scale. .3 -> sigma 3.33 cells: against the live catalog's own hulls (LonginusX 6x17,
|
||||
// Zenith 12x12, Turret 8x8) that puts pOnHull at the hull's own centre of mass around .5-.84 -- broadly
|
||||
// sprayed across the whole silhouette (sigma is a large fraction of the hull's own width) while still
|
||||
// landing on the ship more often than not. A tighter floor (e.g. .1, sigma 10) was tried first and
|
||||
// rejected: it drove pOnHull for the same hulls down to .08-.18, reading as "can't hit the broad side of a
|
||||
// barn" rather than "sprays the silhouette." First guess, the same deliberately-bad shape as its two
|
||||
// siblings; the operator rules the real figure in play.
|
||||
public float UnaidedPrecision = .3f;
|
||||
public float AgentRangeExponent = .25f;
|
||||
public float AgentForwardLerp = .5f;
|
||||
public float AgentMaxForwardDistance = 50;
|
||||
|
|
|
|||
Loading…
Reference in a new issue