Charlie Hirst-Matthews's profile

Difficulty Based Games

Difficulty Based Games
Thumbnail for the games
For this project, the main outcome I wanted to find out, was how the difficulty of a game, effected it. Does a harder game mean it's more or lessย enjoyable? How does a game developer implement difficulty in a way that's both fair and challenging for both skilled and less skilled players?

I wanted to answer these questions by designing and creating 3 different games (Aim Trainer, Platformer and Rhythm Game), each with 3 different difficulties (Easy, Medium and Hard). The reason I chose these types of games specifically, is because each of them require certain skills (such as hand eye coordination and timing), that can easily be improved if the player were to play these games.
Planning
Before creating any of the games, I had planned out each of them, by thinking of ideas that I thought would work in these types of games, as well as making concepts of what I would want the games to look like.
Menu:
Concepts for the main menu screen, mode selection screen and leader board
In the menu of the game, there will be 3 main screens that the player has access to - The mode selection screen, the difficulty selection screenย and the leader board screen.ย 

The mode selection screen, (which is the main menu screen) gives you an option between the 3 different games (Aim Trainer, Platformer, Rhythm Game), as well as a button to close the game, and a button to go to the leader board.

The Difficulty selection screen, is the screen you are shown once you have chosen a game mode in the menu screen. You can cycle the mode on the left, and the difficulty on the right. Once you have selected a mode and difficulty, it sends you to the game you have chosen.

The leader board screen shows the top players from each mode and difficulty, allowing you to cycle between each difficulty at the top of each leader board. Once the player completes a game, they are prompted to enter their name, which will save their score and their name, showing it in the leader board.
Aim Trainer Concepts:
Aim trainer concepts for different modes
For the aim trainer, I had planned out 2 modes that I would like to make - a simple shooting mode, and a tracking mode.

The simple shooting modeย isย shootingย a target that randomly spawns onย the screen, and respawns somewhere else completely random once shot. This would be repeated for around a minute, giving the player a certain amount of points every time they shoot a target. This would get increasingly harder with red targets also spawning randomly, which if you shoot, deducts points instead of giving you points.

The tracking mode is keeping your mouse on the target for as long as possible, while it moves. Whenever your mouse is on the target you gain points, but whenever your mouse leaves the target, you don't gain any points. This would get increasingly harder with the target moving faster and in more directions.
Aim Trainer Ideas:
For now, I will stick with making the first mode for the aim trainer (and possiblyย making the tracking mode after). I feel as if makingย  another mode will make it a lot harder to navigate through the menus (such as the leader board, as it already has a lot to sort through, and adding more will just make it more complicated to both create and navigate). It will also take a lot of time that I could be using to work on the other games, and would be a waste of time to add more to an already finished game.

There will be 3 different difficulties that the player can choose from:

ย - The easy mode will consist of simple gameplay, with a target spawning in and the player shooting it, causing another target to spawn. This will repeat over and over again, until the timer reaches 0 (which would be around 1 to 2 minutes). The score increases by a certain amount (around 100) every time the player shoots a target and loses a certain amount of points whenever the player misses (around 50), and adds to a miss counter.

ย - The medium mode will be a bit more complicated than the easy mode, with 2 targets spawning in instead of 1. One of the targets the player can hit, which spawns in the next set of targets, but the other one cannot be hit, as it counts as a miss and deducts more points than missing normally (around 100).

ย - The hard mode makes it a lot more difficult, as itโ€™s the same as the medium mode, but the targets start to move in random directions, making it harder to shoot the target, as well as harder to track what one is the right target to shoot.


There will be 2 measurements that will be shown in the game: score and misses. I wanted to add accuracy to the game, but it wouldnโ€™t really add much to the overall score the player gets, and wouldnโ€™t even be displayed on the leader board.

The game will be a fixed screen, where you can move the crosshair around (instead of making it similar to a first person game), as I feel it would be unnecessarily harder for the player to keep track of the targets, and make it a lot more complicated to actually create. The mouse will be replaced with a crosshair that the player uses to aim and shoot at the targets.

