Every scenario, and the test Scripted scenario, names an Id; Name is display only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 lines
1.6 KiB
C#
36 lines
1.6 KiB
C#
// A scenario is one way to set up a new run (docs/scenarios-cut.md, R): a script, compiled with the game, that says
|
|
// which galaxy to generate and what the run starts with. New Game lists them (Scenarios). RunStart runs one: it
|
|
// generates the galaxy through GalaxyStage, the arena under Ambient, and admits what Stage placed through a
|
|
// ScenarioStage. A scenario only declares; once staged, everything it placed is ordinary run state.
|
|
public abstract class Scenario
|
|
{
|
|
public abstract string Name { get; }
|
|
|
|
// The scenario's stable identity: kebab-case, unique across Scenarios, never shown to the player, recorded by
|
|
// matches and replays. Name is display only.
|
|
public abstract string Id { get; }
|
|
|
|
// The conditions and what to verify in them, shown under the scenario's button.
|
|
public abstract string Brief { get; }
|
|
|
|
// Zero draws the seed from the clock, so each launch is a new galaxy. Anything else fixes the galaxy, its
|
|
// background, its arena and every fit, each item's maker and workmanship included, so every launch has the same
|
|
// layout.
|
|
public virtual uint Seed => 0;
|
|
|
|
// False: the arena keeps its planets, orbits and stations but generates no ship or turret, so nothing wanders into
|
|
// the scenario's conditions.
|
|
public virtual bool Ambient => true;
|
|
|
|
// Which galaxy the run is in: stage.Main() or stage.Prelude().
|
|
public abstract Galaxy Generate(GalaxyStage stage);
|
|
|
|
// What the run starts with: exactly one stage.Player, and anything else the scenario places.
|
|
public abstract void Stage(ScenarioStage stage);
|
|
}
|
|
|
|
public enum ScenarioStance
|
|
{
|
|
Neutral,
|
|
Hostile
|
|
}
|