Monthly Archives: April 2012

The Great Soul-Searching Odyssey, Part II

When I was much younger, I received Mike Tyson’s Punch-Out as a birthday present. (It was the same year I got a brand new bike, and I’m sad to say I spent more time with the former than the latter.) My dad read me the manual, and I ran into the other room, glued my nose to the TV screen, and pummeled my way through a whole list of crazy characters as the scrappy—and thoroughly under-sized—Little Mac.

The funny thing about that experience, though, was that no matter how much I squinted and stared, I couldn’t see to play the game to save my life. I could see the shapes of the characters, and I could tell them apart based on their appearances, but I never saw the tells and quirks that have long been a hallmark of the Punch-Out games. I never saw the gem flashes and eye blinks that warned of impending punches, but I learned through careful timing and a whole lot of dodging how to stay on my feet. I once even thoroughly confused mom by hiding under a bean bag chair with the controller while continuing to play the game by sound alone.

Years later, Punch-Out was rereleased for the Nintendo Wii, and I found out that other blind people were able to play the same way. It turns out that on the Wii the game is even more accessible, as many of the opponents’ punch tells are now audible. It’s so playable, in fact, that Karl Belanger once told me he had racked up 136 straight victories. For even more proof, check out videos like this one or this one where Liam Erven drops two opponents in fine style.

Flash forward a few years to the beta release of BGT. I picked up the language, started mucking about with various functions, and thought it might be an interesting test of my newfound skill to try making an audio only version of Punch-Out. When I made the switch to Python, I took the concept and code with me, figuring that it would still be a fine first project. I figured that the game could be a gentle introduction to programming, and it would give me something more substantial to release than Guess the Number or another Space Invaders clone.

And herein lies the irony. Here I am, finally gaining the ability to design the games I’ve always dreamed of, and I’m spending my time porting a game to audio that’s already perfectly playable by both the blind and sighted alike. The folks at Nintendo spent far more time and money on their product than I ever will, and they produced it with richer sound, more features, and an overall better design.

The question I’ve been asking myself as I struggled with the keyboard handler and pyHook is whether this boxing game is even worth it. If a superior product already exists for a mainstream console, and if that product is already completely playable without sight, what is the point of my designing my version? Sometimes, even though I’ve sunk nearly a year of work into the boxing game already, I’ve contemplated just tossing the game in the closet for a while to work on something else—something far more original and interesting to me.

Two things stop me, though: my sense of duty—the fact that I’ve already promised the game—and this post sent to the Audyssey list back when I announced the game:

Not trying to sound negative here, but it seems that every once in a while
we get some announcement on here about some huge audio game project coming
out. it never materializes and we’re left waiting for this non-existent
game. let’s hope we aren’t disappointed yet again. I learned to take these
announcements with a grain of salt, and so should everyone else. usually
when these announcements are posted, the game is still in the planning
stages and nothing ever comes of it. all this does is give most gamers hope.
I really hope I’m wrong this time and that this game does indeed come out.

I want that author to be wrong, too.

The Great Soul-Searching Odyssey, Part I

March has come and gone, and the blog has lain dormant this whole time. Not cool, Ryan. Not cool. So what have I been up to in that time? It turns out quite a lot, though not as much of it was as productive as I would have liked. Here is my tale.

Remember back in February when I happily wrote about creating my first keyboard handler? (If not, just jump down to the next post. Go ahead. I’ll wait.) It turns out that, despite the awesomeness of said handler, JAWS, the eternal programming thorn in my side, didn’t want to play nice with my code. In particular, it wanted to steal the use of the arrow keys for itself, thus keeping them out of my program. As any of you who have had to put JAWS to sleep in order to play a large chunk of audio games can attest, this is pretty annoying.

I was determined to figure this problem out, however, so I started searching high and low for solutions. The title didn’t lie. This really is an odyssey.

First, I traveled to the land of the great and powerful Pygame developers. Well actually, I just wrote an email to their listserv. Be that as it may, many of them recommended a module called pyHook, a powerful artifact which, according to legend, could freeze the dreaded JAWS in its tracks and prevent it from making off with my arrow keys. But oh man. PyHook is something like 10 points beyond my current skill level, and even its documentation was nearly indecipherable to my n00b mind.

Nevertheless, I threw everything I had against pyHook, aided somewhat by a wise old sage named Alec the Brave.* After what seemed like 10 days—because that’s about how long it was—I managed to throw together a workable solution that allowed me to run my demo side scroller and keep JAWS up and running at the same time. Some of you probably saw my exuberant tweet on the subject.

*Alec’s wisdom is beyond reproach, though his age and sage status have yet to be determined.

Alas, though, my struggles were for naught, for as soon as I began to tweak and debug the program, I realized that pyHook—and here I’ll use the technical phrase—“broke the hell out of” my keyboard module. I’ll spare everyone the gritty details, but suffice it to say that holding down keys was a nightmare, and even though the arrow keys kind of worked, they absolutely didn’t work if something like the control key was held down. All of this meant that if I chose to continue to use pyHook, I would invalidate the eight days I had spent designing and implementing my keyboard handler. What’s more, I had once again run out of ideas on how to proceed.

So what did I learn from the first leg of my journey? I learned that sometimes, the problem I need to solve isn’t as immediate as I think. More than that, I learned that it’s way too easy to get bogged down in side projects that leave me no time for working on important things—like punching a clown in the face. When the day comes that JAWS speech is a deal breaker, I’ll figure out the arrow key problem. Either that, or I’ll have it done for me by someone with a lot more expertise and skill.

Until then, I want to code a game, and that’s just what I intend to do.

Therein, however, lies the next step on my soul search, but since it’s almost midnight, I’ll have to save it for another day.