Global Game Jam 2015

On January 23rd to 25th, 28,837 people from around the world gathered together at 518 jam sites to spend 48 hours creating video games at the 2015 Global Game Jam.  Programmers, musicians, artists, writers and more got together into teams and made some crazy games.

My team consisted of (from left to right in the photo) Calvin Tham, Matt Corrente, myself, Matthew Cha, Michelle Tjoa, and Justin Lin.  This year’s GGJ theme was “What do we do now?”  Kinda vague, huh?  We finally settled on an idea revolving around sending the player to different worlds very frequently, forcing the user to make the time that they have in the current world count.  To be honest, I’m not really sure what the plot line was, because we unfortunately ran out of time to try to incorporate it very well.

We designed our game, “30 Seconds“, to be played on an Android phone with a virtual reality headset, such as Google Cardboard, and controlled with an Xbox 360 controller.  We started designing the game around 3 separate worlds, Mars, Earth, and the International Space Station.  When the player teleported between worlds, everything about the world they left would be saved, and loaded back in exactly how it was when they came back.  This includes the player’s momentum, so if you’re in the middle of a jump when you leave, you’ll come back and finish that jump.  By the time the jam finished, we had environments for all of the worlds, but only Mars actually had anything to do on it.  I wrote the teleportation code, which was interesting.  Along with saving information about the player, I also needed to swap skyboxes and music when the world changed.  My world swapping code can be viewed here.

What went right?

  • I went to the game jam with Michelle Tjoa and Mathew Cha, and ended up picking up 3 more members in the team building time, and it was great that we did.  We would not have been able to get as much of the game done as we did without them.  We managed to scoop up a great musician (Matt Corrente), who scored our soundtrack.
  • The brand new Google Cardboard plugin for Unity3D worked great, right out of the box, and we didn’t have any issues getting VR set up quickly.
  • Sleeping was definitely a good idea, even though we lost about 13 hours to it.

What didn’t?

  • Unfortunately, even with all of our planning, we still managed to run in to many issues along the way.  The first one to show its head was a pretty major one, we couldn’t reach Github from the jam site due to a poor internet connection.  We had been assuming that there would be a more than sufficient connection, so we hadn’t planned any contingencies around lack of internet, but we decided that we should be able to set up a locally hosted Git server easily.  This didn’t work out either though, as we ran in to several issues here too.  We ended up giving up on using Git that day and just started working, and passing files via email or flash drive when needed (GASP!!!).  Fortunately, on day 2, the internet connection was back up to full speed, and we were able to start using Github.
  • The jam site at UCI was extremely over-saturated with programmers.  There were very few artists, and even fewer musicians.  Unfortunately, we overestimated our group’s artistic talent, and didn’t attempt to find any more artists.  This really came back to bite us, as I was the only one in the group with 3D modeling experience and had to spend a lot of time teaching everyone else 3D modeling basics so that they could model while Mathew Cha and I coded.
  • We didn’t end up getting the full 48 hours because our site started a few hours late.

All of our source code is available on Github.

Despite what went wrong, it was an amazing experience, and I’m certainly looking forward to Global Game Jam 2016! (and maybe a few other game jams or hackathons before then)


Quadcopter Long Exposure Pictures

I recently bought a cheap quadcopter (the Syma x11) as a first step towards building and programming my own quadcopter.  This last weekend, I took some long exposure shots of me flying it in the dark.

Light Controller Update

icon-512“Okay Google, Turn on my lights!” That’s how a majority of my days start now, thanks to Light Controller and LimitlessLED. Over the last week, I’ve been working on a fork of a LimitlessLED lightbulb controller app I found on Github. I wanted to add some interface touch ups and fix a few features too. When I finished the new features, I sent a pull request through Github to the original project’s author, and now my changes have been merged in and pushed in the latest update to the app which also includes an update to Google’s Material Design.

  • I added a Tasker plugin, which allows Tasker to send commands to lightbulbs. One of my favorite uses of this is in combination with Commandr, an app that allows you to run Tasker commands by voice prompt. Now I can say “Okay Google, light on” and my room’s lights will turn on, or “lights red” and they will glow red.
  • I added a minified widget with just one toggle.
  • I made the app’s main color change with the color of the lightbulb.
  • I also changed the colors that the music listening modes uses to be less jarring.

