Every (other) Tuesday, Mike Sylvester brings you REVOLUTIONARY, a look at the wide world of Wii possibilities.
Some of you may have wanted to see the Wiimote and SIXAXIS dropped on an island with explosive collars around their necks, forced to fight a deathmatch, but Battle Royale this is not. Nintendo and Sony would happily accept you placing both consoles in your entertainment center, because they offer up different experiences. Getting a DVD player doesn't require the discontinuation of cable TV service, nor does it render your iPod obsolete. But they are similar in that they are gaming input devices, so there will naturally be some overlap in possible applications. It's for that reason we're interested in seeing which controller is better at what. So with no further ado: Round 2. Fight!
I was browsing through downloadable game demos looking for candidates to use in the test. Specifically, I was searching for a flight simulator to help determine which is the better motion-sensing controller for that type of game, when I came across the newly released Journeys of the Dragon Rider. It's a low-budget production; the antithesis of Lair, in all ways save for theme. I'd already thrown together a basic accelerometer-based mousing script for the SIXAXIS, and thought it would at least be good for a laugh to try the game out with that. With no tailoring at all, I found out that it worked, and worked well.
I went back and adjusted with the sensitivity to make the dragon respond to more subtle movements, then I added in game-specific controls and threw in a few extra lines of code for Wiimote compatibility, and commenced with the comparison.
Z = Sixaxis.L1 or Wiimote.Left //Slow down
X = Sixaxis.R1 or Wiimote.Right //Speed up
Escape = Any.Select
Enter = Any.Start
Mouse.LeftButton = Sixaxis.R2 or Wiimote.Two //Fireball
Mouse.RightButton = Sixaxis.L2 or Wiimote.One //Increase altitude
//Set initial coordinates for mouse cursor to center of screen
mouse.CursorPosX = (screen.Width/2)
mouse.CursorPosY = (screen.Height/2)
var.init = True
//Assign dimensions to contain mouse movement within
var.MinXRes = -Screen.Width
var.MaxXRes = Screen.Width
var.MinYRes = -Screen.Height
var.MaxYRes = Screen.Height
//If no Wii Remote inputs are returned, the SIXAXIS will move the mouse pointer
If Wiimote.Pitch > .1 or < -.1
FakeMouse.DirectInputX = smooth(MapRange(Wiimote.SmoothPitch,-360,360,var.MinXRes,var.MaxXRes))
FakeMouse.DirectInputY = smooth(MapRange(Wiimote.SmoothRoll,-360,360,var.MinYRes,var.MaxYRes))
FakeMouse.DirectInputX = smooth(MapRange(Sixaxis.SmoothRoll,-360,360,var.MinXRes,var.MaxXRes))
FakeMouse.DirectInputY = smooth(MapRange(Sixaxis.SmoothPitch,360,-360,var.MinYRes,var.MaxYRes))
Shift + P + I + E = Any.Home //stop script
It would seem that I've done in a weekend what a big-budgeted team couldn't achieve with more than a year's development time. It's is possible to ride a dragon into battle with a SIXAXIS as your virtual reigns. And it's just as easy with a Wii Remote! Perhaps Factor 5 will map some of those waggle-triggered controls to the abundance of buttons on the SIXAXIS and leave the motion controls to just steering the beast the next time they revisit this new IP.
Neither controller exhibited a clear advantage in the way its accelerometer processed my movements, however, this comparison has made apparent to me an issue that I may have overlooked in the past. Brief losses of connection or a hiccup in the communication between the Wii Remote and my Bluetooth adapter seems to be causing some erratic behavior, which is evidenced by the camera view going wonky at times. It may look like I intentionally added the frame stutters in the video to coincide with the beat of the music, but that's actually the Bluetooth communication glitch throwing my view around. Being that the SIXAXIS is (in this instance) connected and transmitting data via USB, it doesn't exhibit such behavior, and it's all the more unsettling to know that the Bluetooth chip in my USB adapter is the same model incorporated in Wii consoles. It should be noted that Windows drivers or any number of other things could be the cause of the communication hiccups, and if it is indeed a hardware problem, the SIXAXIS may not be immune to it, being that the preferred connection for that controller is also Bluetooth wireless.
Finding no palpable difference between the motion-sensing capabilities of the two controllers' accelerometers, I decided to pit the Yaw-sensing gyro of the SIXAXIS against the IR sensor of the Wii Remote. Both features are exclusive to their respective controller, potentially giving unique advantages in particular circumstances.
I wanted to focus strictly on X-axis movement, the specialty of the SIXAXIS gyro, so I went searching for a Space Invaders or Breakout clone to play. I found several different ones, which were fun and varied takes on the Space Invaders and Breakout formulas, but I couldn't suppress my desire to show something visually arresting, and none of those clones qualified. I really wanted something colorful and rich in pixel shader goodness like Plasma Pong, so after finding nothing suitable that controlled on the X-axis, I pivoted my monitor and video camera 90° clockwise and swapped around the axis controls in my scripts. I wanted Plasma Pong, so I got Plasma Pong.
//Get initial Gyro value
var.SRGi = Sixaxis.RawGyro
var.init = True
//Move mouse horizontally on 90-degree pivoted screen using SIXAXIS gyro
If Mouse.DirectInputY > (Mouse.DirectInputY - (var.SRGi+15))
Mouse.DirectInputY = (Mouse.DirectInputY + (Sixaxis.RawGyro -var.SRGi))
Mouse.DirectInputY = Mouse.DirectInputY
//Move mouse vertically on 90-degree pivoted screen using SIXAXIS accelerometer
Mouse.CursorPosX = MapRange(Sixaxis.SmoothPitch, 50,-40, 0,Screen.Width)
Mouse.LeftButton = Sixaxis.R2
Mouse.RightButton = Sixaxis.L2
Shift + P + I + E = Any.Home //Stop script running
Being that the hardware used for these controls is completely different in the respective controllers, I made separate scripts for the SIXAXIS gyro and the Wiimote IR sensor. The Wiimote script is a slightly modified version of Carl Kenner's IR mouse script included in the GlovePIE .30 download.
var.ButtonFreezeTime = 250ms
var.PointerBump = KeepDown(Pressed(wiimote.A),var.ButtonFreezeTime) or KeepDown(Pressed(wiimote.B),var.ButtonFreezeTime)
Wiimote.Led1 = True
Mouse.X = MapRange(Wiimote.PointerY, 0,1, -1,1)
Mouse.Y = MapRange(Wiimote.PointerX, 1,0, -1,1)
// Mouse Buttons
mouse.LeftButton = Wiimote.B and KeepDown(Wiimote.PointerVisible,0.5s)
mouse.RightButton = Wiimote.A and KeepDown(Wiimote.PointerVisible,0.5s)
Shift + P + I + E = Any.Home //Stop script running
Scripting and testing the mouse controls with yaw made me realize that the SIXAXIS gyro could conceivably be used in conjunction with the accelerometer to control an on-screen pointer, like in many Wii games. My script was far from perfect in that application, but it was good enough to play Plasma Pong with and could likely be refined to a state surpassing the purely accelerometer-based mousing scripts written for the Wiimote. It's a shame, though, that the SIXAXIS has no functional equivalent to the yaw gyro on its Z-axis, which could be used to control a pointer on the screen's Y-axis. The inherent inertial effects of movement on the SIXAXIS give it a feel that's closer to a trackball or traditional ball mouse than the Wiimote's usual proportional pointing. But unlike a trackball or mouse, there's no way to instantly "stop the ball rolling," as you can with those devices.
The Wii Remote's IR sensor and accelerometer allows for more precise control than is possible with the gyro and accelerometer of the SIXAXIS. But that's not to say that the SIXAXIS is "garbage." I was pleasantly surprised by the performance of the SIXAXIS in the games and applications I tested, many of which were not shown here. These two controllers are designed to appeal to different demographics, and function differently in games, but the flexibility and upgradeability of this generation's controllers means they can be adapted to incorporate new features.
The SIXAXIS doesn't ship with an IR sensor, but its mini-USB port is in the ideal location for such an add-on to be attached, and an infrared emitting "sensor bar" could be powered by a USB port on the PS3 console. Likewise, a shell, housing gyros for inertial sensing, could slip over the Wiimote and plug into its expansion port, giving it the functionality of a SIXAXIS.
"But, don't add-ons not sell all that well?" Typically, no, but then multimedia-focused consoles hadn't sold well, either ... until this generation. If the Wii's success has taught us anything, it's that consumer tastes change. Five years ago, it would have been considered a ridiculous notion to ask gamers to pay to drive cars which could otherwise be unlocked through the course of gameplay. And before the Wii, there was no market for performance-hindering cosmetic controller adornments.
Perhaps if the Playstation Eye were to make its way into enough homes, it could be used to detect programmed flickering light patterns of the LEDs on the front of SIXAXIS controllers, and essentially turn the controller into a moving Sensor Bar and the PS3 into a stationary visible-light sensor; a reversed Wiimote + Sensor Bar sort of setup.
In summation, there's great "next gen" technology in both the SIXAXIS and the Wii Remote, but it exists for naught if the developers don't challenge themselves and take chances on creating unique ways to use them. The dread we have of waggle-laden minigame collections on our Wiis could just as easily translate to botched epic waggle-fests on the PS3.
If Round 2 has not sated your bloodlust, I'm still open to suggestions for more games to match these controllers against each other. Just don't suggest wipEout XL. I scripted for and played that game to death already (off camera) and one SIXAXIS died as a result (of my frustration).