// One delivered HQ order drives a continuous native loading/firing cycle. class ERR_MortarSalvo { static const int ROUNDS = 8; static const float RADIUS_METRES = 40; static const float TIMEOUT_MS = 120000; static vector Offset(int site, int order, int shot) { // Stable throughout one ballistic solve; successive shells cover the disk // instead of clustering on the same point or changing every iteration. float radius = RADIUS_METRES * Math.Sqrt((shot + 1.0) / ROUNDS); float angle = (site * 53 + order * 97 + shot * 137.5) * Math.DEG2RAD; return Vector(Math.Sin(angle) * radius, 0, Math.Cos(angle) * radius); } }