Wednesday, June 14, 2006

Getting a game programming job – Tip 2 – Writing demos

Something I recommend to anyone trying to get a game programming job is to work on some little projects on your own, in addition to any formal schooling you're getting. There’s no better way to learn how to make games than trying to do it yourself. The benefits I see are:
  • You get good at coding, preferably in C/C++. This means you’ll do better at school, during interviews, and when you start working.
  • Beyond just knowing the language, you’ll be used to compile errors, link errors, and wrangling different pieces of third party code. You will also likely pick up other skills like using Perl, LUA, building websites, and using art and sound programs.
  • It’s great fun, and you get to make something.
  • It shows a company that you’re self motivated and capable a lot better than just writing it on your resume.
  • It really makes your resume memorable if it contains a link to a demo.
  • If you're on a break from school, it improves your skills instead of them rusting away. You'd be surprised how quickly you forget how to code when you're not doing it. Though you'll realize during the interview :)

What’s a good demo?
Here are some ideas:
  • Write a particle system.
  • Write a cloth simulation which simulates a flag being blown by the wind.
  • Write a rope simulation.
  • Write a water ripple simulation, which makes use of fancy HLSL/GLSL.
  • Write a heightmap renderer which can render a good distance without slowdown.
  • Write a simple game like pong.
  • Write a game, like asteroids or pacman.

Tips for choosing a good demo:
  • Avoid choosing something that will require a lot of art such as 3D models and textures. You’ll end up spending way more time making art than programming.
  • Avoid choosing something that requires you to write tools. For instance, you don’t want to have to write a world editor. You can build levels for games like pacman or bomberman in notepad, but when you start getting to R-Type or anything in 3D, you quickly start needing a complex editor. Writing a nice usable editor can take months of effort.
  • Try and do several small demos rather than one big one. If you've attempt to make a rope simulation, an AI route finding demo and space invaders, you've got a far greater chance of finishing them to a decent quality level than if you try an make the next World of Warcraft killer.

How can I get started?
  • Free compilers are available. I recommend Visual C++ Express.
  • There are lots of free engines around which will take care of some of the hard work for you. I’ve used Ogre, but there are plenty of others. SDL is one that has been mentioned before.
  • Start by running a tutorial application, and then gradually modify the app until it becomes your demo.
It's by no means essential to have demos. But if you have the time and inclination, you'll be greatly improving your chances of getting a games job.


Tsu said...

What's the best way to present the content in your demo. Lets say i have a finished game with a story, multiple levels, tutorials, options screen, etc etc.
Is it better to hand over the entire thing or a "look, shiny!" version which showcases a single level demonstrating some of the game.

Also, are proof of concept demos worth including? For example I have a top-down shooter demo. However it only has one type of enemy, placeholder art and the multiplayer is a proof of concept in it of itself. The game basics are there (the player can move, shoot, the enemies head for the closest player, the bullets collide and do a health calculation, etc etc ) but the presentation and depth are rather lacking.

Mark Pope said...

Good question.

Sometimes demos are very clunky to play and are best played by the creator. In this case I'd go for screen grabs or a video on your website. This also saves the viewer the hastle of downloading, unzipping, worrying about viruses, getting the right D3D dll, uninstalling etc.

That said, if it's polished to the point that any user can easily run it and have a favourable impression, then an EXE doesn't hurt. I'd recommend getting a few friends with different machines to try it, and also give honest feedback on what they think.

Regarding concept art. The main thing I'm interested in is what the code can do. A little concept art to give context would be OK, but if the demo is really basic and there's a lot of art, it can come across as if the person is just dreaming of what the game could be, rather than implementing it. It's an easy trap to fall into. You spend 2 weeks making an intro movie in a 3D program, and then the game is two sprites with no AI, collision detection, sound, etc.. :)

Thanks for the post, and have fun coding your game :)

oldschatterhand said...

>>> ... This also saves the viewer the hastle of downloading, unzipping, worrying about viruses, getting the right D3D dll, uninstalling etc ... <<<

Awhile ago I made a simple demo that impressed almost everywhere (when I was looking for a job) not with content but because run directly from CD. All you need is just most of the D3D dlls together with the .exe on the CD. I was surprised to see that majority of people in the game industry are not very familiar with D3D essential structure.
In God we trust ... all others pay cash.