Major Project – Itch.io upload, gameplay and reflection

Introduction: In this blog post, there is a link to download my major project on Itch.io, some gameplay to evidence my project and my reflection on the overall project.

Itch.io Link:

https://shonenburst.itch.io/the-fruitable

Raw Gameplay:

Reflection

Overall Thoughts:

During the first six weeks of my project, I made good progress in keeping up with my Gantt chart. However, as the project developed, I began to fall behind schedule, resulting in the omission of some planned features, including two difficulty modes, progress-saving checkpoints, and sound design. Unfortunately, the lack of sound design and two difficulty modes detracted from the game’s overall polish. Nonetheless, the game’s high level of difficulty reinforced the link between my major project and the concept of frustration, as evidenced by one participant quitting the game halfway through the allotted playtime. While the link between the achievement system and my dissertation findings was difficult to establish due to limited playtesting with only five participants, I am generally pleased with the game’s outcome. Despite the frustration caused by the bugs and issues that arose towards the end of the project, the game’s primary functionality and purpose to frustrate the player were achieved, resulting in overall enjoyment during playtesting. Furthermore, the twist on the platformer genre was well-received, and the game’s difficulty added to its overall enjoyability, which I am satisfied with upon reflection.

Aims and goals in comparison to outcome:

Throughout my project, I followed my proposal with a few exceptions, including some modifications to the level design and exclusion of certain areas of the game, which I have documented in my development logs. The overall objective of my project was to explore the feeling of frustration and investigate why players abandon games. My main focus was to emphasize repetition and mastery of skills to increase player immersion, which could lead to players overlooking bugs and positively impact their gaming experience, resulting in either continued play or abandoning the game. The platformer permadeath system was an excellent tool to achieve this, as a single mistake would set the player back to the beginning. Upon testing, playtesters experienced significant levels of frustration while still obtaining a moderate level of enjoyment, strengthening my reasoning that my game achieved its intended goal. In my dissertation, I discussed the relationship between balanced challenge and frustration, which I explored through increasing the game’s difficulty. However, upon reflection, I feel that I made the game too challenging, as I struggled to complete it myself, despite knowing the optimal path to victory.

Although I followed my proposal throughout the project, there were some areas where I did not meet my intended aim. For instance, I failed to add more story elements that could emphasize the injustice in the differences between the fruit and the vegetables. While the story is still clear, I believe that there could have been more objects added to the levels to enhance the story-telling. This failure to meet the set requirements weakened the idea that players will continue playing if they are immersed in the story and want to uncover more. Another unachieved aim was the overall polish of the game, which includes fixing issues identified during testing, and this affected the overall satisfaction with the project. To improve, better time management and adherence to my intended agile method could have been employed to identify areas of focus and return to the intended schedule. In hindsight, I think I spent too much time getting the core mechanics working, and I should have completed that within the first two weeks to enable me to concentrate on other areas.

In general, I am satisfied with the final result and believe that the project successfully achieved its intended goals. Although there were some areas that could have been enhanced, such as adding more elements to emphasize the game’s story and improving overall polish, the project successfully frustrated the player and demonstrated why players may quit games during the testing phase.

What could be added or changed:

Upon reflection, I believe that there are numerous elements that I would have added or changed within my project. In particular, there were certain areas that I missed out on, such as sound design and the implementation of checkpoints or difficulty modes, in favor of focusing on general polish and time management throughout the course of development. To elaborate further, I had intended to incorporate sound design in order to create a more whimsical and immersive experience for players, which would have served to offset some of the darker themes within the game. Without the inclusion of sound, the game seems to be lacking a key element that could enhance the overall experience and further immerse players. The absence of difficulty modes, on the other hand, has taken away from the accessibility of the game, making it difficult for players with less experience to progress and ultimately complete the game. The addition of checkpoints would have provided players with a level of security, allowing them to try different routes in the levels without the fear of losing all progress due to the harsh permadeath penalty. The lack of additional models, meanwhile, resulted in certain levels feeling empty and devoid of life, which could have detracted from the overall experience. Finally, if I had managed my time more effectively, I could have obtained more accurate results from the playtesting phase, which would have helped to further strengthen the connection between my project and the research question outlined in my dissertation. Additionally, better time management would have afforded me the opportunity to spend more time polishing the game and addressing any lingering bugs or issues, ultimately resulting in a more polished and well-rounded final product.

