#Pets, Weight & Income
Only placed pets generate base income. A pet stored in the backpack or hotbar remains owned, but does not contribute as a placed pet.

#Income calculation
WorldConfig.PetIncome starts with the species' Income, applies its weight factor, then applies Titanic and mutation multipliers when relevant.
weightFactor = 1 + clamp((kg - 50) / 450, 0, 10) * 0.5
referenceFactor = 1 + ((57.3 - 50) / 450) * 0.5
income = speciesIncome * weightFactor * 0.2 / referenceFactor * mutationMultiplier
For Titanic pets, weight is normalized by TitanicKgMultiplier before applying the factor; the result also receives TitanicIncomeMultiplier (25). These calculations describe pet income before player-wide Cash modifiers.
#Mutations
| Mutation | Configured roll | Income multiplier |
|---|---|---|
| Normal | Remainder | ×1 |
| Gold | 0.05 | ×2 |
| Diamond | 0.01 | ×5 |
The rarest mutation is rolled first. These are conditional checks, not two independent guaranteed final percentages: at luck 1, Diamond has a 1% roll and Gold is checked after a failed Diamond roll. Luck scales the checks.
Normal, Gold and Diamond visuals are resolved from the pet libraries, including the separate Devil/Fallen Angel variants where available. A missing private mesh is an asset-permission problem, not an income calculation problem.
#Player-wide modifiers
IncomeService adds Cash potion effects, CashMultiplier, the DoubleCash entitlement and the friend boost. Friend boost is 10% per friend in the current server, capped at five friends. The online income loop runs every second.
#Roaming
Placed-pet motion is a client visual in WorldClient.PetFx. The server provides the pen frame, allowed bounds and start time. Deterministic wandering stays inside those bounds; the server continues to own the pet, placement state and Cash calculation.
Roaming positions are not saved every frame. The saved fact is that a pet is placed, not the exact footstep it was on when the player left.
#Current calibration and model scale
PetKg.IncomeScale = 0.2 and IncomeReferenceKg = 57.3 reduce previous income by about five times. A Normal Surgeon Fish at 57.3 kg earns $72,000/s before player-wide bonuses; Gold earns $144,000/s and Diamond $360,000/s. These are actual service values, also used in UI previews.
Model size uses the shared HatchStyle.TargetSize helper through hatch, ground pickup, carry, hotbar and base stages. Growth above 500 kg follows a cube root, so heavy pets become larger without scaling linearly with mass. Client spawn effects no longer rescale replicated pet models.
The unused floating Workspace.Pets library and _PetRenameProbe have been removed. All 103 configured species resolve from ReplicatedStorage. Keep those ReplicatedStorage templates when cleaning the map.