Scenario Briefs (Crossing, Duel, FusedRounds, LauncherAngles, StarvedReactor, WeaponFeel), scenario and test comments and test locals say the design names (Lightning Projector, Light Laser, Cell Blaster, Guided Missile Launcher, Swarm Rocket Pod, Muon Fusion Reactor, Cluster Cannon, Charged Scatter Blaster, Rugged Drive, Racing Drive) instead of the retired brand names; Crossing.PlightRange is ProjectorRange. generic-designs: the batch carries ExpectUnchanged so every record it does not author keeps its bytes (the plain commit re-encoded four records, dropping SensorData key 7). DesignTexts rewrites Large Drive, Tractor Beam, Smoke Proximity, Smoke Delayed, Smoke Refused and Smoke Refused Charge as tech-node text; the Tractor Beam's old line moves to its product Space Tractor. smoke-rounds' authored text names Light Laser and Charged Scatter Blaster to match. Tests: NoScenarioBriefNamesRetiredGear, TheCapacitorDesignCarriesItsRoleMap, NoDesignTextNamesAProduct, and a command test that widens every payload and checks apply changes only the three records it authors and restores the rewritten texts. Not built or run at this commit; GameData/Aetheria.cc is regenerated in the next commit, so NoDesignTextNamesAProduct and the command test fail here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
51 lines
3.3 KiB
C#
51 lines
3.3 KiB
C#
using static CultMath.math;
|
|
using static ItemRotation;
|
|
|
|
public sealed class FusedRounds : Scenario
|
|
{
|
|
public override string Name => "Fused Rounds";
|
|
public override string Brief => "The Smoke Test Hull with Smoke Proximity, Smoke Delayed and a Cluster Cannon; a hostile bare Longinus at mid range, a bare " +
|
|
"hull dead ahead, a fragile one to starboard, a close one inside the proximity blast radius, and one astern. " +
|
|
"Verify with nothing selected: aim past every hull and the round bursts at max range along the aim; aim at the hull " +
|
|
"ahead and it stops and bursts on it; fire at the fragile hull and kill it with the Cluster Cannon before the round " +
|
|
"lands: no burst. Select the astern hull: the round fires and bursts at its range along the arc edge. Select the " +
|
|
"close hull: the burst is pushed out to the blast radius from your centre. A Smoke Proximity burst beside the " +
|
|
"Longinus damages where the model shows the blast; a Smoke Delayed round into its nose bursts inside. The HUD " +
|
|
"reads Direct, Burst at N m or Refused for the fused weapons and a percentage for the Cluster Cannon, and the " +
|
|
"smoke weapons show no Manufacturer row.";
|
|
public override uint Seed => 108;
|
|
public override bool Ambient => false;
|
|
|
|
// Where everything sits: the player is at the origin facing +z. Ahead lies on the initial aim line, inside every forward
|
|
// mount's arc. Fragile is a bare Longinus inside the Cluster Cannon's range; Close is inside Smoke Proximity's blast radius
|
|
// (8 m from the ship's centre) and beside the aim line, not across it; Stern is outside every mount's arc.
|
|
public static readonly CultMath.float2 Mid = float2(-200, 600), Ahead = float2(0, 300), Fragile = float2(140, 420),
|
|
Close = float2(6.4f, 4f), Stern = float2(0, -400);
|
|
|
|
public override Galaxy Generate(GalaxyStage stage) => stage.Prelude(DemoTerminus.Cast);
|
|
|
|
public override void Stage(ScenarioStage stage)
|
|
{
|
|
var shooter = stage.Fit("Smoke Test Hull",
|
|
("Cockpit 2x2", int2(4, 6), None),
|
|
("Large Drive", int2(3, 0), Reversed),
|
|
("Large Drive", int2(5, 0), Reversed),
|
|
("Rugged Drive", int2(4, 14), CounterClockwise),
|
|
("Rugged Drive", int2(5, 14), Clockwise),
|
|
("Compact Reactor", int2(4, 4), None),
|
|
("Smoke Proximity", int2(3, 8), None),
|
|
("Smoke Delayed", int2(6, 8), None),
|
|
("Cluster Cannon", int2(5, 17), None),
|
|
("Radiator", int2(4, 2), CounterClockwise),
|
|
("Radiator", int2(5, 2), Clockwise),
|
|
("Compact Sensor", int2(5, 10), None),
|
|
("Fire Control Array", int2(3, 6), Clockwise));
|
|
|
|
stage.Player(shooter, float2(0, 0), facing: float2(0, 1));
|
|
stage.Place(stage.Bare("Longinus"), Mid, stance: ScenarioStance.Hostile);
|
|
stage.Place(stage.Bare("Longinus"), Ahead);
|
|
stage.Place(stage.Bare("Longinus"), Fragile);
|
|
stage.Place(stage.Bare("Longinus"), Close);
|
|
stage.Place(stage.Bare("Longinus"), Stern);
|
|
}
|
|
}
|