PlasmaPong

Copyright ©2000-2005 Studio H Software™

History (at least my version of it):

Sometime towards the end of the last century, my friend Forrest and I were hanging out, programming this and that, and watching visualizations on WinAmp. After a few quesadillas and some bottles of Mountain Dew, the flowing colors got to us, and we had to create our own. Not satisfied with the passive experience of WinAmp plugins, we decided to make a game out of it. The general gameplay was Forrest's idea, and between the two of us, we had a fully functional version plucked out in a couple of days. After a couple other (un)successful projects, we parted ways somewhat (mostly because I had a new girlfriend who is now my wife).

For the next year or two I tried to expand on it, fixing a couple of bugs here and there, and creating others along the way. One of the problems, which will be pretty obvious if you take a look at the source code, was that we scored a flat-out NULL in programming practices. The code is poorly commented, poorly modularized, and poorly #defined (we used a lot of hard-coded data). The result was a virtually non-maintainable mess.

After a while, Forrest and I reconnected. He introduced me to a graphics library called OpenPTC, and PlasmaPong slowly sucked me in again. This time, though, it was going to be different. I had started taking programming courses at the local junior college, and now when I looked at our original code, I about threw up (not literally). I decided to start from scratch, and actually ended up doing pretty well. I nearly finished the entire rendering engine (if you can call it that), and I only referred to the original source code a couple of times. However, I hit a major road block. OpenPTC is strictly a graphics library. It has no provisions for input, and I wasn't about to learn the Windows API or DirectX. I also didn't like the fact that it isn't a portable library. Well, there went some tens of hours down the drain. Oh well. Here's the source code that came out of that endeavor.

Now, before all of this started, before I even started hanging out with Forrest, I had fiddled around with the Allegro game programming library. This is one sweet suite! Sorry about that. Anyway, it had everything I needed and more (quite literally). PlasmaPong take three got about as far as take two (the ball bouncing around the screen with special effects in the background), mostly due to the fact that it was in pure C, and I wanted to start using C++. Hence,

Take four took a completely different approach (NOTE: this source code is also broken; I started to change the naming conventions, but only got part of the way through before deciding to rewrite again). This time I started with the game. I programmed everything EXCEPT the nifty graphics. In retrospect, I see exactly why this happened. C, being a procedural language, fit more naturally with the graphics aspect because of the highly linear/looping nature of the distortion code. On the other hand, the ball, paddles, and controls are perfectly suited for objects. Once again, due to my apparent inability to plan a project completely before I start coding, I decided to give up. My justification: I had collaborated on a complete version with Forrest, written the graphics half twice on my own, and written the game play part once on my own. On avereage, I had written two full versions, and I felt accomplished.

I let it sit and rot (well, since it's digital, I guess it didn't actually rot) for nearly two years. My wife and I recently moved in to our first place without roommates, and as the dust cleared (and I got to surf the net at 3 mbps thanks to cable modem), I started gravitating towards programming again. Fate, of course, would have PlasmaPong in store for me. I spent some time looking through the most recent source code, and I realized that I could design it even better. This time it will be different. I have (IMHO) matured greatly since the last iteration, and I have also been more thoroughly exposed to good OOP (thanks to Java and TADS). I have also made a pact with myself to not lay down a single piece of code until I have a complete design specification completed. Then it will be just a matter of the busy work involved in implementing it.

As of 4/27/2004, this is the state of things. Follow this link to see the current design specification.

This website is being hosted by:

SourceForge.net Logo