Future Progress:

To further progress with the project, I would first prioritize implementing the missing elements that were originally planned, such as sound design and difficulty modes. This would enhance the overall polish of the game and make it more accessible to players with different levels of experience. I would also focus on adding more models and objects to the levels to further enhance the storytelling and the immersion of the player in the game’s world. In addition, I would spend more time playtesting the game with a larger group of participants to gather more accurate results and feedback, and then use this feedback to make necessary improvements and adjustments. Moreover, I would consider expanding the game’s scope by adding more levels and introducing new mechanics to keep the player engaged and interested. Finally, I would ensure better time management and organization throughout the project, and follow a more structured and efficient approach, such as adhering more closely to agile methodologies, to avoid falling behind schedule and to ensure a more successful outcome.

Many Thanks,
James Lacey

Major Project – Testing

Introduction: In this weeks blog post I will be conducting tests on my game to see where I can discover issues and bugs.

Test Danger

Test table –

Play testing –

When carrying out my play testing, I gave 5 minutes to each person to play the game and rate there experiences through a few questions.

Participant 1 –
How Frustrating was the experience?
1 – 5 (3)

1 = Not Frustrating

5 = Very Frustrating

How much did you enjoy the game?
1 -5 (5)

1 = Not Enjoyable

5 = Very Enjoyable

How far did you get?
Level 1

Notes:

Does not play games
Was very happy when they made the first Jump
Got very frustrated trying to move the player


Participant 2 –
How Frustrating was the experience?
1 – 5 (5)

1 = Not Frustrating

5 = Very Frustrating

How much did you enjoy the game?
1 -5 (3)

1 = Not Enjoyable

5 = Very Enjoyable

How far did you get?

Level 2

Notes


Participant 3 –
How Frustrating was the experience?
1 – 5 (5)

1 = Not Frustrating

5 = Very Frustrating

How much did you enjoy the game?
1 -5 (3)

1 = Not Enjoyable

5 = Very Enjoyable

How far did you get?

Level 2

Notes
None taken


Participant 4 –
How Frustrating was the experience?
1 – 5 (4)

1 = Not Frustrating

5 = Very Frustrating

How much did you enjoy the game?
1 -5 (4)

1 = Not Enjoyable

5 = Very Enjoyable

How far did you get?

Level 2

Notes

Died on level one
Learnt from mistakes and completed level 1 on second attempt


Participant 5 –
How Frustrating was the experience?
1 – 5 (4)

1 = Not Frustrating

5 = Very Frustrating

How much did you enjoy the game?
1 -5 (3)

1 = Not Enjoyable

5 = Very Enjoyable

How far did you get?

Level 2

Notes

Quit the game half way through because of frustration with the player camera clipping
After 2-3 deaths on level 2, gave up

Many Thanks,
James Lacey

Major Project – Development 09

Introduction: In this blog post I will be creating the menu UI and making the end game scenes and implementing the achievement system.

Progress Update:
The closer that I am getting to the end of the project I am realsing that I dont have much time to add in the sound design. I’ve decided that I am going to leave this out for now and if I have time in the remaining time I will implement it. Sound is very important to games and can add that bit of polish to a title but with my game I don’t think it will suffer too greatly.

Menu UI:

In last weeks blog post I was going to create the menu UI but a lack of time and struggles with issues that I found in the game has lead me to complete it this week. Firstly I need to create some UI buttons which is simply going to have a exit and start function.

