Steal An EggDocumentation← Portfolio

#Growing & Hatching

#Where an egg goes

When a carried egg is delivered, GrowthService.startGrowth runs. With Features.Base.FREE_PLACEMENT = true the player may place the egg anywhere inside their base region, up to Features.Base.MAX_GROWING = 12 eggs at once and MAX_REACH = 70 studs from the base centre. Placement respects MIN_SPACING = 5 and EDGE_INSET = 2.5, and Config.Plot.REQUIRE_PRESENCE_TO_PLACE = true means the player must be standing there.

Turn free placement off and the slot system returns: Config.Plot.GROWTH_SLOTS = 6 slots spaced 7 studs apart, with legacy slot coordinates converted on load by PlotService.legacySlotLocal.

#Grow time

Duration comes from the pet's catalog entry:

duration = max(GrowthService.MIN_GROW_SECONDS, egg.growSeconds / growthMul)
  • egg.growSeconds is the WikiPets override when present, otherwise Config.RarityGrowSeconds[rarity].
  • growthMul is the runtime multiplier: 2 with the DoubleGrowth pass, and Features.DayNight.HATCH_SPEED_MUL = 30 during the night window.
  • GrowthService.MIN_GROW_SECONDS = 10, so even a heavily boosted egg still takes ten seconds.
  • The tutorial's first egg ignores the table and uses Config.Tutorial.FIRST_EGG_GROW_SECONDS = 3.
RarityDefault grow seconds
Common30
Uncommon60
Rare120
Epic240
Legendary480
Mythic900
Cosmic1,500
Secret2,400
Eternal3,600
Divine5,400
Event1,200

#Visual growth

The egg passes through three visual stages (GROW_STAGES = { 1.0, 1.5, 2.0 }) at thirds of its timer, animating with a back-out ease over 0.25 s. A billboard above the egg reads Egg with a countdown such as 2h 59m, switching to READY! when the timer expires; the hatch prompt stays disabled until then. After every scale change the model is re-seated on the ground so it never sinks into the base.

#Grow All

growAll finishes every running timer at once:

  • the first use inside each Config.Economy.GROW_ALL_FREE_COOLDOWN window (600 seconds) is free;
  • after that the price is remainingSeconds × Config.Economy.GROW_ALL_PRICE_PER_SECOND (2 cash per second), charged through EconomyService.spend.

#Selling instead of hatching

GrowthService.sellValue pays baseIncome × weightMul × 45 (minimum 1 cash) for any egg — growing or stored in the inventory. The Sell Center shows growing and inventory eggs on the same Eggs tab, and sellAllEggs clears both.

#Hatching

Hatching is a ProximityPrompt named HatchEgg on the egg: E, one-second hold, 14 studs of activation distance, and only the owner can trigger it (SAE_OwnerUserId).

The server then:

  1. rolls the mutation — entry.forcedMutation or MutationService.rollNaturalMutation,
  2. builds the pet with MutationService.createPet and marks it hatching,
  3. clears the growing entry and increments stats.totalHatched,
  4. registers the discovery with IndexService.register,
  5. runs the ceremony: three shakes, a shatter into physical neon shards, the pet growing in place, then a quadratic flight to the player where it shrinks out,
  6. hands the pet to the inventory and pushes hatchResult to the client for the hatch sound.

HatchService.SkipCeremony = true skips the animation; the test harness sets it. The ceremony runs inside pcall, so a failed animation still delivers the pet.