Week 12 & 13 - Final Update / Post-Mortem
This will likely be a large post as it covers two weeks that comprised of a lot of work though I’ll try and summarize as best I can.
Update 3
After the initial playtests Tom and I got to work on an update that would finally fix the swing mechanic, the pathfinding and address some other issues brought up by playtesting.
Tom got to work on the swing mechanic, and finally figured out the issue on why it sucked. Turns out that the swing hitbox was always spawning in the same location on the player. By that I mean that the box “center” point was at the top left which meant that when it was spawning at the players 0, 0 position it only worked if they were facing diagonally downwards. I went in and changed the swingbox points and finally it worked correctly. Well, it was still a little janky but far better than before. I decided to also the size and increase the time before the swing hit is deleted.
Tom also implemented a pathfinding system using GDevelops built in pathfinding behaviour. Unfortunately this pathfinding is extremely resource heavy on the engine and sends the game into a 5fps seizure at random points. Eventually I figured out I could improve the performance by a substantial amount by implementing a function that stopped pathfinding from working every frame, and instead only activated it every second. This was definitely playable but had occasional frame skips and lag spikes. Enemies would also behave slightly odd in the time between seconds. We decided that a smooth non-lagging experience was better than a game with pathfinding that performs badly so eventually we gave up on implementing it when we couldn’t get the performance fixed.
Based on the playtest findings I implemented a few fixes like the enemies bouncing off of the player when they hit to keep them from bunching up at the same poisition as the player. For some reason if a player stayed still they would only get hit once, and after that they weren’t able to be hit again by the same enemy until either they or the enemy moved. I also decided to give the enemies collision with each other so they wouldn’t move.
I forgot to mention in the last post that we implemented a basic score system. 20 points are given for killing a basic enemy and as far as this update was concerned, that was still the only way to increase points.
More Playtests and Update 4
I believe there was only one playtest between Update 3 and Update 4, though it didn’t have too much extra to offer that we hadn’t already heard from the original playtests. One thing I’m glad about with these playtests is that everyone seems to be happy with the game overall and find it fun. I’m also glad people have enjoyed the pixel art style. Other than that a major problem being brought up in playtests was still that you could cheese the game in many areas of the map and not have enemies reach you. I do believe that this was helped a lot in this update with the introduction of enemy 3.
Enemy 3 has the most complex behaviour out of all enemies. They’ll only follow the player up until a certain range, when the player is in that range, the enemy will hurl an empty can at the player at a high speed. Originally I decided that a well lined up swing would destroy the can but this was changed in the final update to something more fun. Enemy 3 also has a health of 30 compared to the health of 3 that the basic enemy has. After we playtested with the new enemy in place a complaint was that it wasn’t satisfying to defeat the enemy, and that they were expecting more. Though the third enemy does grant a large increase in points (200) I agreed that it was pretty unsatisfying to finally defeat him. Overall this enemy took far less time to implement than I actually expected, and despite the complaint about the reward for taking him down I’m glad it turned out well.
Another major addition in this update were powerups.
Tom implemented a simple system to spawn a powerup after a certain amount of time and also give the player an increased fire rate on their Dingle Fling ability for a certain amount of time. This was a good start but two more powerups needed to be implemented, and they also needed to have a system in place where they would spawn randomly around the map.
After literal hours of trying, I could not get a randomized time for the powerups to work, instead I had to come up with an alternate system for spawning powerups which I think ended up working well.
The system works by randomising a number between one and three every time a powerup needs to spawn. This number will determine which lane the powerup will be spawning in. The powerup is then given a random position inside that lane, and stays for a limited amount of time. I mentioned in an earlier post that a big problem with using GDevelop is the lack of good documentation and tutorials compared to what you’d find with something like Unity, Unreal or Godot. I searched for along time trying to find an answer to how to randomise time, but nothing helped.
Another big addition in this update was the difficulty system by Tom. He implemented a system where every 30 seconds each spawn point would spawn an additional enemy up to a total increase of 4. This system worked really well and I didn't feel the need to tweak it in the slightest.
After this update, the game was finally in a really good state and was generally well received by the final playtests.
Update 5 (Final)
While Tanaporn and Ahmed were busy with the report I decided to whip up a fifth and final update. This update was far smaller but had some nice final additions. I decided to quickly address the complaint about the reward after defeating the final enemy and implemented a powerup drop on his defeat. I also created one of the most fun abilities in the game which was the ability to whack enemy 3′s can right back at him. This would do 10 damage each, and was a fun but challenging way to quickly disperse of the enemy. I went and found some additional sound effects for whacking the can and picking up the fire rate powerup as well as some other additional sounds. I was going to implement a footstep sound for the player but I found this was really distracting.
There were still a few final bugs and changes that didn’t get addressed such as a complaint the shopping cart warning sound played too late. Overall I’m really happy with what we got done.
The Video
The only thing left I had to do was a video / trailer for the game. I decided to put my VFX diploma at work and get artsy with it. The idea was making it in the style of an old VHS tape advertisement with retro pop up cards explaining the game’s features. Since the game was so simple it really didn’t need to be a long video so I aimed for a nice 60 seconds. I really like how it turned out and I’m glad I was able to have fun with this.
https://www.youtube.com/watch?v=JdREbGeLk0k
IN CONCLUSION
I really enjoyed this assignment. At first I wasn’t a fan of GDevelop but I do appreciate it as a really simple engine anyone can easily make games with. My team members were a million times better than my last assessment so I also really appreciate that and I’m proud of what we got done.