MainMenuUI:

This script simple has a bunch of functions for buttons to start the game, return to the menu and exit the game. I am going to use the same script for my other scene’s seen as they will have the same functions for the buttons. I was going to have a different scene for the controls, however I decided it would be easier to just put that information on the main menu.

So I created a canvas and added some panels for the title for controls and the title of the game.

Found one issue when I was trying to test the buttons to see if they would correctly increment to the next scene. The issue was that I couldn’t press the button because I had locked the screen in the player movement script so I created an empty object and added a Lock State script which unlocks the cursor so you can press the buttons.

LockStateMenu Script:

This simply unlocks the cursor when the scene is loaded

Next I made the main camera world space camera and added a plane. Then I put all the fruit and veg models in a line so this would be the background behind the main menu UI canvas.

I replicated the same buttons and slightly changed the layout of the panels for the Ending UI.

Bad End = (King killed)

Good end = (King Spared)

Now that all the UI is completed I can start focus on the achievement system. I knew that I was running out of time to do an intuitive achievement system so I decided that I would only add achievements for each level that you complete. This still gives the achievement of completing a level and continuing further which might bring the player back to play more if they did not complete the game.

So I used google drawing and made 4 achievements for each level.

Level 1:

Level 2:

Level 3:

Level 4:

Now that I have built my sprites for my achievement system, I am now going to create a achievement canvas to attach the sprites too

Once added it looked like this, now all I need to do is to create a script which will display the sprite for a couple seconds and delete it afterwards.

Next week:

  • Testing (small test suite to check that my game is working)
  • Play testing (getting some people to test my game for me)

Major Project – Development 08

Introduction: In this blog post I will be making the function to kill the boss and the two different endings the player can receive.

Project Plan:

So I want the player to jump on the platform that is above the king, when that platform falls and collides with the king it will change the ending to ending 2. The two end conditions depend on whether the player kills the king or decides to spare him and go to the exit. This gives the player a choice to decide where he wants to end the story from the what they have witnessed throughout the levels.

Ending 1 = The player kills the king and murders all of the vegetables taking his place as king of the fruits

Ending 2 = The player does not kill the king and spares; creating remorse in the king and in turn harmony between the fruit and the vegetables

PlatKill:

The platkill script is attached to the platkill which is an invisible collider in the game when the player touches it it enables the rigid body gravity to true on the platform. When the collision has happened for testing purposes I debugged the function so it would print in the console that the ending has successfully changed.

Next Level 2:

Next Level Script 2:

The next level game object is set active when the player collides with the plat kill collider. The script attached to the next level 2 simple increments the build index to the correct ending scene.

BossKill:

When the platform collides with the king, it will destroy the object and print that the king has died

Next blog post:

Didn’t manage to complete the menu in this blog post but will focus on it with the rest of the UI

  • Achievement system
  • Menu
  • Ending UI

Many Thanks,
James Lacey

Major Project – Development 07

Introduction: In this blog post I am going to be creating the fourth level (boss floor). I have not done all the scripting for this yet and need to create a enemy spawn manager and a way to kill the king when the player has killed enough enemies.

Project plans:

This how the layout of the level turned out because I thought it would make more sense to have more traps for the player to potentially fall into while trying to lead the enemies into the trap

SpawnManager:

Game manager script:

The game manager script has the static int “amountkilled” is going to be used to count the amount of enemies killed in the level for scene. The game managers set the int to 0 and runs a coroutine that updates the UI kill count int to string. It also sets a value of 20 enemies that need to be killed to be able to remove the wall block between the king enemy/escape decision.

Trapkill:

by referencing the enemy die function from the spawn manager, it runs the function which updates the amount killed int and debugs the amount killed in the console. This function is only run when the player is on the four level

