Steal An EggDocumentation← Portfolio

#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 to Config.Economy.FRIEND_BONUS_MAX = 0.5, at +0.1 per friend.
  • incomeMul — 2 with the DoubleMoney pass.
  • 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.

BucketRoll weightWeight multiplier
Tiny320.55 – 0.85
Small360.85 – 1.25
Normal221.25 – 2
Large6.54 – 8
Huge2.58 – 16
Giant0.816 – 32
Titanic0.1732 – 60
Colossal0.0360 – 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.

MutationMultiplierNatural weightSource
Normal1—default
Silver1.26hatch
Bloom1.250Great Bloom event
Golden2.54hatch
Spirit Bloom2.50Sakura Incubator
Fractured2.750Mutation Shard consumable
Parasite30Parasite event
Rainbow3.51hatch
Monstrous30Hungry 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

RarityRankIncome multiplierBase weightModel scale
Common1111.0
Uncommon221.51.05
Rare342.51.1
Epic4841.2
Legendary51661.8
Mythic63292.6
Cosmic764143.6
Secret8128205.0
Eternal9256307.0
Divine105124510.0
Event1164144.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:

LevelPriceSlots
007
11,0007
21,000,0009
375,000,00010
4500,000,00011
51,000,000,00012
650,000,000,00013
7500,000,000,00014
81,000,000,000,00015
925,000,000,000,00016
10100,000,000,000,00017
11500,000,000,000,00018
Extra settingValue
Config.Plot.PET_SLOTS_MAX22 — hard ceiling including pass bonuses
Config.Plot.PET_SLOT_SPACING9 studs minimum between placed pets
ExtraSlots pass+4 slots on top of the pen level
equipBestPetsPlaces 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.