City State

Turn Based City Builder

The game in play

Gif of the early game with the random tech option, showing some of the choices that appear.

City State was made for a my Bachelor's Thesis about different structures in Tech Trees. It's a fairly short city building game that was made to see how different tech tree structures of tech trees affect the gameplay experience. It was however still designed to be fun and playable as game game though and I worked on it afterwards to add some "juice" to the game.

It can be played here

A screenshot of a Miro Page with various notes for each tech, making up a tech tree

My first plan for the design of the tech tree. Used Miro to plan.

Things I've Worked on:

  • Design document and planning, what do I need for the study? How should the game look and work?
  • Designing and planning the tech trees, balancing them while having them distinct
  • Programmed the game in Unity with C#. Was my second game in Unity
  • Making the UI for the game. Worked on making everything readable and clear, using tooltips and icons.
  • Organizing playtests and adapting the game after feedback
  • Making all of the pixel art, and some very simple animations for the watermill and expeditions.
  • Did a qualitative analys for my Bachelor's Thesis, using the game as an artifact

Branching Tech Tree

Standard tech tree, designed first, inspired by the tech trees in games like Civilization. Techs have prerequisites and you can see the entire tech tree and plan ahead.

Random Tech Tree

Random tech tree, inspired by Stellaris. Every time you research a tech you get three semi-random options. Techs are separated into tiers but there are no direct connections. You have to research 2 techs from a tier to get options in the next tier.

The main goal of City state was comparing the two tech trees, however to do this I also wanted to make a fun and playable game. The thesis can be read here

Zoomed in screenshot of a tooltip in the game

Implemented tool tips and icons to clearly display what everything does and icons to help the game feel and player learning. Having an UI that was easy to navigate was a high priority.

Early screenshot of the game in development

Early screenshot of the game in development.

Screenshot of an exploration event in the game

One of the actions that can be done in the game is exploring, which presents different events. This adds a source of uncertainty and randomness to the game, as well as some narrative elements.

Two Versions of the Top Bar

The top UI bar shows the different resources in the game and the players population. It went through many iterations to make it both readable and fit all the information needed.


Design Challenges

The first version of the game board

The different colored triangles are different regions. Some buildings affect other buildings in the same region. A smithy (the building in white region next to the wall) produces 1 iron for every mine in the region. Some buildings incentives different strategies, markets (yellow next to river) produce 1 culture for every unique type of building in the region, meaning that they that there is also a strategy in building diverse region.

When I started working on the game I knew I wanted some form of adjacency bonuses. Depending on where you place buildings they could give different bonuses or penalties based other nearby buildings and features. I didn't really know why I felt like it was needed though, mostly that most strategy/city building games had it and it made sense.


During development, when I was trying to figure how I wanted to do adjacency bonuses I realized why they are important. They add flavor and theme to your city, by dividing it in regions and making parts distinct. If every part has the same buildings then it becomes boring, but if a smithy needs to be put next to a mine, then players are rewarded for specializing districts. Players could always make a industrial district with mines and smithies, but by adding adjacency bonuses you reward them for it.


Furthermore by not directly stating "this is or could be a good industrial region" I let players plan out their own city and build districts how they want to. Before this I had already implemented fisheries and farm buildings that require coast and river plots respectively. They create regions in a sense, but those regions are predefined by the map layout, and not the players choices.

Image of Cities Skylines, Civilization 6, Banished and Concrete Jungle

A look into four strategy/city building games and how you place buildings in them. Cities Skylines, Civilization 6, Banished and Concrete Jungle.

One of the first design decisions I made was regarding the terrain. I compared other strategy and City Building games, did I want it grid or hex-based, or use a free placement similar to Cities Skylines and most other City Builders?

I decided on neither of them. Looking at it, grids and hexes are great for random generation and turn based movement. But with neither of them in the game, I saw little point in using them. Similarly free placement seemed like it would be harder to code and balance. Free placement generally works of a road system, placing buildings next to roads and having traffic flow between them. Road placement and traffic are common mechanics in city building games and you know, cities overall. But trying to implement a road system in a small game like this would be hard and beyond the scope of the project.

An event screen of an attack

Overall I like the "plot" system as I call it. It works, and was easy to code and implement. It did however remove a common source of uncertainty in games like this, the random terrain generation. This meant that the game only has three possible sources of uncertainty, random technology, barbarians and the expedition mechanic Since the random technology is a choice and only on for half the games for the study. and the expeditions is something players don't have to interact with you could be left with only the barbarians as a source of uncertainty. For the sake of this project that was fine, but if I were to continue working on the game I would want to add more sources of uncertainty.


Still for the time I had on the project I think not trying to implement terrain generation was a good decision, the prototype would probably be not have been completed in time if I tried. Its better to have a finished small game than a larger game stuck as a prototype. If I had done the project with more time or a team, I would have loved to try to make a terrain generation system with either a grid or hexes. Having that would have added another source of uncertainty and replayability. Alternatively I could look into other ways of adding randomness, like variation in what technologies and resources pop up.