When trying to instantiate the original ground enemies, the enemies could not locate the player and the movement script would not work. This is because a clone of an enemy will not have the players transform set in the serializable field. So my way round this was too create an enemy specifically for the level 4 (KingEnemy) which will have its own movement script attached to it that does not use the attack bubble and goes straight towards the player. I can use the same tag as enemy for the boss enemy so when they fall into the pit and it is registered and kills them. When I first created the boss enemy, they were falling into the traps but they were not dying but soon realised it was a simple fix.

BossEnemyMovement:

Difference in this script compared to the enemy movement 1 script is that this does not use the enemy character controller and predetermines the players position as the target in the script rather than in the inspector. This means the clones automatically move towards the player.

Another issue that I was having with the spawn manager was when the enemies spawned into the scene, they were being spawned above the player and falling from a height instead of the transform of the spawn point. So to give a quick fix, I just moved the spawn points further down until the enemies were spawning on the ground.

Spawning above ground:

Spawning level to the ground:

Spawn points below map so the enemies spawn on the ground

Wallblock is disabled when the kill amount reaches 20

This ended up taking alot longer than I expected and encountered many issues along the way and trying to figure out and a way to fix those challenges. The hardest one i struggled to get to work was the enemies and in creating a new enemy it solved a lot of my issues but created more challenges. I tried reusing the movement scripts but obviously it wasn’t working properly so i had to create a new one but that took me some after being stubborn just wanting it to all work on the same enemy. Which I’m sure there is a way to do it, I was just starting to get a bit frustrated and worn out with it.

Next Week:

  • Create the king enemy death and escape endings
  • Menu UI

Many Thanks,

James Lacey

Major Project – Development 06

Introduction: In this blog post I will be making my third level, creating models and implementing

Living quarter housing block:

First thing I did was create a model for the housing, added 4 panel windows on the doors so its different to the prison doors and gives off a wealthier vibe.

SafeRoom Model:

This level is where I want the most intensive part of the game and to create the most frustration. This part of the level is about memorising the path to get through the level. When making this, I only followed one specfic path which I will show in the level when I go through it but I am interested to see if someone does make it to this level in testing and if they can find a different path to beat the game.

I started off creating the level by placing the housing blocks that I had made and placing enemies on the balconies of the housing models. So the enemies wouldn’t just come straight after you and they would fall down and they would come after the player. This gives an element of surprise when they jump off the balconies.

The original layout of the map has been changed so there are more enemies and makes this part of the level much harder. In the original set up, the level was too easy and needed to increase in difficulty from the second level.

I decided that I would add a spike trap before the player reaches the diner area. The spike trap here is suppose to be a false sense of security because the enemies stack on top of each other they can make it to the other side, so it makes the player rush this area to get through increasing the difficulty.

This area I kept the same because the enemies give off a presence that they are protecting the safe room.

Video of Level 3 being completed:

In next weeks blog:

  • Creating Level 4

Many Thanks,

James Lacey

Major Project – Development 05 and Level Design Second Level

Introduction: In this blog post I am going to be creating a way for the player to transition to the next scene and also starting to build the second level design.

I am going to approach making the level transition to the next scene using the scene management tool through a collision with an object.

So I created a game object and called it “next level”, attaching a script to it called “NextLevelScript”.

Next Level Script:

This script simply triggers when the player object collides with the next level object and runs the next level function that increments the next scene in the build index. This can be adjusted in the build settings for the order that the scenes will increment in.

Creating Level 2:

Originally I was going to have a staircase for the next level script to be attached to but I decided against that because I thought it would take up to much room in the start of the second level. The second level increases with difficulty from the first level implementing different enemies and dangers that could kill you such as the mold and flying enemies. What could be better

Made the traps bigger so the jumps were more difficult but wanted to add a path where if learnt could make this section much easier. On the right hand side of enemies, I added more room away from the mold and the flying enemies so it is easier to time a jump to get past the section.

I reused the assets from the first level and made the colours of the wall and floor blue to signify the level has changed and also its not a prison floor.

