Hello everyone!
About a year ago, I participated in the Game Maker’s Toolkit Game Jam which was my first game jam experience. It was quite the journey and you can read all about it in this dev-log. I learned a lot, and with an additional year of game development experience under my belt, I figured I should try my hand at another jam. That has now taken place and this dev-log will be my reflection on it just like last time.
Let’s Jam
I guess this is just the time of year for game jams. I don’t really have a particular reason for wanting to do another one besides just “I probably should.’ I’ll be completely honest, the last one was a fatiguing experience and I wasn’t looking forward to jumping to another few days of jamming, but I still felt compelled to do one.
So about a few weeks ago I took a look at the itch.io game jam calendar to see what lined up with my schedule. I knew right off the bat that I wanted a much smaller jam. The GMTK Jam was the largest jam in itch.io history with thousands of submissions. With that many people participating, it can become a bit problematic. There are just too many games to play that only a handful really get any attention. While a big part of the jam is the development process, another important aspect is playing other peoples games, giving feedback and receiving comments on your game. When there are so many entries, there just isn’t a chance to get much engagement. It’s no one’s fault, it’s just how large jams like that work.
With that in mind, I looked around and found the Pursuing Pixels James Jam Game Gam which lined up pretty well. It was a week-long jam that seemed less hectic than the GMTK one. The description made it seem much less tense than other game jams. The theme was announced beforehand and the expectation was to not have the jam take over your life, hence the week long development period. It sounded nice, and all I had to do was to think of an idea for the theme, Permanence. I stuck it in the back of my mind and just pondered it every once in a while. I wanted to try and do something physics based, or at least not rigid. What I mean by this is making a game that is not numbers or puzzle based that has set solutions or outcomes. Something like a platformer or action game, where there is not a set, calculated result. But after much deliberation, I honestly could not think of a concept I liked. I had a few such as, “An action/platformer where all hitboxes linger’ or “a game based around pencil and permanent marker’ etc. But all my ideas lack the “so what’ part. They were interesting concepts, but I didn’t know what to do with them. As the day of the jam drew closer and closer I realized I didn’t really have an idea, so I decided to reuse an old game idea of mine. However, it was a puzzle game, the exact sort of thing I was trying to move away from, but I didn’t have any other ideas. So the day came and I started to work.
I started with the basic gameplay, then some additional side mechanics and just pieced together a concept with my idea. After a few hours of work, I had a basic level and absolutely no clue what to do with it. I tried to change some mechanics to move away from it being strictly a puzzle game, that I changed a few aspects and the whole thing fell apart. It just felt like a whole lot of nothing. I could move this block and it did some nifty thing and that was it. I had no other ideas. I felt completely demoralized. I did not feel I had a week’s worth of ideas to keep working on, so I just put it away and decided to deal with it later. After all, I had a week to work on this. However, each time I thought of it again, I didn’t want to work on it. I’ll be honest, I’ve been a bit of a rut in terms of game development. Trying to balance my personal life with my developer life has just been really tricky this past little while, and the frustration of not being able to put anything together really put me in a sour mood about the whole thing. I gave up on the game jam, not my proudest moment. Quitting on something on day one generally isn’t my style. I probably could have made it work given the time, but I really didn’t want to. I was demoralized and just wanted to do other things that week, and that’s okay. So I didn’t submit a game for the Pursuing Pixels Game Jam, but there is still plenty of dev-log left…
Let’s Gam?
When I first marked my calendar for the game jam, I also took note of a few additional jams that also fit my schedule in case something came up. After I yielded to the jam, I saw that another one was coming up soon after. This was the Mini Jame Gam #10 (I really don’t get the deal with the odd names). It was a 58 hour jam similar to the other one. I told myself that I could give up on the Pursuing Pixel Jam if I give the Jame Gam a shot. Basically, if I can’t think of any ideas, I’ll just move on since I was still in an apathetic mood about the whole thing. So I waited for the day to come and I saw the theme was “Reality is Breaking’. I immediately had some ideas, and optimistically started work with just about 52 hours left to make something.
The general concept for my game was an adventure platformer game that involved you going through a parallel universe. The initial idea was to have the player acquire certain items from various universes to complete tasks. For example, if you needed to get a bottle of water for someone, you could go to a parallel universe where people use bottles of water as money and just sell something. It would be mostly about switching from reality to reality and some light platforming thrown in.
I started work on getting a basic platformer engine working. It was fairly easy overall, but I did spend lots of time making sure it felt half-decent. My next hurdle was figuring out how to get multiple realities to work. Generally, when you are dealing with a game that crosses between different worlds, you need to decide some important aspects. First, are the worlds identical in layout or do they have unique structures? Second, are you able to move between them whenever you wish or is there a special access point? Figuring these out early is really important, especially in this context when there isn’t much time to experiment. For my game, I decided to have identical worlds and to be able to switch whenever you wanted.
With this in mind, the next objective was to figure out how to differentiate the worlds. I looked through various pre-made assets I had acquired throughout the years to see if I could find anything I could use. After searching, I found exactly what I was looking for. The first was a pack of tilesets of different regions such as grasslands and desert created by Shackhal. Most importantly, each tileset had the same tilesheet layout, so I could make one map and simply switch the tileset to get different aesthetic for each universe. The second was several sets of basic characters and animations, each with a different theme, humans, orcs, and the undead all created by LYASeeK. With this, I had my three locales and my three inhabitants ready to go, so I just had to get them in the game.
This process took a bit of time to figure out, but I created a system that allowed me to switch between three different universes on the fly. Each universe had its own unique tileset, backgrounds and characters. However, it was around this time where I had an idea. Since each universe couldn’t differ in layout, why not give them unique physics. For example, making movement in the desert more floaty than in the grasslands. This way, I could even design challenges for specific realities and give each universe its own feel. I went ahead and added this with the grassland being your “normal’ feeling area, the desert being much more floaty (a bit like the moon) and the snowlands were fast and slippery.
At this point, I was starting to rethink my original idea. My concept never really involved any complex platforming or movement, but I was thinking I may want to go down that route instead. After some deliberation, I had an idea for one more feature that determined the direction of the game, the portal mechanic. What if you could place “portals’ around the map that allowed you to take advantage of another universe’s physics while you are in a completely different universe. A portal in this case would be a circle on top of the world, and whenever you’re in it, you have the physics of another universe. Once I added this, everything came together. You were able to string together some really impressive maneuvers with clever portal placing and timing by combining the physics of the different universes. You can combine the grassland with the desert’s floatiness to get longer jumps, or the other way around to get higher jumps. It was a super cool concept, so I rolled with it.
I had some other ideas alongside it, such as enemies. What if you had enemies in each universe that had different properties. You could even place a portal where they are and they will change, giving you more options to deal with obstacles. So, I added an enemy for each universe, an stationary archer for the grasslands, an actively running mounted orc for the snowlands and a pursuing ghost for the desert. I also gave each character an attack with the animations provided in the asset packs, a long range stab for the human, a quick axe chop for the orc and a magical projectile for the wizard.
It was nearing the end of the first day and I already had the main bulk of the mechanics working well. To end off the day, I started working on some of the early stages. Afterwards, I thought about how I wanted to structure the rest of the game, and I had some pretty good ideas.
In general, I felt really good about where I was at. In comparison, at this point in the last jam, I had about half of the features needed to make the game and barely any assets at all. Here, I had all my assets ready to go and the stage was set to spend day two crafting levels. I was honestly really proud of myself for how much I was able to get done, especially considering or unmotivated I was not a few hours earlier. Now, I just had to hope I could keep it up.
Day 2
The second day was fairly straightforward, make the level. I had decided the night before that the “stages’ would consist of one big level that has doors to smaller sections. In order to beat the game, you had to find three crystals. The basic lore was an experiment that had gone wrong, flinging you into the various universes. In order to fix reality, you had to get the crystals to fix the machine. I also haven’t mentioned another quirk about this jam, there was a special object you were required to use in some way. In this case, I had to incorporate a phone into my game. My idea here was that your phone is how you created the portals and that you would communicate with someone through it briefly.
So to start off, I made a set of collectible items. These included the crystals and the phone, but also some others as well. The red fragments are the basic coin-like collectables. You can collect a bunch of them and they subtly guide you on where to go with their placements. To add some functionally, I made it so if you get 15 coins, you gain an extra heart. I also added yellow tokens, which are special coins hidden in hard to reach places. They don’t do anything other than to provide a completion challenge. In addition, I added some doors to go from area to area and some gateways to switch realities. I decided that having to switch realities on the fly was a bit redundant (and overpowered) when you have the phone portal mechanic, so instead you go through set gateways.
With all of that added, I was finally ready to start creating levels. However, there was a major issue standing in my way, I am not very good at making levels. This is something I’ve already discovered while working on Phases. I’m fine with the conceptual aspect, knowing what I want and what generally needs to happen to get there, but when it comes to actually laying down tiles, I tend to have trouble. I’ve started to get the hang of it for top down stuff, but this is a completely different beast. So I had what almost felt like writers-block for level design, I had trouble actually making anything. I kept working on other small polish things to avoid doing it, but eventually I had to face it.
When I finally started, progress was slow. I was trying my best to incorporate each character’s unique aspects into levels, but it was really tricky. I also ran into some oversights such as the fact that you can’t force the player into using a character. If part of the level is designed to be challenging for a particular character, but easy for another one, there is very little you could do to stop the player from just using the other character. My solution to this was adding pre-set portals that could not be overridden. Whenever you are in that portal, you are forced to be in that universe. This also fixed an issue with enemies. Any enemies I would strategically place in one universe doesn’t work for others. So using the pre-set portals, I could also force enemies to stay in their intended form.
I also had trouble deciding how many skillful jumps I would require. Since it was looking more and more likely I wouldn’t have time to explain gameplay in-game, I didn’t want to expect people to figure out that you could do special jumps and such by timing portals correctly. So, not only was I making new areas, I was also changing old ones to better fit my updated view of what should be expected of players. I was also trying to make sure players didn’t get lost. Originally, I meant for the game to be fairly linear and for you to be restricted to areas you could only access using certain characters until you had them all unlocked. But, as mentioned earlier, it was impossible to control which character was the player was using once they unlocked them. So everything ended up being far more open than I was intending, but I didn’t have time to change everything. By the end of the day, I would say I was done with about 70% of the level, but I still felt like I had quite a bit left and not too much time. I was still feeling good since I knew I at least had a fun game, but I was starting to worry about my time. I knew I wanted to at least try to add some basic sound effects, music, credits and a title screen. All of that doesn’t take more than an hour, but when I only had a few of those left, it was looking peculiar to say the least.
Day 3
I was busy the morning of day three, so my time was quickly draining. By the time I got started, I had about 5 hours before my submission was due. It wasn’t much, but I felt I could make it work. My plan was to finish the levels, add the sound, credits and title screen and then playtest until I need to submit. With that in mind, the grind began.
I started with the final areas. I decided the night before I was going to change the objective, instead of a linear path of finding three crystals, it would be an open level with eight crystals scattered about. As I mentioned before, the game was already taking a more open design anyways, and if I was going to get these last levels done, I had to put aside the idea of linearity. With this in mind, I also decided that the last levels would all be combat based and be very similar. This was to save me time designing more platforming, which as discussed earlier, I was having trouble with. I could just place some enemies, a few platforms and be done. It felt a bit cheap, but I felt my time constraints justified it.
After I added those levels, I played through it and found many issues with the level design. Areas that were impossible/hard to reach, unfair enemy placement, missing collision etc. I also found plenty of bugs, particularly with the enemies. Lingering hitboxes and incorrect behavior among other things. In the grand scheme of things, the game was pretty stable, but there were a lot of little things that added up that I needed to fix.
I then worked on the final touches. I went through a sound effects library and found some clips I liked. I did some quick editing on them to help them better fit and put them in the game. Credits were up next, which I had been keeping track of so listing everyone who made pre-made assets didn’t take up too much time (even though I still messed it up). I then did the title screen, which was again, pretty simple. With all that done, I looked at my clock, and realized I only had about 15 minutes left. I was really cutting it close here, but I just had the background music to add. I once again looked at my collection of assets and quickly listened to as much as I could, but it took me forever (like 7 minutes maybe) to actually find something that fit. Time was running out. I grabbed one more quick song to play on the credits screen and threw those in the game, did a quick test to see if they worked and exported the game. About 5 minutes left now.
I opened itch.io and went to submit. I was then prompted to make a page for the game. At this point, I had no idea whether or not I was allowed to change this page after the fact so I threw as much in as I could. Description with controls, credits etc. Then I was faced with something I had completely forgotten about, the name. I had no idea what to call this thing. I’m generally pretty good at picking fitting names, but it had completely slipped my mind. I fiercely rummaged through my brain for a title that I liked. I kept repeating the word “portal”, it had to be something with “portal”. I can’t just call it Portal because that’s a whole other thing. About 2 minutes left. Then “Parallel Portals” manifested in my mind. It wasn’t my finest work, but it’ll have to do. I threw it in there and pressed save. About 1 minute left. I went to the jam submissions page, clicked the submit button and went to choose my game, but I wasn’t able to select my game, it wasn’t on the list. About 30 seconds now. Itch.io by default sets your game page to draft mode when you save it. In order to actually publish it, you have to switch it to such. I scrambled to find the correct button to publish my game and officially published Parallel Portals. Roughly 15 seconds remain. I hastily returned to the submissions page, refreshed and selected my game. 10 seconds. I was then prompted with one final hurdle, the question “How is your game related to the Theme and Special Object?” I typed faster than I ever typed before, and wrote an awful, typo-ridden sentence about the portals and the phones and finally, I clicked submit. 5 seconds before the deadline.
I know I sounded a bit dramatic there, but I was literally one small mistake from not being able to submit my game. My heart was absolutely racing during the last minute, so much was happening. If you go to the submissions page for the game, you’ll see right at the top that I submitted 5 seconds before the deadline. I’ll be honest, it had been awhile since I had playtested the game so I didn’t even know if the music, or sound effects completely worked or not (luckily they did for the most part). At that point, I took a second and relaxed, it was over.
I reflected a bit on the game as I played it again searching for bugs. I was very proud of what I made. Compared to the last jam, I think the final product is leagues better. It’s more polished, more complete and felt like a full experience rather than a half baked mess like the first version of Bindin’ was. And I was all on my own this time around, which compounded my pride. I’m not sure if I was more prepared for this jam than the last or just my extra year of game development experience under my belt, or a bit of both, but I’m very happy with the final result.
Fellow Jammer’s Games
Around this time, I started taking a look at all of the other games submitted. There were 39 total entries and I ended up playing them all over the few days. Some of them were really neat and I want to quickly mention them if you’ll indulge me.
Buddy System
Created by realtrashcan, it’s a charming puzzle game about summoning buddy creatures to help solve puzzles. You’re buddy will help you push, pull and stick things together to move onto the next level. It can get surprisingly tricky at times. The visuals are simple, but extremely effective at creating a visually pleasing game. And while the connection to the theme is a bit loose, it’s still undeniably one of the best games to come out of the jam.
Push the Button
Developed by kunic, it’s a short and trippy first person game heavily inspired by games such as the Stanley Parable or Superliminal. You have one objective, to push the button. You’ll bend reality in some wild ways to get that button pressed. The amount of detail and polish on this one is particularly impressive given the time allocated.
the final breath of a dying world
This game stands out from the rest for its distinct, PS1 inspired art style. Made by I8aDOG, the game is a first person puzzle game where you are presented with a phone and you must find the correct number to call to continue. The atmosphere is stellar, and it absolutely nails the slight nervous wind up while you wait to hear that you got the correct solution on the end of that phone. The puzzles themselves strike a nice balance between easy to solve once you know what you’re doing, but still tricky to figure out what to do. It’s short and sweet, and you may even get a bit spooked.
The Friend on the Phone
Nikklite and Froggystyle made an extremely clever puzzle game. You move along a grid and as you find the right path to the exit. The catch is there are objects scattered about each with their own properties that change where you can and can’t go. However, it really gets very interesting when effects start canceling each other out. If two negative spaces overlap, they become a normal space. This dichotomy leaves you analyzing every single step as you traverse the grid. Though it has very little to do with the theme, the game itself is puzzler I would love to see expanded on more.
The Jamming Never Stops
Just like last time, I started working on some updates to Parallel Portals the next day. Unlike Bindin’, which needed to be fixed from a broken state and have its final levels added, there was relatively little to do here. I had a few things I wanted to do, but the main addition was a browser version of the game. I was noticing that most people wouldn’t play games you had to download and would instead focus on games playable in the browser. This makes perfect sense, but meant that some games (including mine) got played much less. I had never messed with an HTML export before, so I had some testing to do. After I fixed some issues with how the game was displaying, it ran surprisingly well to my surprise.
There were still some issues, but it was good enough for now and I uploaded the 1.1 version with browser support and some other smaller changes. The people hosting the Jam said we were allowed to do post-submit updates. However, since I didn’t want to gain an unfair advantage, I kept my updates for this version to a minimum, mostly fixing softlocks, glitches or the credits to list the correct people (whoops). I planned to release the full 2.0 version after the jam voting was finished.
With that done, I had a list of additions to get through. First, I noticed that the HTML version seemed to run faster in terms of movement. It was very strange, and I found out that the game was running slow on Windows. It was due to some fun GameMaker quirks that I’ve dealt with in the past but had forgotten about. In the end, I got both versions to run the same, but the speed was a bit too much. So I put some work into reworking some of the stats to slow everything down a bit while also not having to rework the levels.
Second, I wanted to add some sort of in-game “tutorial’ that told you what to do. It wouldn’t be anything crazy, just some text explaining what the goal is and alluding to some of the mechanics.
The third thing was to optimize the game. There were two big issues with the HTML version. The first was that the audio would just randomly start getting garbled and distorted after a few minutes of playing and then eventually stop entirely. It was very strange and many people pointed it out. It was fixed with a pretty simple change in the sound settings for each audio track, just a quirk of HTML GameMaker I guess. The other one was much more interesting. On the desktop version, the transitions between universes are quick and snappy, but on HTML they freeze the game for several seconds. The reason for this was complicated, so let’s break it down.
As I mentioned earlier, the way universe switching works is by having three separate tilesets with the same tilesheet layout which allows you to switch them without changing the layout. However (as far as I know), you can’t simply just switch out the tileset in GameMaker and change the whole room, you have to switch the tiles themselves one by one. So, whenever you switched universes, the game would check every single tile and switch it to the correct universe, including spaces that didn’t have any tiles. This, obviously, isn’t very efficient, but for a game jam, it wasn’t a big deal. However, I wanted to see if I could at least try to make it more efficient for the HTML version just to make it a smoother experience.
My idea for a solution was to only have the game change the tiles for the parts of the world you can see, otherwise don’t touch them. For full universe switches, that would mean changing all the tileset in your view at once which is still a lot, but not as much as the whole room. Incorporating that helped quite a bit, though there was still work to do. I had to add the ability for the tiles to be swapped while you are moving as well as whatever universe was currently active. So I added the code that allowed the tiles on the left and right of the edges of the screen to be swapped whenever you moved. This actually made performance worse overall, so it needed some further optimization. I started by making only one side of the screen get updated depending on which direction you’re moving, effectively cutting the calculations in half. Next, I realized I could calculate everything in groups of vertical lines. For example, If I look at a line and the first tile is in the correct universe, I would assume that the whole line is correct and move on, otherwise change the line. This would, again, help quite a bit, but it wasn’t always working properly for some reason. Then I realized that I was checking from the top-down instead of bottom up. Since most of the maps have blank spaces (that have no tile associated) until the middle of the screen, it was still checking quite a bit before it realized that the tiles were correct. A simple change to bottom-up checking fixed this since most rooms have a floor that would be checked right off the bat.
At this point, moving around and switching the universe on the fly was running well, but the full universe transitions were still quite slow. So I had to think of other ways to optimize. The animation for the universe switch has 2 frames where the entire screen is covered, so I decided to take advantage of that and split the transition between those two frames. One half the screen would get changed on one frame, and the other half on the other one. This made the slow down much less noticeable to a point where I was satisfied. The only time it slowed down now was entering the main room from a different universe, otherwise, it runs pretty well.
I hadn’t really had to do optimization like this before and it was really fun. Trying to think of ways to do the same thing but smarter involves thinking that my puzzle minded brain quite enjoys. I generally try to be fairly efficient with my code (or at least I’m trying to improve), but since it was a jam I was a bit careless. There are probably other solutions to the transition problem that I could have thought up to make it even better, but I’m happy with what I got and I learned a lot just by messing with it for a few hours.
With those changes (along with many minor ones), I felt ready to release Version 2 onto the world. This was a bit after the results of the jam were released, so let’s go over that now.
The Results
For the GMTK jam, there were so many people that the end result didn’t mean much, I didn’t even mention it in the dev-log. Bindin’ ranked 4,592th out of 5,724 submissions. We only had seven people rate the game, that’s about .001% of the people who submitted (and probably less given how many teams of people had submissions). My point being, that final rating meant very little to me, and it made it hard to really glean anything from that experience.
So how did we do this time? Well first of all, our game was rated by 13 people (a little under half of the amount of submissions) and I got plenty of comments about the game, most of which were generally positive. And in the end, we ranked 6th overall out of 39 which I’m very proud of. The game got anywhere between 3-4 stars on all marks, but ranked the lowest in theme and special object implementation.
I don’t generally like to look at the numbers like this, but in this case I think it really goes to show not only how much better this jam went, but how hard those massive jams are to do. If you are doing a game jam for the first time, please go for a smaller one. Numbers aside, I am personally extremely happy with how this turned out. The game is simple, fun and it seemed to resonate with people. I’ve really grown in these past few years as a game developer, and this game goes to show it. I would have never imagined I would be able to make something like this a few years ago, especially in two days! It’s a great game to add to my library of projects and I am so happy that I pushed forward with this jam.
I do want to give a massive shoutout to all the people who made asset packs that made this game possible. Most of them are linked already throughout this post, but they deserve another shoutout.
- Shackhal – Multiplatformer Tileset
- LYASeeK – Undead Sprites, Human Sprites, Orc Sprites
- Retrocade Media – Buttom Prompts
- Samuel Sousa – Pixel64 Font
- Niall Chandler – Platformer Asset Pack
- Void – 1980 Font
- Bit by Bit Sound – Background Music
- Kenney – Sound Effects
The End
To end off this post, I will link a video I posted of me playing the game. I go over how to play and how to collect everything there is to be collected. I also show some of the other game jam games a bit of a shoutout near the end if you want to check them out. Additionally, if you want to play yourself, the link to do so is right below as well. Please consider checking it out and letting me know what you think!
That will do it for today. One final note for people waiting to hear about Project Phases. Things are moving, but they are moving slowly and I hope to release more information sooner rather than later. Please continue to be patient. Hopefully, I’ll have some sort of update before the end of the summer just explaining where things are. Until then, I must bid all you fine readers farewell.
Thanks for reading,
Andy