Tag Archives: growth

The Great Soul-Searching Odyssey, Part III–Rebirth

It’s been quite a while since I went on my sojourn of soul-searching, and I’m happy to say I have finally come to a few conclusions. I’m also happy to say that while I’ve been soul searching, I haven’t been idle. I’ll put that information out in a forthcoming blog post, but for now, let’s finish this odyssey.

First thing’s first. How’s that boxing game coming along?

It is, and it isn’t.

I’m going to finish the boxing game; in fact, I’m still working on it, but it’s going to have very little to do with Mike Tyson’s Punch-Out. Instead, it will make use of a new, revolutionary style of interaction that’s going to make the game actually worth playing. Instead of standing in one place, dodging back and forth, and throwing random punches, you’ll actually be able to circle the opponent, run around the ring, knock the opponent against the ropes, etc. What’s more, the framework for the boxing game won’t be just for boxing, but instead will have myriad possibilities including fighters and adventure games. And–oh yeah–I’m building it from the start to be multi-player.

Also, when I say “I’m building,” I mean that I’m actually working on the project right now–well not at this exact moment in time, but you get the picture. Currently, it’s possible to navigate the arena in true, 3D-style, approach the enemy, and pick up loose items (that last part isn’t for boxing). The project is making progress, and it has been fun to watch it grow. The boxing game/whatever it becomes isn’t the only thing I’m working on, however, and thus we come to my second conclusion.

I have wanted to design games for as long as I can remember, and once I realized I had the power to do so through coding, I turned game design into a part-time hobby. Just as I was picking up the hobby, however, my wife and I fell on hard times financially as a result of the cost of moving from Texas to Minnesota. As a way of helping to make ends meet, I attempted to approach Grey Matter Productions as a money-making venture. There were two problems with this approach, though. First, I knew squat about programming when I first started, thus making the likelihood of turning out a playable game right away infinitesimally small. Second, I was already working a more-than-full-time job, and the prospect of coming home and putting in another few hours of work at the end of the day was extremely daunting. You can imagine how much I got accomplished.

Thankfully, our finances have stabilized, and I have been able to treat Grey Matter Productions and game development in general as the hobbies they were intended to be. Interestingly enough, this has actually sped up development quite a bit, as I’m able to enjoy coding for the sheer sake of coding rather than working on it out of obligation.

Since what I’m doing is a hobby first and foremost, I’ve decided to treat it as such. This means that, from time to time, I may work on other projects as the interest strikes me or to avoid burn-out on a particular game. In fact, this has already come in handy when trying to break through a particularly tough road block in boxing; by taking my mind off of the current difficulty, I was able to stumble on a solution in a round-about way. I’m happier about coding than I have been in a long time, and I’ve made more progress in the past month than at any other time since I began this venture.

For those of you wanting a boxing game, you’ll get it, and when you do, it will be better-designed, more intense, and more feature-rich than its original incarnation. There’s also the upshot that I’ll like it more and thus will be more inclined to work on it. At the same time, however, you may have to wait a bit longer for it. That doesn’t mean I won’t be working, but it does mean that I’ll likely be working on more than one project at once.

It will all be worth it, though. Just you wait and see …

Downs and Ups

I looked at the website today as Randi and I were searching for the renewal email, and it occurred to me that I haven’t posted an update in over a month. In fact, it has been closer to two months since I posted anything, and as of my last writing, I was still hard at work on boxing. I think the biggest reason for my absence has been that while a lot has happened, not much has been accomplished. Let me try to explain.

My last post was full of optimism about the coming break and the progress I would make on the boxing game. As soon as school finished for the year, however, I managed to contract a really nasty piece of malware, and I found myself having to reformat my computer. As I was upgrading from Windows XP to Windows 7, however, I neglected the fact that the new install didn’t wipe out the old one, but rather installed alongside and throughout it. Thus, I wound up with a tangled amalgamation of two operating systems with a virus lying dormant somewhere in the ruins of the Windows XP side.

No problem, I thought. I’ll just reformat again.

This time, the reformat and reinstall went off without a hitch, and I figured I was Scott free. Side note: I bet there is totally some dude out there named Scott Freeh, and he probably gets a lot of grief from people. Poor guy. Anyhow, I set up Carbonite to start restoring my files, but a mislabeled checkbox caused the program to start dumping the entire backed-up contents of my old format into my pristine new one. This meant that I had directories for Windows 7 that were bare and desolate, and I had jam-packed directories that followed the Windows XP folder structure, all of which were hopelessly entangled once again. Because several gigs had been dumped into my pristine format before I realized the error—that’s what I get for restoring overnight—there was no way to quickly fix the problem.