Added this group of dead fruit as a warning to what was to come later on in the climbing area of the level

creating the other pit falls

A major problem that I was the mold kill killing the player. For some reason the mold would kill the player when jumping over it and after implementing the models, the colour changer stopped working. For some reason, I could either get the models to turn green from the collision with the mold or the player dying random even if the mold kill was triggered. I wasn’t sure how to resolve and my other thought for a solution was to change the material of the models to a different green material but the same issue was still occurring. As annoying as it was I had spent too much time trying to fix this issue and needed to move on to keep up with my time table GANT chart.

The flying enemies at first I was having some difficulty with, when I was switching in the carrot model to make the carrot flying enemy prefabs. I had not added a rigid body and the models started to spin as they would go up and down through the waypoints. The simple solution to this was to change the rigid body on the model and make it kinematic so it stopped spinning. Normally this wouldn’t be possible if the movement hadn’t been controlled by code but because it is I can get away with it.

In this section of the design I decided to change the start to the climbing/wall bounce section of the game because i felt like the chase of mushrooms closing in on the player was more intense. This add abit more difficulty to the game because the player has less time to think and has to respond quickly to escape the chase getting to the climbing area.

The collection of dead fruit for the premonition shown earlier on in the level has been duplicated and put into the pits for the mass grave burials. Originally there was more duplicates of the dead fruit models but it started to become too intensive on the system and if i wanted to give the effect of more dead fruit I would have to do it in a different way. However for now I am happy with how it looks and will leave it as a stretch goal to come back to and try to fix.

The way that I had set up the wall bounce before meant that I had no problems when setting up the climbing/wall bounce area. The only issue that I had was setting up the jumps close enough to the wall but also making this area more difficult. So I decided some more daring jumps where the player has to wall bounce of the wall would add the right level of difficulty. Originally I was going to add in some enemies to make it more difficult but decided against it because when I was test playing it the enemies was killing me before I could beat the level. There was ways round this by making the enemies slower but I feel like it was not necessary as there are quite a few obsticals in this level already.

In next weeks blog post:

  • Level 3 creation
  • Level 3 Model creation (living quarter flats and safe room)

Many Thanks,
James Lacey

Major Project – Level Design Floor one

Introduction: In this blog post I will be starting the level design for the first level and mapping everything out to the level design in the project proposal.

Wall

I created a new scene and made the objects from the sample scene into prefabs. I then added all the objects into the scene the way that it was planned in the project proposal.

Spike Trap:

Box = red

Spikes = Black

Now that I have created the first section, I am quickly going to make my character models. I am using an asset off the unity store for all the vegetables and fruit models and then I am going to add some spheres for the eyes to bring them to life. Now I can start to litter the hall ways with dead bodies and add models to the enemies.

Added bouncy material to the collider so when the enemy runs over it, the dead body will move and start to bounce round the map. I added this in because i thought that it would make the game a bit whimsical and take away from my first worry that the game would have too many dark themes in.

In the next blog post:
– Add in a way to get to the next level
– Start to implement and create the second level

Major Project – Development 03 (Enemy Setup)

Introduction:

In the last blog post, I set up the player movement script which included the ability to move, jump and wall bounce. Todays blog post is going to cover the enemy set up, including movement (ground enemy and flying enemy) and an attack script to kill the player.

Lets start with the enemy movement script then:

Simply the idea that I want for the two enemies is that the ground enemy looks at the player and follows the player as they move round the map and a flying enemy that goes up and down between two waypoints. There are a couple ways I know that I could implement this including unitys navmesh controller which uses unity logic to help intuitive AI navigate round the map to the player. This can be quite intricate to implement but I don’t want my enemies to be that clever, I want them to simply to start following the player when the player is within a certain radius and fall and die in spike traps.

So in my demo scene, I created a square that is going to be my enemy. I decided that it would be easier to make the enemy first.

