#Pets, Sizes & Mutations
#Income formula
Only placed pets earn. IncomeService.recompute sums pet.income over profile.placedPets and then applies the player multipliers:
total = base × (1 + friendBonus) × incomeMul × max(1, incomeBoostMul)
friendBonus— up toConfig.Economy.FRIEND_BONUS_MAX = 0.5, at+0.1per friend.incomeMul— 2 with theDoubleMoneypass.incomeBoostMul— temporary boosts from the boss shop or from admin abuse.
The tick runs every Config.Economy.INCOME_TICK (1 second) and adds rate × real elapsed time, so a lagging server does not lose income. Config.Economy.OFFLINE_INCOME is false: nothing accrues while the player is away.
#A single pet
MutationService.computeIncome is the per-pet formula:
income = baseIncome × sizeIncomeMultiplier(weightRatio) × mutationMultiplier
baseIncome comes from Catalog: Config.PetIncome[id] first, then the wiki value, then zone.incomeBase × Config.RarityIncomeMul[rarity]. The size curve is deliberately sub-linear:
r = weight / baseWeight
if r <= 125: mul = r ^ (37/60)
else: mul = 125 ^ (37/60) × (r / 125) ^ (2/5)
That is the Config.Size.DIMINISHING_THRESHOLD = 125 soft cap. Past 125× a pet's base weight, extra weight buys far less income — the reason a Colossal is strong but not game-ending.
#Size buckets
Config.Size.Buckets is both the roll table and the labels shown in the UI. The weights add up to 100, so they read directly as percentages.
| Bucket | Roll weight | Weight multiplier |
|---|---|---|
| Tiny | 32 | 0.55 – 0.85 |
| Small | 36 | 0.85 – 1.25 |
| Normal | 22 | 1.25 – 2 |
| Large | 6.5 | 4 – 8 |
| Huge | 2.5 | 8 – 16 |
| Giant | 0.8 | 16 – 32 |
| Titanic | 0.17 | 32 – 60 |
| Colossal | 0.03 | 60 – 100 |
Visual scale is handled separately: MutationService.visualScale maps the weight ratio onto VISUAL_MIN = 0.6 … VISUAL_MAX = 2.6, so a Colossal pet looks huge without literally being 60× the model.
#Mutations
Config.Mutations lists every mutation with its income multiplier and how it is obtained. Only entries with naturalWeight > 0 can roll at hatch time, using Config.MUTATION_ROLL_DENOMINATOR = 100 — so those weights are percentage chances.
| Mutation | Multiplier | Natural weight | Source |
|---|---|---|---|
| Normal | 1 | — | default |
| Silver | 1.2 | 6 | hatch |
| Bloom | 1.25 | 0 | Great Bloom event |
| Golden | 2.5 | 4 | hatch |
| Spirit Bloom | 2.5 | 0 | Sakura Incubator |
| Fractured | 2.75 | 0 | Mutation Shard consumable |
| Parasite | 3 | 0 | Parasite event |
| Rainbow | 3.5 | 1 | hatch |
| Monstrous | 3 | 0 | Hungry Frog event |
Config.MUTATION_SHARD_CHANCE = 0.10 is the chance a mutation shard rolls Fractured when consumed. MutationService.applyEventMutation refuses to apply a mutation that already has a natural roll path, which keeps event rewards from double-dipping.
#Rarities
| Rarity | Rank | Income multiplier | Base weight | Model scale |
|---|---|---|---|---|
| Common | 1 | 1 | 1 | 1.0 |
| Uncommon | 2 | 2 | 1.5 | 1.05 |
| Rare | 3 | 4 | 2.5 | 1.1 |
| Epic | 4 | 8 | 4 | 1.2 |
| Legendary | 5 | 16 | 6 | 1.8 |
| Mythic | 6 | 32 | 9 | 2.6 |
| Cosmic | 7 | 64 | 14 | 3.6 |
| Secret | 8 | 128 | 20 | 5.0 |
| Eternal | 9 | 256 | 30 | 7.0 |
| Divine | 10 | 512 | 45 | 10.0 |
| Event | 11 | 64 | 14 | 4.0 |
Rarity drives glow as well: Features.Glow starts lighting models from rank 5 and adds sparkles from rank 8.
#Pet slots
Config.Pen defines base capacity. Each level costs cash and unlocks more slots, up to MAX_LEVEL = 11:
| Level | Price | Slots |
|---|---|---|
| 0 | 0 | 7 |
| 1 | 1,000 | 7 |
| 2 | 1,000,000 | 9 |
| 3 | 75,000,000 | 10 |
| 4 | 500,000,000 | 11 |
| 5 | 1,000,000,000 | 12 |
| 6 | 50,000,000,000 | 13 |
| 7 | 500,000,000,000 | 14 |
| 8 | 1,000,000,000,000 | 15 |
| 9 | 25,000,000,000,000 | 16 |
| 10 | 100,000,000,000,000 | 17 |
| 11 | 500,000,000,000,000 | 18 |
| Extra setting | Value |
|---|---|
Config.Plot.PET_SLOTS_MAX | 22 — hard ceiling including pass bonuses |
Config.Plot.PET_SLOT_SPACING | 9 studs minimum between placed pets |
ExtraSlots pass | +4 slots on top of the pen level |
equipBestPets | Places your strongest pets into the available slots |
Placed pets walk around the pen while Features.Base.PET_ROAMING is on (PetRoamService), and only placed pets count toward income.
#Announcements
Features.Announcements publishes hatches at or above MIN_RARITY_RANK = 8 (Secret and up) and forwards rank 10+ (Divine) to other servers over the SAE_Announce MessagingService topic with a three-second cooldown.