For many years, the best ideas about game programming were handwritten on the back of a napkin. Knowledge was shared informally, with developers sketching ideas at meetings or industry gatherings, or talking with other fellow developers. Our craft was highly unorganized. Years have gone by, and today coding games is more complex than it ever was. The pursuit of realism and immersion have increased team sizes, budgets, and schedules. These are exciting times in which to be a game developer.
But we can no longer be unorganized in an industry of our size and importance. Today, professional game development must be efficient, and developers must be reliable. We simply cannot risk the failure of a project because one feature does not turn out as expected or because we don't know how to code a certain effect.
Our industry needs structured ways to train new professionals. Our attitude is changing. Events like the Game Developer's Conference, magazines like Game Developer, organizations like the International Game Developers Association (IGDA), and schools all over the world have begun creating this new consciousness of game development as a viable career alternative with its own training and disciplines. But we need more. The amount of games-related documentation generated per year is simply appalling, and it is very difficult for anyone wanting to learn about games to find reliable reference materials. Lots of books focus on API programming, which too often is not what game programming is all about. Other books come from different disciplines, like artificial intelligence or graphics. These books are often very good in their academic value and depth, but lack game-specific material. As a result, we end up gathering information from lots of different sources, with no central source of information.
This book is born from this unique context. After six years of teaching game programming and as the founder and director of one of Europe's first master's programs in video game development, I have evolved an extensive curriculum for aspiring game developers. I have tried to teach students the core subjects and techniques any serious game developer should take for granted, so they can enter and succeed in game studios quickly with a very short adaptation time. This is exactly the goal of this book—to present the fundamental subjects involved in video game programming in a structured, coherent way. My goal is to provide a good reference work for anyone wanting to learn about how games are currently coded and designed.
Thus, the focus of the book is not case-by-case tricks. Many good books contain that information. It is not a book about a specific game genre because techniques often cross genre boundaries. It is also not a book about theories. Instead, it is about established, well-understood methods that are at the core of many of today's blockbusters. This book is meant to help you build a foundation layer, so you can understand all the base algorithms that, with minimal differences, are found in most game projects.