

Ask HN: How do I get started making Quake-like games from scratch? - Archio

I just read a post on HN (http://news.ycombinator.com/item?id=3018539) that delved a little bit into the source code of Quake II. I was so moved by it that I almost cried- that's programming at it's finest. That's just working for long hours, just typing in code, and finally creating something amazing that millions of people use around the world.<p>How can I get into game development from scratch, just like John Carmack did?<p>I know about frameworks that can give indie developers a headstart (XNA and the like)- they're cool, but I <i>don't</i> want something that will give me a built-in engine and let me make a fully operational game in five minutes.<p>I want to start from scratch- learning from the basics of rendering and memory management in C to building a simple game engine, all independently. This way, building a game could be an incredible learning experience, mastering the details of a powerful language and being educated about game development more than reading articles could.<p>Is it even possible to start out like John Carmack did without a large background in games programming? I've done web development for years, but never anything like this, but I'm willing to work the long hours that it would take. Is there a book, ebook, blog, or other resource that could at least get me started on this mission? I appreciate any help you guys can give me.
======
jeffool
There are plenty of books and blogs and sites about this. Gamedev.net is
probably as decent a place as any to start. But I sincerely ask you to
reconsider the level of importance you're putting on doing everything
yourself. Unless you're okay with probably never finishing a project.

------
dack
I would like to second jeffool's sentiment. I've gone down this path a bit
(without really succeeding), and although it's cool to imagine what it's like
to do all that really low level manipulation, it takes a REALLY long time to
get anything satisfying out of it. Just doing basic 3D collision detection in
a simple scene isn't trivial unless you have experience. Physics simulation is
a whole beast on it's own, but pretty necessary to make a fun 3D type game.

Anyway, I would suggest picking a small area to fiddle with at a low level,
and come up with a small project as a goal for learning it. Maybe just AI at
first... text graphics, but create agents that wander in a virtual world. Or
maybe just start with a basic 3D scene and try getting lighting going. Think
about what seems the coolest to you, then just try to work that little part
out and build a proof of concept.

I might try the Open GL books to get started with graphics. I would look
around for books like these: [http://www.amazon.com/Game-Engine-Architecture-
Jason-Gregory...](http://www.amazon.com/Game-Engine-Architecture-Jason-
Gregory/dp/1568814135/ref=pd_sim_b3) (although I haven't read that one, so I
can't vouch for it's quality).

~~~
satori99
I have tried similar personal experiments down this path, with the same
result. However, for fairly instant gratification, it may be easier to learn
about WebGL first.

The code to create a fully lit and rendered scene is much smaller for WebGL,
but the principles are the same, and you will still learn about writing
shaders.

------
bamyazi
Having played with OpenGL, DirectX and XNA (which is really just a managed
wrapper around DirectX as are other managed libraries such as SlimDX), I'd
suggest that learning any one of the above is really as low level as you want
to go - At a basic level they simply provide an interface to the graphics
hardware by allowing you to create and manage the vertex/index buffers and
shaders which you load up on your graphics card which then does all the work
of transforming the lists of vertices into what you see on the screen. With
any of these low level libraries you will still need to develop the 'engine'
itself which will deal with scene management, lighting, ai, physics, animation
etc. You can still have a load of 'fun' and learn a huge amount by writing
things like your own deferred lighting engine (which is what i initially did,
there are plenty of tutorials online and it's a good way of learning some of
the vector/matrix algebra which you'll need and pretty satisfying when you get
first get hundreds of lights on your models), Even if you use libraries for
lighting/physics, you'll still need to learn HLSL/GLSL for shader programming
which is where a lot of the cool stuff is being done these days especially
with the advent of geometry shaders.

------
tobylane
So much physics and maths needed, e.g.
<http://en.wikipedia.org/wiki/Fast_inverse_square_root>

------
mikeatl
I second the importance of reading Jason Gregory's Game Engine Architecture.