Once the player completes the game, they will have a section where they can fill in their name, adding their score to the leader board, where they can view their and other peoples scores.
Platformer Concepts:
Platformer concepts for what I would like the game to look like, with level design concepts for different sections of the level
With the platformer,ย the player only has to press 1 button to progress through the level, as they constantly move in 1 direction.ย 

There are different types of obstacles that the player must avoid, such as spikes and clickable obstacles, that can be destroyed by clicking on them with the mouse. There are also powerups the player can get, allowing them to have a temporary ability (such as 1 double jump), which they must use at the correct point in the level. There are also collectables that the player can get through just progressing through the level to earn a higher score.

I planned 3 different types of level designs I would like to implement (as I plan to make the level itself synced to the music).ย The first one is just simple jumps that the player will have to do, over obstacles and blocks.ย The second one uses a double jump power up, allowing the player to double jump once whenever they want. I will try to make a section similar to flappy bird, where you need to jump through holes in walls. The third section uses another power up - the direction change power up. This changes direction, allowing the player to move left and right, giving them different paths earlier in the level to either find secret sections or as a way to progress forward. The last one is combining all of them together, as well as using a โ€œclick barrierโ€, which cannot be passed, so the player has to click it in order to destroy it.
Platformer Ideas:
The game will consist of 1 base mode, where the player constantly moves right. There will be 3 difficulties that the player can choose from, that adds mechanics and builds off of existing mechanics to make them harder:

ย - The easy mode will be very basic, with the player needing to reach the end of the level. Throughout the level, there are obstacles that the player needs to make their way through, as well as multiple ways to get through the level: easier paths to take

ย - The medium mode will be more difficult with more obstacles placed differently and adds powerups, that the player will have to learn such as the double jump powerup (that has a limited amount of double jumps once they get the powerup), the gravity powerup (that allows you to change gravity for a short amount of time).

ย - The hard mode will be very difficult, adding different obstacles and using the power ups more as well as adding a new mechanic: clickable obstacles, which are obstacles that completely prevent the player from progressing, unless they click on the obstacle with their mouse, destroying it. This would add an entirely different layer to the game that the player has to worry about, making it a lot harder.


Collectables throughout the level that give you more points. There are multiple paths that the player can take in order to get more points - easier paths have less collectables which reward you with very little points and harder paths reward you with more collectibles giving you more points.

The camera follows the player throughout the whole level, except for certain areas that will have the camera zoom out revealing the whole section. This makes it easier to see what is coming up in the level, but makes it harder to track where the character is.

Both the score and the attempt that the player is on will be shown on the screen. The attempt can either not mean anything, or can be implemented into the score in order to make less attempts gain more points.
Rhythm Game Concepts:
Rhythm game concept for what I want the game to look like
With the rhythm game, the arrows are in the middle, with it being the main focus, and the measurements (such as score, multiplier and accuracy) are on the left and right sides of the screen.

Every time you get a perfect, good, bad or a miss, it will be counted in the bottom right of the screen, and add 1 to the corresponding box. The accuracy will be above it, taking the numbers from the table and making a number based on the accuracy. The combo is in the top right, and adds 1 every time the player hits an arrow, and goes back to 0 every time the player misses an arrow. The score is in the top left, and increases every time the player hits a note (by different amounts depending on the accuracy). The score multiplier is in the bottom left, increasing when the player reaches a high enough combo.
Rhythm Game Ideas:
The game will consist of 1 base mode where you press the arrows at the correct time to build up points. There will be 3 different difficulties that make the base game itself more difficult with faster and more arrows, as well as adding more mechanics that the player will have to learn:

ย - The easy mode will be just the base game, with few arrows, meant to be more of a tutorial to get the player familiar with pressing the arrows on time, trying to improve at the basic gameplay for a start.

ย - The medium mode will be a bit harder, with more arrows that are moving faster, while having 2 to 3 arrows that you would have to press at the same time. This difficulty will also introduce notes that you shouldnโ€™t hit, deducting points if you do hit them.

