Life has been boring me recently. Yeah, yeah, typical angst, right? Well, in any case, I’d been thinking about getting back into games programming. I’ve been seeing some sweet indie games, especially shmups, and wondered if perhaps I haven’t put enough effort into this realm of programming. ‘Course, there’s no way I’ll be any good from a technical standpoint, but it’s something I could be OK at. Right, enough blathering.
I made my first game (which was 3.5 years ago… holy crap!) on OS X, with its nice, free IDE. That was back before Xcode, when it was called Project Builder. Anyway, it was easy to make programs for it… just downloaded a project template and coded away. On my PC, I had a borrowed copy of Visual C++, which was also easy enough to use. However, it’s been years since then, and I don’t have a Mac, or access to Visual C++. What’re some free tools I can use to make Windows binaries?
Enter Cygwin, a Unix-like interface for Windows. It replicates the Unix shell, as well as lots of popular tools, such as the GCC compiler. Now we’re getting somewhere, eh? I like to use SDL as a base for OpenGL, due to its easy-to-use input handling and other game-friendly functions. GLUT is just not up to the task. I prefer OpenGL over SDL’s sprite blitting functions due to such features as easy scaling and rotation. Anyway, let’s download and set up Cygwin. Make sure to have the ‘developer tools’ option checked during setup. When you’re done with that, This README has all the information you need regarding installing the SDL library. OpenGL libraries will be installed with Cygwin by default.
That’s it! You’re ready to rock. Just compile your program using a command similar to this:
Make sure to have a copy of SDL.dll in the directory your program is in. Zomg, it’s been a while since I’ve done all this… it seems crazy to get back into.
The ol’ NES has been seeing some action in my house as of late, due to a new roommate moving in what owns a working control deck. When my friend Phil isn’t endlessly playing Super Mario Brothers, the rest of us try to get in some nostalgic gaming action. One of the games in my collection that has been getting extensive time is Gradius, by Konami. Gradius is a side-scrolling shooter (or shmup, as the kids say nowadays) that has seen quite a few sequels over the years, and for good reason: the game is quite fun, and is decently hard without being impossible for the slightly-above-average-skill-level gamer.
In Gradius, basic gameplay is quite simple. You are in control of a spaceship (the name of which is Vic Viper, something I learned from Wikipedia, being without the manual myself) and must shoot all the other ships that are trying to shoot you. You start as a fairly slow clunker of a ship, but killing certain enemies nets you red powerups, which can be used for increasing your destructive ability. The powerup system in Gradius is interesting, in that it offers a level of customization typically not found in older shooting games. Along the lower half of the screen is a list of available bonuses for your Vic Viper. Getting one powerup moves a cursor onto the first bonus, which happens to be increased speed. Pressing the ‘B’ button will activate that bonus. However, if you decide to hold off, a second powerup will move the cursor to the next bonus. By delaying gratification, the player can build up and obtain better powers for his ship, such as force shields or an “option.” The “option” is one of the unique mechanics to the Gradius series. Once this bonus is activated, an energy orb will follow your ship, shooting when your ship shoots, thus adding twice the firepower at your disposal.
One of the more interesting aspects of this game is its customization factor: almost every player will choose a different series of bonuses to activate on their ship, depending on their playing style. Of course, when every bonus has been received, the player is neigh indestructible, but up until then many different choices can be made. What’s more important: speed for increased maneuverability, or missiles that eliminate enemies on the ground? You might choose differently based on the situation.
While casual gamers might find Gradius a bit too difficult, seasoned veterans should have no problem finishing the game after a few tries. Even with my weakened right hand mashing the ‘A’ button (and lack of skill in shmups), I was able to learn most of the game in a couple play sessions. Other roommates were not quite so lucky, but I imagine if they continue to play, then beating the game would be well within the realm of possibility. One interesting aspect of the game’s difficulty is the final boss. Without giving too much away, I’ll just say, “It’s not what you expect.”
Usually, “going back to your roots” on the NES involves pretty dumbed-down gameplay, but Gradius is an exception to this rule. It’s always interesting to see where a genre has been, and how that past has helped shape games today.
The reality-distortion field around Steve Jobs is amazing. I don’t even watch TV, yet I’m like “ZOMG MUST BUY” when I see the little Apple TV streaming device. Don’t even start on the phone… I’d totally get one, except for the fact that I’d probably have to pay $60+/month for service. My $40/month is too much as it is.
Supposedly, people in the audience crapped themselves simultaneously when Jobs demoed some of the phone’s features. You have to admit, Apple hater or not, it’s a sweet-looking device.
For a while, whenever I’ve come across a weird web problem, then find a solution, I’ve had this desire to post about it here. Even though no one who reads this would care about web stuff in the slightest. Anyway, I don’t care!
On one of my sites, IE was returning blank pages whenever links were clicked on. Refreshing the page would result in the correct page being displayed… it was bizarre. I figured that the problem had to be something PHP- or session-related, but it turned out that the page content/type wasn’t being defined the way IE likes it. I found this forum post that tells of another guy having the same problem, and his solution. Word up! Just define the character set by using this header command: