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.
Hey everyone! It has been one year since I started development on the game, which is a big milestone for me. To mark the occasion, I've written what I'm calling a MEGAPOST to look back at the development of the game so far. So expect a ton of GIFs! However, before I get into that I'd like to say something.
I started this development log because I was so inspired by looking through other development logs. I would like to inspire others and give those interested in the game an insight into how it is being made. I've been actively posting on here for a year now and I've done my best to post every week. Various factors got in the way at times, but this is the 45th post so I think I've done alright. While I would have made this blog regardless, I'd like to say a couple of thank you's.
A massive thanks to the University for the Creative Arts, the Games Arts course and Incubator Studio team. They provided so much support and gave Squillamorph many amazing opportunities to grow. If you are looking for a university games course, take a look at the amazing course offered by UCA. I graduated from it last year and would highly recommend it. A really special thank you to Sarah Büttner and Connor Wright. Without them, this project would not be what it is today. Please check out their work, they are really talented artists! I hope you enjoy it and maybe find a bit of inspiration for your own projects!
Ok, mini speech thing done. Onto the content!
Warning, there are a lot of GIFs and they will take some time to load.
The Metaballs Effect
On August 22nd in 2018, I started work on a revamped version of Squillamorph in the Unity game engine. The thing I was most eager to start with was a new design for the player character and I'd planned a few ideas to try out. One of them was a worm-like design; one was similar to the prototype design; the last was a gel blob design. I tried all three in this order and it's clear which one I chose. The metaballs effect and the colour shader took some research but I was, and still am, really happy with the result!
For those interested in how the effect works, I'll do my best to explain it. I render a particle system to a texture with a blur effect, which a shader then converts to what you see in the GIF. Any pixel on the texture which has an alpha value less than a specified cutoff value is cut out, while the remaining pixels are replaced with colour. To get the brighter coloured edge, I lerp between two colours depending on the alpha value of the remaining pixels.
Something you will see in the GIF is the player 'climbing'. This is a mechanic I was originally going to use in the game to overcome difficulties I had with verticality in the prototype. However, I removed it as it felt like the player had too much manoeuvrability when not infesting. Eventually, the wall jump would replace this.
The Custom Physics & Collision Conundrum, A Saga
Oh yes, I can't write this post without mentioning the nightmares I had with my custom systems. I had made a custom physics and collision system in the prototype and made an improved system based on it for the new version of the game. Of course, this created absolutely no issues... if only! The amount of time wasted solving problems with these systems in the first few months is painful to think about. My BIGGEST recommendation to other developers using Unity is to use Unity's existing systems created to avoid these situations. Nevertheless, I don't regret making my own convoluted system. Even though it still gives me the occasional issue, it has taught me so much and gives me that little bit more control over things.
To be continued...
Floppy Mechanical Sharks with Arms
I was really excited when I started making these guys! They were the first enemy I made in the revamp. The enemies in the prototype were quite haphazardly thrown together so their core systems weren't properly thought out. So to start with, I created a template that I could build any creature from. This has helped tremendously with making new enemies and kept things much tidier than in the prototype.
After getting the sharks core functionality working, I made a much larger test level and discovered that my A* pathfinding system couldn't handle it well. To be honest, it was never very optimised so I don't know what I expected. So I built a new pathfinding system based on flow-map methods. While this method can be more expensive than the A* method, I didn't have to run it on each individual creature. Overall, I prefer this system and still use it.
The Flop Sharks finally reached a point where they were ready for sprites. As soon as the sprites were in, I found it much easier to build on their behaviours. They just got so much more character with their new look. Despite thinking that this was about it for the shark sprites, there would be many tweaks and improvements after this point.
Visual Upgrades & Experiments
Things were looking good at this point. The Flop Sharks felt great, the new effects were cool, but the other visuals didn't quite fit in. It was time for a new tileset, which made things look much better once the colour palette was also tweaked! I altered the Unity 2D extras ruletile script to allow different tiles to connect to each other, something that wasn't enabled by default. This allows me to place a broken tile next to a normal one, which makes it much more interesting.
This is an experiment that I may still use in the game. The field of view shadows were going to make things more claustrophobic and interesting. Ultimately, I decided to remove them for both performance reasons and how much harder it made the game. There is a part of the game which might still be able to make use of these, but until then this will not be making an appearance.
Something else you might see in some of these GIFs is shadows cast by the tiles. The creatures and player use lights to light up the normal maps on the scenery tiles. I initially had them casting shadows but then I found out how much of a strain on performance the shadows were. Disabling them improved performance massively. So they will not make a return, and to be honest I don't think they're needed.
This is something I've never shown or discussed, partly because the GIF looks a bit weird. Early in development, there was an idea to let the player customise certain character elements like colour. In the end, I decided not to allow this. The main reason is that the implementation would be tedious, a lot of things would have to go through a colour change for example. It's also a very optional and unnecessary feature, but it was fun to play with at the time.
A Couple More Problems
Lets start with the Flop Sharks. One of the attacks for them was going to be a grab and shake/throw. However, the way I connected creature segments together prevented this from working properly. I tried out multiple solutions but none of them really worked. This wasn't a major issue as they still had a basic attack, but I couldn't waste more time so the grab attack was scrapped.
Oh boy, so this was a pretty big mess up and in hindsight I should have paid more attention to the various tutorials I've gone through over the years. This 'pretty big mess up' was the frame dependant issues I had. It might sound bad but I had no idea this was a thing until working on the new version of the game. I hadn't tied anything to Time.deltatime and didn't use FixedUpdate, which you can use to make things work independently of the framerate. I only discovered that this problem existed when I made the first build of the game and saw everything move at the speed of light! I had no issues in the editor, presumably because it didn't go over 60 fps. It took me a long time to get everything tied to time rather than framerate. I did miss a few things at first, which resulted in some error-less bugs that drove me mad for months. I didn't discover what I had missed until March this year. Needless to say, I face-palmed.
A Lesson in Scope
By December 2018, I had the basic systems of the game setup. They weren't optimised but they did their job. So I designed and made a prototype of the first level. It finally felt like the game was coming together! The level was huge and the performance was still doing well! The idea for levels at this stage was to incorporate a boss into the level. The player would have to go through a series of steps in the level to spawn the boss and only after defeating it would they be able to move on to the next level. I decided some minor testing was due to see what people thought. This is where things went a bit downhill.
There were two main points of feedback; the level is too big and complex, and there isn't much content. I had expected the lack of content point, but the point about the level being too big opened my eyes. I tried playing the level while purposefully utilising as much space as I could. However, I found that the basic combat made it preferable to stay in a couple of select places. This made me realise that it was too big. A rethink about the scope of the game took place and a big reduction in the level size was the outcome of it. Unfortunately, this was not the last I'd seen of the scope issue.
By February 2019, the university Incubator Studio team had managed to secure a stand at EGX Rezzed for Squillamorph. This was an amazingly motivating thing to hear, but it also opened my eyes to the reality of what I was doing. It finally clicked with me that I was developing a product that would be available to the public, and also needed to be successful. Cue my panic about getting a playable build ready for Rezzed. Since December, things hadn't progressed very far in terms of new content. This was because I had to focus on fixing various systems, like the custom collision. And so another rethink about scope and ways to work faster took place. The result, scrap the large level with a boss and objectives idea to focus on what should have been the priority from the start, combat. A more traditional 'multiple small simple levels before a boss level' approach was decided on.
I will mention that these re-scopes were not the only ones that occurred but these were the most memorable. I am very glad that this happened because otherwise the game would play quite differently and wouldn't have progressed as much as it has. What I've learned from this is that having a smaller scope is much better, both for development time and stress.
EGX Rezzed & Guildford Games Festival
These two events are up at the top of my highlights of development this year. EGX Rezzed took place in April and the Guildford Games Festival took place in June. Before Rezzed, I was very nervous about what people would think of the game. I was also worried about getting it done, mainly because making a tutorial is really hard! Nonetheless, I felt great when I got there. Despite the slightly confusing tutorial and unfinished gameplay, it was recieved really well. I learned so much about what players want in a game and gathered a bunch of feedback. I started taking development much more seriously after the event. To prevent as much of a pre-event/deadline panic happening again I started planning my development time in more detail and logged what I did each day. This gives me a much better idea of what I can get done in a set amount of time.
Soon after Rezzed, I found out that Squillamorph and I would be going to GGF. This time, I knew what to expect and planned development around the event. I managed to get everything I wanted done, including a boss and brand new tutorial. Of course, I can't prepare for everything and I watched as players discovered some major bugs. This was a good thing though. Not only did this reveal the bugs but I also found it gave the players who found them a sense of achievement. Why it did I'm not sure, but they enjoyed it! This event rejuvenated my motivation once more, just like Rezzed had. I would highly recommend going to these kinds of events, whether you are a developer or not. They are great fun!
1 Year On
So this is where the game is now, one year on. I've got two tutorial levels, four Flop Shark levels, and a boss level all playable. I've also started working on the next region and the Kobold enemy that inhabits it. You should see more on this very soon. Over the past week, I've started making a fun new enemy, which will be the fourth enemy the player encounters! Next week I'll talk more about the new enemy so I don't fill up this one any more!
I know some you will be wondering whether I have a date for the planned Early Access release. Unfortunately, I can't give you one yet but I hope to be able to in the near future.
The Future... (Cue Mysterious Music)
I can't talk too much about this, partly because I don't know what will happen but also because I don't want to spoil the things I have planned! I will say that there are many more exciting things to come in Squillamorph's future and I very much look forward to sharing it with you. So stay tuned for more awesome content and hopefully I'll be able to do another post like this next year!
Wow, what a journey it has been! Squillamorph, and myself for that matter, have come so far! I hope you enjoyed this look back at the creation of the game!
A quick shout-out to joakersblog on Instagram for the awesome fan art! Feel free to make your own fan art of the game, and if you do, don't forget to tag in Squillamorph or #squillamorph so I can find it!
Follow Squillamorph on Twitter, Instagram, and Facebook to stay updated. Don't forget to tell your friends to check out the game too!
Thanks for reading!
I'm the game developer for Squillamorph! I'll post here on the devlog as often as I can.