When you create a game, chances are you're not going to write everything from the ground up. You're going to use a game engine to do some of the heavy lifting for you. Most popular game engines run on C++, a challenging and often unintuitive programming language even for seasoned game developers.

So most game developers create connections between an easier language like NodeJS or Python and the C++ at the core of a game engine. These are called language bindings, and they allow developers to build much of a game with whatever programming language they prefer. In this article, we will explore how this is done with Lua.

What Is Lua?

Lua is a powerful, efficient, and lightweight embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.

Why Lua?

Game developers like Lua for three reasons:

  1. It's lightweight. This makes it easy to embed into the C++ core of a game engine without it having too much of an impact on the engine's binary.
  2. It's performant, especially with LuaJIT enabled.
  3. It's easy to integrate. More specifically, it's easy to bind Lua with C++ when compared with the binding processes of other programming languages.

How Does a Lua Game Engine Work?

Most popular game engines use C++ at their core. It's the programming language used to develop the low-level graphics interfaces, physics integrations, input management, audio management, video rendition management, et cetera.

The Lua language source code is placed onto this C++ core and compiled together with it. But that doesn't automatically expose Lua's functionality. For that, you need to use its API, which will create Lua Modules attached to actual C++ code.

For example, the love2D game engine implements various Lua modules like love.audio, love.graphics, and love.physics that integrate directly with the engine's audio, graphics, and physics functionalities.

So the engine is bootstrapped with C++, after which the Lua API is used to load Lua code from an external file (which could be plain text or compiled with the luac compiler). This then runs the Lua code you wrote.

Time to Try Lua

Compared with other high-level languages, Lua is brilliantly performant because of how lean it is, and how easy it is to integrate with the C++ core of any game engine. It's what has enabled Lua to be used by successful games like World of Warcraft, Angry Birds, and Roblox.

Even though C# has now become a prominent language in gaming, I have no doubt that Lua remains will continue to be widely used for many years to come.