Making a Playdate game #01


Hi! Thanks for showing interest in my game Weirdlab Inc! This is a puzzle platformer game I’ve been working on for 6 months now. Today I have the overwhelming urge to get this project finally out to the greater world and showcase it! I usually like to share the progress of my game on a daily basis but since it’s been 6 months and I held some much I feel like I’ll explode if I don’t share the progress I have made. So let’s start from the beginning :

Prototyping

This game project all started from me talking with a friend named Sam. At the time I was trying to make an MP3 player for the Playdate and it didn’t work out. Tired of this failure I decided to make a small platformer. Roughly following a tutorial from Squidgod I managed to create a functional prototype in a day. I could build my levels with LDtk and had setup a good environment in the first week.

Creating stuff

Then for the next 4 months I’d come back to code on the game in sessions of one or two weeks of epic progress and then a month of pause (holidays really helped).

I wrote a story not particularly original and greatly inspired from Portal involving a lab, AIs (but nice) and stupidly weird devices for the player to use and master. My first idea was the Helicohat. It took some time to sort this out but I got everything working smoothly and easily expandable.

Technical

On my road to making my game I did, as every gamedev will tell you, hit bumps on the road. The first one was making something maintainable. For this Lua wasn’t always helpful but it certainly was easier than coding the game in C.

I ended up creating a complete and very easily expandable system which made mapmaking a lot (like a lot) faster. I strongly encourage the use of classes that extend from base classes. They help you to avoid useless code repetition. It’s not Java though so you will have to do some code repetition but make sure to keep properties standardized in all of your codebase.

I used the scenes system created by Squidgod to switch between the title screen and the World. To load each level I used the equivalent to a lookup table to take the level name and load it using the LDtk Playdate library I also made heavy use of the AnimatedSprite library which ended up saving a lot of issues.

For the ones wondering, I store my code on Github after a traumatic experience of losing the source-code of one of my old games.

Sound effects

Sound effects can be tricky for solo gamedevs like me. Fortunately I knew websites (in french) like laSonotheque to get some base sounds and then edited those using Audacity.

Musics

I have not worked a lot of musics at the time of writing this article but I use JummBox to create 8-bits music with custom instruments I create in the software. It’s a free, relatively unknown and open-source web app which is very cool and a fork from Beepbox.

Sprites

I’ve always liked pixel art. From my previous experience I used Piskel which is an online open-source pixel-art software but I decided to invest some time and then some money to build then buy Aseprite which has been a blessing and streamlined the drawing process even more!

Finding puzzle ideas

Finding puzzle ideas is tricky. I usually follow the advice given by GMTK and try to mash-up at least two interesting mechanics to keep the player engaged and make him learn. Exploiting the possibilites of the layouts I can create with LDtk make it a lot more fun to actually iterate upon designs. I also find good old paper pretty useful. The general goal is to create chains of small puzzles and then mash them together to “obfuscate” the solution. This can sometimes lead to pretty odd map layouts though so be weary of using it.

Creating usable, interconnected puzzle objects

Creating a vast system of triggers, activators and other usables on the map wasn’t as tricky as it seems. The main concept is that each element (as a class) can emit events and values and receive them to act upon those. Each object has a specific behavior and reacts accordingly.

Physics was also a bit of a challenge however I am very happy on how it turned out and the performances are pretty good. Speaking of that :

Performance

I didn’t really have any performance issues but here are some tips I learned in the making of this game :

  1. DO NOT CLEAR SCREEN AT EVERY FRAME (You’re wasting CPU)
  2. YIELD TO THE SYSTEM (Don’t be greedy with the CPU!!)
  3. GARBAGE COLLECTOR : TRIGGER IT WHEN SWITCHING SCENES
  4. USE LESS MEMORY
  5. MINIMIZE THE COLLISIONS
  6. ONLY RUN CODE WHEN NECESSARY (flags and if statements are your friends)

If you have any advice on performance I would love to hear them in the comments! (remember to be nice though)

Conclusion

I really want to finish this game and it’s finally time to start “marketing”. Don’t forget to follow me on itch.io and maybe join my Discord server or the Playdate Squad’s one because this is where I hang out and can answer questions. Check out my website (https://oxey405.com) and I wish you a great day (or night) : THANK YOU FOR READING AND I’M LOOKING FORWARD TO YOU PLAYING MY GAME!

Leave a comment

Log in with itch.io to leave a comment.