Scott Hanselman

The Best Controller for FPS - A SpaceTec SpaceOrb 360 Controller working with Windows 7 using Arduino and OrbShield

September 20, '10 Comments [13] Posted in Hardware | Open Source
Sponsored By

spaceorb

Let me tell you a story, Dear Reader.

15 years later and I'm still convinced that the SpaceOrb 360 is THE GREATEST GAME CONTROLER OF ALL TIME. See what I did with the all cap there? It's the G.O.A.T. and it's a tragedy that it lost the battle to "WASD" keyboard and mouse gaming and the "two thumbs" style of controller.

If you've ever tried a SpaceOrb, you probably already know this. If you didn't live through the SpaceOrb's hayday (around 1994-5 with the original Quake, and Descent, truly one of the greatest games ever) then this post will sound like I'm a crotchety old dude trying desperately to relive my the golden hour of my youth. Ok, so you got me. What of it? ;)

I've always loved this controller and I've kept mine in my pile of technocrap, even after I held my legendary "box of technocrap auction" in 2007. I couldn't let it go. Much like a beloved, but passed-on pet that an owner keeps frozen hoping that far-future technology will help them unfreeze and cure (too much? Ya, I thought so too) I've kept my SpaceOrb frozen in Amber waiting for a day, decades hence, when I might bring it back to life and back to its former glory.

I hooked it up several times over the last few years and made various attempts to decode the serial output, first without the spec, then later with a leaked? copy of the serial spec. Ultimately my lack of deep knowledge of driver code was my undoing.

Here's the END of the story, as a Video.

And here's the beginning. Llast week, in a random moment of Googlebinging, I found this site with the title: The ultimate orb solution, at last. 

Oh, my. It was hardcore, insane, and deeply awesome. Here's the scoop.

SpaceOrb 360

SpaceOrb 6 AxisIt's brilliant in it's simplicity. It's a rubber ball on a stalk that you can push or turn in any direction. It's 6 complete axes of motion. Think about all the trouble newbies have learning how to move a person around a First Person Shooter (FPS) with a mouse and keyboard or with a two-stick controller. It takes a while, and for many new folks (your spouse, your mom) they just give it up and think you're nuts.

Now, with the SpaceOrb, imagine the ball is your head. You just turn it to look left. Push it forward to move forward. Even new users can look down left, turn and strafe all at the same time because they just turn, push and twist the ball.

The SpaceOrb 360 is truly the Betamax of controllers. Technically superior in every way, but just didn't happen.

The Hardcore Fans and the Death of Awesome

As a controller, there are advanced versions that are you used for 3D modeling, but as  game controller it just never happened. (Damn you, WASD!) However, a website called Birdman's Lair kept the hacks and tweaks and tricks alive for a decade. You could find joystick.cfg files for Counter Strike and all sorts of hacks, partial drivers and general trouble. None of it ever rocked and none of it was a perfect solution.

Fast forward a few years and USB happened. More and more computers had USB and fewer and fewer had serial ports. You see, the SpaceOrb is 9-pin RS-232. It's a serial device. A few Serial to USB adapters were attempted, but those adapters just make virtual serial ports. As Windows 95 and XP gained prominence, fewer games even looked for serial points. DirectX (DirectInput, actually) was the final nail in the SpaceOrb coffin.

VPutz, CountryAtHeart and JayCrowe

Way over here in the Deep Web (well, not that deep, but obscure, surely) Vic Putz made a post in January of 2009. He'd previously written a HID (Hardware Input Device) driver called hidsporb. He never liked that driver. Here's his own words:

You see, I really was never satisfied with hidsporb as a Windows HID driver for a number of reasons. The enumeration of serial ports took time, and as legacy serial ports dropped from modern motherboards it became trickier and trickier to use. But it's punishing working on Windows drivers, and Vista is even moreso, since I hear it doesn't even allow unsigned hobby drivers.

Windows surely isn't exactly a playground for hobbyists who write device drivers. As a guy who runs Windows 7 x64, I can tell you this is true. Plus, as he points out, who has a serial port any  way?

He posted this. I must also say +1 Charisma for the Alka Seltzer container.

Sorry to be so dramatic, but I've dreamed of this for a long time and finally had the convergence of resources, time, and irritation to do it. You want a driver? I got your driver RIGHT HERE:

