MrP
Steampunker
- Guide Category
- General Gameplay




Since Journey’s End released, a lot of people have discussed and shared their ideas for the optimal NPC housing arrangements to keep everyone happy (and, not incidentally, keep their prices low). I… uh, may have gone full maths/computer nerd on the problem.
Results
Results first! Here are the best arrangements I’ve found so far:
One house with three inhabitants per biome
- Desert: Dye Trader, Goblin Tinkerer, Mechanic
- Forest: Golfer, Party Girl, Zoologist
- Hallow: Arms Dealer, Nurse, Wizard
- Jungle: Dryad, Painter, Witch Doctor
- Mushroom: Clothier, Guide, Truffle
- Ocean: Angler, Pirate, Stylist
- Snow: Cyborg, Steampunker, Tax Collector
- Underground: Demolitionist, Merchant, Tavernkeep
Here are the price modifiers from biome and neighbour selection, with and (without) rounding to the nearest 5%.
- Angler: 100% (98.80%)
- Arms Dealer: 95% (93.60%)
- Clothier: 95% (93.60%)
- Cyborg: 95% (93.86%)
- Demolitionist: 90% (88.92%)
- Dryad: 95% (93.86%)
- Dye Trader: 100% (98.80%)
- Goblin Tinkerer: 95% (93.60%)
- Golfer: 95% (93.86%)
- Guide: 100% (98.80%)
- Mechanic: 95% (93.60%)
- Merchant: 105% (104.00%)
- Nurse: 90% (88.92%)
- Painter: 90% (88.92%)
- Party Girl: 95% (93.60%)
- Pirate: 90% (88.92%)
- Steampunker: 95% (93.60%)
- Stylist: 95% (93.86%)
- Tavernkeep: 95% (93.60%)
- Tax Collector: 100% (98.80%)
- Truffle: 90% (88.92%)
- Witch Doctor: 95% (93.86%)
- Wizard: 100% (98.80%)
- Zoologist: 95% (93.86%)
- Desert A: Cyborg, Steampunker
- Desert B: Dye Trader, Stylist
- Forest: Golfer, Zoologist
- Hallow A: Arms Dealer, Nurse
- Hallow B: Party Girl, Wizard
- Jungle A: Witch Doctor
- Jungle B: Dryad, Painter
- Mushroom: Guide, Truffle
- Ocean: Angler, Pirate
- Snow A: Goblin Tinkerer, Mechanic
- Snow B: Merchant, Tax Collector
- Underground A: Demolitionist, Tavernkeep
- Underground B: Clothier
Here are the price modifiers from biome and neighbour selection and the lack of crowding, with and (without) rounding to the nearest 5%.
- Angler: 85% (85.50%)
- Arms Dealer: 80% (81.00%)
- Clothier: 85% (85.50%)
- Cyborg: 85% (85.50%)
- Demolitionist: 75% (76.95%)
- Dryad: 85% (85.50%)
- Dye Trader: 85% (85.50%)
- Goblin Tinkerer: 80% (81.00%)
- Golfer: 80% (81.22%)
- Guide: 90% (90.00%)
- Mechanic: 75% (76.95%)
- Merchant: 95% (94.50%)
- Nurse: 75% (76.95%)
- Painter: 75% (76.95%)
- Party Girl: 75% (76.95%)
- Pirate: 75% (76.95%)
- Steampunker: 75% (76.95%)
- Stylist: 80% (81.00%)
- Tavernkeep: 80% (81.00%)
- Tax Collector: 75% (76.95%)
- Truffle: 75% (76.95%)
- Witch Doctor: 85% (85.50%)
- Wizard: 85% (85.50%)
- Zoologist: 80% (81.22%)
Assumptions
With twenty-five town NPCs to house, and eight biomes that affect their happiness, there are almost 38 thousand billion billion possible combinations. That’s a few too many to search through, so I made a few assumptions.
- Santa Claus will not be included. If you want to optimise his happiness, stick him in the snow and keep the Tax Collector far away for the weeks Santa’s around. I’ll focus on the rest of the year.
- Every other NPC will be included, spread across all biomes. This is essentially a late-game guide for when you have all the NPCs; early-game housing arrangements are out of scope. (However, I will be sticking to eight ‘towns’ with a pylon each, so the Universal Pylon is not accounted for.)
- With twenty-four NPCs in eight biomes, my first approach was to put three NPCs in each biome. This takes crowding out of the equation. There may be benefits to crowding some NPCs and giving others more room, but that won’t be explored here.
- Since having three NPCs in close proximity is happiness-neutral, but having two is a positive, I also looked at having up to four NPCs per biome, split into well-spaced households of up to two each.
- The Truffle has to go in the Mushroom biome. That’s less an assumption and more a requirement, although for all I know there are ways and means to get him to live elsewhere.
Given those conditions, we’ve narrowed down the number of arrangements to ‘only’ 46 million billion for the first case (three to a biome). Even if I could check each one in a nanosecond, it’d take a year and a half to check them all. So I went and taught myself simulated annealing, a method of searching for optimal solutions in reasonable amounts of time. It doesn’t guarantee that the solution is the best possible, but it’s done a pretty good job, as far as I can tell.
I defined ‘optimal’ in this case as the lowest total percentage happiness modifier across all NPCs, calculated by multiplying the modifiers from the wiki together. (Essentially, I’m minimising the geometric mean, not the arithmetic mean.) Everything was programmed in Python. Preferences and housing assignments were represented using matrices, so that I could use Numpy to do the scoring faster. (I’m happy to share the code if anyone’s interested.)
Future Directions
One thing to do is to keep running the search, looking for even better arrangements than what I’ve got so far.
You may have noticed that I tried to make every NPC happy, without taking into account things like the Goblin Tinkerer being a huge money sink, while the Guide (as far as I can tell) has no benefits or penalties from happiness whatsoever. A more nuanced version would weight each NPC according to how beneficial their happiness is. (Which sounds awfully callous now that I put it like that…) I’d love to have some feedback from the community as to which NPCs you think should be prioritised!
Last edited: