Every algorithm takes at least one pair of iterators that specify a range of objects over which to do something. min_element finds the smallest value in the range, for example, while accumulate…
Intelligence, Willpower, Charisma, Wisdom: besides being important qualities you should have as a game developer, these are also common attributes used in RPGs. Calculating the values of such…
6 tips for writing video game dialogue that's actually funny Want to write a great video game script that's actually funny? Z2Live content designer Ian Adams (Battle Nations, Trade Nations) has tips…
From Game Programming Gems Hardcover, Charles River Media, August 2000 Edited by Mark DeLoura Introduction All computer applications are databases. They spend most of their time juggling data…
(Start by reading Entity Systems are the Future of MMOs Part 1) It’s been a long time since my last post on this topic. Last year, I stopped working for a big MMO publisher, and since then…
Massively Multiplayer Entity Systems: Introduction So, what’s the connection between ES and MMO, that I’ve so tantalisingly been dangling in the title of the last three posts? (start…
Also known as: Nobody expects the Spanish Inquisition! (because I’m now deviating from the original schedule I outlined in Part 1; what the heck, it was only a rough agenda anyway…)…
Part 2 – What is an Entity System? (Part 1 is here) Sadly, there’s some disagreement about what exactly an Entity System (ES) is. For some people, it’s the same as a Component…
A few years ago, entity systems (or component systems) were a hot topic. In particular, Scott Bilas gave a great GDC talk on using them in the development of Dungeon Siege. The main advantages to…
Since programming GPUs allow one to design more complex graphics systems, I started to develop a few simple rules that have survived the test of time, while designing graphics sub-systems like…
GoalTo provide a pleasant gaming experience to the widest audience possible with the least amount of user tinkering! sRGB (or whatever else colour space you're authoring your game in) calibration is…
How I Document A Game I have worked on five games in the past six years. I have written countless word documents, set up countless excel files, modeled levels, written code, and even drawn a few…
In the previous article we introduced the mechanisms that Open Scene Graph uses to track and modify OpenGL graphics state, the StateSet and the State classes. These classes optimize state changes on…
The excellent Git - SVN Crash Course is somewhat too succint on remote shared repositories and branching. Here I try to provide some of the missing necessary bits. If you prefer to see it as a shell…
Introduction Writing a simple memory allocator is quite easy. Writing an efficient allocator that tries to minimize fragmentation, overhead and locking while trying to maximize locality of reference…
You have a bunch of worker threads and work items. Work items can be dependent, on other work items, or on external timed events (such as IO). I've had some trouble with this for a while; I think I…
In a post a few months ago here on #AltDevBlogADay, Aras Pranckevičius discussed three approaches to eliminating the virtual function call overhead when using different class implementations on…
So you’ve done your full rebuild, waited out your now much shorter build time while talking with colleagues over coffee… but wait…you forgot to make that 1 edit to test your…
The first part in this series on Reflection in C++ gave a high level overview of many of the possibilities open to you when adding reflection to your games. In this second part I’m going to go…
In Part 1 we figured out that File IO was a structural bottleneck in PDB generation and therefore ripe for optimization. Here i describe a continuation of the optimization process into reduction…
Its 10:30am, you’ve just arrived at work and your nightly build is telling you all is well; you are ready to start the days tasks. Just as you sit down Bug #497564 comes in, its urgent and its…
Continuing from where we left off last time, we’re about to optimize our NewArray and DeleteArray function templates for POD-types this time. Let’s start easy by talking about the…
If there was one job I’d love to do other than writing games it’d be writing compilers. This probably explains my obsession with the subject of reflection, a topic I’ve been…
In the last few installments of the Memory system series, we were mostly concerned with how ordinary memory allocation using new and delete works internally, and how we can build our own tools to…
In the last installment of the memory system series, we covered how new, delete, and their variants work. This time, we’re going to build our own little toolset which allows us to create new…
For some, the idea of creating a portable Linux binary is somewhat elusive. In this article, we will be discussing how to create a Linux binary for a specific architecture, that you will have great…
In my previous post on localization I talked about some of my experiences localizing games for different languages / regions. This time I wanted to expand upon those notes a little and talk more…
I recently wrote about dlmalloc and how it is a poor choice for a memory allocator for console games. As I explained in my previous article, dlmalloc has two major limitations.…
Those who have used OpenGL are probably aware that you can only invoke OpenGL procedures for a given context on the thread that currently owns it – usually, the main thread. This leads many…
This article series shows you how to port to Native Client via a Chrome Trusted Plugin. This will allow you port your platform code over to Chrome's Pepper APIs while using Visual Studio for…
If you search around on the Internet, you will find various opinions about whether it is a good idea to provide an explicit empty definition of a destructor or if it is best to let the compiler…
In my last article I promised a follow-up description of the memory allocation system that I wrote for Despair Engine during the development of F.E.A.R. 3. Before I get to that, however,…
In C++, separating the interface (public declarations) of a class from its implementation (private methods, members and definitions) serves several useful purposes: Implementation details are hidden,…
Modern GPUs filter seamlessly across cube map faces. This feature is enabled automatically when using Direct3D 10 and 11 and in OpenGL when using the ARB_seamless_cube_map extension. However,…
In an earlier post, I pointed out the importance of using a lightweight mutex. I also mentioned it was possible to write your own, provided you can live with certain limitations. Why would you do…
In my epic trilogy on sensible error handling I’ve arrived at the third and final category of errors — warnings. Warnings happen when the user does something that is kinda sorta bad,…
In my last post I wrote that there are three kinds of errors that we game programmers need to deal with: Unexpected errors Expected errors Warnings An unexpected error is an error that is unlikely…
The first part in this series on Reflection in C++ gave a high level overview of many of the possibilities open to you when adding reflection to your games. In this second part I’m going to go…
I've spent the last couple of days rewriting the task manager in the BitSquid engine. Task management is an important topic in our glorious multicore future, but it is hard to find good practical…