orb_board

While he prototypes the thing extremely quickly (he's apparently obsessed, and obsession makes good design, I always say) over the next few months Vic and friends revise and experiment with this beast. They swap PDFs of board layouts, parts and code. Folks create their own boards and eventually Vic gets Seeed Depot to offer an OrbSheild for $25. It's a kit that makes the board that is needed for this project.

Let me back up.

The Solution

What Vic has done is effectively created a device driver in hardware. Remember earlier all that stuff about how COM Ports went away and USB ports came into ubiquity? Well, an important point is that the concepts of the standard USB keyboard and mouse and "HID" (Hardware Input Device) in Windows also happened. You plug a keyboard, mouse, or device that is effectively both into your Windows machine and it just works!

What Vic's done here is created USB Hardware Input Device that is recognized by Windows with no 3rd part drivers needed. This device can be a keyboard and mouse (or a joystick). Rather than creating game specific and often very complex mapping files to get your games to work with exotic hardware like the SpaceOrb, you make your changes as little Arduino programs and upload them directly the adapter.  It's a bridge between an old serial port device and the USB standard HID stuff.

The main Arduino board is doing the work of translating the serial input through Vic's code into standard USB joystick motions, or standard mouse and keyboard actions. Magical. More on this later.

Building The OrbShield Hardware

It's so easy to make a 4 year old could do it. Ok, he couldn't, but he did stick around while daddy did the soldering. I ordered an OrbShield 1.0 Kit and an Arduino Duemilanove with ATMega328 (I didn't use Netduino because all the code for this project is in Arduino C, if you're curious).

I received the package a week later looking like this. The Arduino board is on the left and fully assembled. The daughter-board or "shield" is all the other parts. Vic has an extremely helpful tutorial on how to build an OrbShield up on SourceForge, and honestly, if he hadn't taken all the photos and done such a great job, I'd probably not have succeeded.

The OrbShield parts, unassembled

After relearning how to solder, I ended up with this sad backside of the board. Hey, first time in years, so I say I did OK. ;)

Many soldering joints on the back of the OrbSheild The assembled OrbShield and Arduino

