About 12 weeks ago, I realized that I didn’t know how to make games. Or rather, I had never personally seen the entire process all the way through. I wanted to change that, and hopefully learn something along the way. I did.
It All Started with a Plan
I decided it would be best to map out a calendar first. All I knew was that my deadline would be sometime in October.
I wrote out each week in my sketchbook and left some space for goals next to it. This gave me a framework to build on. Now I needed ideas. And if an idea didn’t fit into the framework, it would get the ax.
My oldest and I have been replaying Super Mario 3D World. Our favorite levels are the ghost houses, specifically the one where your character wears a headlamp as an outfit and evaporates ghosts with the light.
That was a mechanic I could probably re-engineer on my own. A simple raycast, some glowing particles, and enemies that didn’t need a walking animation — it all sounded good to me!
After a brief consultation with Adeline, we both agreed it would be fun to make our own game using a version of the ghost scaring mechanic in Mario. She insisted on having a house for the ghosts to live in and proceeded to draw me some pictures of *exactly* how it should look.
Luckily, this slimmed-down concept of a game that revolved around a single mechanic fit nicely into my 12-week calendar. This was going to be a nights/weekends kind of thing, so I made sure to give myself as much padding as possible. I wanted to have the game available before Halloween, so I penciled in the week before that to have the game ready to submit to the App Store for approval. Oh yea, I forgot to mention… this game had to ship. A real launch or it didn’t count. That was my goal.
I decided that the first few weeks should be centered around ideation on the mechanic and general art direction. I also figured that since we were basing the mechanics off of Mario, the game should be geared towards kids and adults alike. That special balance where anybody feels ok playing it.
My background is in art, but honestly, art direction is like a whole new world to me. It’s one thing to make pretty pictures, it’s another to determine the trajectory of a style, make big AND small decisions, and figure out how to tie everything together in a cohesive way. And none of this happens in a vacuum. Every element of a game influences the art direction and vice versa.
What I learned from this process is that art direction is an ever-evolving process. Sure, you try to paint the big strokes first, but in a way… you have to be prepared to make adjustments as needed. And then certain aspects of the project will challenge previous decisions and you need to know if it’s better to stick with your plan, or let change in.
My problem has always been that I’m too much of a fence-rider. I don’t want to make a decision, or plant a flag, because I might be wrong. You have to plant a flag SOMEWHERE. Ok, you might be wrong, and you need to know when you are. But not planting a flag… well, that’s worse.
I’m learning that art direction is a process, just like any other kind of artistic creation. Part of that process is experimentation and failure. And part of it is confidence when your gut says “do it.” I knew I wanted a cute, simple art style in 3D. I wanted a dark scene with highlights of vibrant colors. And I wanted something that I could be proud of.
Since my strengths are in art and design, and not programming, it was hard to resist the urge to start slapping together pretty visuals. I needed to know upfront if I wasn’t;t going to be able to build the mechanics, so that I could save as much time as possible if I needed to change gears.
Thanks to years of previous Unity experiments, I had amassed a collection of prebuilt assets I could use for testing. Right-click, new C# script, “PlayerController.cs”, and… hmm. I just stared at the blinking cursor. What was a void again?
Not too long before this project, I had purchased a new iPad to do some drawing on, and I had also installed the Swift Sandbox app from Apple. It’s essentially visual tutorials on how to program, and you end up learning the Swift language on the way. I fired that app up and dug in. I kid you not, at this point I either had forgotten or didn’t know that the Update() function could call out to other functions in the file. I mean, that was the first tutorial in the app. My confidence was a little low at this point.
A few weeks passed and I was starting to get the hang of it. I’m an amateur programmer at best, but I can stumble my way through some code and piecemeal concepts together enough to make things work. No, it’s not the prettiest or the most efficient code… but it does compile. And I don’t seem to have any memory leaks according to Xcode… so there’s that?
(Shhh, I realize that Unity is doing ALL the heavy lifting and I’m just basically scripting the layers on the top.)
At this point, I had a working prototype of the main mechanic. You could control a little character, make them emit a cone of damage in front of them, and little AI nav mesh “ghosts” would try their best to run into you. Done.
It was a huge relief to find out that I could manage to scrape together enough know-how to program the basic mechanics. At this point, the rest of the game seemed like it was just icing on the cake. My goal was to slowly iterate on each piece one at a time and polish the experience as I went.
I looked at my remaining weeks on my calendar and noted which items I would work on next: character modeling, texturing, scenery and map design, animations, sound/music, Game Center integration and high score saving. And finally, submitting to the App Store.
I had been spending a bunch of time every night and on weekends working on this project. And I should have realized that I was starting to get burnt out on it. I was also neglecting my other duties at home. Dishes were the most obvious offender. In the next couple of weeks, I would hit a low point and didn’t touch the game for about a week and a half. It was then that I realized what had happened and that I needed to do a better job balancing this work/life/hustle triangle… mostly the life/hustle part.
I haven’t been camping in years and had promised Adeline I would take her on her first camping trip one day. I booked a campsite near our house for the first weekend in October. I also made it a point to start exercising every other day for at least half an hour. I resolved to keep my priorities in check moving forward.
The Last 10% Takes 90% of Your Time
It’s a strange phenomenon, but it’s true…
Once you start to see that finish line, the fatigue kind of melts away and the goal comes into focus. You build momentum. All of a sudden, the endless nights spent working without seeing much progress fade away, and you start saying things like, “Yea, this looks good” and, “Wow, this is actually kind of fun to play.”
And then your work becomes more efficient somehow. Iterations get quicker, which makes room for those, “Oh my gosh, if we do X then I can also add Y!” This is where unplanned magic happens. This is also where some of those random experiments you tried in the beginning, the things you knew you would change later, actually work for some reason.
Remember that house for the ghosts to live in I mentioned earlier? Well, it served no purpose in the game. It was just a random castle thing that sat in the middle of my graveyard. Adeline loved it, so of course, I wasn’t going to take it out… but it didn’t do anything. Honestly, I was just trying my best to ignore it until I couldn’t anymore.
It was around this time that I started to crack and let other people see this secret project I had been working on. Initially, I didn’t want anyone but my wife and kids to know about it… but I needed outside feedback. One day at lunch I gave Matthew a brief glimpse of this thing running on my phone. Thankfully, he wouldn’t back off until I had shown him the game properly.
That day, I was trying to figure out how to design the main menu. I hate main menus… or rather, I feel like they are just a de facto kind of thing people add without questioning why they should, or if there’s a better way.
Matthew had a brilliant idea – use the inside of the castle as the main menu. You start inside and then leave the house when you’re ready to fight some ghosts. He even suggested a diegetic system for displaying high scores inside the house. (I am a huge fan of diegetic interface design, as long as it’s done right and doesn’t impede functionality).
It felt good to bounce ideas off of someone else. I had underestimated the value of getting feedback early on and had overvalued the importance of keeping my project a secret. Artsy kids are a fickle bunch, and for some reason, we hate showing our work early. The work is never good enough to show. We’re afraid of critique, especially when the work is our baby. My pride and stubbornness also played a roll in keeping it a secret… but as I reflect on it, the result would not be nearly as good if I had kept it to myself any longer.
The Finish Line
It was the first week of October and my deadline loomed. This was it, the finish line. Almost there. A few more bug fixes and we’re out the door.
Except that Game Center is a tricky little thing to implement.
After some initial play testing, I knew that my game needed a way for player’s to see other’s scores. Without that component, there was no context for your own personal best score, and why ever play again if you thought you had done decently? To fix this, I needed Game Center integrated at launch.
I spent the better part of that week and into the weekend compiling and re-compiling to try to get Game Center working. I tested a myriad of plugins before realizing Unity had its own Social API that would help you connect to Game Center. You also can only test your Game Center code on an actual iPhone. Oh, and you also need to finalize all your Apple Developer account stuff in order to do any of this at all.
Submit and Wait
I was able to get all my bugs worked out and finish up my marketing materials by Sunday afternoon that weekend. I did one more gameplay test on my phone to make sure my build was solid and hit Submit in Xcode. Then I waited.
The last time I submitted a game to Apple was around 2015? James and I did a game jam thing and made a simple little bamboo slicing game. Before that, it was 2011 and we made an Operation clone called Stitches. There is a certain level of anxiety knowing that your game has to be approved. Meaning, if it isn’t, you have to dig back in and fix what’s wrong, and then wait again.
It took about 18 hours before I got an email from Apple saying that my game was “In Review.”
About 2 excruciatingly long hours later, the followup email came in: “Approved.”
It’s difficult to describe the feeling I got. I was on my way into work after a doctor’s appointment that morning and the emotions rolled in in waves. It was a very real rollercoaster of emotions that started with extreme jubilation, morphed into some chest beating like a full-on maniac… and then ended with a silent happiness.
The initial rush is over now, but it still feels so, so good to have something out there with my name on it. Something very real that I’m proud of.
I have some ideas for version 1.1 that I’m toying around with as of this writing. I want to modify the controls, and fix a few more Game Center bugs I’ve discovered. But for now I’m taking a little break to just enjoy completing this project. It really doesn’t matter to me how many people ever download this game. I’m not trying to go viral, or make any money with it. It’s available for free and will probably stay that way. I completed my goal and in doing so, was able to give my friends and family a moment of joy when they played it. And that’s what I love the most about making games… the wonderful feeling you get that only comes with the opportunity to give someone else a change to experience the thing you’ve made. It really is incredible.
I want to thank everyone who supported me during development of the game, to my wife and kids for their unending help and love, and I want to thank anyone who reads this for taking the time to hear my story.
I’m Alan Vitek, and I made a game.