May 27, 2019

Why did you give the game a bad review after playing for so many hours?

Sometimes when you browse Steam reviews you see a review like this:

If you don't know Swedish, "Recommenderas inte" means "Not recommended" and the customer is not recommending the game Cities: Skylines despite having spent more than 1000 hours playing it. You have to pay roughly 30 USD to get the base game, and how can you say getting 1000 hours of entertainment for 30 USD wasn't worth the money? Understanding this is also something other game designers struggle with. This is a tweet by a product manager at Paradox after their game Imperator: Rome got bad reviews:

When writing reviews, gamers are not measuring the money they spend on a game in relation to the number of hours they play the game: 30 USD for 1000 hours of entertainment wasn't worth it! In Sweden, 30 USD is roughly three movie tickets and a movie is usually two hours long, so if you go to the cinema you get 6 hours of entertainment for 30 USD. So games are very inexpensive entertainment. If you thought the game was boring, why did you spend 1000 hours in a boring game? Maybe you thought the game would be funnier the longer you played? Some games tend are deep and you have to play for some time before you can give the game a review. But you can also find similar reviews of games like Pubg, which is a less deep game and you understand what the game is about in a few hours:

What is going on? While reading the book Designing Games: A Guide to Engineering Experiences written by Tynan Sylvester, who also made the game RimWorld, I found "player's remorse." It's defined like this:
Player's remorse appears after a player spends time on a game that motivates him but does not fulfill him. 
The player has enjoyed playing the game for 1000 hours but then felt empty - what was it all worth? "Why did I waste 1000 hours playing this game?" A parallel is television series. Many were upset with Game of Thrones after what they thought was a bad ending of the last season. "Why did I waste my time watching eight seasons when all I got was that ending?" I bet many people regret watching eight seasons even though they enjoyed all eight seasons except a few of the last episodes of the last season. People spent so much time analyzing what would happen - and to what use? But what would have been a good ending to Game of Thrones when everyone had so high expectations?

Another great discussion on the topic is this Reddit threat: About games that have Steam reviews like this: "[100+] hours on record, Not Recommended", which also links to this article: Sympathy for the… person who left a negative review on Steam for a game they put 600 hours into. To summarize, some reasons to why someone with a high playtime gives a game a bad score are:
  • The developers could have updated the game. Most games, including Pubg, are continuously being updated. So a user may have spent many hours enjoying the game before it was updated and the update made the game worse.
  • It could have taken many hours to really understand the game. The more experience you have, the more flaws you will find. Some games are deep and you need experience to really understand the game. While it's fun to play the game when you are new, it's unplayable when you have 1000 hours of experience. 
    • Cities: Skylines: it takes a lot of time to build a large city and realize that it has flaws because it can't simulate enough population for a large city. 
    • Pubg: if you are really skilled then each millisecond counts and then some say Pubg is broken because it can't always handle these milliseconds because of multiplayer issues. 
    • No man's sky: you were promised an infinite universe, but it took some time for players to realize that yes the universe may be infinite but all the planets look the same, so what's the point of having an infinite universe? 
    • Hearthstone (Reddit comment): "Ultimately it was the insulting "developer insights" that killed it for me. You realise many of the games 'flaws' were intentional decisions to leech more money from the player base (ie. Bizarre and poorly justified balance decisions that pushed you towards buying more cards)"  
  • The game is boring to play but you think it will improve the more you play. You think it will be more fun to play if you reach the next level or upgrade to a better tank, but what if it never happens? You spend a lot of time upgrading to better tanks in the game World of Tanks, but when you finally get a better tank the game will force you to play with other better tanks, so what was the point?  
  • You were addicted to the game. What if you enjoyed a game so much that you quit your job and isolated yourself before realizing you were addicted to the game? Would you give the game a good or bad review? Or as a Reddit comment said: "I wasn’t just playing because I was enjoying the game; I was playing to level up and earn a lootbox, so I could get a chance at that elusive skin, and pretty soon I noticed myself continuing to play in spite of not enjoying it any more. I was playing compulsively."  
  • The game never ends. Neither Pubg nor Cities: Skylines have endings - you either start the game over and over again in a hunt for winning a match in Pubg or you build your city over and over again until you run out of space, so it's natural that a few people after 1000 hours wonder what the point of playing is when it never ends.   
  • The pause button increased playtime. Some people pause their games for various reasons, so having 1000 hours of playtime doesn't mean they played the game for 1000 hours.  

