# Pilgrimage

My game · Proof of concept · September 2026

[Play Pilgrimage](https://www.pilgrimagegame.com/)

![Pilgrimage: illustrated medieval wordmark, pilgrims, and a church](https://www.tomjohn.design/images/content/pilgrimage/social-cover.webp)

I’m making a game. It’s called Pilgrimage, and it’s somewhere between RollerCoaster Tycoon and Age of Empires II. You start with a relic and some monks, and the idea is to get pilgrims to come to your holy site so you can grow a little church into a cathedral, with a town growing around it.

That’s the game I want to make. As of September 2026, I’m still figuring out the gameplay. But there’s a world, there are people walking around in it, and I’ve spent a ton of time getting it to look and run the way I want.

## Showing my kids how software gets made

I started this as a fun project to show my kids how software development works. I design software all day, but I’m used to apps for teams and businesses. Making a game gives me a whole different set of things to figure out, and with AI tools I can actually build it.

So I’m learning Three.js, pathfinding, animation, how to make thousands of people move around without bringing the browser to a halt. And along the way I’ve made sheep and goats, added dithering, and put in a cheat code that makes some of the trees get up and walk around.

There’s a lot to learn. That’s the point of doing this.

![Dithering in my game world](https://www.tomjohn.design/videos/pilgrimage/dithering.mp4)
![My sheep and goat pen](https://www.tomjohn.design/videos/pilgrimage/sheep-and-goats.mp4)
![My walking-tree experiment](https://www.tomjohn.design/videos/pilgrimage/walking-trees.mp4)

## Getting it to run

A lot of the work has been figuring out what the game actually needs to render. I’ve been replacing 3D characters with sprites, skipping work for people who are off screen, and grouping people who are traveling together so they don’t all need their own pathfinding route.

That last one took about 10,000 routes down to around 500 in my performance tests. Kind of a happy accident, and it also makes sense for people going on a pilgrimage to travel together.

It runs really well on mobile now too. The controls still need work. So does the gameplay. But I’m pretty happy with the performance.

I also tried giving an AI model a performance monitor so it could observe bottlenecks and change settings every five seconds. More of a test than anything. I want to see if it can help me come up with better rules for the optimizations, but I’m still figuring out whether that’s useful.

![My mobile performance test](https://www.tomjohn.design/videos/pilgrimage/mobile-performance.mp4)
![My experiment with AI-assisted performance tuning](https://www.tomjohn.design/videos/pilgrimage/performance-tuning.mp4)

## Coming back to the same place

One of my favorite details is what happens when you reload. I capture the view before the page goes away, without the assets, and clip it to follow the edges. Then as the game loads, the world comes back in at the same zoom and position you were just looking at.

It also saves the game data in local storage, so you can actually come back without losing everything. I’m still a little shocked that this works. Eventually I want to use the same effect for resuming past games, or maybe moving between maps.

![My save-and-resume transition](https://www.tomjohn.design/videos/pilgrimage/save-and-resume.mp4)

## Getting the sprites in order

I kept running into problems with characters and 3D objects drawing in the wrong order. It gets complicated because a character isn’t one sprite. It’s a bunch of shapes that share a position, and the order needs to change as the characters turn relative to each other.

So I built a way to make test scenes, move things into the right order by hand, and copy all of those examples as JSON. I can give that back to the model so it has something specific to work from when it changes the sorting logic. It’s giving me the best results so far, but dense crowds still need work.

I’ve also built a rigging editor with keyframes, automatic tweens, and sprite-sheet generation. Those edits go back to the model as JSON too, so it can update the other characters to match. A lot of making this game has turned into making tools that help me make the game.

![The rigging editor I built for procedural characters](https://www.tomjohn.design/videos/pilgrimage/rigging-editor.mp4)
![How I’m testing sprite and 3D-asset ordering](https://www.tomjohn.design/videos/pilgrimage/sprite-ordering.mp4)
![My group-animation debugging view](https://www.tomjohn.design/videos/pilgrimage/group-animation.mp4)

## Now it needs to be a game

I’m happy with the environment, but I still think of this as a proof of concept. The next thing I want to work out is how the church and the town grow together. Monks need somewhere to live and work. Pilgrims need places to stay. The church needs upgrades, and the town needs a reason to keep growing.

I’m thinking about it a little like SimCity. You set things up, people arrive, and you put what they bring back into the settlement. I want the church, the town, and the pilgrims to depend on each other, so there’s a reason to think about what you build next. I’m still working out how that should play.

![The small shrine at the centre of my settlement](https://www.tomjohn.design/images/content/pilgrimage/shrine.png)

![The world I’m building: forests, rivers, roads, and a small shrine](https://www.tomjohn.design/images/content/pilgrimage/world.png)

The setting is roughly AD 800 to 1100. I’m interested in how relics and pilgrimage shaped towns and their economies. One starting point is the [Second Council of Nicaea in 787](https://www.newadvent.org/cathen/11045a.htm), whose seventh canon required relics in churches. There’s a lot there to build a game around.

I’m recording the process on my [Pilgrimage YouTube channel](https://www.youtube.com/@pilgrimagegame), and sharing smaller experiments on [X](https://x.com/tomjohndesign). I’m figuring this out as I go.

## Work and media

- [Pilgrimage: illustrated medieval wordmark, pilgrims, and a church](https://www.tomjohn.design/images/content/pilgrimage/social-cover.webp)
- [Dithering in my game world](https://www.tomjohn.design/videos/pilgrimage/dithering.mp4)
- [My sheep and goat pen](https://www.tomjohn.design/videos/pilgrimage/sheep-and-goats.mp4)
- [My walking-tree experiment](https://www.tomjohn.design/videos/pilgrimage/walking-trees.mp4)
- [My mobile performance test](https://www.tomjohn.design/videos/pilgrimage/mobile-performance.mp4)
- [My experiment with AI-assisted performance tuning](https://www.tomjohn.design/videos/pilgrimage/performance-tuning.mp4)
- [My save-and-resume transition](https://www.tomjohn.design/videos/pilgrimage/save-and-resume.mp4)
- [The rigging editor I built for procedural characters](https://www.tomjohn.design/videos/pilgrimage/rigging-editor.mp4)
- [How I’m testing sprite and 3D-asset ordering](https://www.tomjohn.design/videos/pilgrimage/sprite-ordering.mp4)
- [My group-animation debugging view](https://www.tomjohn.design/videos/pilgrimage/group-animation.mp4)
- [The small shrine at the centre of my settlement](https://www.tomjohn.design/images/content/pilgrimage/shrine.png)
- [The world I’m building: forests, rivers, roads, and a small shrine](https://www.tomjohn.design/images/content/pilgrimage/world.png)