I snapped them together (plus an added piece of cardboard to keep my too-long resistors from shorting out against the top of the Arduino's USB ports) and took over to the PC.

Building and Downloading the OrbShield Arduino Software

This was the only part that was a little confusing, as the tutorial assumes a little more knowledge of where stuff goes with the Arduino than I had, which was zero.

Here's the process:

Run the Arduino software, set your COM Ports and Chip Type.

There's two "sketches" that you'll care about. BasicJoystick and WASD. BasicJoystick makes the SpaceOrb look like a Joystick. WASD does the hard work of mapping your SpaceOrb to the WASD keys plus a mouse.

Here's the software. You'll click Upload after you make any changes you might want to. Yes, it's "C" Code, but don't be afraid, think of it as a configuration file for your SpaceOrb.

There are two USB connectors on the final hardware solution, one to talk to the Arduino for uploading code, and the one as part of the daughterboard that does the actual communicating with the SpaceOrb.

The process is this:

  • Set both the DIP switches to off.
  • Plug the Arduino's USB into your computer.
  • Upload code.
  • Unplug the Arduino's USB.
  • Set the #1 DIP to on.
  • Plug the OrbShield's USB (the daughterboard) into your computer.
  • Repeat if you want to make changes or switch modes.

Here's the Arduino environment:

Arduino 0019 Software

Here's the code for Basic Joystick, as an example:

#include "orb_device.h"
#include "orb_translator.h"
#include "hid_keys.h"
#include "chart_4.h"

//change value below to SpaceOrb360, SpaceBall4000, or SpaceBall5000
Logical_orb orb_buffer( SpaceOrb360 );
Orb_translator translator;

void setup()
{
Serial.begin( 9600 );

translator.default_setup(orb_buffer.orb_type);
}

void loop()
{
orbduino_checkinit( orb_buffer, translator, orb_device );
orbduino_translate( orb_buffer, translator, orb_device );
}

Not too hard! He's hidden all the hard stuff and you just call his functions. I didn't make ANY changes to Basic Joystick to get it too work, and only minimal ones to make "WASD" work nicely.

Here's the SpaceOrb as viewed from Windows 7 x64:

Game Controllers

And the Test Page. He uses "chording" which means all 16 buttons work if you press different combinations of buttons.

 SpaceorbSpaceball properties 

This is the joystick, config, but I ended up using the WASD+Mouse configuration as it "just works" in most games, including my test game, Half-Life 2. When you're using the WASD configuration, you can literally use the SpaceOrb as just another mouse. Watch in my video above at the end where I actually move windows around the screen with only the SpaceOrb.

It was SUCH a rush to get this working. Even though all I did was effectively assemble all this from a kit and great instructions, the feeling of accomplishment in bringing this dead (I thought) piece of hardware back to life was SO satisfying. This experience has made me want to dig back into electrical engineering, a topic I glossed over in college, so that I might better understand how these solutions are conceived and created.

Get the SpaceOrb in your life

If you think this is as awesome as I do, donate to Vic's project, as I did, on SourceForge. Get an OrbShield 1.0 Kit and an Arduino Duemilanove with ATMega328 and go find a SpaceOrb wherever you can! Enjoy, and thanks to Vic and the folks at the SpaceOrb boards for this wonderful solution.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. I am a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by ORCS Web
Monday, September 20, 2010 11:20:12 AM UTC
Amazing piece of hardware hacking!

I have never been a fan of FPS, I am more space shooting/some odd racing game. And I found some neat Microsoft gamepad a long long time ago... The Sidewinder Freestyle (if I remember its name correctly). It had gyroscopic 3D controls and throttle contro. It was perfect for space and flight simulators, and fantastic at racing games. Sadly, it broke (some hardware failure after two-three years) and I have never found a decent replacement (and I have mostly stopped playing, anyway).

Kudos for having the controller you love with you still!

Cheers, Ruben
Monday, September 20, 2010 1:15:39 PM UTC
Nice article.

How does the Orb compare to the standard 360 controller? And the crunch question, how does it compare to a mouse? I find FPS games using joystick style controllers very difficult to aim precisely (movement speed and twitch reactions are hard to master) whereas with the mouse it's naturally very easy.

It tends to be that controllers that have origin points are good for platform games featuring character control, and racing games, etc. Whereas free-floating controllers (mice) are great for pointing at things, ie, FPS and RTS.

You should make that into a .NET Micro Framework demonstration or something :-)
Monday, September 20, 2010 1:49:46 PM UTC
I still have my Space Orb 360 and agree, this was one of the best controllers every created. Hats off to these guys for getting it working again in modern gaming!
Monday, September 20, 2010 2:42:21 PM UTC
I have nearly every gaming device there is, but the best ever was the Panther XL. Nothing beats a billiard-ball-sized trackball for aiming (twist-handles aren't very precise). Putting it next to a joystick with two hat switches, nine other buttons, and a throttle was genius (despite durability issues). Of course, the Microsoft marketing machine rolled right over it…

Anyway, it'd be cool to resurrect the Panther XL with Arduino. Particularly if a controller could be made for consoles as well.
Monday, September 20, 2010 5:22:25 PM UTC
Much love for the Descent mention!!
Tuesday, September 21, 2010 7:06:55 AM UTC
This is a test.
Wednesday, September 22, 2010 5:30:45 AM UTC
This is another test... if non-ScottHa comments show up.
MC
Wednesday, September 22, 2010 5:31:04 AM UTC
Yes!!!
MC
Wednesday, September 22, 2010 2:28:39 PM UTC
Oh, so comments are working again? Good thing I saved the text to the comment I wrote Monday...

SpaceOrb 360 may be the best controller ever invented. However, it still won't beat the keyboard and mouse for FPS gaming.

Here's why:

1. The major advantage of having both a keyboard and mouse is a separation of responsibilities. Both the keyboard and mouse have support for switching weapons. The keyboard is used for movement in all 3 axes. The mouse is used to control where you're looking.... and more importantly, where you're shooting.

This also applies to dual analog sticks. One is used for movement, the other for aiming.

2. There is also the assumption that the WASD keyboard control is the important factor in this equation. It isn't, the important one of keyboard + mouse is the mouse.

It's not a coincidence that FPS computer games lost auto-aiming and aim assistance when the mouse was added to the default control scheme. It's simply unnecessary now, due to the mouse's precision.

The mouse is considerable more precise than your typical analog stick. It's one of the reasons that PC gamers do considerably better than gamepad gamers.

Don't take my word for it, though... take Rahul Sood, CTO of HP's VoodooPC business unit's word. He wrote an article about an experiment performed by Microsoft that pitted mouse+keyboard players on PC versus Xbox 360 players using the 360's controller.

The PC gamers consistently wiped the floor with the 360 gamers. Thus, Microsoft never implemented cross-platform play between Windows and the Xbox 360.
Thursday, September 23, 2010 2:00:15 AM UTC
Windows surely isn't exactly a playground for hobbyists who write device drivers. As a guy who runs Windows 7 x64, I can tell you this is true.


It is unnecessarily difficult to get even signed device drivers to run in Windows 7 x64. There's no definitive guide or cookbook for "Here's how to sign a driver". Adding to this misery is the misinformation about what certificate authorities sign kernel mode drivers. While I don't disagree that code signing is a bad thing, why is it:
1) so difficult to get a driver signed in the first place?
2) so expensive to get a certificate?

