Game/Idle/IdlePet.cs
using System;
/// <summary>
/// The pet is the Reactor's Fragment sink.
///
/// Cores buy upgrades that reset on Meltdown, and Flux buys perks that never do.
/// The pet sits outside both: Fragments condense slowly, on a daily ceiling, and
/// go into a permanent output multiplier that takes weeks rather than hours to
/// finish. It is the long-horizon goal that survives every reset.
/// </summary>
public static class IdlePet
{
public const int MaxLevel = 6;
/// <summary>Fragments needed to go from <paramref name="level"/> to the next one.</summary>
public static int CostToUpgrade( int level ) => level switch
{
1 => 120,
2 => 300,
3 => 700,
4 => 1_500,
5 => 3_200,
_ => 0,
};
/// <summary>Total Fragments to take a fresh pet all the way to level 6.</summary>
public static int TotalCost
{
get
{
int total = 0;
for ( int lvl = 1; lvl < MaxLevel; lvl++ ) total += CostToUpgrade( lvl );
return total;
}
}
public static bool IsMaxed( int level ) => level >= MaxLevel;
/// <summary>Reactor output multiplier granted by the pet, before Pet Link.</summary>
public static double OutputBonus( int level ) => 0.15 * Math.Max( 0, level - 1 );
public static string Name( int level ) => level switch
{
1 => "Mysterious Egg",
2 => "Cat",
3 => "Wolf",
4 => "Tiger",
5 => "Baby Drake",
_ => "Dragon",
};
public static string Emoji( int level ) => level switch
{
1 => "🥚",
2 => "🐱",
3 => "🐺",
4 => "🐯",
5 => "🐣",
_ => "🐉",
};
public static string Blurb( int level ) => level switch
{
1 => "Something is moving in there. Feed it Fragments and find out what.",
2 => "It watches the reactor and purrs at every chain.",
3 => "Faster, hungrier, and it has started organising the drones.",
4 => "Big enough now to shove chests into the blast radius itself.",
5 => "Wings, and the beginnings of a temper.",
_ => "Fully grown. The reactor runs hot around it.",
};
}