AI draws from its own dice: the range-sample offset and the patrol circuit leave ItemManager.Random

Combat.SampleDps and Zone.CreateAgent's patrol circuit drew from the item stream, so minting items moved
how a pilot fights and where it patrols. Both now draw SimulationDice.For(CombatSeed, stream, Agent.Id);
Agent.Id is the zone-scoped ordinal Zone.NextAgentId gives a pilot at admission (ruling
ai-sample-offset-off-item-stream).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-17 20:46:37 +02:00
commit 72d7e25df0
5 changed files with 40 additions and 3 deletions

View file

@ -10,6 +10,10 @@ public static class SimulationDice
{
public const uint LootStream = 1;
public const uint MineStream = 2;
// A pilot's own decisions, ordinal Agent.Id: its preferred engagement range and its patrol circuit. AI behaviour
// never rides ItemManager.Random, so minting items cannot change how a pilot fights.
public const uint CombatSampleStream = 3;
public const uint PatrolStream = 4;
// 9.1 (docs/fire-control-cut.md): fmix32, MurmurHash3's 32-bit finalizer -- xor-shift, multiply,
// xor-shift, multiply, xor-shift. Diffuses a structured seed (a zone seed XORed with a small,