February 04, 2015

#30daydeveloper Review


Below is what I wrote for this Reddit post.

Introduction

Hello, my name is Wonmin (1min) Lee and a long time lurker, first time poster at /r/gamedev. For the past thirty days I have been working on a game called 4orner. Here are some quick and dirty facts about me:
  • I work a full time job
  • I took two computer science classes in college (web and Java) and since then have self-learned everything
  • I challenged myself to work on my game every day starting January 5th for thirty consecutive days
  • Each day I challenged myself to be a “non-zero” day (shout out to /r/NonZeroDay)
  • I am extremely proud of the final result and excited for what this means for my future
The purpose of this post is to document my findings and epiphanies from my thirty day challenge of making 4orner. It is my hope that my experiences can help motivate you to achieve your goals—whatever they may be. (And also motivate myself for any future projects).

My post will be broken down into the following categories:
  1. Motivation and Discipline
  2. Game Design
  3. Technical Difficulties
  4. Project Management

Motivation and Discipline

Perhaps you’re reading this and thinking that I am some sort of super disciplined go-getter, but you couldn’t be further from the truth. I love to procrastinate. I am fundamentally lazy. It’s absolutely mind-boggling that I was able to complete this challenge with a final product that isn’t absolute shit. So let me tell you how I managed to muster up the motivation and discipline to complete my challenge.

My father used to smoke cigarettes when I was a child. I have vague memories of him stepping outside to grab smoke breaks after dinner. But beyond my childhood, my memories of him smoking are non-existent. A few years ago, I asked him—how did you manage to quit smoking when thousands if not millions struggle every day? His answer was stupidly simple—quit today, don’t set an arbitrary date in the future to quit; just do it now.

That ideology combined with the power of the “non-zero” day was what gave me the strength to power through this thirty day challenge. I had been toying around with the idea of making a game for a few years now—you can see some of my past work on my website. But I always struggled with completing the game or following through with my dream.

Then on January 5th, I decided to embrace my father’s words and started my thirty day challenge. You can read my daily blog entries at this link.

By forcing myself to blog each day, I felt that I had a very public duty to code. If I didn’t code a certain day, I felt that I let down an imaginary group of people that were very invested in my development progress. (Hence why I made a Twitter, it really helped me to pretend that I was someone famous)

So to sum up this section:
  • Start now, don’t put it off to some arbitrary date in the future
  • Focus on non-zero days
  • Have a system that helps you stay accountable (Blogging and Twitter in my case)

Game Design

Game design is hard. Having played video games throughout my entire childhood and well into adulthood does not automatically make me a good designer. An idea you have might actually suck when you first implement it. 4orner’s original design was completely different from the current version. I thought I had an idea—a vision—of what makes a “fun” game. I was wrong.

4orner’s original design was to flick colored balls into corners. (Mock up image here) I was so focused on this core mechanic that I never realized how boring and crappy it actually was. I spent at least eighteen of my thirty days tweaking the core gameplay mechanic. My game sucked from the start and it seemed to be getting nowhere with each iteration. I was adding various extraneous features like stopping time, sound effects, smooth AI, but at the end of the day there was only so much you can polish a piece of turd.

But for 4orner, I didn’t care about the quality of my idea. It was more of a personal challenge in motivation and discipline than about making a great game. To quote Jurassic Park, I was “so preoccupied with whether or not [I] could that [I] didn’t stop to think if [I] should.” I didn’t care if the game sucked, I would still have learned a ton from the thirty days anyway and that was the true victory in my eyes.

Having an idea is good. Having multiple is better. I have a long list of random game ideas that I keep in my Google Keep for when inspiration strikes me. Sometimes the idea is so fucking good that I just want to sprint home and start on the project right away. But you can’t get married to the first girl who bats her eyelashes at you. You’re worth a bit more than that.

As for your idea, there are plenty of guides online that can help you determine if it’s up to snuff. For me, this post stood out to me in particular.

To sum up:
  • “If it's not enjoyable now it's unlikely that it ever will be. Don't build a game on broken foundations.”
  • Ideas matter more than your technical capacity to build it (unless your goal is to practice your technical skills)
  • Don’t get married to any single feature or idea

