What is Squillamorph?
Please consider getting Squillamorph on Steam and leaving a review. It is in Early Access and still very early in development but the more feedback I get now, the more enjoyable the final game will be!
Join the official Squillamorph Discord: Squillamorph Discord Server
Below is the development log for Squillamorph. It is GIF heavy and it might take a while to load them all.
It's time for another update! Lot's of exciting progress to talk about.
As I mentioned in the last post, Squillamorph is now a primarily 'horde mode' style game. I've begun working on the system for this and have made great progress! A number of creatures will spawn each wave/round from a list of spawn points. You can see a shark spawn in the above GIF, it does need a bit of tweaking. As the round number increases, so will the number of creatures that can spawn. There is a short rest period between rounds that will allow the player to do anything they need to without being bombarded by creatures.
However, because of the pathfinding limitations, explained in the last post, the list of spawn points must change to be in the same room as the player. Each area in the game that is separated by one or more vents is a room. I have setup a script in unity to act as a room. Each room has its own list of spawn points which will be fed to the spawning system depending on which room the player is currently in. Room switching is dictated by the vent system. Anyway, that's the wave system in a nutshell.
The attacks for the Flop Shark have progressed somewhat. As a team, we thought it would be cool to have the sharks be able to grab each other, as long as the player was infesting one. This way the player would be able to briefly carry around an enemy or vice versa. However, this system has turned out to cause more gameplay issues than I thought it would. Rather than being a fun combat move, it feels quite unsatisfying to do and frustrating when multiple sharks grab you at the same time and you can't escape. I am also experiencing more glitchy movement when attacking with it. You can see some of this madness in the GIF! I am not going to throw this away. Perhaps it will be a less common attack or an attack for another type of shark.
I should mention that we are considering multiple shark types to help increase difficulty as the rounds increase. Anyway, the current attack will change and I will add other forms of attack, like a tail swipe, for the normal shark. We are also considering the use of visual effects to better represent when a shark is attacking as it can be quite confusing when there are many sharks!
The test dummy has been updated to work with the new pathfinding system properly! I'll admit it isn't perfect but you can get the idea of how it will move now. I am having a few technical difficulties with its jump when infested but I'll iron out the bugs soon.
I've added a few visual changes since the last post. The old field of view system I showcased in one of the earlier posts has been repurposed to light up whole rooms. This is so the player's vision is limited to the current room they are in, allowing me to turn off any performance demanding parts of other rooms. I've achieved this quite simply by using white tiles on a tilemap rather than the dynamic white mesh which it use to be. You can see this in the image below. The GIF shows the new effect turned on and off. I may find that this isn't needed in the end but either way, I like this new effect. There are also a few post processing effects which I've enabled to make things a bit more interesting for me to work with!
That's it for this week's post! If you liked it feel free to leave a comment and share on social media! The next post may be a little different as I am running a game jam over the next week for the university course, which will mean less work on this project. Either way it will still be interesting!
It's that time of the week again! This post will be full of my adventures with pathfinding, combat and game design. Also, I'm going to try a new way of formatting these posts by using sub-headings.
At the beginning of this week, I talked to the team about the type of game Squillamorph is. We have decided to change things slightly. It was going to be a linear story based game, with levels that lead the player from point A to B. However, Squillamorph will now be more of a 'horde mode' game. This does not mean the core mechanics will change, just the level design and level focus. More of an emphasis will be put on combat which we have exciting ideas about. The game will still primarily be story based but there will also be an endless mode for each level. We are very excited about this change and we hope you are too!
I was recently designing a much larger level than we have been so far. It was playing well, so I decided to see how the Flop Shark behaved in it. This was when things started going wrong.
As I've discussed before, I use an A* pathfinding solution for the sharks to move around. Turns out, my algorithm was not well optimised and the game lagged awfully in the larger level. So back to the drawing board I went. I decided to properly research and learn about all sorts of pathfinding methods. I really liked the look of Flow Field methods after reading these two articles (article 1, article 2). I began developing my own algorithm which gave me much grief. Eventually, I got it working well (only after realising that the .Contains() method for C# Lists REALLY tanks performance). This means that rather than every shark creating a full path to the player, the player generates what I like to call a heat-map, which any shark can use to find the direction to take to get to the player no matter where they are in the level. Here's an image to demonstrate the heat-map.
Each coloured square represents a tile that isn't solid. The more red a tile is, the lower the cost of movement will be for a creature to move to that tile. The more blue a tile is, the higher the cost of movement is. In my setup, the tiles touching floors an walls have less cost than tiles "in the air". This means a creature will prioritise moving through those tiles to get to the player because the cost to get there is lowest. If you want a more in-depth explanation, I highly recommend reading those articles and looking at their sources.
Probably worth mentioning that I might revisit the A* method as I've realised, while writing this, that it uses the .Contains() function. Anyway, the only downside to the heat-map is the fact that it still performs poorly in large level spaces. The solution I've found is creating large levels out of smaller rooms to limit how much of the heat-map updates at once. So, it was time to implement something I was going to do at some point anyway to allow enemies to get between these rooms, creature vents. Right now, I have it setup so that enemies can use the same vents as the player, but this will not be the case in the final version of the game.
Onto an exciting addition to the game! The Sharks can now kill the player, who will respawn at set position. There will be a maximum number of times the player can respawn before the level is reset but for now there isn't. The shark can kill the player with a bite or if you happen to cross paths with it when it is leaping. In the next week, I hope to implement the ability for the player to attack when infested. I may also be able to implement the next step of the shark attack, which is grabbing and thrashing around. This would only happen when the player is infesting another creature or if the player were to attack a shark. I am very excited to get this implemented because it will allow us to begin play-testing the game!
The test dummy robot from last weeks post has also been updated slightly. It now moves in an upright pose and it can jump but not climb. Unfortunately, I cannot get a GIF because I have not yet updated its pathfinding method, leaving it broken. We also have some new environment assets to place in the game but I have not had a chance to do so yet. I expect both these things will be in the next post.
Wow, that was a long update. I hope you enjoyed it! If you have any feedback at all, please leave a comment!
This week I’ve struggled to do much with the game. I’ve had a cold which has frazzled my brain and made it very difficult to work properly. Nevertheless, there are a few new things to show!
Connor has been creating more tile sets which I have put into Unity. I have normal mapped one of them and will complete the others over the next week. I am now using them to construct the main area for the Flop Sharks. You can see some of the new tile sets in the GIFs of this post.
I have also started working on the test dummies to be used in the tutorial. These are slightly more difficult to construct than the shark because they have to be upright. While I am not happy with the current solution I am using, it does the job, when you don't infest it, for now. I will use what I learn with the dummy to make a better Root Toot, the humanoid ranged enemy from the demo, who had a very unstable movement.
That's about it for this week's post. I have started making some behind the scenes changes to the creatures but they are minor changes which I might talk about in the next post.
There is an important update I should mention which is that I am now working on the game full time for the foreseeable future. This should mean great things for progress and possibly means more frequent updates but we'll have to wait and see about that! If you are enjoying these updates please spread the word about the game and this devlog, we appreciate it!
I'm the game developer for Squillamorph! I'll post here on the devlog as often as I can.