You can probably guess what I ended up having to do yet again.

Amongst my 3 reformats were all the things that ordinarily occur throughout the holiday season: traveling, dinners, spending time with family, etc. As a result, New Year’s came and went, and I hadn’t written a single line of code. I ended up going back to work on January 2 having accomplished absolutely nothing during the Christmas break.

And then came the coding craziness. I finally realized, after banging my head against the problem for some time, that there was no immediately plausible way to carry out key commands that utilized multiple key presses. For example, holding up arrow and pressing a could not throw a left hook to the head using my current library. So I needed to find a new library—one that would allow me to press multiple keys simultaneously.

First, I tried looking for python-based solutions to the problem. The only solution I could find, however, was the Pygame library. In talking to other audio game developers, I found very little support for Pygame, with criticisms ranging from speed of execution to a lackluster sound library. When I brought up Sound RTS as an example of a great game that just happened to be written in Pygame, it was pointed out to me—accurately, I might add—that even it suffers from very slight execution lag on things like key presses.

So, scared off by the boogie monster of latency, I started looking at BGT, the audio game development toolkit written by Philip Bennefall of Blastbay Studios. Because the core components of BGT are written in C++, execution of almost anything is incredibly speedy. Another feather in its cap is the fact that Philip is an INCREDIBLY NICE GUY! I cannot stress that last point enough.

However, I soon discovered two problems with using BGT, neither of which had anything to do with the language itself. The first of these was the fact that I had already spent a year learning to program in Python, and I was loathe to throw away all of that practice and knowledge in favor of a different language. The second was that I had incredible difficulty switching from a Python mindset to a BGT one, and as almost everyone who has ever rerolled their character and become a newbie again will tell you, starting over sucks.

In order to reconcile the conflict in my head—Python versus anything else, speed of execution versus speed of development—I did what I should have done a long time ago. I signed up for the Pygame mailing list and started asking questions. I received a number of intriguing answers, but probably the best of them went something like this:

You’re so busy spending all of this time worrying about speed and lag and all of these other things that haven’t come up yet that you haven’t even written a single line of code. Many, many people have written great games in Pygame, and they haven’t run up against a speed barrier. So program something—anything—and if you start having problems with speed, there are work-arounds for that.

When I decided to adopt this mindset, it opened up a whole new world of possibility to me. Instead of seeing potential difficulties as obstacles, I started seeing them as barriers to be broken down. Instead of looking at things through a lens of negativity, I started finding more positives. So what if Sound RTS has a tenth-of-a-second lag on key presses. It’s not like that style of game requires lightning reflexes anyhow. And I didn’t even notice the lag until someone pointed out to me, so what did I care? It’s still a great game.

But I didn’t want that lag, because the kind of games I’d like to develop will require lightning reflexes. So I started looking into why it existed in the first place, and almost immediately, I found the answer. It turns out the chief Python critic on the Audyssey list was right, though it chaps my hide to admit it. The sound support for Pygame isn’t the greatest, and when used in a certain way, it can create all sorts of slowdown in programs to the point that, if you make the sound buffer size too large, it can take over a second to modify any currently playing sounds. Huge problem, right?

Well no. If the Pygame sound module slows things down too much, don’t use it. Problem solved! Seriously, it’s that simple!

And just like that, I’m back in business. I’m using the Pygame keyboard module to handle all of my key presses, and I’m stoked about the things it can do:

  • It keeps track of each key press that the user generates, and it gives the program the opportunity to act on these. If, when looking through the key presses, the program finds an “up” in the list, it can run through its analyses and decide to make the player jump.
  • It has a key_pressed function which allows the program to check what keys are held down. If, while walking across a level, the player holds down the control key, the get_pressed function will see this and make the player run.
  • It tracks when players release keys, and it can use this information to call additional events. If, for example, I wanted to program a laser gun that charged itself up as long as the player held down the control key, then fired when the control key was released, I could do that!

As for the sound library, I just switched back to using sound_lib, the library that’s served me well through both Block Party and boxing. It has all of the functionality I need to program with none of the lag, and if I need it to do more, I can tweak the programming myself.

With all of this in place, I have one last hurdle to overcome, and that’s learning to write comfortably in Pygame. I’ve made a car engine that revs up and fades as you press the up and down arrow keys and steers from side to side as you press left and right. I’m in the process of making a character that walks from left to right and back when you press the left and right arrows. These things still don’t feel fluid to me, though, and only time and experience will change that.

What does this mean in terms of game development? Sadly, it means it’s going to take a little while to get things back off the ground and headed in the right direction. More importantly, however, it means that game development is still progressing. Those of you following the twitter feed will note that activity has started to pick back up as I run Pygame through its paces. Things will get moving again, but they may take a bit longer than any of us would like. I’m not out of the race, though. I can promise you that.