Technical Difficulties

I made 4orner using the Phaser platform (http://phaser.io/). The Android version was made by using PhoneGap (http://phonegap.com/) to wrap the web app. Since most of my development experience was with web technologies, JavaScript was the obvious language of choice. It was pretty easy for the most part—there were several spots along the way that were particularly challenging (such as the algorithm for the enemy balls or implementing PhoneGap).

You should use whatever language you’re most comfortable with. Making a game is already hard enough as it is, learning a new language on top of that makes it extremely difficult and you will be more likely to give up half way.

On the other hand, if you’re adamant about learning or implementing a new technology, do it early on! That way you can plan for any future road-blocks and determine whether or not the technology is worth your time and effort. Try to keep these new technologies to a minimum so as to not negatively impact your motivation. I know I definitely put off learning PhoneGap until the very last day because the idea seemed too daunting and I was very comfortable in my established routine with Phaser and JavaScript.

Finally, build small then grow big. If you want your game to be multi-platform, start by designing for mobile because that’s the most restrictive medium, then work your way to the desktop. I did the exact opposite and it was a nightmare having to reorganize my code and go through hundreds of lines of code to fix bugs. I designed and coded for the desktop and that is very apparent when you play my game on a mobile device or via the Android application.

In summary:
  • Stick to the language you know best
  • Keep new technologies to a minimum
    • Start the new technologies early
  • Start small and grow

Project Management

Having a plan and a timeline is very important. This probably ties into the above Game Design post. If I had spent a week planning out what I want my game to look and feel like, I probably would not have wasted eighteen days mashing together various mechanics to try to poop out a fun game. Project management is a real skill and many people in the world get paid tons to do it—because it’s just that important.

Deadlines exist for a reason. Otherwise we’d all just be working perpetually and pushing things off to some future date. And with deadlines come the real issues of falling behind. Falling behind is okay, I think it’s pretty natural, people don’t like to work (even if it’s their so called “passion”). Plans are crucial. I worked for 29 days before I decided to implement PhoneGap and it was a nightmare to try to get it fully implemented in one day. You can tell how sloppy the game experience is on a desktop versus on an Android phone because that’s what I spent the vast majority of my time working on.

I once visited Facebook headquarters and saw a sign near someone’s desk. The sign read “done is better than perfect” and I couldn’t agree more. This ties into the “don’t marry your game ideas” point from above—cut any unnecessary fat from your game. And if the deadline is approaching, you might just want to scrap a feature entirely for the sake of completing the game. I had originally wanted to create both an iPhone and an Android standalone app with PhoneGap, but I had to scrap the iPhone at the last minute. Perhaps if I had started earlier in learning how to use PhoneGap, I would have seen this coming and could’ve better managed my time. (I also don’t have an iPhone to test with)

TL;DR:
  • Have a plan / time-line
  • Set a deadline to stay accountable
  • Done > perfect
  • Cut unnecessary bloat

Conclusion

I hope that my post has been helpful to you. I certainly learned a great deal in the past thirty days and definitely intend to carry this knowledge with me as I move towards whatever my future holds. I guess this means that I am finally a game developer albeit for a very small game. Feels good. 

Thank you for taking the time to read this post—if you’re interested, my blog and website can be accessed at the following links:

http://blog.1minlee.com/

http://1minlee.com/

You can play my game at:

http://phaser-wos.herokuapp.com/ or http://1minlee.com/games/4orner/

or install the Android APK at:

http://1minlee.com/games/4orner/4orner.apk

Tweet me @Xcellion or email me at [email protected] if you have any bugs to report or want to just chat :) Shout-out to finsShadyDave, Autistic Lucario, zerolagtime, grunz, and Langerium from FreeSound.org for their wonderful SFX.

Also in my rush to make this game, I totally forgot to keep track of whose work I used for my sound effects. If you hear anything in the game that you think belongs to you, please let me know so I can credit you appropriately! I'm so sorry, I'll make sure to keep track from now on.

Thank you and happy developing!


On a side note, I think it's fucking awesome that the end of my thirty day challenge fell coincidentally on my Reddit cake-day.

No comments:

Post a Comment