UPDATE: now on itch https://morphinegames.itch.io/dyeswap
So Ludum Dare 41 ended last night and my game Dyeswap was submitted at around 4:00PM. The past weekend has been a ton of fun and I figured I would share a little bit about the process and the game I made.
In case you aren’t “in the know” Ludum Dare is a very popular game jam that happens 4x a year. There are actually two different competitions at the same time, one is the “compo” which is the single developer, make everything from scratch jam, and the other is the “jam” which allows for teams, pre built assets, etc.
I took place in the compo.
I have a pretty successful (for me) process for these weekend game jams and it goes something like this:
- Wait for the theme to be unveiled – in this case at 6PM PT on Friday.
- Once the theme is unveiled, bitch and moan for a few minutes and then start thinking about the game I want to build while I make dinner
- Spend the rest of Friday night designing the game in my notebook, browsing DaFont to find inspiring (100% free) fonts (you are allowed to use fonts), and thinking about the soundtrack
- I will schedule out Saturday and Sunday on Friday so that I can ensure I stick to schedule
- Saturday usually goes like this: implement core mechanics, build a few levels to flesh them out, get the build process working (web gl/windows) and setup all of the infrastructure so that I can just “click to publish” Sunday and not be scrambling to publish. After “work” Saturday (usually around 3PM) I’ll make music on my iPad for the rest of the night or until I get bored.
- Sunday I will spend doing the following: more content, polish, and bug fixes. Since everything else has been done, I just have to get as much new content and bug fixes in as possible and then click publish.
I feel like this process works really well for me and there is never a time where I feel like I’m being rushed, scrambling, etc.
So how did this turn out in practice?
Really well actually. Friday the theme was unveiled “Mix two incompatible genres”. *SIGH* I wasn’t hoping for that theme. Anyways, I grumbled to my wife for a few minutes and then started making dinner and that’s when it hit me – this is perfect because I’ve always had this “Tetris meets FPS” game in my head but I never took the time to make it so I started with that. As I worked on the fajitas the ideas started to take hold
You can see at the top of my notebook paper I was experimenting with different title ideas etc.
In the image above, you can see that I had an idea for when the game started and you got the title screen, you wouldn’t realize that you were actually looking at the first level. This actually turned out exactly as I wanted it to and I’m very happy with that little surprise.
You can also see that I scheduled Saturday and Sunday pretty well. I accomplished everything on that list verbatim except I only got around 20 levels done before I burnt out. I could feel the quality of the levels starting to slip and I forced myself to publish instead of put in 5 more crappy ones.
Here you can see I’m starting to design certain levels out. FYI when something is scribbled out that means I’ve completed it, not that the idea was discarded.
Pretty much immediately I had a vision for the game as this sorta “They Live” inspired world with hints of color in the blocks but primarily black and white.
I knew that the soundtrack would have a techno vibe to it
Tools and Workflow
So let’s talk a little bit about each of the tools I used during the game jam and where it fit into my overall workflow. I’ll also talk about some assets I did use since code libraries ARE allowed for the Compo.
Unity and Visual Studio
This probably goes without saying if you have seen any of my other work. I love Unity and I love C#. Unity’s workflow with Blender, Visual Studio, etc. is so smooth that you can easily get into a flow state and not be interrupted getting assets to import or other nuisances.
WebGL was the primary export for Dyeswap. This is because you are most likely to get people to play your game if they don’t have to leave the “safety” of the browser. Additionally it’s annoying to download, unzip, and play 30 games over the course of a couple weeks while you rate everyone else. I know this so I try to make it as easy as possible on my audience. I also provide a Windows build for anyone that prefers that, but all testing was done with WebGL. WebGL used to have a few little “gotchas” and it still does have a couple mostly related to browsers so I forced myself to test the full build every time a new feature was added or modified.
Another great thing about Unity are the editor scripts. I can modify the Unity editor to add functionality that doesn’t already exist. A couple of scripts that I made for this jam include:
- A script to automatically sort the children of a game object alphabetically, this becomes very useful when you have 100s of blocks
- A script to remove the parentheses that Unity adds to duplicates, I hate those e.g. Game Object (2), Game Object (3) – this removes that
- Custom inspectors for blocks to allow setting of advanced properties with button clicks
- Custom gizmos for blocks to show spawn points etc.
There are only a couple of 3d models in the game, but I used Blender anyways because I love it and it’s a “programmer’s 3d editor” 🙂
If you look at the feature list, black borders was something that I wanted all blocks to have. There are a couple of ways to do this including edge detection (e.g. sobel method) but those are somewhat unpredictable and are a full screen image effect. My target was webgl and while it would probably work fine, I wanted to minimize overhead and maximize potential audience. I have experience with those edge scripts and they don’t always work well anyways.
The way I achieved the colored borders in Dyeswap was by creating a 3d shape in Blender, creating two materials, going into face mode, selecting all faces, assign them to the first material and then bevel them .025. Blender selects the newly created faces and I assign those to the second material. Back in Unity, I gave material 1 the color and material 2 the black border color.
Just a point of interest, the black material does not use the standard shader, but rather the unlit color one. I did this because I wanted the borders to be perfectly black without any light or anything shown on them.
Figure – Make Music & Beats
The last important tool that I used was Figure. Figure is a music creation tool that allows you to make ~30 second loops of electronic music with a really versatile interface. I actually discovered Figure for the first time this weekend and I have to admit, I really really am glad I found it. It’s an amazing tool and if you like electronic music it really deserves your time. I used it to make all of the music in Dyeswap and I’m very happy with how it helped me realized my “dystopian vision” for the game.
Final thoughts for success during a Ludum Dare
- Pick a mechanic that you know you can implement in a couple hours. It’s all the OTHER stuff in a game that takes the most time – sound, music, level design, polish, bug fixes, pacing, atmosphere, etc. all in there just to SUPPORT the mechanic
- Create a schedule and stick to it. Don’t do MORE than necessary. This is hard if you don’t have a lot of experience because you will probably *THINK* you can do something when you really don’t have enough time
- Pick a style which requires minimal assets – low poly with good color (or lack thereof) choices, good fonts, etc. use the rules to your advantage. You can’t use prebuilt assets, but you can use tools, I personally used a tool called Figure Make Music to create the soundtrack and I’m really happy with how the songs came out
- Use tools whenever you can – automate as much as possible, if using Unity create editor scripts that can save you little minutes here and there. There are probably 5 or 6 unity editor scripts that I created just for this jam because those little shortcuts save time and that time adds up.
- Sleep – don’t disrupt your sleep cycle. You will regret it.
- If you’re going to do a LDJAM make sure your family is on board and there won’t be any distractions for those 48 hours. Life happens but you can try to ensure that you won’t be interrupted by something avoidable. The last thing you want to do during these 48 hours is lose flow.
- Have fun – if you aren’t having fun, why are you doing this? These things aren’t paid and you probably won’t make any industry contacts during it. I guess it could be argued that you could have a portfolio piece but there are less “stressful” ways to get those, e.g. take a week to make the same game and not be stressed.
Play Online: http://play.morphinegames.com/dyeswap/