I have been playing around with Unity for a little over a year now. I have not really made anything substanstial. I have been playing with different ideas, learning the APIs, and discovering new assets to toy with. I have been wanting to make something with this new found knowledge for a while, and I saw that the Ludum Dare 28 competition was coming up. If you are not familiar with Ludum Dare, you can check it out here. It is a game development competition that happens every 4 months, where you try and create a game in 48 hours. The game must be based on a centralized theme that is voted on by the community prior to the start of the event. Once the event starts, the theme is anncouned and its go time! Recently, a second competition was started in tandum with the more popular 48 hour compo, and that is the Ludum Dare Game Jam. The Jam is a 72 hour competition that allows you to work in a team, and also has some other more relaxed rules. The 48 hour compo is a solo adventure.
I asked a few friends that I knew had some interest in game developement if they would like to get together for the weekend and try and produce something. None of us really had any game developement experience outside of tinkering with Unity, and some of them had never even used Unity. Should be fun, right?
The First Night
The competition started at 9:00 PM EST. We all gathered at my place for a good ole' fashioned slumber party... Ok, well it was actually pretty fun. The wives were away and we could dig in and get some serious coding done. We had a list of ten potential theme choices before the event started, so we started pre-brainstorming for those concepts in hopes that once it was announced we would have some ideas already. The theme announced was You Only Get One. This was at the bottom of our lists, so we didn't get any ideas for it. Lame.
Well, after some moaning about the theme we got into brainstorm mode.
We came up with the same ideas that everyone else probably started with. You only get one: life, level, play through, chance, etc. All of them seemed pretty boring so we were trying to come up with something a little more exciting. We decided to make a 2D dungeon crawler-esque where you only get one of things you would traditionally get more of in a game like that. For example, we had ideas where you only get one arrow for your bow. You need to retrieve that arrow if you want to fire it again. You would only get one sword, and using it would degrade its durability and once broken its gone. Only one key, etc, etc. I am not sure it is entirely exciting, but it motivated us and we started the code.
We had four people, including myself. We had somewhat of a pre-concieved idea of who wanted to do what. I knew I was going to code and also help assist with any Unity related questions or techniques. I am no master with Unity, but I felt I was the most comfortable with it. Two other members could code, and the fourth would work on art/sound/story/misc tasks. I quickly delegated some tasks and broke out a quick plan on what we needed to get the basic game running.
A few hours into the compo and we were writing code for our basic game. I decided to tell the guys to play with 2D platformer example project that Unity provides to get a feel for how things work. It is a great sample and shows some nice ways to organize your code. It also is a great way to get the feel for how the "component" scripting model works with Unity. That can be quite different from traditional application architecture patterns that I knew we were all used to. Around 11 PM, one of the team members started to drift away from game dev, and I saw Steam open. I thought, "Oh no, it's going to crash before we even take off!". It turned out ok, and we were back on task. I think we ended up coding until about 2 AM EST that night, and had some pieces together.
Day two was going to be our main coding day, because day three was suppose to be for play testing, bug fixes and polish. It started off a little slow because only I was up at 8 AM, and the rest got going around 10-11 AM. After some breakfast, we were all back on task around noon. We started getting things like the player classes and enemies completed. We had basic movement working too. We were trying to make our levels with tiled sprites, but that turned out to be a big time sink. One of the guys spent most of the day dragging tiles around in the Unity editor to construct our levels. By the end of the day we only had one level built and we planned for at least three. No good.
We managed to also get some story characters worked out, sound, enemy and character sprites, and also some inventory item sprites. My plan was to have someone work on the sprites to at least prototype and if we had time to polish it up later. This is always hard for me to do, because I am motivated when the art for a game is to my liking. Looking at placeholders does not inspire me. I read from others that is how they tend to do things, but it just doesnt work for me. I spent some time trying to find some art pack we could use, but it was an empty search. I wasted too much time trying to fix that. I stayed up until about 4 AM reworking the art style with some sprites inspired by Oryx Design Labs. I also made a simple tile engine that would parse CSV files to create our levels so we didnt have to spend an entire day again dragging tiles around in Unity. This probably should have been done at the beginning. It only took about two hours to make that and it would have saved us ten.
Day three was an early start for me, I got up at 8 AM again and started coding some more for the player animations. The guys woke up around 10 AM and were pretty much ready to get started right away. I had reworked the art style into something more 8-bit and made the tile engine. One of the guys was able to make all three levels in some CSV files and the tile engine would build it quickly. It sounded good, but it would prove to be an issue later. Anyway... The guys spent the rest of the day catching up on merging in my changes with what they had done. This proved to be a real pain with Unity. It was hard to share our scenes and prefabs between three people. I assume there is a better way, but we didn't know it and spent a lot of time rebuilding prefabs and scenes that someone else had already done. I didn't plan on using source control because I thought it would have added another complex layer to the project. Also, noone else was familiar with GIT. There was a decent amount of snow/ice/freezing rain going on outside, so the guys wanted to get home a little early to be safe. They all had about a two hour drive home, so the all left around 12-2 PM EST. It was not looking good for us to finish the game on time. Around noon, we had the player working, enemies spawned and attacking, and one level made. We still didnt have our game fleshed out to express the theme enough, so, it was looking grim.
The guys left, and we had a half finished game. It was a bummer, but it was still fun. I think we all learned a lot, and we really want to participate in the next LD competition. I think we will be more prepared for it, knowing some of the mistakes we made this time. Despite not being able to finish the game, I think we accomplished a lot for some of us never using Unity, and none of us making a game before! I would recommend trying the LD compo if you ever wanted to make a game. Its a good excuse to force yourself into trying to produce something. Even if you don't submit something, I am sure you will learn something for the next time!
- I need an artist on the team who can produce art that motivates me. Good or bad, art is important to me and it helps me see the vision I am producing. I have tried to ignore it first and get code done many times, but it just does not work for me. Or, I need to just buy some sprite pack that I like.
- Find some way to share prefabs and scenes between people in Unity. This was probably the biggest waste of time.
- Don't redo the art in the middle of the project, finish the game instead. Even if it "doesnt work for me".
- Reserve a longer block of time so we can work on the game for full length of the competition.