Gif of the early game with the random tech option, showing some of the choices that appear.
Turn Based City Builder
https://acasez.itch.io/city-state
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.
Made in Unity, Solo Project
Things I 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
Coding the game in Unity with C#
Making the UI for the game. Worked on making everything readable and clear.
Organizing playtests and adapting the game after feedback
Making all of the pixel art, and some very simple animations for the watermill and expeditions.
My first plan for the design of the tech tree. Used Miro to plan.
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, 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 to this I also wanted to make a fun and playable game. The thesis can be read here (It's only in Swedish for now).
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.
Very early screenshot of the game
Changed text colors and updated UI elements after feedback. Bottom is the newer one.
Design Challenges
Adjacency bonuses and flavor
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.
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.
A look into four strategy/city building games and how you place buildings in them. Cities Skylines, Civilization 6, Banished and Concrete Jungle.
Randomness and Terrain
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?
I decided on neither of them. Looking at it, grids and hexes are great for random generation and turn based movement. But that is two things I had decided not to have in the game. Similarly free placement seemed like it would be harder to code and balance. Free placement generally works of a road system, which I didn't implement. Road placement and traffic are common mechanics in city building games and you know, cities overall. Making a system for placing down roads that was interesting and fun was something that I tried for a bit but gave up on.
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, this means you could play the game without them. With only barbarians the game loses a lot of its uncertainty and replayability
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.