Caring for animals in a game where nothing can go wrong
· 3 min read · game-dev, game-design, cozy-game, three.js
Most games that let you care for animals are really about managing a resource: feed on time or lose them. In Lantern Valley I wanted the opposite. The animals have names, hunger, moods and a friendship with you, they react to you, and nothing about them can go wrong. No animal dies, runs away or gets sick.
It was the first verb where the other side answers you, and it turned out to be mostly a question of where to put the decisions.

The bucket is the call #
There is no "call animals" button. Mrs. Wheat lends you a ration bucket, and when it is the tool in your hand, hungry animals hear it: a two-note whistle and grains in the bucket. Those within 18 meters raise their heads in a wave, from the nearest to the farthest, and come running. They stop in front of you and wait, tails or ears wagging. Even the chickens, which run from everything, come this time.
Take the bucket out of your hand, going back to the sword, and everybody goes back to their life.
I like this because it is not a new control. The player already chooses tools on a wheel, and the bucket means "I am here to feed". Only the hungry call, and only if the bucket still has rations.
One prompt that follows the animal #
When you are near any animal, the E prompt changes by itself and shows the animal's name and its hearts. The action is not chosen by a menu. It comes from what the animal needs, in this order: eat, then be brushed, then be patted.
- if it is hungry and there is food in the bucket, you feed it: the character crouches, throws the grain at its feet, the animal lowers its head, chews and then jumps for joy with hearts rising,
- if it has eaten and has not been brushed today, you brush it, and the animal leans on you and purrs,
- the rest of the time, you pat it on the head, with or without the bucket.
Petting needs nothing, so caring for an animal is never "locked" behind a quest. If you have no rations, the prompt offers the brush. If you have no bucket, the pat.
Hunger comes back, friendship builds #
Hunger returns every 6 hours of game time, and after a night on a bench everyone wakes up hungry. Feeding, brushing and petting each give one point of friendship once per day. Every 3 points give a heart, up to three, and each new heart has its moment, a small card and a glass bell.
With three hearts, the animal leaves one gift, once: wool from a sheep, milk from a cow, an egg from a hen. The dog only gets to be your friend.
The gift happens once on purpose. A daily production of eggs and milk would turn the care into a repeated task.
The rules in code #
The rules are a pure module with tests: hunger, brushing, petting, hearts, the gift and saving. The things in the world are in a separate system, and that separation is what lets two things coexist without a fight:
- the animals are drawn with one draw call per species, instanced, so a pasture does not cost a draw call per sheep,
- the care takes control of an animal's behavior only while it lasts, and then the animal goes back to grazing or wandering,
- the shy ones, the hens, do not run away while they are being called or cared for,
- the animals' prompt yields to a chest, a lantern or a person standing next to them: the animals only get the E when nothing else wants it.
Rabbits and ducks stayed out of the first version. One is skittish and the other lives in the water. They arrive with the net and the bread.
What I would tell another designer #
The decision I would repeat is to make the action come from the need and not from a mode the player selected. The player never has to think "now I am in feeding mode". They walk up to an animal, and the game offers the thing that makes sense.
You can try it at lanternvalley.vercel.app.
Related projects
- Lantern Valley — Cozy adventure game for the browser