I'm not much of a modern day PC game person. I prefer classic arcade games due to their short but sweet gameplay. Why is that? Because in my youth, I spent WAY too many hours camped out in front of my Apple IIe, playing text adventures, Bard's Tale, and numerous other games that took hours, days, if not weeks of investment.
One of the games I was a slave to was Elite; a space trader / adventure game. I was fascinated by its 3D game play and its AI combat tactics (hey, this was a big thing back in the early 80's).
I stumbled across an Apple IIe emulator a few years ago, and like anyone who grew up in the early 80's with a "home computer", I had a great deal of nostalgia for those early computer days (before MicroSoft). And part of the nostalgia was those basic, but addictively fun computer games.
Elite is one of those such games. As it turns out, Elite has an enormous cult following, as it was a game that was ported to many home computer and console systems. I decided that I, too, would like to enjoy the game of my youth, but in arcade form.
My first idea was to get an old Apple II to use as my Elite engine, but I ran into various problems there. The Apple IIe was too slow, as I used to play the game on an Apple IIgs. On the Apple IIgs, the game was fast enough, but unfortunately there was a slight bug in the video of that system that would not clear the screen after a ship was destroyed (easily remedied by toggling the view, but not something I'd expect the casual player to understand). The Laser 128 was basically a souped up Apple IIe, so I decided to go that route. I would hardwire the controls like a flight controller and have dedicated buttons for everything. Then I remembered how clunky the trading screen was, and I started looking for alternatives again.
Turns out that many developers, also infatuated with Elite, decided to take a crack at making their own versions. I finally found a version of Elite source code that I could modify to make a custom version that would fit my arcade-version plans.
What were my arcade-version plans? Well, one of the inspiring factors behind this project was that I had a spare Cruis'n USA cabinet. Looking at it, I thought it would be a natural fit for a cockpit game. Elite is a space game, but the game plays like a flight simulator, as there are around 20 unique buttons that are used during game play! Also, Elite is not a five minute game; it takes days of investment to work your way up to "Elite" status. No one wants to be standing for hours to play a game, so the Cruis'n USA cabinet seemed like a perfit fit for a prolonged gaming experience.
Now that I had decided on the cabinet, I went to work on reducing the amount of controls necessary to play the game so that they could be incorporated with arcade-like controls instead of a keyboard. I modified the software, remapping controls where I could to eliminate redundancy, and removed the dependency on the keyboard. I also changed the code I found to play more like the Apple IIe version, and customized the software to be less PC game like and more arcade game like.
After that, I went to work on interfacing a flight controller. I decided to use an old Star Wars controller. But how would I hook it up to the PC? Well, I found a solution online of someone that did that very thing: Jude's Star Wars controller hack. This was extremely useful. While I was like "this should be easy", having never dealt with a PC joystick before, I actually had quite a bit of trouble getting this to work and incorporating the joystick routines into my program. After I figured out that you had to configure and calibrate the joystick in Windows 98 first, I finally got my program to recognize the joystick. After that, it took painful hours to get the home-made controller calibrated just right with the software.
To deal with the other 20+ controls, I didn't want the user to have to use a keyboard (though I had considered at one point having a motorized retractable keyboard tray that would deploy when needed). Instead, I used a popular solution by MAME users everywhere: the I-PAC. Basically, this will map all my arcade button/switches to keyboard inputs. I got the I-PAC2 at Ultimarc.
Another thing I wanted was to make the controls for the game "user friendly". If I just put 20+ buttons on a control panel, people playing it that weren't familiar with the rules (or hadn't read the manual) would not know what buttons to press or when to press them (imagine if you had to try to play a new flight simulator for the first time; that is not something that someone picks up quickly). So my goal was to add lighting to the buttons so that buttons could flash, indicate status, or be lit up if they were usable. Buttons not usable during a certain scenario would not be lit. Just lighting the buttons that you were limited to would make the game less confusing, thus easier to learn. For example, the Energy Bomb button would only be lit if the player HAD an energy bomb, and was in flight.
The idea was to build a device that could control the button lights using the parallel port. A parallel port has an 8-bit data bus, so I could control eight individual circuits directly if I just used the data bits. Unfortunately, I needed to control three times that. The device would be used primarily to control incandescent lights, but should also be able to control other circuits. Finally, after much searching, I found a very simple solution that was exactly what I was looking for. I still can't believe how hard it was to find this information in the first place. I finally found the circuit I was looking for at Computer Christmas. The Parallel port controller box circuit controls 320 discrete circuits, which was overkill for what I needed, so I simply scaled down the circuit to be four banks instead, allowing me to drive 32 lights/circuits.
I laid out my control panel on paper, taking the size of the yoke into account. I purchased lighted buttons from Happ Controls and build a prototype of the control panel using plywood. I used this prototype to make sure I liked the button layout and to ensure there was enough clearance for the yoke controller and button arrangement.
A friend of mine has metal working tools and was able to fashion a replacement Cruis'n USA control panel. With his help, I punched out all the necessary holes (and unfortunately, some unnecessary holes, which then needed patched). I then had an autobody friend of his prime and finish the piece.
For the marquee, I found the Elite logo online, touched it up and resized it for my needs. Using Paint Shop Pro, I created a background with a star field, dropped some text on it, added the logo, and printed it out on my Epson 1280 inkjet photo printer.
The Cruis'n USA cabinet sideart needed to be covered (mine was pretty messed up anyway) so I used some black vinyl that I had left over from a Dragon's Lair restoration.
For a monitor, I chose a new 27" flat screen monitor that supported a set of standard computer resolutions. I decided to go with the 27" flat screen versus using a standard 25" arcade monitor with an Arcade VGA card because the flatness gave the game more of a "windshield" view. I needed to drill new mounts for the monitor, but otherwise the 27" monitor squeezed in just perfectly.
The driving foot pedals are used to control the speed of the ship. However, in foot pedal inputs for Cruis'n USA are analog, unlike the speed controls for Elite. So I added leaf switches to the pedals so that the switches close when the pedals are pressed.
Another problem to deal with was this: how do I upgrade/change the software if I find a bug? I don't want to sit at the machine to modify the code, and I don't want to burn a CD or write a disc each time I need to make a change. The solution was to use the USB port. However, the computer I was using was Windows 98, and this solution alone would still required keyboard intervention to install the software.
I ended up finding the solution I was looking for in a tool called Autorun. It allows you to autorun software from a USB thumb drive (similar to how CDROMs autorun when you insert them into a computer). I set up my development area on my laptop and configured it so that my software builds are deployed to my USB drive. Then, by simplying inserting the drive into a USB extender cable that I have exposed on the game, a script is run that deploys the new software to the computer and restarts the game!
I set up a hidden service switch that provides me access to an additional menu for configuration, test, and maintenance.
One of the MOST difficult, if you can believe it, was creating a lighted button solution for the front of the Star Wars controller. There is only about 1/2" of clearance, and standard lighted buttons are like 2" deep. However, I wanted the buttons to have a consistent look and feel. So I built a modified button.
Not much clearance...
This certainly won't work...
That's much better
Tensioned rubber bands act as the spring, an LED is fed through the center.
Not looking forward to replacing that rubberband in 10 years...
To make a long story short, I punched a hole in the center of the front of the yoke cover. Then I cut the head off a regular lighted button and screwed it to the yoke cover. Using a rubber band as the spring, an LED for the light, a leaf switch for the switch, and a pseudo-e-ring to lock the button in place, I was able to build a button that met my requirements.
Here's some pictures of the completed project.