ย - The hard mode will be a lotย  harder, with more arrows that are a lot faster, as well as the arrows you shouldnโ€™t hit. I will also add a cap that prevents you from missing too much, with 3 misses in a row resulting in you losing the game, and having to restart.

There will be different trackers for the game - points, misses, accuracy. Points will be rewarded to the player for hitting the arrows at the right time, and the higher accuracy they have when hitting the arrow (perfect, good, bad), the points are multiplied (100, 75, 50). If the player misses an arrow, they will lose a certain amount of points (50) and get a miss on the miss counter. The accuracy will be tracked on the screen, with each accuracy measurement having its own counter (perfect, good, bad, miss).

You can build a combo for hitting arrows in a row, resulting in a points multiplier being built (10 in a row - 2x, 20 in a row - 3x, 30 in a row - 4x, 40 in a row - 5x). Once the player loses their combo, the multiplier resets and the player loses 50 points.
Production
Menu:
Main Menu screen with the exit and leader board button sprites implemented
For the menu, I first created 2 buttons, the exit button and the leaderboard button. For each of them I created a sprite, with 2 frames - a text frame and a selection frame, where the frame changes to the selection frame whenever the player hovers their mouse over it. I also created a menu sprite to put in the top left of the screen.ย 
The menu buttons sending you to the leader board room, and closing the game
Once I had created these objects, I had made the exit button close the game once clicked, and the leader board go to another room, where I had put a back button, which leads back to the main menu.
Menu screen with the game selection buttons implemented
I first made each of the different options that would be in the menu screen. The sprites would have 2 frames (similar to the other buttons I had created), with the first frame being the name of the game, and the second frame having a small description of the game once you hover over it. I added each of these to the menu, and had them take you to 3 different mode selection rooms once you clicked them.
Difficulty selection room with mode descriptions at the bottom
After making the mode selection buttons, I had created 3 difficulty selection buttons, for the easy, medium and hard difficulties. Clicking on each of these buttons would take you to a room where the game would start. I also made the colour of the buttons relative to the mode it's displaying (easy - green, medium - yellow, hard - red), just as a small detail to make it look more visually appealing.

With the difficulty selection screen, I had made a few design changes to make it easier to navigate, while taking less time to develop. The first change, which I had mentioned before, was getting rid of the mode selection, as each game only has 1 mode.

I had the idea to give a small description at the bottom of the screen whenever the player hovers over a difficulty, giving a brief overview of the goal, as well as certain mechanics that only appear in the harder difficulties (for example, the medium mode in the aim trainer mentions the blue and red targets, as well as the hard mode mentioning the moving targets).

Aim Trainer:
Simple aim trainer (easy mode)
I created an object to control the whole game, from the timer, to the points as well as spawning the targets (and a simple crosshair sprite that replaces the mouse). This object would be used in each of the aim trainer rooms, as I had created a variable to check what difficulty the player had chosen before the game had started.

I created a timer variable, which went down by 1 every second, and set a โ€œgameendโ€ variable to 1, once it had reached 0. This would end all of the actions that this object could do (such as spawning in targets and decreasing the time limit).

After getting the time limit complete, I had created a simple target object that destroyed itself once the player clicks on it, as well as increasing the score by 10. With this, I had implemented a system that creates the object in a random place in the room, if there is less than 1 that exists (so when the player destroys it, another one is created instantly).
Score submission screen
For the next room, I created an object to write whatever you had typed on your keyboard, displaying your name. After you type your name, you are sent back to the main menu. Once I set up the leader board, this would save the name of the player and the score. Once you return to the main menu room, the score resets, allowing the next player to set their own score.
Countdown before the game starts
After finishing the aim trainer game, I created a countdown object that counts down from 3 in the middle of the screen before the game starts, which prevents the game from starting before the countdown ends. This gives the player time to process the game and have time to think, otherwise the game would start instantly, which would be unfair as they could lose points because of it.
Aim Trainer - medium mode complete
ย I created another target object, that decreases the points by 10 instead of adding 10, so that the player has to shoot the right target to score points. To implement this target, I had added more to the game controller object that controls the creation of the targets. I had separated the different game modes, so that the other target was only created in the medium and hard modes, not the easy mode.
Aim Trainer - Hard mode complete
For the last mode, I added code to both of the targets that allowed them to move in a random direction once created. I had also separated this from the easy and medium mode so that it only happens in the hard mode. To make sure that the targets donโ€™t leave the room, I had created barrier objects to destroy the targets once they collided with each other, which replaced them.
Leader board:
After working on the aim trainer, I wanted to look into how I would implement a leader board into the game, and found an extension for game maker called โ€œLoot Locker Easy Leader boardโ€. I started to look more into this to see if it could work, and I eventually decided on using it for the leader board system, as it looked exactly like what I had wanted.

