Game/HollowRun.cs
namespace Monolith;
public enum HollowKind
{
None,
/// <summary>No Drones. Everything has to be shot by hand.</summary>
Handmade,
/// <summary>No Demolition charges at all. The whole ability is off the table.</summary>
Unarmed,
/// <summary>Upgrades cost triple. The run is about routing, not spending.</summary>
Austere,
}
public sealed class HollowDef
{
public HollowKind Kind;
public string Name;
public string Rule;
}
/// <summary>
/// Opt-in restricted runs. They pay Cores and nothing else, so they are pure prestige
/// progression and never sit on the critical path.
///
/// Cookie Clicker's Born Again run works because the restriction changes what you *think*
/// about, not merely how long you wait. Each of these removes a system outright rather than
/// scaling a number, for the same reason.
/// </summary>
public static class HollowRuns
{
public static readonly HollowDef[] All =
{
new()
{
Kind = HollowKind.Handmade,
Name = "Handmade",
Rule = "Drones do nothing. Every cube is one you shot.",
},
new()
{
Kind = HollowKind.Unarmed,
Name = "Unarmed",
Rule = "No demolition charges. No bores, no active reloads.",
},
new()
{
Kind = HollowKind.Austere,
Name = "Austere",
Rule = "Upgrades cost triple.",
},
};
public static HollowDef Get( HollowKind kind ) => All.FirstOrDefault( h => h.Kind == kind );
/// <summary>Cost multiplier applied to every upgrade under the active restriction.</summary>
public static double CostMultiplier( HollowKind kind )
=> kind == HollowKind.Austere ? 3.0 : 1.0;
public static bool DronesDisabled( HollowKind kind ) => kind == HollowKind.Handmade;
public static bool DemolitionDisabled( HollowKind kind ) => kind == HollowKind.Unarmed;
}