Xbox 360 Controller Mod
Impetus
If you look around the Internet you'll find more than a few articles on Xbox 360 Controller Modding. I'm not talking about decorative or LED mods, I'm talking about something that extends, ehnances, or changes the functionality of the controller in some way. Specifically, being able to modify controller input to the Xbox by manipulating the signals in some fashion. The most prevalent of which being the rapid fire mods - actually a little too prevalent in my opinion, but then again I only played through COD games for the compaign, never multiplayer. What I wanted to try were mods for Halo 2. I actually wanted to do this for the original Xbox in order to automate the double-shot or quad-shot glitch, but never got around to it. Why it gave me such an itch recently stemmed from a video I saw online:
What caught my eye was the use of the "Swordfly Glitch." I had heard of it, and even though I was such a rabid fan of the game, never looked into it. This was because I loved multiplayer, so my Xbox was updated and I really didn't feel there was any need to "unupdate" it just to check out a silly glitch. Fast forward a few years, and Halo 2 multiplayer is no longer, unfortunately. Also Xbox 360 is now the successor which can play the old Xbox games.
For some reason though, I could not play Halo 2 on my Xbox 360. Also had noticed the same with Halo 1. I had figured it was because there were scratches in the disc, and the DVD laser in the original Xbox was probably stronger whereas the one in the 360 was probably more finicky. So I tried to see if I could track down a used copy at a game store, none had it in. However Best Buy actually had three NEW copies in stock (as of June 2012, anyway). I went to the store thinking it might have been a computer error, and even the two employees who were looking it up and scavaging thought it might have been until I them myself along with the rest of the Xbox 360 games. Now if that isn't testiment to how amazing that game was, that it's still being sold almost eight years later, I don't know what is...
So when I put the brand new copy in my Xbox 360 and I got the same "game cannot be played" error, I was a bit shocked. Did Microsoft do something so that you could only purchase them through the online store in order to play them? Nope, not the conspiracy I thought it was. After some research, I ran across a forum thread talking about how the original Xbox 360 hard drive units have a hidden partition which has the emulator and all the data neeeded to play the original Xbox games (which is also why they only have 13+ Gigs free on a 20Gig drive). I had gone the hacker route and had hacked a laptop hard drive to work with the console, so of course it didn't have any of that, hence why none of the original games would work. For $20, no big loss, I can always use an extra copy for LAN multiplayer.
Now the trick is, with the Xbox 360, is to NOT download the update when it asks to do so when you load up the game. Doesn't matter if it signs you out now if you decline, obviously. If you have already played it and downloaded the update, there is an area in the settings where you can clear the HDD cache, I think it's something like "Reset drive settings" or something along those lines.
The first test was to actually do the glitch to make sure it even works on the Xbox 360 (not a lot of info out there confirming that), so I fired up split-screen multiplayer and started a game where I started with the energy sword. I aimed at the opposing player and started practicing. Surprisingly, it was easier to do than I thought it would be - I thought this was something that would take me weeks to master. I checked out the video on youtube of Scurty doing it with two hands to see what the timing was like, but I do the glitch using only one.
Using what I learned, along with the shortcuts I saw in the video, I played through campaign on Legendary (the only way to play, really). I figured out the intricacies of the "Sword Cancel" as well, which is mentioned briefly in the video but used constantly. You first get the enemy in range of attack, i.e., get the reticle to turn red. Then hit right-trigger (fire) and X (reload) at the same time (or X immediately following RT) and usually hit jump either immediately after or immediately before, timing and such depending upon where you want to land. If you don't jump, usually you smash into the enemy you're sword cancelling, though sometimes the force launches you almost straight up after hitting them - which also may be useful in some situations.
I have to say, it was like playing a whole new game. This breathed new life into the game - as much as I loved it and would play it at least a few times a year, I had kind of fallen into the "same do-this-than-that routine." It was so much fun and I was addicted to it, I must have played through campaign over 20 times, learning new tricks along the way each time. So now I really wanted to see if I could do a controller mod that would automate the sword fly with just the push of a button.
R and D
When it comes to microcontrollers, I have an affinity for the MicroChip PIC. I also enjoy programming it in assembly rather than C or whatnot. It's not only smaller and faster that way, but it just feels like the "right" way to do it...hard to explain...maybe because you have absolute control over every instruction cycle and can even use that to your advantage when timing things (as is the case in this project). Since I only needed 2 inputs and 3 outputs, I used an 8-pin PIC, in this case the 12F683, as it has EEPROM capability in case I wanted to actually save some sort of settings on the chip.
Found these ultra-helpful wiring diagrams for each of the controller types:
- Wireless (Early Version) Diagram
- Wireless (Late Version) Diagram
- Wired (Early Version) Diagram
- Wired (Late Version) Diagram
Schematic
Here is the schematic for the project.
Code
Here is the PIC assembler code for the project.
Future
This is a nice start, but my next goal will be to use a 20 pin PIC and interface it with 12 of the digital inputs (directional up, down, left, and right, X, Y, A, B, left-trigger, left-click, right-trigger, right-click). I also will be using a wireless instead of a wired controller next time. As well it will have 4 new input buttons added, and utilize the sync button input of the controller. The biggest difference, however, will be what I want to do with the code: I want to make it macro-capable, meaning I can record any button sequence and then store that sequence and timing, and then assign it to one of the four new buttons.