#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.
| Rarity | Spawn weight |
|---|---|
| Common | 1000 |
| Uncommon | 600 |
| Rare | 320 |
| Epic | 150 |
| Legendary | 60 |
| Mythic | 22 |
| Cosmic | 7 |
| Secret | 2 |
| Eternal | 0.5 |
| Divine | 0.1 |
| Event | 0 (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
| Rule | Value |
|---|---|
| Prompt | ProximityPrompt named TakeEgg, one-second hold |
| Pickup distance | 12 studs (Config.Eggs.PICKUP_DISTANCE) plus a 6-stud tolerance check |
| Cooldown | 1 second between pickups (PICKUP_COOLDOWN) |
| Carried at once | 1 (MAX_CARRIED) |
| Blocked while | dead, stunned, or still knocked over (SAE_KnockedUntil) |
| Ownership check | the 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.carryPenaltyForreturns0andrt.carryPenaltyis reset to zero on every pickup.Config.Eggs.CARRY_PENALTY_PER_RATIO(0.055),CARRY_PENALTY_MAX(0.72),Config.CarryPenaltyand the derivedescapeSpeedReqzone fields are still present for the escape maths — changecarryPenaltyForif 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
| Situation | Result |
|---|---|
| Guardian catches the carrier | The egg goes back to its nest (Config.Guardian.DROP_EGG_ON_CATCH = true) and the player is knocked over |
| Player dies | Config.Eggs.DROP_ON_DEATH = true — the egg is dropped where they fell |
| Player leaves | Config.Eggs.DROP_ON_LEAVE = true — dropped where they stood |
| Manual drop | The dropEgg action, treated exactly like a loss |
| Dropped egg ignored | Features.Carry.DROPPED_RETURN_SECONDS = 60, then it returns to its nest |
| Guardian finds a dropped egg in its zone | It 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.