Tuesday, June 18, 2013

Android Game Teaser

I've been working off-and-on for nearly a year on my current Android game project, code-named Plane Runner. Although I'm not an artist, I wanted to have a game that I can truly call my own creation. But I must say that even with my minimal "programmer art" skills I am pleased with how it is turning out so far and am hoping to release the game on the Android Market later this year.

I'm keeping the title a secret for now, but below is the main menu background. Let me know what you think!

Thursday, May 30, 2013

Geeking Out, Round 2

In my last post I thought I had found the nirvana of blog-to-social-media management. Using IFTTT, a new Tumblr post would be created automagically whenever I created a new blog post. I expected (or maybe just hoped) that Tumblr would in turn automagically create similar Facebook and Twitter posts, but it seems the Facebook and Twitter updates only happen if you post directly on Tumblr.

As a workaround for now, I've created three separate recipes on IFTTT: one to create a post on each of Tumblr, Facebook, and Twitter when I create a new blog post. I'm curious to see if this group works the way I expect.

BUT, and this is a biggie, I just recently learned (thanks Bill!) about a service called HootSuite that can be used to manage multiple social media profiles. LifeHacker also has a list of the five best social media managers. And something even cooler is that there are IFTTT recipes for HootSuite also; so I could accomplish my multi-profile update with a single IFTTT recipe, but I'll play with that another day.

Let's see if this works, pressing the big red button in 3... 2... 1...

Tuesday, May 28, 2013

Geeking Out: Tumblr + IFTTT

This post is a slight diversion from the usual game-related content. I should probably be working on my Plane Runner game instead of this other geeky stuff :) But I've become more and more interested lately in 1) how to update all of my social networks at once, and 2) how to stay up-to-date with others' content on those networks in one place.



I recently stumbled upon Tumblr and IFTTT (IF This Then That). Tumblr is cool because once you post something there, it can syndicate directly to Facebook and Twitter. IFTTT allows you to create triggers that, when detected, trigger some other action. For example, I'm using the example illustrated above to create a link post on Tumblr when I create a new blog entry here.

If I set this all up correctly, the act of creating this very blog post will cause IFTTT to create a Tumblr link post (linking to this blog entry), which I hope will in turn create similar Facebook and Twitter posts. If that doesn't work, I can probably just create multiple "recipes" on IFTTT to syndicate to all of the networks individually (instead of relying on Tumblr to post to Facebook and Twitter). Regardless, the geek in me is a little too excited about all of this automation updating my multiple online profiles!

How are you using Tumblr, IFTTT, or [insert other cool site here] to update multiple social networks? If you blog, how do you keep all of your followers aware of new entries? What cool tools are you using to read content from Facebook, Twitter, Tumblr, etc.?

Sunday, May 26, 2013

Still Ticking

A couple years ago when I started really digging into the gaming scene and trying to get familiar with other game developers by their blogs, I found it odd that so many seemed to disappear or otherwise fall off the face of the earth. A couple years older and wiser, and with some game development experience under my belt, I now know why.

For me, my regularity in posting drops off when I'm busy in a development cycle. The logic goes something like this: Why should I write about my game when I can be developing my game? Why write a blog post when I could be otherwise writing code for the game? Even when my fellow collaborators continued playing a ton of other games, I had trouble playing anything because I couldn't seem to justify spending any spare time NOT writing code for the game I was working on at the time. You see, the problem is balance. Especially as an indie developer where my time was already split between my 40+ hours per week day job and family, precious little development time would often occur after hours (10pm to 2am, sometimes 3am... ish) a couple nights a week. I think I just got burned out a little, and I wouldn't be surprised if that happens to others as well.

But I'm not complaining. I'm thankful for the 2-year experience I had working with some really cool artist friends on a tower defense game. In fact, today I was (finally) able to load it up again and take a look at what we had accomplished. Of course, looking at it now, somewhat removed from when I had written a lot of the code, it was a lot easier to see the imperfections and how un-polished it was. It's very tempting to go back and try to make some of those old game mechanics work better. I've learned a lot about engine design since those days and I wish I could go back and redo the entire design, but I know it would take forever.

