Submitted by , posted on 31 December 2002
Image Description, by
Machine Ball is a futuristic sport with amazing 3D graphics and realistic
physics with very simple rules: Get the ball into your opponents goal.
It's 2 player only on the same computer with optional joystick support.
I worked alone on Machine Ball. Total development time was about 6 months,
with about 200 hours of coding time.
Machine Ball uses Russel Smith's excellent Open Dynamics Engine(ODE) library
for the physics. It uses AllegroGL for cross-platform input and sound and
DUMB for music.
The graphics are pretty average and technically there is nothing fancy, just
plain OpenGL 1.1. But it still looks nice and the focus is on gameplay,
which is really very good (in my opinion of course).
I'd like to write a few words about the coding style. When I began to code
Machine Ball I decided to do it in a very clean OOP way with C++. I very
quickly got bored and started coding very sloppy. I knew what I was doing
and I had a very detailed design document, and knew that I wouldn't be
adding new features that would require total rewrites or anything. Near the
end I got super lazy and started using wacky variable and function names. If
you look at the code now it's pretty neat. In some places you find well
defined classes and in other's you find pure spaghetti code. You can sort of
see the (backwards) evolution if you look close enough. Anyway, why am I
telling you all this? Before the release some bugs popped up. They were
almost impossible to track through my code. I spent hours and hours trying
to figure out what was going on. (In the end, one of the bugs turned out to
be a bug in a library I was using). But if I could go back in time and
choose to code everything from the start properly, I probably wouldn't do
it. It would be too boring. The saved coding time outweighed the debugging
time in this project. But for a larger project, or a project that isn't
clearly defined, I'd definetly do things right.
Machine Ball website with screenshots and free download: