Skip to main content

Balancing

These values are constants in the code, not configuration. Changing them means editing and rebuilding. They are documented here so you know what the numbers mean before you touch them.

Need decay​

Per tick, from NeedsHelper.tickDecay (Adults):

NeedRateWith trait
Hunger0.0001—
Energy0.00020.0004 if LAZY
Social0.00015—
Fun0.00010.00005 if FUNNY
Hygiene0.0002—

Per tick, from BabyNeeds.tickDecay (Babies/Children):

NeedRateCondition
Hunger0.0003—
Affection0.0002—
Health0.00010.0004 if Hunger < 20
Negative Experiences+0.001if Hunger, Affection, or Health < 30

At 20 ticks per second, adult hunger takes roughly 13.9 in-game hours to fall from 100 to 0.

Hunger thresholds​

ConstantValueEffect
Idle search70Looks for food when idle
HUNGRY_ENOUGH_TO_EAT70Eats a gift on the spot instead of pocketing it
HUNGER_INTERRUPT_THRESHOLD25Drops its current task to eat
STARVATION_THRESHOLD5Stops working and cries

Starvation​

Starvation costs an NPC its usefulness, not its life. Below STARVATION_THRESHOLD it abandons its job, its hobby and its social life, turns SAD and plays the crying animation. It stays that way indefinitely until someone feeds it.

It still walks to a chest and eats — the "stop everything" rule excludes the tasks that lead to food, and excludes sleep.

Hunger does not kill

Aging and disease will own death. A second cause competing with them would make both harder to reason about, so hunger was deliberately taken out of that role.

Earlier versions of this page described a starvationDamage counter that killed at 200 damage. That system was removed along with Needs.java; the constants it named no longer exist.

Food values​

TierHungerHealth
1+25+6
2+45+14
3+65+24

Tiers come from the item's own Root_Secondary_Consume_Food_T1..T3 interaction, not from its name.

Sleep​

ConstantValue
Night windowday progress < 0.25 or > 0.75
Tired threshold30 energy, or 60 if LAZY
Energy recovered while asleep0.045 per tick

Guards invert the window: they sleep during the day.

Search radii and cooldowns​

ConstantValueWhy it exists
CHEST_SEARCH_RADIUS24 blocksHow far an NPC walks for a meal
FOOD_SEARCH_COOLDOWN_TICKS100Stops a search storm when no food is reachable
MOVE_TIMEOUT_TICKS600 (30 s)Gives up on an unreachable chest
Furniture scan radius on join32 blocksPicks up pre-existing beds and chests
SOCIAL_SEARCH_RADIUS20 blocksMax distance to search for a talking partner
SOCIAL_COOLDOWN_TICKS800–1200 (40–60 s)Mandatory cooldown between talks for both NPCs to prevent non-stop chatting
SOCIAL_SEARCH_INTERVAL_TICKS300 (15 s)Throttle for checking nearby conversationalists when idle
SOCIAL_THRESHOLD< 45Need threshold to trigger conversations (with 4% rare spontaneous chance)
WANDER_RADIUS_VILLAGEup to 48 blocksVillage stroll radius from village center, letting villagers walk around streets and squares
WANDER_RADIUS_HOME20 blocksStroll radius around bed for isolated NPCs (expanded from 8 blocks)
SEPARATION_RADIUS1.15 blocksPersonal space avoidance radius to prevent NPCs from clumping on top of each other
Do not remove the cooldowns

Without them, an NPC with no reachable bed or food re-enters the search every tick. One real session logged 3447 rejections of the same bed in a few seconds, with the NPC standing still the whole time.