Halos for Oculus Rift.

Screen Shot 2015-03-23 at 3.42.09 PM

Update: Now available on Android + iOS with Facebook leaderboard integration and accelerometer controls.

Halos for Oculus Rift DK2 – Download: Win64

The Plot

You are a rogue asteroid making your way to earth to inflict mass destruction on the planet you once loved, but the clever folks at NASA have set up an array of sparkly rings with electric particles. NASA has carefully calibrated halos (cheerios?) to completely disable your movement after 3 collisions.

Your job is to get to earth or reach a float overflow -whatever comes first. Don’t let the yellow planet down.

Okay, except I didn’t get time to make an asteroid, or earth, or integrate a story line in any meaningful way, but now you can imagine while you plummet towards nothingness.

TL;DR;

Halos is an infinite faller through rings. Highest score wins. It will probably make you nauseous.

I Can Make Video Games?

This is the first game I ever made. It’s written in the lovely Unity Game Engine and I have to say, while Halos is about as basic as it gets, it was easier than I thought to get reasonable graphics and gameplay in 3 days of dev.

Some Memorable Moments

  • When my character didn’t experience drag force and accelerated increasingly forever until float overflow. Nice. I ended up having to implement terminal velocity along with a lot of other airborne movement controls.
  • When my character skipped over the collision detection in the halos due to high velocity. I learned some graphics 101: objects can only move in discrete units bound by your frame rate. The typical pattern is to remember the last time you rendered a frame and then multiply the physics calculation by this delta to update an objects moving position. Except, if your object is moving at high speeds and your object passes your collision detector in between when a frame was rendered, you completely miss the collision. There’s a handful of approaches to solving this that are highly use case dependent. I ended up opting to increase the physics calculations (cpu hit), increasing the depth of my collision meshes (perf hit), and decreasing free fall speed (gameplay hit?).
  • Programming audio ease, pitch, and volume levels. To get that nice brisk wind sound as your velocity increases or to get that smooth calm breeziness when you sit on a platform in the middle of space. (It’s video games so solar wind makes sound in space.)
  • The GUI presents some pretty tough challenges for the Oculus. The best interaction I’ve seen thus far is simply casting a ray out from the center of your frame to an object and then showing a WiiU/Xbox Kinect like spinner as your option is confirmed. This is a little less than automatic at the moment so I opted for a basic push a key to start approach, but the whole orientation and on screen GUI confused me good, admittedly what is working now is not very sustainable nor ideal.

Results

I’m satisfied that with 3 long days of dev I was able to put out a basic game for the rift. I had originally planned to have the steering done entirely through the accelerometer of the Oculus, but was disappointed to learn that these APIs are only exposed in the native Oculus libs and to even be able to setup the interop to C# I’d have to pay for Unity Pro @ $75/month. As far as how interesting the game is, I’m not sure if the hard part is navigating through the halos or not getting nauseous. My current best is 3190 points followed by a 20 minute timeout. Play at your own risk ;)

If you’ve ever wanted to take a crack at game dev and shy’d away at the perceived complexity, give Unity a shot, it’s pretty straightforward and lots of fun.

Perhaps I will release a mobile version to crowd the app stores with another infinite scroller in the coming weeks.

Published by

John G.

A web developer and designer living in Vancouver, BC.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>