Then I made an attack bubble which is going to be used as the proximity distance to the player and attached that to my player. This is going to use a simple collider so when the enemy is within the proximity the movement script is activated and thus starts to follow the player.

Attack bubble attached to the player:

(This screenshot was taken after i had already started to implement the first level)

Now that attached to the player I can now create the enemy movement script


In this script it accesses the attack bubble bool which changes the attack bubble bool to true when the enemy game object touches the attack bubble collider. If the player “can move” when the attack bubble bool is true then it move towards the player. At first when I added this into the scene the enemy was able to move on all the axis, meaning it could fly up towards the player when the player wall bounced. Obviously this is a major issue so I added the simple “direction.y = 0f;” which locks the enemy to the y axis.

Success, so the enemy now moves towards the player when the enemy is within the attack bubble.

Next I need to think of a way that the enemy can kill the player

So I stripped out an old health script that I had in a previous game. The reason why I am using this script is because it can be applied to the player and the enemy. So this won’t require minimum effort and less engineering creating separate health scripts for the enemy and the player. The logic is fairly simple I want the game, I want the enemy to touch the player collider, taking 1 health away which will restart the player from the start through scene management.

Health Script –

So simply in this script, if the player has zero health then it will use the scene manager to load the desired scene which at this point is 0 because there’s only one scene so far that we are testing. The scene order can be adjusted in the project settings but we will come back to that later. So we have our simple damage function for the enemy and player if the health depletes then they are either destroyed or it restarts the scene.

Now I need to create a way that the enemy can damage the player so I created an Enemy attack in a child of the object with a collider.

Enemy Attack Script:

This script simply grabs the player health component, calls the damage script which called in the damage function will retart the scene

Success!! This all ways perfectly fine, kills the player.

One down, One more to go!

Onto the flying enemy, I want the enemy to simply go between two waypoints and if the player touches the flying enemy it restarts the scene. That means I can reuse the enemy attack script and apply it to my flying enemy. So now all I need to do is create some way points for the enemy to move between. I used an asset off the asset store called lean tween which helps create smooth transitions and animation easily in the game with a small amount of coding involved.

FlyingEnemy (waypoints) Script:

So I created a function that uses a small amount of code from lean tween, which basically tells the game object (enemy) to move towards the first waypoint.

WayPoints Script –

So when the flying enemy starts moving to the way point it will then use the function from the flying enemy to start moving towards the next position and this will run in an infinite loop.

In this next blog post:

  • Adding a way for the ground enemies to die using traps that the enemy fall into
  • Adding another way to kill the player and enemy using mold

Many Thanks,

James Lacey

Group Project – Development_04

Introduction: In this blog post I will be adding in sound effects and sound to the game and then doing some testing to see if the game works properly

Last weeks objectives:
– Sound/ Sound Effects added (Lobby music, Metal clanging noises applied to countdown timer)

Aims and Objectives
– Add in lobby music
– Add sound effects
> Correct Keypad answer
> Incorrect Keypad answer noise
> Button Press noise (Keypad)
> Metal clang noise (timer countdown)

LobbyMusic-

This will play music on loop as the player is in the main menu and I sourced this music and sound effects from OpenGameArt and BBC sounds.

Correct KeyPad answer:

Metal Clang Noise sound effects:

Testing:

There was some issues with some of the members getting into college/university so we could test the headset so I needed to set the headset up on my computer so we could play test it. When me and caleb started testing, some of the buttons would disappear when you clicked them two or three times which was a small issue. The main issue was some of the questions that caleb had created was not correct so the player couldn’t reach the end of the game. However, after some fixing we managed to play the game together using the companion app to solve the maths puzzles and set a score on the leaderboard

EEVR Full Demo Video – YouTube *Link to video of Game Demo*

Whats next?
-Write up the reflection and hand the assignment in

Many Thanks,
James Lacey

Blog at WordPress.com.

Up ↑

Design a site like this with WordPress.com
Get started