I’ve been working on coding and making computer games for a while now — you may remember last year when I made a few game prototypes with various systems, and then later last year I went to a game jam at a conference in Denver and made a prototype, which eventually turned into my very first App Store release, called Antithesis. I released Antithesis earlier this year, and then promptly went to Europe for a month.
As soon as I got back, I sat down to finish an update to Antithesis, though I’ve had a busy summer (and had even more things to do after that). But I did finish the Antithesis update, and then I started to think: What’s next? It turns out that I really, really like coding and development — I heard Adam Carolla say in a podcast recently that whatever you do for a living, you should do something different on the weekends: If you work in a factory, you should go home and create on Saturday and Sunday. Well, I create during the week with my writing, so on the weekends, I’ve found a whole lot of pleasure in coding. It’s like writing, but I’ve found it activates completely different parts of my brain, specifically those parts that need to match numbers and solve problems and graph equations.
So I quickly came up with a list of ideas to work on, and I’ve more or less started in on three. One is not a game at all — it’s a utility, and while I almost had it done for a little while, I later decided it should look a lot better, and I’ve now teamed up with a real designer to work on it. Hopefully it’ll be done soon — it’s taken way longer than expected, but hopefully all the extra work will be worth it. The second idea I have is a smaller game I haven’t started in on yet, but it’s still a filled-out idea sitting in the back of my head. Oh, and I have another prototype from another game jam earlier this year. And, like all developers, I think, I have one gigantic idea that I’ve done a little bit of work on, something pie-in-the-sky that’s really beyond my reach at this point, and will probably take me a few years and a lot more money to actually finish.
All of those projects are good ones, and I’m slowly hacking away at all of them in various ways. But they all will take me at least a few months to finish, and a few weeks ago, I was feeling a little burned out. I wanted to jump in, get to work, and create something — not something that took months or even weeks, but something that took days or hours. After a long, busy summer, I found that I had a few weekends with generally nothing extra to do, so the weekend of October 26, I decided to do my own personal game jam. I’d start a project on Friday, work on it all day Saturday and Sunday, and by Sunday night, I would aim to have something finished and done, something ready to show people, and maybe even release.
That project is what became Benediction. I did work all weekend on it, late on both that Saturday and Sunday night, and then another couple of nights after that making it universal and ironing out some of the bugs. I submitted it to the App Store last Friday, and it’s now available as a free download for iPhone 5, iPhone 4 and 4S, and the iPad and iPad mini.
Here’s a quick video running you through the finished game:
A few people have asked me some general questions about development, and though I didn’t liveblog the actual process of making this game (no time!), I did want to share a little bit about how I put it all together. If you’re not interested in this, you can just skip to a few salient parts near the end of this post, or just go download the game and enjoy it. Because I made it in just two days, I didn’t want to charge anyone for it, though if you want to give me some money, you can buy Antithesis, or my Shape of Teeth ebook. Thanks!
So. I started thinking about the idea for this game a few days before I started coding on it — I have long wanted to make a match-3 game, and I really enjoy relatively simple puzzle games with a fairly long path of progression in them (Puzzle Craft, for example, is probably my favorite game of the year, on any platform). So that was the general goal: Simple puzzle game, with a role-playing or progression system behind it.
For the puzzle game, match-3 is an obvious choice — I had already been working on a match-3 game (that was supposed to be a fantasy dungeon crawler, and maybe I still will make that game someday), so I had some code already to build out the tile board, and select and move pieces around. But a full match-3 game, at least the kind I really like, didn’t seem doable in just two days, so I decided to go easier. I looked through old puzzle games for examples: Tetris, Puyo Puyo, Dr. Mario, Yoshi’s Cookie. Eventually I remembered a game that I know of as Same Game, where you need to simply click on blocks of a similar color, trying to clear out the board as much as you can. I had the idea to combine the Same Game clearing mechanic with a self-repairing board from match-3, and that’s what I went with.
At first, I thought I’d stick with fantasy as the genre, and maybe have the tiles coming down be monsters that you were clearing off the board to fight an enemy, or mana that you were collecting to attack an opponent of some kind. But in my own life lately, I’ve been dealing with some heavy stuff (I’m being purposely vague here — don’t want to bring the game design talk down too much), and I’d been wondering what it would be like to have the powers of God, to just fix things by snapping your fingers, or just tapping a screen. From there, I went to the idea of “answering prayers” from a screen tap, and after thinking about prayer and doing a few Google searches for it, I came up with the name “Benediction,” which I remember from my Lutheran childhood as the last prayer of the worship service, a prayer meant to send you on your way, happy and ready to deal with the world. I had my theme for the game, then: I’d be answering the prayers of supplicants as the player. I’d be the God with infinite power, answering prayers as needed.
The prayers were initially supposed to be a little darker, actually. One idea I had during development was for each color to have a very specific prayer associated with it: Prayers of wanting, or hopelessness, or simple faith. That idea never really materialized, but I did get some good lore into the app description, so I was happy about that. One bit of feedback I got from early players was to have the supplicants sometimes actually say what they wanted, which would have been fun, but I never had the time to code that in.
Anyway, I started up development in Cocos2D, which is the relatively easy game engine that I would say most of the games (especially 2D games) on iOS use these days. I wrote about how to code back when I released Antithesis, but I can run through it here quickly: If you want to learn how to code, you should probably start by learning C++. Objective-C is the language that Apple’s Xcode uses to make iPhone and iPad apps, so you should learn that next. And once you know how Objective-C works, Cocos2D is generally the best platform to use for games, so you should probably grab a book about that as well. I bought all these books and read online tutorials over the past few years, so that’s how I learned to do this stuff. As I’ve said before, it wasn’t easy, but it is doable, so if you have a passion for it, you can figure it out eventually.
It turns out that Cocos2D wasn’t actually what I wanted for this project. I’ve been working on that utility app with Apple’s new Xcode feature called Automatic Reference Counting, and oh man do I love that feature so much. Just a few months ago, developers on iOS had to keep track of every single object they created and make sure it was erased from memory when they didn’t need it any more, but Xcode recently added ARC and made the process automatic, to destroy and clean up objects for you automatically when you don’t need them any more. Pro developers and purists probably scoff at anyone who depends on ARC, and technically I still know how non-ARC apps work. But man, it’s so much easier to code with ARC, in my opinion, just letting Xcode do the memory management for you. Unfortunately, the current build of Cocos2D doesn’t use ARC (though they may have updated it already, and I know there are a few ways to tweak it to work with ARC), but the latest build of a Cocos2D variant called Kobold2D does, so that’s what I ended up using to build Benediction. Kobold2D is a very powerful framework built on top of Cocos2D, and it’s got about 300 extra features that I’ll probably never use. But one of those features is ARC compatibility, so I set it up and installed it and went to work.
Development went pretty easily. I’m trying to think of the biggest bug I had to squash, but I didn’t really have any major issues. The update screen was actually the hardest thing to program, but that’s just because I used it as a learning tool. There are about 25 elements on there, but only five actual buttons, and the coder that I was a few months ago would have tried to initiate and set up all 25 different elements on that screen completely separately. But the coder I am now said that there had to be a better way, and so I actually abstracted all the code there, building all of the elements for one button, and then using a loop to build it out five different times.
If you’re not a coder, you may not have understood that (and even if you are a coder, you might not have any idea what I’m talking about, because I barely do). But the point there is that I really feel like I’ve learned a lot after having done this stuff for so long. I’m figuring out new patterns to work with, and while six months ago I might just have been using Apple-built or framework-included objects to build my apps, these days I’m customizing and building out my own classes, and using cool techniques like metacode and blocks. It’s very fun.
I did have an issue with touching the actual grid, and it may still be in the app for all I know (if people have the same problem, I’ll work more on it and figure it out). The issue is that Apple says in its documentation that touch targets should be at least 40×40 pixels, because people’s fingers are just about that size. But my problem was that I wanted to show as many supplicants on screen as possible, and in the end, they came out a little bit smaller than that recommended touch target. As a result, early players had an issue with touching the right guy on screen — very often, they would miss and hit the guy next to the one they wanted. I think this is just a matter of accuracy, but we’ll see — if it’s a major issue post-release, I may go back and try to tweak it.
Of course, trying something new can cause problems, and that’s why I say that upgrade screen was the toughest to build. But otherwise, the app building went very smoothly. I had the game itself done sometime on Saturday night, and took it out to a Halloween party for beta testing. And then on Sunday I had the upgrade screen and system all working. I beta tested the app myself over the next few days, and showed it to anyone else I happened to run into, on the street or hanging out with my friends. It’s funny — with Antithesis, I could only get people to play for about 30 seconds at first, and then the more I worked on the app, I got that time up to about two or three minutes before they passed the phone back to me. But with Benediction, I actually had to ask for the phone back — they just kept playing, even after they said they’d made their judgments on the game.
A few days later, I took my iPhone 4 and my iPad 2 and worked to make sure it all looked and ran well on all of my devices. And then, once I went back over the code and double checked there weren’t any bugs that I could see, I saved it in iTunes, created my icon and leaderboards, and uploaded the app.
I actually uploaded it twice: There was one major balancing problem I had to fix, in that you used to get 200 points for finishing a game with a powerup meter full, not 20 (as it is in the app now). I found that the 200 points you used to get was bigger than any other reward in the game, so I lowered it back down to 20 — a nice bonus for ending with a full meter, but nothing that would keep you from actually using the powerup.
Anyway, it’s out now, and it’s free, so if you are interested in it (and still reading), then go grab it. I hope you enjoy it. If there are any issues I’ll fix them as quickly as possible, and if you have any feedback, let me know for sure!
And one more thing: It turns out that I really, really enjoy making games. I really, really enjoy writing, too, and that’s my day job, and even if I’m not always paid to write, I will always do it, no question about that. But I sometimes wish I had more time to put towards coding — some days, I finish writing for money, and I just need to get away from the computer for a while, and can’t justify the time coding, because I’m not making any money at it. So I’m also hoping Benediction serves as sort of an audition for me — I made this game with just the two days I had to make it with, and if you like it, I can make more.
I don’t know what that means, necessarily — I doubt I’ll leave my job anytime soon just to work on making games. But I don’t know. If you are a producer or a publisher who wants to work with me on a game idea, let me know. If you’re a developer who thinks it might be beneficial to have me around, helping make your game, let me know. I have very little experience at this — if I put a resume together as a game designer, it would basically have these two games on it so far. So I don’t know what kind of job I’d be good in, or where I’d fit on a traditional team.
But man, I am passionate about this stuff, and I really enjoy doing it. All of my past in writing about games has given me a real insight, I think, into how they work, and my creativity lets me kick out ideas like an assembly line gone mad. I have more ideas that I know what to do with here! I really want to justify putting more of my time into making games, and if you have a way to help me do that, definitely let me know.
Even if not, I’ll still do it. I’m very excited to have made this game in just a few days — it makes me think that I’ll probably have another little personal game jam in a few weeks, and make something else. We’ll see. It’s not like I’m short on ideas.
In the meantime, here’s Benediction. I hope everyone enjoys playing it as much as I enjoyed making it. Thanks again for reading.
Posted on Friday, November 9th, 2012 at 5:23 pm. Filed under general.