The answers are self evident as "if it easier and cheaper than anyone could do it". But, there are small shops who need to release signed drivers, and there seems to be an unnecessary hurdle to doing so. But, as to expense -- web site certificates aren't nearly as expensive as code signing certificates.

I know this is off topic from the post, but this is the thing that really struck a nerve with me. I do think Vic did a great job, and I love the "embedded driver" approach.
Monday, September 27, 2010 2:24:41 AM UTC
is liked thanks usefull
Friday, October 01, 2010 4:47:57 PM UTC
I haven't tried this controller out so I'll have to if I find one out there.

That being said I'm 33 and have been gaming since the DOS 3.3 days when my friends and I would lug our 486's to each others houses to network them via Coax. :) So, I've been around the block when it comes to trying out different controllers.

I have 3 kids 6 and under, so that means I have a Wii. Also, on a single income (my wife is a stay at home mom) with 3 kids my computer has been my only gaming platform for the last few years.

Since I'm a gamer I had to get a real game for the Wii. I've played Metroid since it came out on the original 8-bit Nintendo. So I picked up the Metroid Prime Trilogy. This is definitely a must if you own a Wii. The best installment of the series I have ever played. If you're not a Metroid fan yet, but you have a Wii, then you have to get it just to give your Wii some playing chops for the big boys.

I have to say that using the Wii remote and the nunchuck combination on the Wii is by far the best controller setup I have ever used for 1st person shooter games. Again, I haven't tried the SpaceOrb so I won't compare it to that.

Why do I love the Wii remote + nunchuck option? The nunchuck has the little variable joystick which you use for your movement: forward, backward and strafing. The myriad of buttons on both controllers handle all your other standard functions. Nothing earth shattering yet. The coolest part is I actually "aim" with the remote. Wherever I am pointing at the screen my gun is aiming. It is the most natural setup I've ever used and I was gaming like a pro in 5 minutes. I was strafing and turning backwards while jumping and doing head shots without difficulty. Using the XBOX controller (which was my first 1st person controller for a "game pad") took forever to get used to. When you're used to a mouse for targeting and I have full range of the mouse pad, or trackball, trying to aim with a little finger joystick just doesn't have the intuitive sensitivity one needs. Sure, there are some awesome Xbox players out there but it does take a lot of practice. I felt like the Wii was literally fire and forget. It just makes sense.

I know I'll get flamed because the Wii isn't a "gamer's" platform, but if you have the chance to try a real 1st person shooter, like Metroid Prime Trilogy, on the Wii test it out. I hope this is where the PS Move will go with gaming. I'm not sure how Microsoft's Kinect would mimic this sort of thing.
Friday, October 01, 2010 7:20:55 PM UTC
Matt - Interesting. I've TRIED and TRIED to be awesome at 1st person shooters on Wii (both Metroid and Resident Evil 4) and I found that because you have to "oversteer" with the pointer to get your character to turn, that it feels less precise. I end up pointing too far, then overcompensating, particularly in Metroid. But, each to his own! :)
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.