Loot Locker is a website that allows you to use an API to connect your game to the website, to add certain things like achievements, ranks, progressions and leader boards.

After finishing the setup, and understanding more of how it works, I had implemented it into the name submission room, where the name and score from the game is sent to the loot locker, where the scores can be seen. I then implemented it into the game where the scores can be seen in the leader board room.

After getting the first leaderboard to work, I created a leaderboard for every difficulty for every game mode (9 in total). Although the other 2 games are not yet complete, I implemented them in a way that would seamlessly work whenever I create the games.
Leader board Concept
Once I had implemented the leader boards into the game, I had realised a problem with my initial concept for the leader board. I wanted to display 3 different leader boards, 1 for each game mode, where I could cycle the modes at the top. The problem with this, is I cannot display more than 1 leader board at a time, so as well as cycling the difficulties, I would also have to cycle the modes.
Leader board room complete
I had changed the whole design of the leader board room, making the leader board itself show on the right side, with the options on the left, allowing you to see the different modes and their difficulties. I had also added a visual on the top of the leader board to change whenever you press a specific mode or difficulty.

For now the leader board is finished, and would not need any more changes, as I've implemented ways that the games I will create can submit scores to the leader board already. I will now start to work on the platformer game and rhythm game.
Platformer:
Simple platformer collision and animation
I had started work on the platformer, by first making 3 objects - The game object, the player object and the floor object. I placed them all in a room (also with the countdown object), so that I could get a rough idea of where each of them would be in the room. I decided the player should be in the middle of the room, and the floor should be at the very bottom.

I created a simple jump for the player, so that they move upwards once the spacebar is pressed, and move downwards once they have jumped. I also changed the rotation of the player object every time they jump, and changed it back once the object hits the floor, so it looks like the player is jumping forward.
Platformer Points system
I had then created a simple points system, that adds 10 points every few seconds, so that the further the player gets, the more points they get. As well as this, I changed the floor object so that it constantly moved left, so it looks like the player is moving right.ย 
Platformer collision bug
Initially I had a problem with the floor moving, that was slowing down the floor movement whenever the player was colliding with it, making each of the obstacles I would create inconsistent with the floor, and not move the speed I wanted them to, so I had to completely remake the collision system I was using, in order for the player to both be able to collide with the floor, and for the floor to move.