Punching Through

                I love bashing my head against a problem until I break through the barrier. The actual bashing part doesn’t always make for an exciting evening, but I would be lying if I said the intellectual challenge wasn’t enjoyable from time to time., The best part is when everything clicks into place, and you realize you’re learning something!

                Amidst all of the little challenges life in general has to offer, I’ve been working in my free time on how to make punches work better. As I wrote in an earlier post, I want to build in actual punches and boxing mechanics to make the game both more realistic and challenging. In order to do that I decided to go back to the drawing board and create one set of punches that would apply equally to both the player and the opponent. The hard part was: how could I write the code elegantly and simply enough that it won’t be a mess when I go back later to refactor it. How could I make, for example, code apply to either the player or the opponent without specifically checking whose throwing the punch, defending the punch, remembering the punch, and so on? As it turns out, the basis for the solution is incredibly simple, and I owe Aaron Cannon a huge debt of gratitude for bringing it to my attention.

                Basically, it goes like this: when you pass a complex object around in Python, you don’t actually pass around copies of the object; instead, you pass along a reference to that object. It’s like telling your co-workers, “Hey, I brought doughnuts for everyone. If you want them, they’re in the break room.” In this way, anyone who wants to modify your object—or steal all of the jelly or cream-filled doughnuts like that jerk Bob from accounting—can do so easily. This turns out to be an awesome thing, because it means I don’t have to keep track of lots of copies of my opponent and player. Instead, I create one player and one opponent, and then I just let all of the punches, stats, and everything else know where to find them.

Also I want doughnuts now.

                Figuring out how to make all of this work has been a thorn in my side for the past few days, and I’ve been pondering it in spare moments. When the solution finally came to me tonight while I was running on the treadmill, I couldn’t wait to write it down and make it work. And wouldn’t you know, it works like a charm!

                I’ve missed this kind of zeal—this excitement—in programming for a long time, and I’m glad it finally came home to roost. It’s like turning the corner and seeing a whole new vista spread out in front of you, and the view is breathtaking. I almost wish I could call in sick to work tomorrow so I could keep working. Almost.

                Oh hey! Did you guys know Christmas is coming up? You might have heard something or other about it. Well in addition to all of the awesome family and togetherness and good cheer and celebration that the Christmas season brings, it also gives me two weeks off of work while the students travel home to see their own families. And you know what that means …

                Two straight weeks of Swamp!

                …

                No wait. That’s not it. Is it?

The Art of Improv

                This is just a quick note to let everyone know that the official Grey Matter Productions website is still coming, albeit in a few days instead of … yesterday. Both Randi and I are working a lot at the moment, and since Randi is my head web developer—okay only web developer—we haven’t been able to make the progress we would like. On the other hand, though, we are making money and paying off bills, and that’s never a bad thing.

                In the meantime, thanks to everyone who has downloaded Block Party so far. Your support and kind words mean a lot to both of us. I appreciate the outpouring of kind emails and positive feedback the game has garnered so far, and I’m already hard at work finishing the boxing title as a nice, juicy follow-up.

Thanks for putting up with our duct tape and string. We’ll be putting in a more elegant solution shortly.

