Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
using static CultMath.math;
|
|
|
|
|
using static ItemRotation;
|
|
|
|
|
|
|
|
|
|
public sealed class Arcs : Scenario
|
|
|
|
|
{
|
|
|
|
|
public override string Name => "Arcs";
|
2026-10-11 21:04:09 +02:00
|
|
|
public override string Brief => "The Smoke Test Hull with forward mounts and a side mount on each flank; a bare hull off the bow, one off " +
|
|
|
|
|
"the stern, one abeam to port, one abeam to starboard, and a hostile turret. Verify: the hull keeps its " +
|
2026-10-08 13:25:53 +02:00
|
|
|
"heading while you aim at the stern hull, and the forward guns hold. Designate the bow hull and fire with the " +
|
2026-10-11 21:04:09 +02:00
|
|
|
"aim anywhere: the forward guns fire on it and hit. The side guns fire at their beam hull and never through " +
|
|
|
|
|
"the hull. Designate the starboard hull, aim ahead and fire its group: it fires on the hull without the aim " +
|
|
|
|
|
"and the port group holds; undesignate and aim to port: the port group fires free. The turret tracks you " +
|
|
|
|
|
"all the way round.";
|
2026-10-03 21:59:17 +02:00
|
|
|
public override uint Seed => 103;
|
Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
public override bool Ambient => false;
|
|
|
|
|
|
2026-10-11 21:04:09 +02:00
|
|
|
// Where the targets sit: the player is at the origin facing +z. The forward mounts fire forward, the starboard mount
|
|
|
|
|
// (Clockwise) along +x and the port mount (CounterClockwise) along -x.
|
2026-10-11 22:35:25 +02:00
|
|
|
public static readonly CultMath.float2 Bow = float2(0, 400), Stern = float2(0, -400), Turret = float2(600, 300),
|
2026-10-11 21:04:09 +02:00
|
|
|
Port = float2(-400, 0), Starboard = float2(400, 0);
|
Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
|
|
|
|
|
public override Galaxy Generate(GalaxyStage stage) => stage.Prelude();
|
|
|
|
|
|
|
|
|
|
public override void Stage(ScenarioStage stage)
|
|
|
|
|
{
|
2026-10-11 21:04:09 +02:00
|
|
|
var fighter = stage.Fit("Smoke Test Hull",
|
2026-10-11 21:32:50 +02:00
|
|
|
("Cockpit 2x2", int2(4, 6), None),
|
2026-10-08 13:44:48 +02:00
|
|
|
("Large Drive", int2(3, 0), Reversed),
|
2026-10-11 21:32:50 +02:00
|
|
|
("Large Drive", int2(5, 0), Reversed),
|
2026-10-13 20:29:10 +02:00
|
|
|
("Rugged Drive", int2(4, 14), CounterClockwise),
|
|
|
|
|
("Rugged Drive", int2(5, 14), Clockwise),
|
|
|
|
|
("Compact Reactor", int2(4, 4), None),
|
2026-10-16 22:10:58 +02:00
|
|
|
("GT 3K", int2(2, 5), None), // Guided Missile Launcher
|
|
|
|
|
("GT 3K", int2(7, 5), None), // Guided Missile Launcher
|
|
|
|
|
("FastBlast+-", int2(3, 8), None), // Cell Blaster
|
|
|
|
|
("FastBlast+-", int2(6, 8), None), // Cell Blaster
|
2026-10-13 20:29:10 +02:00
|
|
|
("Radiator", int2(4, 2), CounterClockwise),
|
|
|
|
|
("Radiator", int2(5, 2), Clockwise),
|
2026-10-16 22:10:58 +02:00
|
|
|
("not if i see you first", int2(5, 10), None), // Compact Sensor
|
|
|
|
|
("Panopticon Prime", int2(3, 6), Clockwise), // Fire Control Array
|
|
|
|
|
("🫳🔫", int2(8, 4), Clockwise), // Autocannon
|
|
|
|
|
("ChargeBlast SG", int2(0, 4), CounterClockwise)); // Charged Scatter Blaster
|
Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
var turret = stage.Fit("Turret",
|
2026-10-16 22:10:58 +02:00
|
|
|
("ClearPath", int2(1, 2), None), // Light Machine Gun
|
|
|
|
|
("ClearPath", int2(5, 2), None), // Light Machine Gun
|
2026-10-13 20:29:10 +02:00
|
|
|
("Long Radiator", int2(0, 2), CounterClockwise),
|
|
|
|
|
("Long Radiator", int2(7, 2), Clockwise),
|
|
|
|
|
("Compact Reactor", int2(3, 3), None),
|
Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
("Turret Control Module", int2(3, 5), None),
|
2026-10-16 22:10:58 +02:00
|
|
|
("not if i see you first", int2(4, 5), None), // Compact Sensor
|
|
|
|
|
("Panopticon Prime", int2(3, 6), None)); // Fire Control Array
|
Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
|
|
|
|
|
stage.Player(fighter, float2(0, 0), facing: float2(0, 1));
|
2026-10-08 13:44:48 +02:00
|
|
|
stage.Place(stage.Bare("Longinus"), Bow);
|
|
|
|
|
stage.Place(stage.Bare("Longinus"), Stern);
|
Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
stage.Place(turret, Turret, stance: ScenarioStance.Hostile);
|
2026-10-11 21:04:09 +02:00
|
|
|
stage.Place(stage.Bare("Longinus"), Port);
|
|
|
|
|
stage.Place(stage.Bare("Longinus"), Starboard);
|
Every new run is a scenario: the script harness, the tutorial and main galaxies as scenarios, the New Game submenu and six test arenas
A Scenario is an abstract C# class compiled with the game: Generate picks the galaxy through GalaxyStage (Main or
Prelude, at the scenario's seed, the background noise drawn from the same seed), Stage places the run's first
entities through ScenarioStage (Fit, Bare, Generated, Preset, Player, Place, Cargo), which collects named failures
and admits nothing. RunStart generates the galaxy, the arena under Ambient and admits everything through Zone.Admit,
all or nothing. The aetheria.scenario record, ScenarioShip, ScenarioEntity, RunStart.Check and the null-scenario
branch are cut.
New Game opens a submenu: Tutorial Galaxy and Main Galaxy, then (editor and development builds) Djinni Shakedown,
Starved Reactor, Arcs, Duel, Launcher Angles and Long Haul, each with its brief. MainMenu.Launch is the one way into a
new run; ActionGameManager.PendingScenario carries the scenario to StartGame once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:33:55 +02:00
|
|
|
}
|
|
|
|
|
}
|