At first I had the gravity constantly set as 1, but had to change it due to the collision stopping the floor. Instead of having the gravity constantly on, I had set the gravity to 0 once the player collided with the floor, and whenever the player is not colliding with the floor, it sets a variable to 1, which confirms the player is in the air. I then used this variable to change the gravity back to 1, and then back to 0 once the player collides with the floor again. This has also solved other issues, such as the player floating if they jump on an elevated floor, not allowing them to fall or move downwards at all.
Platformer death barrier
After fixing the problem, I created a death barrier object that destroys the player object if they collide, and resets the game and score. This will be used if the player collides straight into any wall, preventing them from moving through it. Colliding with this would also stop any movement from any object.
Platformer death particles
After finishing the game over part of the game, I wanted to make the player death more noticeable, so I created a particle effect that plays once the player object is destroyed
Platformer movement particles
I also wanted to add another particle, to make it look like the player is moving across the floor, as it looked like the objects were moving towards the player.
Platformer coins
I created a simple coin object that awards the player some points when they collide, as well as destroying the coin object.
Platformer spikes and click barriers
I had also created 2 more barrier objects that destroy the player - the spike object and the click object. The spike object is a simple barrier that I can place anywhere in the level that the player needs to jump over and the click barrier is a wall that the player cannot go past. The only way to progress past it, is to click it, which destroys the object.
Platformer double jump powerup
I then created the first powerup, which is the double jump powerup. Collecting the powerup gives you 1 double jump that you can use at any time. But if you use the double jump, it's gone, so you would need to use it at the correct time. The more double jump power ups you collect, the more double jumps you can use at once (allowing you to jump 3,4,5,etc times).
Platformer direction change powerups
I added 2 new power ups that can change the direction that the player is moving. If the player collides with the left powerup, they move left, and if they collide with the right powerup, they move right.
Platformer finished
Every time the player dies in the game, the countdown plays every time they restart, which would get very annoying after a while. To stop this, I added an attempt system that counts the amount of attempts the player has had since they started the game. If the attempts are more than 1, the countdown object is destroyed and the game instantly starts. I also decided to make the more attempts you have, the more points are deducted at the end of the game, so that players with less attempts are rewarded. The medium mode loses 10 points per attempt, and the hard mode loses 20 points per attempt. I decided to make the easy mode not do this, as it will be significantly easier to cater to less skilled players.

Apart from the level design, the game from this point was completely finished, so I had created 3 similar levels:

The easy level is very basic with no powerups, just jumps that the playerย has to make, with certain paths the player can take, rewarding them with more points.

The medium level is more complicated with the use of powerups throughout the level.

The hard level is pretty much the same as the medium level, but with the inclusion of the click barriers and slightly harder jumps.
Rhythm Game:
Rhythm game arrow buttons
The first thing I created when making the rhythm game was 3 different sets of objects. The game object (that controls most of the game events), the music object and the arrow buttons (along with some sprites). I had also put the countdown object in the game, so that I could implement it easier with the rest of the objects.
Rhythm game arrow buttons hitting arrow objects
Once I had got the buttons working, I made the actual arrow objects that moved up towards the buttons. If you press the button corresponding to the arrow, the arrow is destroyed. To stop the game from being too easy, I had created a timer in the button objects, to deactivate them if the player holds the buttons down, forcing them to press the button at the correct time.
Rhythm game accuracy hit boxes
To reward the player for hitting the notes accurately, I first implemented points into the game, along with an accuracy system. I created 4 objects to track the players accuracy - perfect accuracy, good accuracy, bad accuracy and miss. I placed them all on top of the arrow button objects, then changed the hitbox on each of the arrows to 1 pixel tall in the middle, so that it could only collide with 1 each time.

If you press the button and the arrow is in the green zone, you get a perfect accuracy, which awards you 15 points. If it's in the yellow it's good, giving you 10 points and the red is bad giving you 5 points. If the arrow passes all of the zones and collides with the red object outside of the room, you lose 10 points and get 1 miss. This incentivises the player to hit the notes more accurately to get a higher score. I had also created a timer that lasted the whole length of the song in the top right of the screen, to show you how long is left until the game ends (148 seconds in total).
Rhythm game beats
After getting the base game done, all I had to do was get the arrows placed in time with the song. To get this working I had a few ideas, but I first needed to visually measure the song at certain parts. The idea I had was making the screen zoom in on every beat of the song, to both make it easier for me to measure where the arrows would go, while also making it more visually interesting.

To do this, I had created an object outside of the room, that creates objects that move upwards. Every time the object collides with the perfect accuracy object, it destroys itself then zooms the screen in for a second, as well as zooming back out, to create a bouncing effect.ย 

To perfectly time it with the song I needed to find the bpm (beats per minute) of the song, which was 127. Then I converted it to beats per second, so that I could divide it by 60 to get beats per tick. This would be the number that I would put into an alarm event, so that it created it perfectly in time with the song.
How I got the positions for the arrows
The first way I tried to place the arrows was by individually placing them under the room. The positives of this are that I can place them very precisely and are easily editable. But the downside of this is that every time I want to test the arrows, I would have to play the entire song from the beginning, which would have taken way too long.

