In my previous article about StarCraft I talked about why we rebooted the project and changed it from a follow-on to Warcraft — derisively called “Orcs in space” in 1996 —…
I've recently been doing a major rewrite of one of our core engine systems, the graph that we use for our visual scripting language Flow. Taking it from something that looks like this: To something…
After many years programming solely on Windows I have recently started working on Linux – Ubuntu to be precise. One of the things that I have had to learn is the very different ways in which…
There have been some questions about the performance benefits of using vertex array objects (VAOs) recently. Vertex array objects are part of the core OpenGL specification and you must have one bound…
I’m planning a post on how to maximize build parallelism in VC++, but first I needed to create a simple project that was slow to compile. Creating such a program was an interesting exercise in…
This old blog post about the Nebula3 Application Layer is the 3rd-popular-post on my blog, very likely because it was linked from Stack Overflow. I always wanted to write a followup to this post,…
A while ago I wrote a Cross platform shaders in 2012 post. What has changed since then? Short refresher on the problem: people need to do 3D things on multiple platforms, and different platforms use…
The free lunch is over and our CPUs are not getting any faster so if you want faster builds then you have to do parallel builds. Visual Studio supports parallel compilation but it is poorly…
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…
A plugin system is a useful way to allow developers to extend the capabilities of a game engine. Of course, an engine can also be extended by directly modifying the source code, but there are several…
(Also posted to upcoder.com, number 6 in a series of posts about Vectors and Vector based containers.) A few posts back I talked about the idea of ‘rolling your own’ STL-style vector…
Distributing a game on Linux can be a little intimidating, and there are definitely pitfalls. The main problem is making sure your game runs on all of your users’ machines, and outside of…
If you’ve ever had customers report errors like these, then this post might be for you: ./foo: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.16` not found (required by ./foo)…
With some discussion going in a previous article about how to actually implement some sort of component system for a game engine, without vague theory or dogma, a need for some higher level…
Special thanks to Danny Frisbie for a nice discussion on the PODHandler implementation! Let me start off by saying that optimizations really only need to be applied to bottlenecks. In order to…
You may have heard of data-oriented game engine design, a relatively new concept that proposes a different mindset to the more traditional object-oriented design. In this article, I'll explain what…
TL;DR: how to build Android NDK applications with cmake instead of the custom NDK build system, this is useful for projects which already use cmake to create multiplatform/cross-compiling build…
What to do after you get promoted into a leadership position should be a trivial question to answer, but in my experience the opposite is true. In fact sometimes it seems to me that leadership is…
The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community. The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent…
(Number 5 in a series of posts about Vectors and Vector based containers.) Another response to feedback to this previous post (roll your own vector)! In that initial post I talked (amongst other…
The most interesting thing about this port is the optimisation feat ahead of us. Vessel was already (mostly) running on the PS3 at the start, but needed to run much, much faster. So, where does one…
Hi everyone, my name is Ben Driehuis and I am a senior programmer at Overbyte. Vessel uses Lua to do it's glue gameplay code, allowing it to use most of the systems and tech built up throughout to…
Even though Molecule’s run-time engine exclusively uses binary files without doing any parsing, the asset pipeline uses a human-readable non-binary format for storing pretty much everything…
(Number 6 in a series of posts about Vectors and Vector based containers.) A few posts back I talked about the idea of 'rolling your own' STL-style vector class, based my experiences with this at…
Welcome to the second post in a series of blog posts about how to implement a custom game engine in C++. As reference I’ll be using my own open source game engine SEL. Please refer to its…
A common question for those designing a new game engine is "how do I handle input?" Typically, there's a few core issues that pretty much every game faces, and unlike many areas of game…
What is Component Based Design? Component based engine design was originally pioneered in order to avoid annoying class hierarchies that inheritance introduces. The idea is to package all…
If your OpenGL/GLSL program involves multiple shader programs that use the same uniform variables, one has to manage the variables separately for each program. Uniform blocks were designed to ease…
One of the problems I’ve experienced using third-party DLLs is the way that they handle new and delete for C++ classes, which can lead to memory leaks or even memory corruption. This was a…
Since I’ve been developing online games since 1991, many folks have asked me to recommend a 3rd-party network library for their game project. Unfortunately, I can’t! At least I…
Before Instagram was a billion dollar company, Mike Krieger posted a presentation called Secrets to Lightning Fast Mobile Design about how his team made the Instagram photo-sharing application feel…
One of the biggest hassles in programming is handling error conditions. It’s also one of the most important parts to get right because improperly handled errors lead to security defects and…
At a certain point in every programmer’s career we each find a bug that seems impossible because the code is right, dammit! So it must be the operating system, the tools or the computer…
The first-ever multiplayer game of Warcraft was a crushing victory, an abject defeat, and a tie, all at once. Wait, how is that possible? Well, therein lies a tale. This tale grew organically during…
A while ago, I wrote a blog post on energy-conserving wrapped diffuse lighting [1], noting that following standard formula ended up adding a lot of energy: Instead, we should normalise and use this…
I love physically-based rendering, and one of the most important aspects is making sure all your lighting is energy-conserving. Otherwise, you’re prone to end up with things that look too…
On my personal blog I once made the very opposite of a bold assertion in claiming that the NES classic Super Mario Bros is the gold standard in good platformer mechanics. I also mentioned Tim…
What should a good platformer feel like? If you wanted to you could stop and think about it for a minute, but fortunately you don’t have to because I am here today to argue that it should feel…
This article is a follow-up of a previous article I wrote, 11 Tips for making a fun platformer. Once again, this article focuses on platformers, but the philosophy behind each idea can be applied to…
A platformer is a game in which a character runs and jumps around a level consisting of platforms floating in the air. Although this article focuses on platformers, the philosophy behind each…