Controllershell

You've forgotten what you're missing

I missed it. I needed it. I ran down to my basement, digging through old boxes until - at last! I found it! My old Nintendo 64. I hadn't plugged the thing in since high school, but I dusted it off, plugged it in, flipped the power button and... nothing. Needless to say my girlfriend, who had been hankering for Zelda for the past several days was devastated. I knew this couldn't be the end - and I knew that N64 emulators existed. I also had an old Windows box lying around, plugged into my television. I grabbed a May Flash N64 Controller from Amazon, and tested it out Zelda through a N64 Emulator, and to my surprise everything worked beautifully! But wouldn't it be nice if I could power on my box and navigate through my games (in ROM form) without having to touch a keyboard and mouse? This is the need from which Controllershell was born.

The solution

I launched Sublime Text, planning to build this application in Nimrod, but the SDL2 wrapper's support for "joysticks" (SDL's catch all term for game pads) seemed incomplete. So I launched Visual Studio and started coding away in C++.

I won't go into the nitty gritty details of exactly how it's implemented, since it's actually a fairly trivial application, but I invite you to clone it locally from the github repository, and take a peek! Pull requests are definitely welcome!

Technologies used

  • Visual Studio (on Windows), Xcode (on OSX)
  • C++ (11)
  • SDL2
  • INIReader

The final product

Nintendo 64 mode

How to get it set up for yourself

I essentially told Windows to launch controllershell.exe rather than explorer.exe; You can do that by modifying

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\Shell

From there you just need to configure controllershell via it's ini file, which includes myriad customizability options, including which 'consoles' to display, the appearance of controllershell, and which gamepad button binding you need to hit to quit the emulator you're currently running.

Clone it on Github