What if it's not the players who are to be blamed, but the review system. On Steam, you can either say the game is good or bad: thumbs up or thumbs down. You played the game for 1000 hours but in the end you didn't like it, but it was still sort-of fun to play it. Now you are forced to pick one of the options: good or bad. Sometimes it's useful with more options.   

May 17, 2019

Parkitect - a management game

I'm currently working on a management game so I thought it was a good idea to play-test some other management games and try to figure out what I would have done differently. First out in the play-test series is Parkitect which is a game where you manage your own theme park.

Perhaps the most common management games throughout the ages are city builders like SimCity and theme park games. Parkitect is one of the latest in the series and was released in 2018 after some years of development and a successful Kickstarter campaign. The players have rated it mostly positively on Steam.

Parkitect is made with Unity game engine, which is the same game engine I'm using. It's running on a grid, like in the old days, so the entire map is divided into square cells, so you can't build curvy roads like you can in the game Planet Coaster, which is another recently released theme park management game. But using a grid is not necessarily a bad idea because the game still looks good because they are not aiming for a realistic art style - more of a retro art style. The retro art style is also making the game run faster on my laptop, which is not the worst laptop but still far from the best. I saw a video of someone playing Planet Coaster, which has a more detailed art style, and that person had to stop playing the game because the computer couldn't handle all details even though the map wasn't fully built. You can fill the entire map in Parkitect and the game is still running fine.

Parkitect has a campaign where you play scenarios provided by the game developers. For example, your job is to build a theme park on a deserted airfield and you win if you get 500 customers or whatever the goal is. Each scenario has different goals, but it still feels like the goals are the same after you have figured out what to build to attract new customers. You are basically doing the same on each map: you are trying to make the park-guests happy. They want different type of attractions, they want food, they need toilets, they want the park to be free from garbage, and they want the park to look nice. After a while you have learned what you need to build to make them happy and then you build the same thing over and over again. So you shouldn't play it to get a challenge - you should play it because the game is relaxing.

So why isn't the game challenging? The game has a weather system - sometimes it will rain for maybe a day - and the temperature changes. But I haven't noticed that the temperature affects the customers because they happily ride in the fastest, highest roller coaster even though the temperature is around freezing temperature. Some indoor attractions are more popular when it's raining, but because it's raining for just a day you are never noticing the difference. Neither is the water turning into ice (I tried by dropping a guest into the water so yes you can kill guests) and it's raining even though it should snow. So I think they should have utilized the weather system to make the scenarios more different from each other. If you have a weather system, make sure it affects the game. In this image, the temperature is below freezing, but the game looks and acts exactly the same as when the temperature is 20+ degrees:

To make the guests happy, you need to make sure they can buy food. This is something I was really surprised they added to the game: they have "haulers" that will carry boxes of food to the small restaurants when they are out of food. Most other games assume that the small restaurants have some endless amount of food supply. The problem is that your guest hates to see these haulers so you have to build special access roads to the restaurants so they can deliver boxes without any guest seeing it. You also have to hide these access roads because the guests don't want to see them. So what Parkitect does is that they will provide you with a decoration map so you can see where the guests don't like the looks of your park:

I read through the Parkitect development blog and they are using ray-casting to determine if the decoration is low or not. In the image above, they fire a ray (which is similar to a laser) from the stairs and some rays hit the pink delivery box system, which is considered ugly in the game. So when I added fences around the pink building, the red disappeared. Anyway, the pink building is connected to the main warehouse through an underground pipeline system, which looks like this:

The problem with this pipeline system is that it's annoying to build because it's running in 3d and the heights have to be the same for it to connect. It's often difficult to judge at what height the pipeline system is, so you will sometimes need many attempts to make them connect. What I would have done differently is to have the pipes at just one height, like Cities: Skylines sewer system. Sometimes you have to build pipes above areas you don't control, but it could have easily been solved by allowing pipes below the area you don't control. 

To make your guests happy, you have to make the attractions you build look good, so Parkitect has given each attraction a decoration parameter that can be low, medium, etc. So after you build a roller-coaster you have to use one of the several building blocks to make it look better. This is sometimes confusing. For example, this roller-coaster has low decoration even though I've added rocks, flowers, special fences, and space-style buildings:

The decoration suddenly turned to medium after adding this building in the middle:

This ride also had medium decoration:

So what's the difference? I suspect they are again using ray-casting to determine level of decoration and because the roller-coaster is larger it needs decoration not just at the entrance. But the problem is that it's kinda confusing for the player, so they should maybe have added some color map to show where on the attraction the decoration is low.

To make you guests happy, you have to build different types of attraction. I've notices that they complain if you don't have an attraction with high intensity, and if you build one you will get more customers. One odd behavior I've notices is that some attractions are not popular at all. For example, this ride is free but the queue is almost empty:

So an improvement could have been to tell why no-one wants to ride the attraction. In the image above, it has nothing to do with the type of attraction because it was really popular in another scenario. But now almost no-one wants to touch it even though it's free. And sometimes you see that your new expensive roller coaster is empty while the queue to the Ferris wheel is full.

The game gives you a list of what your guests like and don't like while visiting the park. Sometimes they complain they are broke, which can be confusing because you can add cash machines, so you are not really sure why they are complaining.

Another problem I discovered involves the absence of pathfinding. If you destroy a path while guests are walking on it, the guests begin to walk in a random direction hoping to find a path to walk on. But sometimes they are not finding their way back because they just walk randomly. A better way would have been to do some pathfinding back do the nearest road, which is doable because the entire map is a grid and you know which tiles are roads, so a flow field algorithm would have been a fast solution.

To summarize: Parkitect is a relaxing game that's running fine even if you have an older computer. It has some game mechanics you can't find in other theme park management games. Some game mechanics are confusing and should have been easier to understand, and the game could have been more challenging to attract players who want more of a challenge after learning the basics.

Everything you need to know about management games

This is an article roundup of all articles related to management games on this blog:

May 2, 2019

Fancy Flying - or how to make a game in 48 hours

The Ludum Dare competition was on this weekend and it's a competition where you make a game in either 48 or 72 hours. I've previously participated in the competition eleven times, but I skipped it the last three times, but this weekend I decided to be a part of it again.

The problem with this competition is that it's not entirely fair because of the voting system. Hundreds of games a submitted each time so how can you judge which game was the best? A single team of judges can't play them all, so the participants in the competition will each judge at least twenty games and then the average score will give you the final result. Sometimes you are lucky that the twenty out of hundreds of participants like your type of game, so you will get a good score. There's also a problem with people who vote on your game without even playing the game (to encourage voting your game is displayed higher in a list of all games), which was reported by someone who thought it was odd that he/she got twenty votes but only five people had downloaded the game. So you should participate because it's fun and you want to test an idea - not to win. 

A few days before the competition I was researching an aircraft game I'm working on and read an article about bird strikes. As seen in the the movie Sully: Miracle on the Hudson, which is based on a real even where an aircraft crashed in a river around New York because birds hit the engine, birds are dangerous. So I decided to make an infinite aircraft game where you get points for flying low (to avoid enemy radar) while avoiding dangerous objects like birds, mountains, houses, and radar poles. This was the result:

The entire world consists of a few chunks: mountains, forest, lake, city, which are spawned every 50 meters with some probability, and the chunks are recycled by using a pooling system, which makes it faster. I originally planed to make my own collision system because the game is not physics based, but then I realized that I could use Unity's own collision system even though the game is not physics based, meaning that I use transform.Translate() to move the aircraft and not rigidBody.AddForce(). But if you add a rigidbody to the aircraft and set it to kinematic and then the colliders connected to the mountains should be set to trigger, you can still check for collisions by using OnTriggerEnter in the script attached to the gameobject which also has the rigidbody. The problem is that if you collide with an object, the rigidbody will just continue through it, so you have to make your own collision response system. 

In the first Ludum Dare games I made I didn't include any sound, because you have to make the sound during the 48 hours so it's easy not to prioritize sound if you run out of time. I've gradually added sound to my games with various results, so this time I really tried to add sounds that didn't scare people (or forcing them to turn off the sound because sound was "sooo bad"), and so far no-one has really complained that the sounds are bad. The jet engine sound is from a YouTube clip and I had to make it seamless, which took a lot of time but I learned a lot in the process, which was the point of participating in the competition.

If you want to test the game you can download it here: Fancy Flying