Uncrank'd Jam Postmortem ~ From Zero to Lake Hero
The playdate is an adorable little device that I've only ever experienced in theory. A good friend VeganTyler has one and has raved about it on his twitch streams and even played some cool games from it. One in particular is Kita Takahashi's "Crankin's Time Travel Adventure." I've always been a big fan of Katamari Damacy so seeing unique game design played out on such an interesting small device really peaked my interest. Now that said, $200 is quite the price for a device that I know very little about. I knew very little about the games available on it and while the concept really intrigued me, it wasn't something I saw myself buying.
Now, VeganTyler knows I've done game jams in the past and has played a few of my projects from them. Me and my team try to do one every year (GMTK Game Jam) as an exercise to push our creativity and make something that we just wouldn't have the time, energy, or focus to work on throughout the year. I'm a software developer by trade, so doing extra coding in my free time isn't usually high on my list. That said, we love the chaos of the 48 hour jam each year and it's just enough for us to keep coming back. Cut to a April 27th, one week before the Uncrank'd Jam, and I get a discord message from VeganTyler
I was a bit hesitant at first, game jams take a lot out of us, and on a weeks notice I had no idea if I'd have enough time to even rally the troops. I also had no idea what development looked like for the playdate, what language it was in, what SDKs and libraries were out there, I knew nothing about it really. I also knew my artists had little to no experience with 1 bit graphics. We typically did pixel art and me and John specifically love playing around with limited pallets like the GBA, but that's still a whole new beast. Also we all have jobs, so we wouldn't be able to no-life the jam like we usually do. We'll have to get actual sleep and work 8+ hours a day. We live in different time zones so we'll be working separately, but together. All-in-all it was a lot to ask of everyone, including myself. Lo and behold, I put the feelers out and nearly everyone responded. One person was too busy with work and life that week, but the other 3 were in. The week long time frame was a big plus, so we aimed our sites very low.
Fast forward to May 2nd, a day before the date and I've had little to no time to research development for the playdate. All I really know is that it uses Lua and VSCode. I've used VSCode a little bit in past, but nothing to this caliber and I've never once touched Lua. The only real thing I knew about it was that indexes start at 1 (which is criminal). So, I popped in the discord, asked for some getting started and Xania pointed me to some SquidGod YouTube Tutorials.
Side note, I love how every engine has its 1 or 2 "go-to" YouTubers who cover everything you need to know getting started. When I started Gamemaker development it was HeartBeast and Shaun Spalding.
Back to the game jam. I spent a good chunk of the 2nd watching every single SquidGod tutorial without doing any actual coding myself. I was just focusing on what development looked like on the playdate. How animations worked, how classes were built, how files were structured, where and when code ran, how the language syntax behaved. It was a lot to take in and I probably absorbed 25% of it at best. I spent that night on my Twitch stream just going through his first, most basic tutorial with chat and getting used to everything. It was a lot to take in, but we made the demo game (i.e. copied exactly what he did and hoped we internalized what was going on).
That night me, John & Gus meet up (on discord) to discuss the theme and come up with some game ideas. Now as a group, we have a scope problem. We always have, and we always will. We're dreamers and when we get hooked on an idea we immediately start thinking about the 10 different ways we can iterate on it down the line. To help try and combat this we came up with a bunch of game ideas to pick from, ranked them from difficulty / time constraints in each category and slept on it. The 4 leading game ideas were:
- A Zelda-like where you use a mirror to reflect light and solve puzzles. Kind of how you use the mirror shield in some games. There would be obstacles to push and move around to help get the light to the desired spot.
- A plane game where you use the crank to adjust your angle and fire jets to gain momentum. There would be obstacles in the air to avoid, but the overall idea was to have fun with the crank mechanics.
- A game where you float on an inner tube and use the crank to change your orientation. You pick up trash and bring it back to a dock to drop off. Could be levels, could be time based.
- A space game where you float around in space with a mirror, reflecting orbital lasers attempting to destroy earth. There would be things you need to protect, and movement would be slow and difficult. The crank would adjust your direction and B would make your boosters push you.
Day 1
We all went to bed and slept on it, but the most important thing was that the next day was Saturday. This was and Sunday were only day where I had all day to code and needed to get the bulk of the work done. The rest of the week I'd be working all day and only have so much energy to keep coding at night. At this point I only have a rough knowledge on everything. Enough to know what I can't do, but not really enough to know what I can. I spend the whole first day doing SquidGod's metroidvania tutorial, covering some topics more in depth, rewatching a few important videos to help solidify my knowledge. Now the plan is to chat in the morning and pick a game, but I'm 2 hours ahead of everyone and it's starting to get late, so I just start working on the project I found to be the simplest from a coding stand point. A couple hours pass by and I post a few things in the discord, but don't get any response. Keep in mind this was all very last minute and everyone has stuff going on in their lives. I keep working at it, make some programmer art to help me see / understand what's going on and before I know it, the day is nearly over. Its 10PM and post a little update for the discord.
It's not much, and all I'm really doing is simulating the dash movement using normal directional movement. But it's a basic visualization of the game. Octavio pops in to get the vibes and heads off to start making music and around 1AM I crash out.
Day 2
This day is arguably the most important. It's my last full day to code and I really need to have a basic gameplay loop going before the week starts. I still haven't heard much from the rest of the team. I add in a power bar and proper dash movement and post an update around noon. I hear back from Gus who starts getting an idea of what he needs to make art wise and John pops in to let us know he's been dealing with his folks who had just come to visit. We talk about the idea so far, mainly the movement mechanic, and John gives some great advice around adding drift after the dash so it feel more like you're floating. Me and Octavio talk about turtle sounds and I use some of SquidGod's tutorial art as placeholders to get some coding collisions done.
T
I have accomplished what I wanted for the weekend. We have the bones set up, There's no health, you can't lose, the trash can't be picked up, there's no actual art, but the base is there to keep improving on throughout the week. I spend some time figuring out what a PDX is and how to get one over to VeganTyler to test, but he eventually get's his first build to test on device and everything is going mostly peachy keen. Oh, I should also mention this game doesn't have a name yet. I need something to name the file so I go with Lake Hero. The 1bit art reminded me of Loop Hero and you're in a lake doing good. So Lake Hero. It's only temporary anyways.
Day 3
It's the work week again. I don't start coding for the Jam until 5. In the mean time, John's newborn kittens try to bite his dinger and I get some work done building the health state along with some programmer art to represent it. You can pick up trash now, die and respawn automatically. Not too much gets accomplished today, but a little progress. I also make the power bar flip sides when you cross the middle because I was having trouble seeing it on the edges.
Day 4
Do my job all day again and get to coding for the Jam around 5 again. Gus get's me some turtle sprites and after a few revisions to the formatting we get those in the game. John sends over a rough sketch of the player so I can stop looking at this damn arrow. I spend the next several hours building some scene transitions based on SquidGod's videos along with a few demo levels to make sure everything is transitioning correctly. Around 2AM Octavio drops an absolute banger of a title track in the one drive folder and after a solid listen I head to bed.
Day 5
Octavio goes on a tear and I wake up to the game theme, a game over theme & a victory theme all ready to listen to. They're all bangers (and I know bangers) I get pumped up to work on it after the ol' 9-5 and some sprites come in. We've got a water tile sprite, a stick, we talk about visibility on the sprites with the black on black and just when the energy is flowing. A tornado hits. That's not a metaphor, a tornado literally comes by my house and me, my girlfriend and all 3 pets all cramped up in the bathroom for an hour waiting it out.
After that passes, it's back to work. Octavio drops a bunch of sound files and I start figuring out... how to play audio on playdate. I get the background tracks playing, a crank sound effect a rock collision sound, a wonderful turtle sound along with basic GameOver / YouWin scenes and a rudimentary scoring system to help gives some reward for playing through. John and Gus hop on and for the first time in the jam so far, all of us are online at the same time. Things start flowing out. Assets come piling in, music sound, mechanics changes. At the end of the night we're in a solid place. I scribble together some splash screens in photoshop and the Black Hole Collective one becomes a fan favorite for our testers. Something about the thrown togetherness of it resonates ( I'm just trying to get shit done).
Now, I send a build over to Vegan Tyler and we have a small issue. The last build I sent him was 79.60KB. This new build is... 46.69MB something like a 58,362.5% increase. Each build takes a half hour to upload and to make matters worse, it crashes once it does.
Now, we did nothing to compress the audio. I had read in the docs that you should, but we just were slapping stuff together. My presumption is that it's trying to load way to much audio on boot. Im tired though so after a few attempts at getting him working builds, I send Octavio a message about compressing the audio and head to bed.
Day 6
We've got a file that's too big and doesn't run on device. Trying to figure out if it's the sound, I send over a soundless version to test and it boots up just fine. He can play through the 3 levels and give us feedback on the mechanics. Now... I'm not running on much sleep this week. And in my brain, this is the last night to work on the jam. We've got until 7AM to submit a build and I'm hopped up on caffeine ready to burn the midnight oil. I get a rough idea of what everyone may or may not be able to finish and work on some half-decent replacements. . We had got some feedback that the water makes everything too hard to see, so VeganTyler sends over some examples of other games that have done water in a very simple way. I use that idea to create a few frame animation and things start looking a little clearer. I made a title screen using the original water and built out some buttons which I made in photoshop as well. Made some crappy game over and win screens, and John sent over the final player sprites. Gus cranked out some power bar sprites, some better game over sprites and around 3AM Octavio has the compressed audio files. We accept that the game is permanently called Lake Hero and John drops an awesome intro & title animations along with a new Black Hole Collective splash screen that keeps the scrappy energy of the temporary one. Oh, and in classic Blake Hole Collective fashion we get a little ahead of ourselves and Gus makes a whirlpool monster animation, an obstacle originally meant to be in the final build.
Around 4AM VeganTyler graciously informs us, that I'm a big dumdumb and read the due date wrong. We have a whole extra 24 hours. We all head to bed with a big wave of relief as we don't have to be awake for the next 3 hours, and I still have work in the morning.
Day 7
The final day is all about polish (as much as you can with something so rushed) I build out a cool credits scene where the crank scrolls the image, Octavio makes some credits music, I add a lot of button options, add the option to turn on a more precise crank control (something VeganTyler had been begging for) Gus makes a new UI sprite, John puts portraits together for the credits scene while me and VeganTyler desperately tries to figure out why it still won't run on device. The music is compressed and we're down to 6.27MB. We don't know how to get crash logs or anything from the device so we're really just guessing. I don't crash on simulator so I have no way to see them on my end. We spend a solid 4 hours on this before finally giving up and accepting that it won't run on device. At least that's not a requirement. Gus updates the Game Over screen, makes a new win screen all together and we start putting all the pieces in to place. I also go through the docs to try and figure out how the device / card images work and slap some stuff together with existing assets and fail to realize that I've made the animation play way to fast. We settle on building 10 levels for now, test things about a million times and ship it out around 4AM. We all spend about a half hour building out the itch.io page and making it look somewhat presentable before finally crashing out. Lake Hero is "done". it doesn't have everything we want, and it unfortunately doesn't work on device, but we're still happy with how it turned out.
Post Jam
I slept for a while. It was the weekend again and I had been getting about 4 hours a night. I woke up to a handful of issues where people couldn't play the game. I was able to sort out with requiem that the game didn't run on linux or Mac because some of the filenames weren't case sensitive. I talked with some other people, such as Mouflon Cloud, who were able to test on device and gave me the error codes that were causing the device crash. LDtk was overloading the initial load and causing the playdate to time out on launch. This was odd because we only had 10 levels. That's not a lot to load on boot, but I changed level loading to happen on the title screen and.. well that didn't fix it. That's when I investigated the level files themselves more closely. Each level file was calling LDtk.load. All 10 of them. So on import of the level files, each one was loading 10 levels which were loading 10 levels which were loading 10 levels which were... well you get it. I removed that oopsie-daisie, uploaded a new build and we were finally done. People could play the game and I could rest.
Actual Retrospective
If there was only one thing I learned over this jam, and I learned a lot, it was that developing for the playdate is a ton of fun. I found myself not struggling to figure out how to make my ideas come to fruition and the community was beyond supportive. The small size of the developer community meant that everyone is just happy to help each other out and people with playdates are excited to play new games, even if they are a little hobbled together. I enjoyed Lua as a language and the SDK was surprisingly easy to work with. There's definitely some quality of life things you lose compared to a "proper" engine IDE, but it adds a ton of versatility and I love that you can approach development in a lot of different ways. There's a ton more libraries for me to explore and seeing some of the things that other jam members submitted really blew my mind. This jam was an absolute blast, despite the lack of sleep, and I really look forward to developing more for it. We're planning on adding a ton of missing features to lake hero, cleaning up the code a bit and releasing it in full eventually. I also have some other ideas I've been throwing around with VeganTyler that I'd like to get some proof of concepts built for. This jam really opened up a whole new world of development and a device that I am way more excited about than I thought I'd be. If we don't win (and I have no expectations to) I will certainly be picking up a playdate.
Leave a comment
Log in with itch.io to leave a comment.