The Programmers – Part 2
A few days ago we posted part 1 of our new feature The Programmers in which we check out what engine programmers actually do and why they do it, and today we return with John Romero from Ion Storm (Daikatana) and Dean Sekulic from Croteam (Serious Sam) who answer our questions.
How did you start in the gaming business ?
John : I started programming games back in 1979 on an HP mainframe, then in 1981 I migrated over to the Apple II+ and started making games in Applesoft BASIC until I finally learning 6502 Assembler in 1983 (without a computer, no less). Back then, machine language was the only way to make REAL games. So, I started making my own games in my spare time and started publishing them in several prominent Apple II magazines and on floppy for other companies. I got my first full-time programming job in the industry in 1987 at Origin Systems.
Dean : I started on ZX-Spectrum. Programming in assembler for Z80 and hacking games. 🙂 Along with my friends, I started to work on a game for ZX way back while I was in high-school. This game never got completed, but it was a start …
Business part came when my friend actually got finished one game (for Amiga). We decided to sell that and found an UK company that wasn’t interested in publish that game, but instead, they gave us a fair deal to develop a footy-game. We assembled a team from our friends, and the rest is history … 🙂
What’s first ? The idea for an engine, or the idea of a game ?
John : With me, it’s the idea for a game. With some programmers, it the idea of an engine — it depends on what you find the most fun aspect of game designing.
Dean : Idea of a game *should* be first. Then you build an engine that can handle that game. Well, that might work in a perfect world. In reality, you have to build an economically-viable engine. The one that can handle ‘most of ideas’. 🙂 And that’s where things are put upside-down. I mean, if you want the game that is very hardware demanding, you’ll have to go for some compromises. And that’s why idea of an engine have to come first.
How do you start on programming for a game ?
John : First thing is to decide on a technology — ours or a license. If it’s our own, then the tech has to be spec’d-out and work has to start on that immediately. The tech spec would be largely dicated by the game design, so an initial idea of the game environment and capabilities needs to be fleshed out at the start. If it’s an engine license, then the first task is learning the codebase and figuring out if we need to modify it or not. “Not” is preferable. 🙂
Dean : Sometimes from the scratch, sometimes not. Depends on a game. If you create a sequel, it’s usually build on the stuff from it’s predecessor. For me, it’s not a good thing because, by the time you start to build second game on the same engine, you already know of stuff in engine that could be done better. And then I got this bad feeling of doing something wrong. 🙂
What programming language do you use for making/modifying an engine ?
John : C++, definitely. Used to be, straight C was the way to go since there were no hidden codepaths happening in the background — what you saw on the screen was what was executing. But that was back when CPU power was scarce and every ounce needed to be freshly-squeezed from the latest ‘8086. Nowadays, with hardware acceleration for video and sound and with the hugely powerful CPUs we have, it’s okay to have some extraneous cycles executing to support the OOP in C++. Also, with the complexity of today’s games, C++ is almost a must to deal with entity behaviour for 1000’s of objects.
Dean : C/C++, and assembler for some CPU-time-consuming routines.
What the most difficult part about programming a game ?
John : Making sure that the tech you’re coding or licensing is going to still be HOT when your game is released in the coming years, hopefully two or less years. The key factor is being completely on top of all the latest chip/API features and designing the engine to use them….. in addition to making sure the design of your game is going to be fresh in a couple years.
Dean : Being up-to-date and having a clean-code at the same time. Just when you think that you have all the nifty features in your engine, time takes it’s toll, and new stuff came out. At first you think “wow, what a cool feature, but I don’t think we gonna need it”. Then, “we might need it”, and at the end, you eventually came up with “we must have it – it’s a common thing!”. 🙂
So, there you have it … re-coding over and over again
What do you like most about programming games ?
John : Pretty much everything — the planning stages, getting some of the first scenes rendering, designing an elegant system that is easy to bolt game subsystems onto, seeing all the game subsystems coexist happily, getting the polish on the game, seeing cinematics turn out just as you wanted, the game box design, etc. It’s all a ton of fun.
Dean : I have to think … let me see … it’s just that I like it ‘by default’, you know! 🙂
It’s the fact that it requires skills and knowledge from many areas. And the result of your hard work is always very amusing, which is a great reward for your effort. How could I possibly ask for more?
What is the ultimate goal for a programmer ?
John : To keep learning and stay on top of the latest advances in hardware and software tech. This means reading as many interesting books and trying to understand them (Graphics Gems, legendary Knuth tomes, Dr. Dobbs, etc.)…. and actually using all this knowledge in your latest project.
Dean : And engine with:
Finished on time.
Tons of features.
(wake up) 🙂
Any last comments on your job for future game programmers ?
John : Learn as much as you can and try to be “sharper” than everyone else you know. If you’re really good and someone asks you a programming question, you should never have to say, “I don’t know.” Be The Daddy.
Dean : Love it or leave it. 🙂
If you wanna dive into it, you’ve got to like game-programming, because this is one of rare jobs that you cannot do well if you’re in it ‘just for the money’