If you find this article contains errors or problems rendering it unreadable (missing images or files, mangled code, improper text formatting, etc) please contact the editor so corrections can be made. Thank you for helping us improve this resource
Shawn Hargreaves is a programmer for Probe Entertainment. Shawn is also the creator of the world famous and widely supported Allegro library.
Could you please list some of the game titles you have worked on?
Extreme-G and XG2, both on the N64. I worked on a soccer game for a while, but that got cancelled.
Hmm, that list doesn't seem quite long enough, so perhaps I should try arguing that I've also indirectly contributed to all the games written using Allegro. Some of my code is included in the DOS MAME executables, which comes pretty high on my list of things to be proud of :-)
What type of adjustments did you have to make when going from a hobbyist programmer to professional game programmer?
Too many! I'd never written any 3d code before I started working at Probe, so I had to pick up a lot of new ideas in a hurry, and get used to the N64 hardware at the same time. I thought I was already a pretty good programmer, but some very different mental states are required before you can hope to work for a year or more on a single game, cooperating with the rest of the development team and somehow preventing the whole thing from collapsing under it's own mass (I've seen that happen). Coming from a hobbyist hacker background, it's hard to get used to the whole idea of project deadlines, and having to do boring, non-sexy work just because the game requires it.
What advice can you offer to people who want to get started with game programming, perhaps to turn it into a career?
Learn to program. Then learn some more, and go on doing this until you get really good at it. Don't worry too much about specific game-related techniques: these are changing all the time, and if you spend to much energy learning particular details, you will miss out on the big picture of becoming a truly great programmer. Once you get good enough, this will be sufficiently obvious that people will hire you without any further effort on your part.
I think every aspiring programmer should write and release at least one useful program as open source, or get involved with improving an existing open source project. Even if you don't care about the philosophy behind such ventures, you can learn a lot about teamwork and good design by letting other people use and criticise your code. I suspect that a few weeks hacking on the Linux kernel would teach you more about software engineering than several years at university!
What do you really hate about your job? =)
I missed all of last summer, working silly hours to get XG2 finished.
Company politics that sometimes end up making the Wrong Decision.
I eat too much junk food.
The lifts take way too long to get up to our 4th floor offices.
The Allegro library has been in development for quite a while, do you ever sit back in amazement when realizing the following the library has?
It was such a gradual process of growth that I've had plenty of time to get used to it, but yes, it is pretty amazing! When I uploaded the first version sometime in 1994 or 1995 (I forget exactly when), it was just a simple lib that I'd written for my own reasons, and I wasn't seriously expecting anyone else to care about it. My timing was really good, though, because this was at exactly the same time that lots of people were switching from Borland C to djgpp, looking around for a decent graphics library, and not finding any. Allegro was the first reasonably complete one to show up, so it attracted enough interest to kick the development into warp speed, and things just grew from there.
It was a truly incredible feeling to see the first few games that were made using my library, and to read all the amazingly kind comments that people sent me about it. To steal a line from Eric Raymond, "I stashed away some of that email; I'll look at it again sometime if I ever start wondering whether my life has been worthwhile." :-)
What type of games do you like to play (aside from those you have worked on)?
Grim Fandango gets my "Game of the Year" award, no competition there. Mario 64 is incredible, and I had a lot of fun with 1080 Snowboarding. Going back a bit, Worms wasted many valuable hours, and the original Monkey Island on the Atari is perhaps my favorite game of all time.
I fail to understand why first person shooters are so popular these days. Doom was a lot of fun, but Quake just seemed like more of the same to me, and I have absolutely no interest in the million variants of this genre that are now flooding the market (Half Life is cool, though: that manages to do something a bit different).
I hate playing games that I have worked on. After the last few nightmare months of debugging the beast, the absolute last thing I ever want to do is to set eyes on it again!
Where do you see Allegro going in the future? DOS won't be around forever. Do you see it ever potentially going to an entirely windows-based environment?
There is already an excellent port called WinAllegro, by Stefan Schimanski, that runs on top of DirectX and is almost perfectly source compatible with the DOS version.
I'm more interested in getting Allegro to work under Linux. Michael Bukin has ported it to X-Windows, which works very well apart from the inevitable performance problems: this is a great development environment, but nobody in their right minds would use X-Windows for the final version of an action game! A good amount of work has already gone into a console mode Linux port, but it is still a fair way short of completion. This is what I would be working on now if it wasn't for my commitments at work: fortunately, though, there seem to be plenty of other people who are able and willing to carry on these porting efforts in my absence.
I'm really excited about the prospects for a reliable Linux version of Allegro. Given the current mess of incomplete and partially supported graphics systems (SVGAlib, GGI, that new kernel framebuffer stuff, etc), I think there could be a lot of interest in a tried and tested API that can sit over the top of any or all of these, especially when you throw in the prospect of free portability between Linux, DOS, and Windows...
Thanks for your participation Shawn. By the way, I've been working on some alpha blending stuff. Do you have any experience with ways to perform really fast alpha blending?
Use OpenGL with a hardware accelerator. This is one thing that dedicated graphics hardware is really good at doing, and I've yet to see a software implementation that isn't painfully slow.