#10Collision Detection and More Linux Stuff

This week I started working on collision detection for Rival Fortress. Since I’ll be rolling my custom collision detection/physics solution I had to do a lot of groundwork that you don’t have to do if you pick up an off-the-shelf middleware like Nvidia Physx or Havok. The upside is that...

Faster Cross-Platform Game Testing with Synergy

NOTE: If you are a game developer with access to two or more monitor and an extra PC or laptop, this post may interest you. Cross-platform game development is a wide topic. This post is not about the technical aspects of it. It is about doing your best to offer...

#9It's Vulkan Week

Vulkan was announced this week. It’s looks promising and I can’t wait to start hacking on it to see what’s under the hood. Unfortunately Apple has no intention of supporting Vulkan on OSX, as Metal is the API they are pushing, so I’ll have to choose either Windows or Linux....

#8Embedding Lua for Modding

The engine for Rival Fortress is coming along nicely, and in a few weeks I’ll probably start working on game code. This past week I integrated LuaJIT in the engine. LuaJIT is a just in time interpreter for the Lua language that is lightweight and very fast. Integrating LuaJIT I’m...

#7Reflection Preprocessor in C/C++

This past week I’ve been working on a useful engine feature for Rival Fortress: the Reflection Preprocessor. Reflection is usually defined as the ability of a program to examine itself at runtime. Many programming languages, such as C# and Java, offer built in semantics that make reflection easy. C++ offers...

#6OpenGL Minimal Loader

If you’ve ever worked with OpenGL you know that extension loading is always a bit of a pain. You can either do it manually, by loading the correct library for your platform and getting function pointers for the OpenGL functions you need, or you can use one of the many...

#5Cross Platform Development

This week has been cross platform week for Rival Fortress. I’ve been trying to set up a toolchain that can allow me to easily compile the game on Windows, Linux and Mac, from a single build machine. Since my main development platform is OSX, the first thing I tried was...

#4Offline and Runtime Bitmap Fonts

This week I finally tackled font rendering for Rival Fortress’s game engine. After a few iterations I decided to use pre-cooked bitmap fonts for the debug overlays and True-Type runtime rasterization for the game proper. For both paths I’m using Sean Barret’s excellent stb_truetype library, along with stb_rect_pack to pack...

#3More Game Asset Preprocessing

Last week I talked about the asset preprocessing pipeline that I’m working on for Rival Fortress: essentially all game and engine assets are preprocessed and packed into a single giant file that is optimized for faster loading during runtime. This week, while tackling font rendering, I’ve refined the asset packer...

#2Preprocessing and Bundling Game Assets

Taking a page from the awesome Handmade Hero I decided to pre-process game assets in a format more suitable for game consumption. You can take a look at how Casey approaches it starting from Day 150 of his series. Rival Fortress is a 3D game, so it uses a variety...

#1Hot Swappable Game Modules

Rival Fortress will use a custom 3D game engine that I’m building from scratch in C++ and a bit of Assembly. Currently the only dependencies for the game are SDL, and the truetype library from Sean Berret. The engine is still in active development, but so far the most fun...

Compiling NASM Assembly with Xcode in a C/C++ Project

Last time I talked about how to integrate NASM in a CMake/Clang build, but if you are developing on a Mac you may want to use Xcode to debug your assembly code. Xcode needs a bit of massaging in order to support NASM within a C/C++ project. Getting the latest...

Using NASM with CMake and Clang

Trying to integrate NASM with CMake for the build system of Rival Fortress has been tricky. The documentation on the official wiki is not up to date, and in fact, states that NASM is not supported by CMake 2.6 and below, but fortunately after a little bit of digging through...