Game Jam End: Retrospective
Well, its finally over.
I just submitted 5 minutes ago (2 hours before the deadline), and while I could play the game over and over to work out the very last of the bugs, my exhaustion has finally got the best of me.
Instead I would much rather take this time to reflect on the things that went well with the project and what went poorly.
- The New -
Every game jam I try to do two new things. 1. I try to learn a new unity feature or programming strategy that I haven't used before. 2. I try to use an art style I haven't used in a previous game.
I'm not entirely sure what new programming feature I want to credit this game with helping me learn. I could say websocket multiplayer, but I have already worked with that before (I just never released that project). I did a lot of fun stuff with custom shaders this game, bringing back the render texture strategies I gained from River Delta, but non of that stuff is totally unique. I did a slightly different game architecture than normal, since I went crazy with splitting up my overarching system between different scripts so I don't have to deal with 3000 line files like normal, but that mostly just ended up with me using a lot of singleton references. This game taught me a lot of how to properly use the new input system, but not only do I still not entirely understand it, I had used the new input system before on the Wizard Ware minigames.
With all of this half/learned new things its hard to pick a winner, but I think the best new thing that I learned is FINALLY FINDING A SOLUTION TO THE ASPECT RATIO PROBLEM. Trying to get my games to display properly no matter what device someone is playing on has been plaguing me since the very beginning of game dev. "Just design your games so it doesn't matter what aspect ratio they are played at!" people like saying this online, but its a load of nonsense. If you are making a 3D game that makes sense, since the player will be able to fully explore the environment regardless, you have nothing to hide. But trying to design a 2D browser game that also renders properly on whatever weird aspect ratios get used on full screen mobile browsers is just a nightmare. Either you would have to make all of your rendering dynamic so that things don't feel weirdly spaced or scaled, or you have to attach pretty much everything to a canvas so that you can use rect transforms to fill the dead air. Whatever, its fixed now since I found you can set a normalized rectangle on a 2D camera that forces an aspect ratio.
I don't know if I can say that this game jams art style is entirely unique in my game jam portfolio. The art style consists of a combination of vector art (for the computer system elements) and pixel art (for the malware elements). Obviously I haven't ever done a 2 competing art style game before so this technically counts as new, but it still feels like I didn't get a chance to expand my artistic abilities. I Heavily used vector art in Trial By Error: Fantasy and I used pixel art in my first two game jam games Chat Fights A Goblin Horde and Ponder The Void. I think the art style of this game really shines with all of the polish I was able to put on it. Opening and closing file browser windows feels good, the popups when collecting stuff are snappy, the pixelated process thread moves completely unnaturally and totally smoothly at the same time. All of the art works to make this game one of my nicest feeling games to play yet (in my opinion).
- The Good -
I was really happy with how a lot of different things came together on this game. The unfortunate part is so many of the things I am happy with is things most players will never notice.
So much of the backend on this game is elegant and efficient, which is probably the thing I'm most proud of in general. This game does not waste resources. Unlike previous games (*Cough Cough* Lifespan ) I designed this game efficiently on the backend, and then didn't do something stupid that totally killed frames (Like updating several high resolution textures all in one frame), so this game runs smoothly throughout. Utilizing a lot of different custom shaders, like my new favorite custom shader the *gradient* shader so many of the visual effects I was looking to pull of worked wonderfully. I don't know why I didn't think of using gradients before as a way of making bars that change fill level, I guess it took learning some html and css before I realized that was even possible. The custom glitch shader gave me a lot of mileage since glitchyness was heavily featured as half of the art. The glitch shader technically has 3 different versions, with slight different tweaks to the code depending on what I'm trying to do. There is a glitch shader for the process thread, which has a slight addition of darkening at the bottom of the thread texture to emphasize how the thread is stretching. There is a glitch shader that can be applied to sprites, which allows me to make Sys32 look more corrupted over time, and there is a glitch shader that is solid and transparent, which allows me to create the glitching out affect when overheating.
If I had to pick one bit of game polish I'm most proud of, its definitely the process thread. When I originally came up with the concept for this game I had a vision that the delving into the file system would feel like diving into a cave since a rope would lower down and connect all of the browsers together, almost reminiscent of a red yarn conspiracy board with its chaotic movement and wild turnings the lower into the system you go. As far the the implementation turned out, its pretty much exactly as I imagined it would look. While it may actually hurt game play more than increase immersion, its my precious child and I am NEVER removing it :3
Its been a bit since I have done pixel art for a game, and I am pleasantly surprised how good a lot of it turned out. It probably doesn't hurt that I have gained a little bit of pixel art experience making a bunch of different Minecraft skins, and also in general have just started to understand the underlying concepts of art more.
- The Bad -
So much of this section is just going to be regret over lost scope, but I also have to remind myself that I never expected to get half of the features I originally had planned within the month.
The thing I am most ashamed of having to cut is the game audio. I felt very inspired to finally do something fun and polished with game audio for this game after the audio mixing workshop the club had, but I just didn't have the time to work on it. Cut me some slack ok? Game audio is very difficult to justify as a priority. The main thing is that I just never listen to game audio anyway when playing a browser game, and the few times I get to its either I accidentally left my speakers on, and the game audio gave away that I was playing a browser game to everyone else in a room, or I had already been listening to something on the computer and then opened a game. Most of the time though a browser game having audio is always a shock or a pleasant surprise, never a expectation or a major selling point. The overhead of adding audio is also a pain, since if you want to add audio, you either have to have it always on at and at a fixed volume (which you have to hope is a good volume for 90% of users), or you have to go through the hassle of adding and entire method of changing the volume in game, so that you don't destroy a user's audio balance. In the past when I have added audio the compromise was just having a mute button, which sort of defeats the purpose of spending time on audio in the first place.
The feature I most wished I was able to implement was the pictures directory. I had such cool plans for the pictures directory, and it would have added a lot to make the top level domain less lonely with just system 32 and the documents folder. Having two main branches a player could go down, with slightly different objectives would have added a lot to the gameplay. The pictures branch would have also done a lot to increase immersion since I could have done a lot with the framing of who's computer are you actually infecting. I had a whole funny role reversal reveal (That was meant to make my time creating art for the pictures section easier) where you are actually a bunch of humans, infecting a robot's computer. So all of the photos would have featured a "user" who would have been randomly assembled from a bunch of robot part sprites, and would then show up in a bunch of different randomly generated photo arrangements. The minigame for gathering cashe from the photos was also going to be super fun and on theme, where you would have to solve a captcha of the image and select the squares featuring a requested object.
- The Ugly -
There is only one ugly part of this game, of which I have extremely mixed feelings. So this sections should actually be called...
- Was Multiplayer Actually Worth It? -
Multiplayer is easily the ugliest part of the game. As always all netcode is bad netcode and this game is certainly no exception no matter how much I intended for it to be.
The encoding method for game is the thing that makes me love the multiplayer system. It was very fun to design a method that was on average the most optimal way to share the delta of the game state. I love working with bitwise operations, they are a little painful to work with since they take a lot of thinking, but when you get a bitwise solution that works well its hard not to feel accomplish that you have broken information down into one of the most compact forms possible (barring any further compression methods). I kept getting told that I was crazy for wasting so much time on the encoding method, when in this day and age there is far more than enough bandwith to just use regular ints or bytes for each piece of information (and I have to admit that's not a totally incorrect assertion). But when I accidentally created a feedback loop that had the game and server sending each other thousands of messages each second for half a minute, and then looking to see how much of the server resources I wasted, and finding out it was under 2MB, I felt quite proud. In general, when everything works with the multiplayer system it works quite well and the game stays decently synced between players.
The issue comes when the multiplayer system fails. There are SOOOO many things that can break when working with the internet, that you can only hope don't happen. If a player lags for a little too long or has an internet blip, the server can think they timed out, and totally disconnect them, then the player has to go through the effort of reconnecting to the game, and that doesn't always happen automatically and sometimes requires a whole page refresh. But I can't just tell a player "refresh the page" because that's not elegant, except sometimes that's the only thing I am able to do, and it hurts to say it. I spent far too much time trying to catch all of the loose ends in the networking and even still I can think of several ways the multiplayer can totally fall apart.
Multiplayer alone took not only over a quarter of my time in the game jam by itself to implement, it also took far over half of my sanity when I finished the initial implementation which meant I worked much slower on implementing new stuff, and my coding efficiency took a serious hit. I could have added many of the core feature I was planning on adding with the time I would have saved.
Regardless I am quite proud to finally be able to publish a game that has "working" multiplayer. After regretting not adding some sort of multiplayer to Lifespan this felt good to finally prove to myself that I can make it work.
I guess we will just have to wait and see if all of the multiplayer falls apart at the showcase, and if I can effectively encourage audience participation in my game.
- For The Future -
Not adding multiplayer was my biggest regret for Lifespan, and not adding audio was my greatest regret for this game. So I imagine next semester I will probably work to prioritize and audio system for the game, and may even give myself an extra challenge with making the game center around it.
Its becoming a little too real that next semester will be my last UMD game jam, but I guess all good things come to an end.
-Thaddaeus
Distributed Destruction of System
Swarm the system!
More posts
- Multiplayer Share Link18 hours ago
- Week 4: I Have Words4 days ago
- Week 3: Things Fall Apart11 days ago
- Week 2: Linked Together18 days ago
- Week 1: Strong Start25 days ago
- Week 0: Game Jam Start!32 days ago
