I've always wanted to create my own video game, its been a secret dream of mine for most of my adult life. In fact I've tried to make one several times over the last decade. Usually I wouldn't get very far past the "where the heck do you even start?" phase.
That itch to create something caught me again a few months ago, so I decided to participate in Ludum Dare to push myself more than I had in the past. Ludum Dare is a sort of game jam that's held several times a year. Something about having a deadline seemed like it would motivate me enough to get past the early stages of creation.
To my surprise it worked and I actually finished a project! It's a passable little platformer that has some horrible Photoshop drawings and randomly-generated music,but its done. Its called First Wheel and its available on the Ludume Dare site right now if you feel like passing a good 20 minutes of your time. This post serves as mostly a recap of how I was able to get from zero to completed game in 48 hours with not much prior knowledge or experience in making video games.
The handful of times I've tried to create video games in the past I've only gotten through the early stages of programming and confusion. I've tried a few different approaches like Microsoft's XMA, Apple's Xcode and a Python library called Pyglet. All of these might be pretty good places to make games, but I don't think any are a great place to start. When I got the creative bug again a few months ago, I decided it was time to give Unity a shot. After all, its made for making games and has a ton of community support.
If you're currently in a similar spot to where I was (i.e. you're thinking "I have no idea what I'm doing") then I would recommend doing as many youtube tutorials as you can get your hands on. I did a couple of tutorials on the Unity site itself and went through a series by a guy named Brackeys. There are many more tutorials for Unity out there, which is what makes Unity such a great choice for beginners like myself who maybe know their way around code.
I should note that I didn't really know much C#, but I did know a bit of Java and a lot of Python. Having some familiarity with coding is probably the best first step if you're just starting out and don't know where to begin.
I later ordered the book Unity In Action from Amazon. Its not only good at teaching many parts of Unity, but it also has a great way of breaking out the learning curve into logical parts. I'm still only a little more than halfway through the book, but even that much gave me enough of a base to get started on my own project.
I've known about Ludum Dare since I used to write about video games for my old blog. I didn't usually follow it very closely, but I loved the idea of it and I always thought it would be a great way to break into the indie game scene if I ever wanted to. After I had picked up Unity In Action I saw that the next event was coming up soon, so I thought it might be a good trial-by-fire way to test my skills. It turns out that many of the other competitors are also fairly new to game-making and are also just looking for a place to get their feet wet.
Ludum Dare does two different events: the jam and the compo. The jam is a more relaxed, 72 hour competition where you can form a team of people to make your game. The compo is only 48 hours and you can only work by yourself. I decided to do the compo as I had no team to join and I really didn't want to be responsible for holding anyone back.
Everything you make must be original, including all of the assets. This includes art, music and sound, and code though you can still use game engines and code you've created prior to the event. Everything from the code to the assets must be shared with the community at the end. I put my Unity project up on GitHub as a way of sharing things.
Ludum Dare is also not much of a competition, there's no proper rewards at the end and judging is all done by the community. This particular event (Ludum Dare 36) wouldn't even have judging because their organizer, Mike Kasprzak, is working on a better site for later events. So it was a pretty low-stakes affair. I had nothing to lose by competing other than a little sleep.
Each Ludum Dare also has a unique theme to tie its games together. The games people create don't need to use the theme, but its pretty well accepted that you should link your game back to it somehow. Ludum Dare 36's theme was revealed that Friday as "Ancient Technology". I struggled with this one for awhile and didn't come up with a solid game idea until late that night.
I thought about doing something with ancient-but-advanced tech, like you might see in a steam punk setting or some Indiana Jones film, but that seemed conceptually out of my league. I also dabbled with some "sarcastically ancient" ideas like cassette tape decks and those brick cell phones from the 80's, but I wasn't really getting any genuine game ideas from them.
Finally I settled on doing cavemen and stone age stuff. It seemed more in my wheelhouse artistically and I was also thinking heavily about those Primitive Technology videos that have been popular on Reddit. Things like the first fire, stone axes, arrowheads, and building clay huts all seemed like things I could handle as game mechanics. After doing some sketches and playing around in my head with what I could actually program so far in Unity (which wasn't much), I settled on doing a game around the first wheel.
The game would be about creating the first wheel and pushing it back to your village. Easy stuff with Unity actually, since it comes with a physics engine and I had done some tutorials around platformers and physics already. It was Saturday morning at this point when I started to put a lot of work into the initial code for the game.
A good game should be challenging of course, so I decided on making an obstacle course like you would see in Trials. There would be hills and jumps and bottomless pits to cross. Later I decided that wasn't quite enough, so I added the ability to shove the wheel up. This let me put harder obstacles in to make the level more interesting.
Jumping and player movement were much more difficult than I anticipated and I think it had a lot to do with my inexperience in this area. A strange problem happened where if my player was moving upward and he jumped, he would jump much higher than on flat ground. That was a weird quirk of the physics engine that I didn't anticipate and I spent a lot of time trying to fix it to not feel so "floaty".
Initially I also wanted to create an AI character to beat. This other character would also have a wheel and you would need to beat them back to the village. That concept just never materialized because I couldn't figure out an easy way to make the other character. So I scrapped it in favor of making the level more difficult as it went on.
My ability to code this game wasn't great, so I wanted to at least try to get the level design part down.I looked to Mario's famous level 1-1 for inspiration. A video by Extra Credits explains how this level conveys a lot of the game's ideas without really telling you anything. It also shows how concepts in the game are slowly introduced in safe, easy areas before putting the player to the test. I tried to emulate this with a few stages in the game. The first part lets you roam around safely and has some easy obstacles to move the wheel over. Then the pits get wider and you need to think about them more and more. Its no Mario 1-1 in terms of level design, but I tried.
The initial design that I started with had a simple caveman screenshot that I stole from who-knows-where on Google, intending to replace it later. I made simple ground textures in Photoshop using a green-yellow gradient, also intending to replace them later. For the most part I focused mainly on making the game work right and getting the level design to be fun. I wanted to save Sunday for most of the art assets, I figured if I had a working game I could release it even if it looked terrible.
Late into Saturday I even introduced a new gameplay element: platforms. Unity has an easy way to do this by adding a platform component. I applied the same level design concepts to a new section of the level and introduced the platform slowly and later made a harder platform section to test the player's abilities.
I spent a lot of Sunday working on more level design. Unfortunately I did all of it by hand in Unity, not realizing there were much easier ways to create levels using Tiled. I'll be sure to pick that up next time.
With only a few hours left in the competition I felt like the game design and level were just about finished and decided to replace my caveman sprite with something original. At this point I had such little time left I knew I'd only get a chance to animate the caveman and wouldn't be able to add a background or make the ground tiles better-looking. Another problem was that I'd never done animations in Unity before, so I looked up several tutorials around this. Then I drew a fairly hideous caveman in Photoshop and made a sprite sheet by moving his arms and legs around on different layers.
The result was...OK. If anything I'm impressed I got it to work at all. The end result was like watching an animated gif float around in space. Animation and Photoshop courses are a must for next time.
With about an hour left I found some randomly-generated music to put in the background and sound files to play when the character jumps or pushes the wheel. Its enough to jazz up the game a bit, but thematically the music doesn't make any sense at all and this is just another area I need to budget for better next time.
All-in-all, I probably spent between 20-25 hours actually working on the game and the rest sleeping or taking breaks to watch Stranger Things on Netflix (which was a really bad time to get into that show).
Here's a rough guess of how I spent my time on the game:
- 20% in planning,
- 40% in coding,
- 30% creating the level, and
- 10% creating art assets (which really shows).
Next Ludum Dare
I really enjoyed the whole experience and would love to try it out again, either through Ludum Dare or another game jam. I think I learned a few things for the next time:
- Create the assets earlier, maybe even as the first step after planning. This helps planning the game's framework and makes for a higher-quality product.
- Use a level editor like Tiled. This would greatly speed up the amount of time spent on level design and probably help make better levels overall.
- Get out of planning quicker. I definitely thrashed on ideas for too long and I'd like to get better about picking something and running with it.
- Take some courses in both Photoshop and doing animation.
- Quit watching so much Netflix (but really, go watch Stranger Things, its awesome)!
And of course: practice, practice, practice. I'm still reading through Unity In Action and I plan on starting on another game in my free time. By the next Ludum Dare I shouldn't be reading as many tutorials and I should have a better idea of what to expect.
Feel free to hop over to the Ludum Dare site to play First Wheel and look for the next event! I also have my project shared on GitHub for anyone interested in the source. Its no masterpiece, but its a completed project and I'm proud of it and I think that's what really matters.