In the time since the tower defense game, I took a nice long break to just spend time with my family and unwind a little before diving into some Android development. I was really interested in creating a game people could hold in the palm of their hands. So I created a ball-jumping puzzler tentatively named Plane Runner, and it was an AMAZING feeling to run it on our Kindle Fire. Heck, even the simple Layout Views app that I posted about in my last post over a year ago was a blast to watch running on the Kindle Fire. And when we got a smartphone, it was even more sensational to play Plane Runner on that device. But again I started putting in too much after-hours time on the game, getting burned out again, and had to take another little break.

Whereas the tower defense game taught me a lot about collaboration with artists (and a sound guy!), as well as XNA and a variety of effects processing and creating a 3D game, Plane Runner has taught me a lot about creating a game for mobile devices (mind the garbage collector!) and how to better design a game engine, including but not limited to the use of a Scene Graph, better event management, and a component-based architecture. If you're at all interested in creating games for Android, I highly recommend Chris Pruett's Google I/O talk.

So that's just a little history on what's happened in the time since my last post. But I wanted to let everyone know that I'm still here. I'm still ticking, still developing (though now at a slower pace for the sake of sanity) and hopefully also still writing here from time to time. I am determined to finish Plane Runner, to have at least ONE completed game in my portfolio. But most importantly, I hope to continue growing and learning, and would encourage fellow indies to do the same. I now understand why some seem to have fallen off the face of the earth, but hey... it's never too late to make a comeback, right?

Monday, April 23, 2012

My First Android App - HelloViews

The title of this post may be a misnomer. We all know a programmer's first program in any new language is guaranteed to be "Hello, World" and that was no different for me. So this may actually be my third or fourth app, but it's the first one I've written that does something slightly interesting (at least to developers) and that I can say I'm proud of.

What I did is combined the Hello Views tutorials from the Android developer site into a single app. You can think of it as a "views viewer" that allows you to see some of the possible layouts along with the corresponding code and XML used to create them.

Here's a couple screenshots (using an emulator):



No more ado: Download the APK file now!

If you're stuck on how to install the APK as a program on your Android device, you'll have to do a web search for "side load" and the name of your device. I do have some directions for how to side load an app on the Kindle Fire here.

Please feel free to comment with any thoughts on my first app, especially to let me know if you have any trouble using it on your phone/tablet/Fire/whatever! Also if any developers out there are interested in the source of this app, just let me know and I'll be happy to post it.

Friday, April 6, 2012

Hello World on Kindle Fire... YATA!

For anyone not versed in the original Heroes television series, the Japanese time-traveling hero named "Hiro" would exuberantly exclaim "Yata!" when he accomplished something awesome. In the same vein, I'm excited that after only a day I was able to create my first Hello World application and actually run it on my Kindle Fire! Below are the brief steps taken to make it work. This is not a comprehensive guide but includes some gotchas to hopefully help anyone else who might be stuck.

Create a working app that loads in the Android Emulator:
  • Install a JDK (Java Development Kit) - I used the Java Platform (JDK) 7u3 available from Oracle here
  • Install Eclipse IDE - I grabbed the Eclipse IDE for Java Developers here
  • From developer.android.com, download and install Android SDK. This also installs the SDK Manager, which itself is pretty darn cool.
  • Follow the SDK installation directions here. One of the things this will guide you through is installing the ADT (Android Developer Tools) plugin for Eclipse, which is used to simplify tasks that would otherwise have to be done manually. For example, it provides nice New Project and Export wizards for creating and distributing your applications. FYI the ADT plugin took a LONG time to install on my system; I let it do its thing overnight.
  • If it wasn't done as part of the SDK installation, install the latest platfrom from Android SDK Manager, which can be opened from directly inside Eclipse after the ADT plugin is installed and Eclipse is restarted.
  • Follow the Hello World tutorial. This will guide you through setting up an AVD (Android Virtual Device), running your app in the emulator, etc.
  • Edit your AVD in Eclipse, setting the Snapshot option to Enabled. This greatly improved the loading speed of the emulator for me.