I then had an idea that I thought would work perfectly. I created an object that wrote specific text in the debug menu, every time I pressed a button. I created a timer variable that increases by 1 every tick once the game starts (note). This links to another timer I created in another object (which is where this code will be placed). It checks if the timer is a specific time, and as soon as it hits the time, it creates a random arrow out of the 4 different arrow types.

The positives of this are that it is very quick, as well as being very customisable with the randomised arrows, making every time you play it completely different. The downside of this, is that to make the arrows perfectly timed with the music, I would have to perfectly time the button press, which is very easy to mess up.

I decided to stick with the second option using the debug menu to code the game, as I felt it would take up a lot less time, as well as being relatively effective in placing the notes where I wanted them to be.
Rhythm game hold arrows
I created โ€œhold arrowsโ€, which are arrows that you have to hold down until the hold arrow ends. The hold arrows are made up of multiple hold objects, which once it collides with the arrow, destroys itself and increases the points by 5.

I then implemented this into the debug menu method I had created for placing the arrows. If the button is held long enough, it writes a piece of code that creates the hold objects beneath the recently placed arrow. The hold variable increases to by 1 every tick the button is held for, making every 7th tick place the hold object, as well as resetting back to 0, so that it can place another one in the next 7 ticks. If the button is released, it sets the hold variable back to 0, until the button is held again.

After experimenting with the debug method, I had found a few flaws that had led me to want to experiment with other methods. Some of the times I am pressing the button, it is slightly off or places too many of the same notes in an order, making it a lot easier.
Rhythm game arrow placement
I started to experiment with creating a room specifically for making the arrows in the correct places, by placing arrows in the game, which then wrote their exact location in a text file. After experimenting for a while, I realised that this would take way too long, as I would need to create a pause, skip and rewind system, for it to be effective. I would also need to figure out how to delete specific parts of the text file, if I ever deleted a specific arrow.

After experimenting with this more, I decided on sticking with the debug menu method, because there were less flaws with it compared to the other methods.
Rhythm game red arrows
After finishing all of the arrows in each of the difficulties, I had created a new type of arrow (specifically for the hard mode of the game). The arrow is a red arrow that deducts 10 points if you hit it, as well as counting as a miss. This makes the game even harder, as you have to purposely miss some arrows, as well as trying to hit other ones.

After making the red arrows, I had finished making the arrows in time with the music for each mode.
Rhythm game accuracy popups
It was difficult to tell when you would get a perfect/good/bad/miss, so I wanted to add a popup above the accuracy counters, so that you know when you get a certain accuracy. I created a sprite and object for each accuracy, and changed their colour depending on the accuracy (perfect - green, good - yellow, bad - orange, miss - red). After a second of showing the accuracy, the object fades and is destroyed, so that itโ€™s not constantly active.
Refining:
Menu demo screens
I added a demo screen for each game, whenever you hover over them, to give the player a basic idea of what the game looks like before they play.
Aim trainer particle effects
I went back and added particle effects when you shoot the targets. I also added sound effects whenever you shoot them.
Platformer particle effects
I then went back and added particles for the platformer. I added particles and a sound for whenever you pick up coins and power ups.
Rhythm game particle effects
I added a few more colours to the arrows whenever you hit them. For the perfect accuracy, I had made green particles, for the good accuracy, I had made yellow particles and for the bad accuracy, I had made orange particles (the same colours as the pop ups in the bottom left of the screen).
Scrolling leader board
I made the scroll wheel move the leader board up and down, so that you could see lower scores. I did this by creating a variable that increases or decreases depending on if you move the mouse scroll wheel up or down. I then implemented the variable into the y position of the leader board scores.
Gameplay videos
Aim Trainer gameplay
Platformer gameplay
Rhythm Game gameplay
Game Links
After completely finishing the games, I had uploaded them both to Itch.io and GX games:


Difficulty Based Games
Published:

Difficulty Based Games

Published:

Creative Fields