Here is a screenshot of the new version of the app, now available on Google Play.
Get it on Google Play

Update to Cardboard Home

icon_fullresThanks to some suggestions from users on Reddit, I have just implemented several new features in Cardboard Home, and pushed the update to the Google Play Store. This new version includes some neat new features including a new volume adjustment panel, an option to disable the hardware volume buttons, a blacklist to force apps to not be shown, and a way to reset the view rotation.

I’m always happy to hear more feature requests, so go ahead and leave them in the comments!

First release of Cardboard Home

icon_fullresI just finished up the last few basic features of Cardboard Home, and have now made it available for download on the Google Play Store. I had been having some trouble getting the gyroscopic head tracking and magnetic “button” to work because my phone didn’t have the hardware to support those features so I was just blindly guessing at what was going wrong, but this last Friday, I received my new phone, the OnePlus One, which supports all of these features and more. Since then, I’ve gotten these features working, pushed the changes to Github, and published Cardboard Home on the Play Store.

One addition to Cardboard Home that was particularly interesting to design was the voice recognition. With the pro version of Cardboard Home, a user can speak to the app to launch apps. The format for this follows something like this:

         "Okay cardboard"
       /        |          \
  "open"   "preferences"   "exit"
"launch"    "settings"     "close"
  "play"    "options"      "quit"
 "start"        |          "stop"
 "begin"   open settings     |
    |                        |
    |                      exit app
    "app name" -> launch app

When a command is recognized, the phone will vibrate to immediately acknowledge, and then will follow the request.
I still haven’t gotten to see if my implementation of the NFC launching system works, as I haven’t yet gotten any programmable NFC chips.

Get it on Google Play

OnePlus One stop motion unboxing video

OnePlusYesterday, I received my new phone, the rare OnePlus One! I ended up buying an invite to purchase this phone off of eBay (regretfully, as I was offered one for free only a day later). So far, I have greatly enjoyed this new phone, and the physical size, which I had originally questioned, has turned out to be quite nice. When I received my phone, I decided to do a stop motion unboxing video of its first exit from the shipping materials.



Now that I have this phone, I have been able to get head tracking and the magnetic “button” working on Cardboard Home.

Photos from trip up north

Cardboard Home

icon_fullresRecently, I started work on a new app for Android called Cardboard Home. Cardboard Home is an Android launcher designed for use with the Google Cardboard virtual reality headset. Cardboard Home is intended to replace a regular launcher when the user places their device inside a Google Cardboard viewer. Unlike a regular launcher, Cardboard Home uses side by side 3D to display a launcher interface that is useable while inside Google Cardboard. It may be a while before Cardboard Home hits the Play Store though, as I can’t get the gyroscope, magnetic buttons, and NFC to work properly because I don’t have a device to test those features with. Hopefully, I will be receiving my Oneplus One later this week, which will allow me to get these features working quickly.

Cardboard Home is open source software, hosted on Github, under the GPL v2 license

Releasing Space Zombies for Android

LogoSpace Zombies, originally a game I designed in Java for computers, has finally been released on mobile. I originally started work on porting Space Zombies to Android using Java and the built in canvas renderer, but found that was too unreliable on anything but the best phones, so I started work on rewriting Space Zombies in C# for Unity3D. This process took a while, as I had never written a 2D game using the Unity engine before, but after a few setbacks, I got Space Zombies in Unity on par with my original Space Zombies for computers. I also added support for Google Play Games with achievements and global leaderboards. Below is a link to download Space Zombies from the Google Play Store.


Get it on Google Play

New app, Sole Champion, is on the Google Play Store

GameLogo512My first Android app, Sole Champion, is now available for download on the Google Play Store. Sole Champion is an augmented reality game that allows the player to take the action into their world, and play the game on their kitchen table, a desk, or even, given large enough AR cards, the roof of a building. The objective of the game is to knock your opponents off the edge of the playing field and be the last one standing. You can either conquer computer enemies or play against your friends to become the sole champion.




Get it on Google Play