Steal An EggDocumentation← Portfolio

#Stealing & Carrying

#Nest spawning

EggSpawnService builds every nest at startup from Config.Eggs plus the biome's legal pool, then keeps the nests stocked. A normal biome's pool comes from Catalog.getZoneSpawnPool(zoneId): only pets whose source is world, weighted by Catalog.SpawnWeightByRarity.

RaritySpawn weight
Common1000
Uncommon600
Rare320
Epic150
Legendary60
Mythic22
Cosmic7
Secret2
Eternal0.5
Divine0.1
Event0 (events only)

Special eggs use the same pipeline: SpecialEggService installs pool modifiers and decorators, which is how the Luminous Egg, the Brainrot Egg and the Dragon Egg during admin abuse appear in the world. Nests reset on a Config.Eggs.RESET_SECONDS = 300 cycle.

#Pickup rules

RuleValue
PromptProximityPrompt named TakeEgg, one-second hold
Pickup distance12 studs (Config.Eggs.PICKUP_DISTANCE) plus a 6-stud tolerance check
Cooldown1 second between pickups (PICKUP_COOLDOWN)
Carried at once1 (MAX_CARRIED)
Blocked whiledead, stunned, or still knocked over (SAE_KnockedUntil)
Ownership checkthe egg must be in nest or dropped state, otherwise "Someone was faster."

EggSpawnService.claim is the atomic step: two players pressing the prompt on the same egg cannot both win, and the loser gets the same "someone was faster" answer.

#Carrying

The egg model is welded to the character's HumanoidRootPart and the player's tools are unequipped for the duration. Carrying raises the SAE_Carrying attribute, which the client uses for the two-handed carry pose (StarterPlayerScripts.PetHold) and the carry HUD.

Carrying does not slow the player down in this build. EggCarryService.carryPenaltyFor returns 0 and rt.carryPenalty is reset to zero on every pickup. Config.Eggs.CARRY_PENALTY_PER_RATIO (0.055), CARRY_PENALTY_MAX (0.72), Config.CarryPenalty and the derived escapeSpeedReq zone fields are still present for the escape maths — change carryPenaltyFor if weight should matter again.

#Delivering

EggCarryService.start samples every player five times a second. A carrier standing inside Workspace.Spawn.SafeZone is delivered automatically — there is no extra prompt. With Features.Base.FREE_PLACEMENT = true the egg becomes an inventory item (ItemService.addEggFromRecord); with it off the egg starts growing in the next free slot.

Delivery clears the chase as well: the SAE_Chased attribute drops to false, which the chase alert UI listens to.

#Losing the egg

SituationResult
Guardian catches the carrierThe egg goes back to its nest (Config.Guardian.DROP_EGG_ON_CATCH = true) and the player is knocked over
Player diesConfig.Eggs.DROP_ON_DEATH = true — the egg is dropped where they fell
Player leavesConfig.Eggs.DROP_ON_LEAVE = true — dropped where they stood
Manual dropThe dropEgg action, treated exactly like a loss
Dropped egg ignoredFeatures.Carry.DROPPED_RETURN_SECONDS = 60, then it returns to its nest
Guardian finds a dropped egg in its zoneIt walks over, picks the egg up and carries it home

Features.Carry.DROP_ON_LOSS decides whether a lost egg lands on the ground or is returned immediately. Keeping it true is what makes "the guardian took my egg back" read clearly.

#Traps and bats inside the loop

Carrying an egg is also the requirement for placing a bear trap (Config.BearTrap.REQUIRES_CARRIED_EGG = true and REQUIRES_CHASED = true), and traps cannot be placed inside the safe zone. A trap stuns whoever steps in it for 7 seconds — normally the guardian behind you. Bats are the offensive answer: a hit knocks the guardian back, stuns it and drops its target lock while it recovers. Full tables are in Admin & Tools.