Everyone seems to have their own tips and tricks regarding how to make and finish a game. Derek Yu has a totally awesome list on his Make Games blog, which is required reading for anyone now reading this. Seriously, go read it now, then come back if you want to. Cliff Harris also had a short list entitled "Why Your Indie Game Isn't Done." These lists are great to read and keep in mind to help keep you motivated and on track. However, they don't give much advice on the topic of finding time to make games.
It can be pretty difficult to carve out a chunk of time for game making, especially when most of us have lots of other responsibilities. Myself, I have a wife and 6 month-old daughter that I like to spend time with, plus a full-time job. I'm involved in a small group Bible study each week, and I also spend time with my friends now and again. On top of all this, I actually like to play games as well. Where do I find time to make 'em?
Well, here's my secret: I only sleep for 6 hours a night. Doesn't seem like rocket science, but it works for me. My wife and daughter both love to sleep (well, the daughter not quite as much yet), so I wake up at 5AM and get some work done while the house is quiet. It's hard for me to do game making after work or late at night, since I've been in front of the computer screen for 8+ hours at that point. Working in the morning means that I'm still motivated to develop.
Of course, waking up early is difficult. I like to sleep as much as the next person, but here are some tips that help me get out of bed each day.
Prepare the night before. When you get up at an ungodly hour, your mind is mush. Anything you can do to streamline the process of getting out of bed and into gear is something you should do. What's really helpful is to prepare before you go to sleep. For example, lay out your clothes so you don't have to fumble around in the dark for what you're going to wear. Fill up the kettle with water and put out a cup with the bag of tea already in it, or grind your coffee and put it in the French press. These simple tasks will help you get up and get moving more quickly in the morning. This article from Wired inspired me with "night before" prep.
Keep a to-do list. Again, this tip attempts to help your mushy morning mind. When a bit bleary, it's hard to be super cognitive and get back into your workflow immediately. You'll think, "What am I supposed to be doing again?" and waste quite a bit of time figuring out where you left off the day before. A to-do list can really help you jump in and start being productive, especially if you remember to make the first few tasks for the day no-brainers — you can cross off some items on your list, and get into "work mode" more quickly.
Turn off the internet. It's easy to fire up the browser and follow rabbit trails around the internet, especially when a bit tired. The problem with this is that before you know it, you've wasted half an hour of your precious game dev time, with absolutely nothing to show for it. If you work on computers during the day, it's easy to defer checking your RSS reader until some downtime later in the day; it's much harder to program your game when you're supposed to be working.
Do it every day. Working on games part-time means that your projects will take a lot longer to be finished. It's tough to stay motivated when you seem to be making so little progress each day. However, that time each day adds up before you know it. Plus, doing work each day means that you'll form that as a habit, which in turn makes the decision to do work easier. Apparently Jerry Seinfeld had a trick to help him work every day... maybe it would be helpful for you?
Really want to. I guess this goes without saying. You have to decide what you love more, and cut out other things that can be cut. For me, time with my family and other social obligations aren't options to give up, so I cut out a little bit of physical comfort. In return, I get to pursue an activity that's more rewarding than the mindless development I do during the day. What's important to you?
Zomg, it's an "art" tutorial! Faced with the need for buttons for a game UI, I wanted to create something low rez and pixel-y. Doing a search for "pixel buttons" didn't really turn up a whole lot, so I kinda mucked around and came up with something I liked, which was an amalgamation of various sources of inspiration. Now I'm regurgitating this process back onto the 'net, so hopefully it'll be useful to you as well.
Determine size you need, then halve that. Create a new image with the halved size, but add an extra pixel to both width and height. So, say I want a 200x40 button, I'll create a 101x21 new image.
Draw a border along the edge of the image, but leave a pixel's width of spacing on the bottom and right of the image. We'll use that spacing for a drop shadow.
Determine how rounded you want the button to be. See some examples, and modify the corners of your button appropriately.
Select the color you want for the button, then fill the whole center with that.
Lighten your color slightly and outline the top and left sides.
Darken your color slightly and outline the bottom and right sides.
Create a new layer, then add a black border in the extra space on the bottom and right sides. Lower the opacity of the layer to 25%, then merge it with the main button layer.
Scale the button by 2x, using the "nearest neighbor" scaling algorithm.
Add your text with whatever text decoration you like.
Stupid OS X trick today. Know how you can view the connection status of your Bluetooth keyboard/mouse by clicking the icon in your menu bar? Well, normally those are named something boring. Here's how you can assign clever names to your mouse and keyboard.
Open your System Preferences and click the Bluetooth icon. You should see a list of all connected devices. Select one and click the "settings" gear icon at the bottom of the list, then choose the Rename option. That's it! Now you can easily identify which wireless accessories are connected to your computer.
A common requirement for any sort of computer program is saving data. In iOS, probably the simplest way of saving information about your app is using NSUserDefaults. In a nutshell, NSUserDefaults is a dictionary that will automatically save and load its' state when your app opens and closes. I've used the NSUserDefaults class to save preferences (such as music on or off), as well as store info about the player's progress through my game (whether a level is completed, best completion time, etc).
The best thing about NSUserDefaults is that it's super easy to use. To set a default value:
And of course, the best part is that's all you have to do — you don't have to worry about serialization or saving to disk or whatever.
Another tip is that you can initialize your NSUserDefaults with a pre-defined NSDictionary object. So for example you could set a default value to be "false" or "true" before the user ever had a chance to interact with your program. In my case, sometimes I create an array that represents all the levels in my game, and in each array value I store a boolean to check if a player has finished the level. To do this I create the data object and then register it with NSUserDefaults. If a previous value exists for the object, then nothing happens. Otherwise my blank object gets saved as the "default" defaults.
Even better, you can define your standard defaults by using a .plist:
In this example I've got a file named UserDefaults.plist in my project, which is a dictionary that has the default keys and objects I want my app to start with. For more examples, check out Apple's reference page.
Yeah, so this is ridiculous, but I'm throwing it out there: I'm bad at leaving ratings and reviews for games. Even after having published my own game on the App Store — I mean, I know firsthand that developers want reviews. I haven't even left ratings for the few games that I've written up on this blog.
I imagine that a fair number of other developers fall into this camp as well, so I'm making a public challenge: if you take the time to buy a game from the App Store and actually play it, leave a review! Not just a rating; take the time to think of one thing you really liked, and (optionally) one bit of constructive criticism, and slap that nonsense into iTunes. To put my money where my mouth is, I'm going to list the apps that I haven't left reviews for, then check them off as I do. I charge you to do the same. I guarantee that it'll make someone feel better about their hard work.