Monthly Archives: June 2005

Wherefore OpenGL?

I just got an e-mail from a friend o’ mine asking why we’re using OpenGL even though our game is essentially two-dimensional. Here’s why:

OpenGL is just a quick, portable way of getting pixels on the screen. It happens to have a lot of functionality for three dee stuff, but that doesn’t make it useless for two dee. For instance, we can rotate and zoom sprites around quite facilely, tint them different colors, or make them transparent. Particles shift and fade very nicely. Things like text boxes and life bars can be drawn algorithmically. All of this happens quite more swiftly than it would if we were using the standard pygame blitting functions.

Plus, if we ever decide to put together something three dimensional, I’ll be familiar with the interface. :D


Soft Landing now builds to a double-clickable application icon for Mac OS X! It was about 100 times easier than I expected, thanks to py2app. I’m repeatedly amazed at the things people build and give away: Python itself, SDL, pygame, PyOpenGL, and now py2app. This project has benefited from the talent and generosity of a whole lot of excellent people. The next challenge is building to a Windows executable, which I suspect will be quite a bit more difficult…


Major cleaning up is going on. Because I’m still learning all of this stuff as I go along, there is a considerable amount of ugly code and inefficient methodology hanging around in our project. For the past couple of days I’ve been doing some slash and burn on old code, replacing it with tidy and quick new code. For example, somewhere along the way I created a guns module that would manufacture guns for us which are interchangeable between the ship, the pod, and the ship/pod combo mode. For a long time, though, only the ship itself used that module. Today I taught all of the gun mountings in the game to use the new system, and built a friendly weapon-selection screen to boot.

For another example, all of our images used to be dumped in one big messy directory. Level scenery and 128x multipliers and characters’ eye movement animations were all sitting side by side. Now, every image is hierarchically categorized, and we can load any level of that hierarchy whenever we need it. The new image loading system has obsoleted a lot of silliness and inconvenience.

Jules and I talked about making the power-up system more extravagant. I finally implemented our new design, in which fruit is flying about the screen pretty much all the time. It’s a lot harder to grab now, but there’s a heck of a lot more of it. The chaos this adds to the game is quite exciting. We’ve also got life bars for the enemies now, reminiscent of Ikaruga.

Those are the biggest changes for now. So much has moved from my to-do list to my done list on the wiki, but so much still remains…


Rayme of Forever Zero took a look over my shoulder while I evaluated some code today, and he gave me a helpy OpenGL tip that sped up the drawing of guys by a heck of a lot. Now we can have many, many bullettes on the screen at once, moving very smoothly. :D

Pair O’ Lex

A lot of stuff has gone on behind the scenes to get the level editor used to the idea of scrolling backgrounds with parallax. I’m astounded how complicated it can be just to scroll a picture past the screen repeatedly. Now, though, we have five levels of parallax scrolling past quite nicely at 60 frames per second.

Kiken’s Neo Geo Shooting Special was an inspiration to both of us. We’d love for SL to be half as appealing as, say, Pulstar. Animation is going to be key.

So so..

Been a while, yeses. I am still in existence and I still do daily think about SL. Well, recently as it turns out I’ve sort of been able to figure out some free time. Well, anyway.. much discussion and work has been done with Fet, and one of the major goals we have at the moment is so create a fully functional level. I thought and thought about the best approach to this, and keeping in mind my personal skill and the level of technical detail required I think an outdoors level in simple terrain would be a good start. I know we’ll come across and solve many problems in doing this, as well as consolidate something. I really feel a need to make something that is insular, but also complete, polished.

Anyway, so I’ve been drawing this desert scenery for the level.

It’s divided up into layers to provide parallax scrolling, also you may notice a nice little line of rocks and a bush in the bottom right, very non chaotically seperated by a few pixels. Those are all also seperate layers and the intent is to create some content that can randomly be placed by the roadside and meshes in with the parallax layer it corresponds to. Obviously a lot more is yet to be created however I’m making good progress, and what you see is basically the fruit of two days of working on this scene. The bulk of time is just spent sitting there trying to figure out how on earth to do this, as I’ve never really had to draw pixel art like any of this before.. or pixel art at all really. It is a wonderful learning experience, and part of why I love this project so much.



We put together two different implementations of beam weapons today, and the second one worked out surprisingly well. We now have lovely lasers that fire straight across the screen instantly but terminate when they hit something.

Preliminary laser screenshot

Preliminary laser screenshot


The particle system is now more flexible: we can have flat polygons or texture-mapped rects. Even when texture-mapped we can tint them and have the color and opacity fade across the lifetime of the particle.

I started exploring the PlayStation-to-USB adapter that Forever-Zero gave me; by this time tomorrow I should be playing Soft Landing with a PS2 controller, on the TV, as nature intended.


After not too much work and with the help of a couple of excellent people, Soft Landing is now finally under version control. Subversion will be taking care of every tiny little change to every obscure little file in the project. This should save a lot of time and energy for both Jules and me. Happiness happening.