#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.Riftis 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.
| Zone | Bat | Damage | Knockback | Stun | Cooldown |
|---|---|---|---|---|---|
| — | Wooden Bat | 10 | 3 | 0.5 | 1.2 |
| Forest | Oak Slugger | 15 | 5 | 0.6 | 1.15 |
| Lake | Lakeside Paddle | 22 | 8 | 0.7 | 1.1 |
| Desert | Sandstone Club | 32 | 15 | 0.8 | 1.05 |
| Jungle | Bamboo Staff | 46 | 21 | 0.9 | 1.0 |
| Snow | Frostbite Bat | 65 | 26 | 1.0 | 0.95 |
| Volcano | Magma Breaker | 90 | 37 | 1.15 | 0.9 |
| Abyss Ocean | Coral Trident | 125 | 42 | 1.3 | 0.85 |
| Prehistoric | Fossil Club | 170 | 54 | 1.45 | 0.8 |
| Cosmic | Starforged Bat | 230 | 61 | 1.6 | 0.75 |
| Cherry Blossom | Sakura Blossom | 310 | 67 | 1.8 | 0.7 |
| Titan Temple | Titan Hammer | 420 | 73 | 2.0 | 0.65 |
#Free gift
| Setting | Value |
|---|---|
| Reward | +10,000 Speed (Features.FreeGift.REWARD_SPEED) |
| Requirement | 30 seconds in the server (MIN_PLAY_SECONDS) |
| Group lock | GROUP_ID = 0 — disabled |
| Claim limit | once 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).
| Setting | Value |
|---|---|
| Stat refresh | every 1 second |
| Physical board refresh | every 5 seconds |
| Global board refresh | every 60 seconds |
| Rows shown | MAX_ROWS = 10 |
| Global store | DataStore, 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.