Steal An EggDocumentation← Portfolio

#Index, Rewards & Leaderboards

#The Index

The Index is the collection book. IndexService.register runs on every successful hatch and on every fusion result, writing an entry into profile.index[petId] with firstAt and a discovery count.

The catalog payload sent to the client (IndexService.buildCatalogPayload) is built from Catalog.ByZone, so the Index shows:

  • the 12 growable biomes with 8–16 pets each (Catalog.BASE_INDEX_COUNT = 104),
  • the Rift group (17 pets, flagged limited, hidden while Config.Flags.Rift is off),
  • the extra groups: Shrine, Luminous, Luminous reroll, Monsters, Mecha, Brainrot and Dragons.

#Pet discovery rewards

cash  = floor(baseIncome × Config.Index.PET_CASH_PER_INCOME)   -- 100
speed = wikiRewardSpeed, interpolated between seeded neighbours,
        or Config.Index.TOP_PET_SPEED (600,000,000) for the strongest pet

WikiPets seeds the Speed column with real values. Any gap is filled by geometric interpolation between the nearest seeded ranks, and pets outside the 12 biomes (Rift, shrine, event groups) borrow the reward of the biome pet with the closest baseIncome. Every reward is at least 100 Speed.

#Biome completion rewards

cash  = floor(zone.incomeBase × Config.Index.ZONE_COMPLETE_CASH_MUL)      -- 2000
speed = floor(max(500, nextZone.speedReq × Config.Index.ZONE_COMPLETE_SPEED_MUL))  -- 1.5

nextZoneReq looks up the following zone's Speed requirement, so completing Titan Temple pays based on the Angels & Demons gate. Completing the final zone falls back to zone.speedReq × 2.

#Bats as completion rewards

Finishing a biome also unlocks that biome's bat (IndexService.checkBatUnlock → grantBat). The bat is claimed from the Index with the bat:<zoneId> key, and owning it automatically equips the strongest bat the player has.

ZoneBatDamageKnockbackStunCooldown
—Wooden Bat1030.51.2
ForestOak Slugger1550.61.15
LakeLakeside Paddle2280.71.1
DesertSandstone Club32150.81.05
JungleBamboo Staff46210.91.0
SnowFrostbite Bat65261.00.95
VolcanoMagma Breaker90371.150.9
Abyss OceanCoral Trident125421.30.85
PrehistoricFossil Club170541.450.8
CosmicStarforged Bat230611.60.75
Cherry BlossomSakura Blossom310671.80.7
Titan TempleTitan Hammer420732.00.65

#Free gift

SettingValue
Reward+10,000 Speed (Features.FreeGift.REWARD_SPEED)
Requirement30 seconds in the server (MIN_PLAY_SECONDS)
Group lockGROUP_ID = 0 — disabled
Claim limitonce per profile (events.freeGiftClaimed)

#Friend bonus

FriendBonusService counts how many players in the same server are friends with you (IsFriendsWith, cached per pair) and grants +0.1 income each, capped at Config.Economy.FRIEND_BONUS_MAX = 0.5. The bonus recalculates two seconds after anyone joins or leaves, and it multiplies both income and treadmill Speed per step.

#Badges

Features.Badges lists six intended awards — Welcome, HatchedSecret, HatchedEternal, HatchedDivine, DivineTrail, AngelicTreadmill. All six IDs are 0, so RewardsService skips them; fill the IDs before publishing if badges should appear.

#Leaderboards

LeaderboardService maintains the leaderstats folder on every player with two string values, Speed and Money/s, formatted through Format.short (so they read 1.2M, not 1200000).

SettingValue
Stat refreshevery 1 second
Physical board refreshevery 5 seconds
Global board refreshevery 60 seconds
Rows shownMAX_ROWS = 10
Global storeDataStore, enabled by Config.Flags.GlobalLeaderboard

The board is rendered onto Workspace.Leaderboard1; global rows are fetched through a cache so a slow DataStore call cannot stall the render loop.