Building your app for distribution:
To get your shiny new app on the Kindle Fire, or any device really, you have to build it in release mode and sign the output APK file. Fortunately this is a relatively easy process from within Eclipse once you have the ADT plugin installed.
  • First you need to make sure to add the JDK bin folder's path to your system's PATH environment variable. If you don't know how to do this you will have to search (as did I) to figure out the correct way to edit the "Path" environment variable on your OS. Once you do this, Eclipse will be able to use the KeyTool and JarSigner SDK tools to build your APK file.
  • In Eclipse, click to edit your project's AndroidManifest.xml file. You want to edit the Min SDK version, settings its value to "8" (without quotes). SDK version 8 is the API Level associated with Android version 2.2. The reason for this is that, I believe, the Kindle Fire runs an altered version of Android v2.3; so if you use an SDK version much higher than 8 (e.g. the default for mine was 15), the Kindle Fire won't be able to open the package when you transfer it to the device. I know I'm using the API level for Android v2.2 when I said the Fire is running v2.3 - feel free to experiment with the number, I just know that it definitely works with min API level set to 8.
  • Now click the root of the project in the Package Explorer.
  • Select File > Export, select the Android option, then select the Export Android Application item and click Next.
  • Enter a project name and click Next.
  • If this is your first run exporting an app, choose to create a new "keystore". Enter a folder path followed by the name you want for your new keystore (e.g. C:\android\keystores\mykeystore). In the example, the name of the output keystore file will be "mykeystore.keystore" (the extension is .keystore). Also specify a password and click Next.
  • Enter some info to identify the key that will be used to sign your APK file; it is highly recommended to set the Validity (number of years the key is valid) to a value greater than 25. Once all required info is entered, click Next.
  • Finally, specify the destination for your APK output file and click Finish!

Sending your app to the Kindle Fire:
Now comes the fun part!
  • Transfer your new APK output file to the Kindle Fire. You can do this directly using a micro-USB cable to connect your Fire to your computer, or you can email the file to an email address you can check on the Fire. If you send the APK file as an email attachment, you will be able to save it to the Fire's internal Downloads folder.
  • Download and install the free ES File Explorer from the Amazon app store.
  • In the Fire's settings, select More > Device and then set the option "Allow Installation of Applications From Unknown Sources" to ON.
  • Now in ES File Explorer, navigate to the location where you saved the APK file (the Downloads folder if you saved the file from an email attachment).
  • In ES File Explorer, click the file and you should be prompted to install the application. Obviously, hit Install to install the application!

If you followed ALL of those steps, your new application should be installed on your Kindle Fire and ready to run from the Apps view. YATA!!!

Thursday, April 5, 2012

On Losing Control...

I'm still contemplating creating an Android game (or even just a quick "Hello, World!" to get my feet wet) to try out on my Kindle Fire. If I get a little more time I might even start that tonight. But a month or so ago I bought the e-book Unreal Development Kit Game Programming with UnrealScript: Beginner's Guide (which yes, I am reading on the Fire) to get a feel for UDK UnrealScript programming. At first, I was thinking it's pretty cool. I mean, you get to learn about some of the classes in UDK and in a matter of minutes you can have an Unreal-style game up and running. What I'm struggling with, however... is what feels like a total loss of control.

With XNA development, where I had to do everything, I could do exactly that: just about anything. Of course, the ability to do anything came at a heavy price: lots of complex or ground-breaking code with minimal assistance from our favorite search engines. I still recall the horror that was getting the simplest model animations to work in XNA 3.1 because of the lack of animation support out-of-the-box. But I digress.

I just have to say, in this as-yet unfamiliar world of UDK UnrealScript programming it feels weird writing script "classes" and not having full control over how things work. But maybe I just haven't learned enough yet. I have only completed about 40% of the book anyway. We'll see where that leads, but for now I start again at the beginning of every programmer's journey.... Hello, World!