Catharsis

                When I was 14 my school loaned me a brand new, state-of-the-art laptop that possessed the ability to dial into the internet. It was a monster of a machine with all of 4 gigabytes of hard drive space, a detachable 3.5 inch floppy drive, and JAWS 3.2, and I loved it. For those of you who remember those early versions of JAWS, you’ll remember that the internet was a trying place to navigate full of inaccessible links and hard to read content. Still, the text games worked perfectly, and I suddenly had a new hobby.

                It started out with Telearena, a simple text-based BBS game with little to offer players beyond stock fights and repeated descriptions. Take any standard Merc mud, divide the fun quotient by 10, stomp on the result, set it on fire, then put the fire out with bleach, and you might come close to the enjoyment one could gain from playing it. Of course, it was the first game of its kind I ever played, and I was hopelessly entranced.

                From there it became Majormud, and then there was The Rose, Council of Guardians, by far my favorite of the BBS titles. But there were dozens more games out there, and I played them all.

                It wasn’t long, though, before I discovered the true potential for text-based gaming that actual Multi-user Domains (muds) could bring to the table—muds like Dreams, Discworld, and The Inquisition. There were others: Aardwolf, God Wars 2, BatMud, Achaea, 3 kingdoms, MUME—Multi Users in Middle Earth, and at least a score more. I even started spending money to play muds, shelling out both monthly fees and promotional charges to muds like Modus Operandi, Dragon Realms, and Lusternia. And because I know some of you mud enthusiasts out there are wondering, I did have a run at all of the Squidsoft games: Star Conquest, Galaxy Web, and Fortharlin. I even spent far too much time on Miriani—and no, I won’t link to that horrible twink of a game.

                But beyond the hundreds—possibly thousands—of dollars I spent mudding, the more detrimental cost came in the form of the literally thousands of hours I spent glued to my computer desperately trying to reach that next level, finish that elusive quest, or farm excessive amounts of gold and loot. I pretended to be sick from school and work so I could put in extra time on gaming. I stayed up playing until 3 or 4 in the morning, then honestly wondered why I could not stay awake in classes the next day. Instead of socializing with my peers—the people I worked and went to school with—I made virtual friends online. On New Year’s Eve, 2000, I rang in the new year with a handful of friends on a custom-built mud they had designed for just that purpose. Nobody invited me to post-high-school graduation parties; after the ceremony I went straight home and sat sadly in my basement, wishing I had made some real friends. But by that point I was well and truly hooked, and my addiction—for that’s what it was—persisted all the way through college. It followed me into my post-college work; it followed me to Hawaii, to Texas, and—finally—to Minnesota.

                I can only guess why mudding had such a profound draw on me, but any reason I give sounds more like a hollow excuse in retrospect. I suppose what it really comes down to is that I wanted to escape into a place where I could be powerful beyond what I could ever hope to accomplish in real life. In the real world I was a pudgy, socially awkward blind teen-ager who struggled with image and self-confidence, but online I was a swashbuckling warrior, a daring rogue, or a powerful mage, and no one ever needed to know that I was blind or a little heavy around the gut. Instead of facing my fears about blindness and getting involved in school and the community, I patrolled the streets of Lithmore as a reeve and defended the realm from murderers and thieves. People do this all the time with video games, and I can understand why. After a long, difficult day it’s sometimes fun to get lost in mindless entertainment. For some people it’s an episode of Jersey Shore; for others it’s a few games of Major League Baseball 2K11 on Xbox. But with muds, the game never ends. There is always that next goal waiting just around the corner for a dedicated player to come and attain it.

                I played my last text-based multi-user game on December 20, 2010, and I have no idea why. I had tried to quit before; I made it as far as a month during the Summer of 2009, and every day was a challenge. I would be reading a book or playing my guitar, and I would suddenly be overcome with an overwhelming desire to play something—anything—so long as it was a mud. In the end I rationalized my return to text-based gaming as a step toward moderation—a rationalization that lasted all of a week. It wasn’t long before I was back at it again, spending 12 to 16 hours in a single weekend in front of the computer. But this past Christmas vacation, a time I eagerly anticipated for the comparatively huge span it would afford me to mud, something weird happened. Before I knew it January 2 was upon me. I hadn’t mudded in 13 days, and I wasn’t bothered by it in the slightest. In fact, I was surprised, looking back on those two weeks, that so much time had passed.

                It hasn’t been as easy over the past few months as it was during those first two weeks. To tell the truth, the whole reason I’m writing this post today is because I’m fighting the persistent urge to log back onto Discworld or check the latest progress on God Wars. Even as I write, I am filled with nostalgia for those worlds of fantasy and imagination I no longer visit. But I know I can’t go back there. Just as in the past, it would start simply enough—an hour here or there—but before long I know I would spiral back down into my old habits.

                When I look at the above paragraph, I can’t help but think it comes across as a bit dramatic. I haven’t ever struggled with chemical addictions—drugs, alcohol, cigarettes—and I haven’t had to face down habits such as gambling that could destroy everything around me. Instead, I traded half my life—14 years—for gold and experience that amounted to nothing more than stats on a server, and I won’t ever get those 14 years back. I never hurt my body, but I did hurt myself, squandering my potential and talent on computer-generated orcs and meaningless collections of numbers rather than using it to better myself and the world around me.

                So why program games now? Why spend my free time creating virtual fantasies? I suppose it’s for that escape, that temporary journey to a place where each of us can forget about the world for a time and just dream. At the same time, though, I do it for the process. I love the thinking, the imagining, and the problem-solving that it takes to create something. I love knowing that I have the power to shape the world with the strength of my mind, and I love being the architect of my own imagination. I love that instead of following, I’m leading—even if I’m only leading myself.

                So I’ll keep struggling against my old habits. I’ll keep fighting the urges to slip back into the placid waters of inactivity. I’ll keep pushing against half a life’s worth of lost opportunities even though I know it won’t be easy. I’ve invested too much time and energy into this change, and I like the person I’ve since become. If spending time with this new me requires me to give up my lazy past, then I will happily pay that price.