• entries
  • comments
  • views

About this blog

Learn about game development technology

Entries in this blog


Version 4.5 release plan

Version 4.5 will feature official support for VR (Vive and Oculus) and a new super realistic vehicle system.  These features are more or less already done, but need some work to make them release-ready.  The new vehicle system is so good, and I am so grateful to Julio for his help making this happen, that I think we might do a racing-themed winter tournament. :D  I am trying to think of a clever pun to call it.

At the same time, I have implemented the first build of version 5 in the same source code, adding Unicode support and using C++11 shared pointers for all objects that were previously created as pointers.  The changes to the source code were extensive, and though I used preprocessor definitions to separate the 4.x and 5 builds, there may be some errors in the engine at this time.

So the next few weeks is going to be a process of testing the engine and documenting the new features.  I plan to have a beta of 4.5 up shortly on Steam.  4.5 will be released before Christmas, along with the first beta of version 5, for people who bought the $5 subscription.  The enterprise version will be updated a couple weeks after the release of 4.5.


My endless quest for ever-cheaper labor has brought me to the capitol city of Ukraine, Kiev.  Programmers and artists here can be hired for about $20,000-$30,000 a year, and I believe minimum wage (yay for interns!) is about $0.75 an hour.

I've been to all the major city American cities, and spent time in several major European cities including London, Berlin, Stockholm, and Copenhagen, which I feel gives me a little perspective on what makes a metropolis tick.  So here are a few things you might not have ever heard about Ukraine.

Ukrainians are Huge Fans of Half-Life 2

This city is very clearly modeled after City 17 from the Half-Life series of games.  It's amazing that they were able to construct such detailed reproductions of City 17 in only ten years, since the game was released in 2006.  The attention to detail is truly remarkable, but I feel they kind of ripped off the entire aesthetic and should have done something of their own.


Total rip-off.

This may have been the actual building that inspired the Citadel.

It's been done!!!


Seriously though, it's very clear the Citadel was meant as a metaphor for the encroachment of modern technology (or capitalism) on an old culture steeped in tradition.

Don't Judge a Book by its Cover

After a 17 hour plane flight (actually, three planes), and a lost bag (more on this later), I finally made it into the city center to find my new accommodations, and was greeted by what looked like a nuclear bunker from the cold war.  When I saw the outside I seriously almost checked into a hotel because it looked so dirty and run-down.  I thought for sure there would be rats and people shooting up heroin inside.


When I finally figured out the odd lock mechanism, the entrance was even worse.  This is a straight-up ripoff of S.T.A.L.K.E.R.:




But when I got into the apartment, everything was completely pristine:


Why Make a Crosswalk When You can Build an Underground Mini-Mall?

The major intersections in Kiev do not use crosswalks at all, or pedestrian bridges, or anything else to move from one side to another.  Instead, they build tunnels under the roads for people to walk through.  I imagine at one time under the Soviet Union these were probably utilitarian tunnels, but since the onset of capitolism every extra square foot of space has been dedicated to selling you stuff.  Which is cool, because I got some really nice things there at low, low prices!


The entrance looks like a subway station.


The inside is a combination of an American strip mall and a Chinese bazarre.


Things get scarier at night.

You Can Buy Animal Parts at the Grocery Store

Ukrainian supermarkets are very modern and sophisticated.


But like everything else compared to the west, it's just a little more brutal.


Texas chainsaw massacre-level.


Bambi's mother looks delicious.


Mutant turkeys and pseudobunnies, presumably from the zone.

The real question is, who has better quality food?  Although I am repulsed by the barbarity of the Ukrainian meat market, it involves less processing and thus fewer alterations and opportunities for introduction of bacteria.  Amazingly, I did not pick up any "rotten meat" stink at all, even though hundreds of pounds of dead animals were laying out in the open.


EuroTrip II

I am now in possession of the official Leadwerks USB drives.  Weighing in at 16 GB, they look fantastic.


These will be shipped out shortly, along with the posters from the last game tournament.  I've been working behind the scenes on some big things that took my attention, but I am not yet ready to reveal any of this.  Because of the timing on this, we are going to do a Leadwerks Fall Games Festival starting in September.

I am going to spend the rest of the summer in Europe, where I will be accompanied by my handy-dandy Gigabyte Brix Pro provided to me by Intel at the first Steam Dev Days.  Thanks Intel!:


I will be working on NAT punch-through, Leadwerks 5, and making bug fixes.  I will also be meeting with developers in countries with a much cheaper cost of living, for the purpose of potentially expanding the company's development capabilities so I can bring you more cool stuff.


A new build is available on the beta branch.  I am putting it out tonight because I want to give you guys as much lead time as possible.

I have not tested all hardware yet, and there were a lot of shader updates, so there could easily be a compile error on AMD or Intel cards.  Will test those out in the morning.

New camera commands for fog:

virtual void SetFogColor(const float r, const float g, const float b, const float a);
virtual void SetFogAngle(const float start, const float stop);
virtual void SetFogRange(const float start, const float stop);
virtual void SetFogMode(const bool mode);
virtual Vec4 GetFogColor();
virtual Vec2 GetFogAngle();
virtual Vec2 GetFogRange();
virtual bool GetFogMode();

This is scheduled to be released on the default branch this Tuesday.

Also useful:



A new build is up on the beta branch, for Windows and Linux, with Lua and C++ support.  This is a full update.

Version 4.4 will be announced June 26th, and this will go on the default branch some time next week.

I was not able to get the new vehicles working in time, and It will have to be added in an update.  Version 4.4 will have vehicles disabled.  If you need this functionality, stick with version 4.3.

A big thanks for all the people who are helping to test it.


Leadwerks Game Engine 4.4 has been updated on the beta branch on Steam.

  • Networking finished and documented.
  • GUI finished.
  • All new physics features finished.

The character controller physics and picking up objects has been improved and made smoother.  There is a problem with the player sliding down slopes, as seen in the FPS Character Controller example map.  I will work this out.

I also noticed during testing that picking up some objects in the FPS / AI map will freeze the game.  Will check it out.

I have not actually tested compiling on Linux yet, because my Linux machine is in the office and I am at home right now.  I'm heading in this afternoon, at which point I will complete Linux testing.

The only other problem is that vehicles are not working yet.  I'm not sure yet how I will proceed with this.

Updating C++ Projects

The following changes are needed to update your C++ projects:

Visual Studio

Add these include header search directories:

  • $(LeadwerksHeaderPath)\Libraries\NewtonDynamics\packages\thirdParty\timeTracker

Add these input libraries:

  • newton_d.lib;dContainers_d.lib;dCustomJoints_d.lib; (debug)
  • newton.lib;dContainers.lib;dCustomJoints.lib; (release)


Add these include header search directories:

  • $(LeadwerksPath)/Include/Libraries/NewtonDynamics/packages/thirdParty/timeTracker

You also need the dev files for libcurl:

sudo apt-get install libcurl4-openssl-dev

This is pretty much the finished 4.4, so please test it and post any bug reports you have.  Thank you.


Forum Update

The forum software has been updated to a major new version.  This completes my effort to give the entire website responsive design, and ensures we continue to receive security updates.  The responsive design part is really for SEO, but it is kind of cool to be able to browse the entire site on your phone without zooming in.

Documentation has been switched over to the new system here, which is independent from the forum software:

The entire site is now using SSL on every page, again for SEO purposes.

There are a few bits that need improvement, but overall it's a solid upgrade and I think you will find the new site to be very helpful.  I've added a new Q & A forum where you can get technical assistance and rate the answers.  Code formatting has been improved a lot, and the notifications system does a really good job of catching replies to your posts.  (If you're receiving a lot of emails you can disable this in your account settings.)

Finally, you can now set a cover image to show at the top of your profile, which is pretty cool.


I've taken your suggestions and incorporated the fixes into the new documentation system here:



All classes and commands are alphabetized, with classes listed first.


All pages in the API Reference should be working now.


If a page does not appear in the old docs, or if a command does not have an example, it will not appear in the new docs, as I am not changing the content right now.


Please let me know if the table of contents of pages have any errors.


I'm asking the community to look over the new documentation system and find any mistakes before I sign off on the project. The tutorials are not completed. The API Reference should be completed, although the main API Reference page is not showing anything right now.



Here are my notes to the developer who is working on the docs:

Thank you for the update. I have fixed the table of contents page so that clicking on a link in the tree view will navifate to the correct page. This should make it much easier to test.


The following corrections are needed:


A new <subclasses> tag has been added, to show a list of all derived subclasses on a class page:



This is what it looks like for the Entity class page:











The App class can be removed from the TOC. Rewriting the example functions eliminates our use of this.


The Object class page is missing.


In the table of contents, all camera function links after GetClearColor() are wrong.


There is no Emitter::ClearPostEffects() function. Please remove this from the TOC.


I am asking my community to find any other problems. Overall, it's looking great.


Please review the material and make sure everything meets your satisfaction, and leave your comment below if needed. I figure many sets of eyes will be more efficient than just me looking through it. This is your documentation, and I want to make sure it's the best for you. Thanks for your help!


The table of contents and index can now be used to navigate to a page:



Search is also working.


Almost all of the commands are filled in, with examples for Lua and C++, updated to use the standard main() entry point, or in the case of Lua, just a main script with no function.


Function arguments and syntax will also be displayed in C++ or Lua data types. So if you have the docs set to Lua, you will just see "number" instead of "const float blah blah blah..."


I am going to review the material and then I will ask the community to go through it before I give my freelancer the final OK.




The new docs system is mostly working now:




  • Treeview list of all tutorials and API classes and functions.
  • Alphabetical index (generated automatically from the table of contents).
  • Search (with autogenerated search index).
  • Switch back and forth between languages, with cookies to remember your preference.
  • Entire examples are automatically selected when you click on them.


  • Table of contents doesn't yet navigate.
  • I would like to pretty-up the URLs using .htaccess rewrite rules.


Documentation is being loaded from XML files. I find this easier than a database, which is quite opaque to me. You can access some of the XML files being used here. MartyJ even made a cool template for the data on his site here.


At this point I think I can outsource the actual content creation to Upwork. This will involve copying and formatting our existing documentation into XML files, as well as updating all the examples to work by just using a main() function instead of the old App() class that we don't really need. I will be posting the job on that site soon.


I've been getting good results storing documentation data in XML files. This allows me to make changes to the way documenation is displayed, without updating hundreds or thousands of pages. I can also write documentation without as much HTML markup. For example, bullets can automatically be inserted in line breaks for the syntax info. Javascript-based search engines usually require all page contents to be store in an array, so this gives us an easy way to collect that data.


Since XML is a known standard, this makes it a bit easier to outsource the documentation content.


Here is a sample file I am working with.

<?xml version="1.0"?>



<description>Sets the position of an entity in 3-dimensional space, using local or global coordinates.</description>


void Entity::SetPosition(const float x, const float y, const float z, const bool global = false)

void Entity::SetPosition(const Vec3& position, const bool global = false)



nil Entity:SetPosition(number x number y, number z, bool global = false)

nil Entity:SetPosition(Vec3 position, bool global = false)



x: X component of the specified position.

y: Y component of the specified position.

z: Z component of the specified position.

position: the position to set.

global: indicates whether the position should be set in global or local space.



An entity can be positioned in local or global coordinates. Local coordinates are relative to the entity parent's space.


If the entity does not have a parent, local and global coordinates are the same.


<img src='img/552px-Space.png' />


Leadwerks uses a left-handed coordinate system. This means that if you hold your left hand as shown below, your middle finger, index finger, and thumb will point in the directions of the X, Y, and Z axes, respectively.

<img src='img/image2.jpg' />



--Create a window

window = Window:Create()

context = Context:Create(window)

world = World:Create()

local camera = Camera:Create()



local light = DirectionalLight:Create()


--Create a model

model = Model:Box()

while true do

if window:Closed() or window:KeyHit(Key.Escape) then return false end









#include "Leadwerks.h"

using namespace Leadwerks;

int main(int argc, const char *argv[])


Leadwerks::Window* window = Window::Create();

Context* context = Context::Create(window);

World* world = World::Create();

Camera* camera = Camera::Create();

camera->SetRotation(35, 0, 0);

camera->Move(0, 0, -4);

Light* light = DirectionalLight::Create();

light->SetRotation(35, 35, 0);

//Create a model

Model* model = Model::Box();

while (true)


if (window->Closed() || window->KeyDown(Key::Escape)) return false;

model->SetPosition(Math::Sin(Time::GetCurrent() / 10.0), 0, 0);





context->DrawText(model->GetPosition().ToString(), 2, 2);



return 0;





Even the table of contents can be store in XML, which provides a listing of all pages and a way to automatically create the search index and a list of all topics:

<?xml version="1.0"?>








<title>1. Editor</title>



<topic><title>1.1 Editor Interface</title><openstate>true</openstate></topic>

<topic><title>1.2 Scene Panel</title></topic>

<topic><title>1.3 Textures</title></topic>

<topic><title>1.4 Materials</title></topic>

<topic><title>1.5 Models</title></topic>

<topic><title>1.6 Terrain</title></topic>




<title>2. Games</title>


<topic><title>2.1 Marble Platformer</title></topic>




<title>3. Lua Programming</title>


<topic><title>3.1 Introduction to Lua</title></topic>




<title>4. C++ Programming</title>


<topic><title>4.1 Introduction to C++</title></topic>






<title>Script Reference</title>







<title>API Reference</title>















I'm not entirely happy with the output of HelpNDoc for a few reasons. It outputs a great variety of formats, but doesn't do a spectacular job of any. I hoped to use CHM for local help but these do not scale well on high-resolution displays, and the technology will not be updated by Microsoft. HelpNDoc's HTML output is okay but not great, so I started experimenting with my own HTML to get exactly the look and functionality I want.


RIght now I have a javascript-based treeview for navigation, breadcrumb links, syntax highlighting for Lua and C++, responsive design, the ability to switch between C++ and Lua documentation on the same page, and the code examples select the entire block when you click on them. There's still more work to do, but so far this is the most promising method that is giving the best results. I am not sure yet if this will be a lot of PHP files or a utility program that spits out a bunch of HTML files.






I'm going to focus on the format of the data and then I'll post a job on Upwork and find someone else to do the grunt work of filling in all the content.


Our website has been updated with a new look and responsive design. Here are a few highlights.


Landing page:



Product pages:



Screenshots used in the site from games will display the title and author when you hover the mouse over them.


Responsive layout scaled for phones:



Clearer writing that says exactly what Leadwerks does and who it is for:



Dark gallery and video pages:



Sleek screenshot pages:



I left the Workshop pages as-is for now. The forum software is going to be updated and a new skin will be designed for the new version of the community software.


I have a few preview images to show you my progress with the implementation of my design for the website refresh. Enjoy.








Here's a new version of the view image page. It's pretty bold. The image stretches to its max dimensions, and a dark background is shown beyond that.




Working with a dark background for the video and gallery pages, and it feels pretty natural. Information pages with lots of text use the light theme, while image-heavy artsy sections use a dark theme so you can focus on the content.




This is close to finished:




Website Concepts

Here are some concepts I came up with for the site redesign.








The bold no-bull**** interface of itch.io inspired this design:




I think what will work best is if the designer takes my rough sketches, turns it into a clean design, and implements it with clean code.


I don't think we can change the whole site over at once without me losing control of the creative process and having runaway costs. I want to focus on the pages I have shown here and establish a foundation I can experiment with and iterate on.


Website Design

With the upcoming uncertainty that Steam Direct introduces to Steam sellers, I am putting more effort into our website, because it may be the primary channel through which new users discover Leadwerks in the future. Although the functionality of our site is awesome, the visual design is rather outdated and it's time for an actual designer to take over. I've got a rough idea of what I want the site to look like, but beyond that I am happy to let someone else figure it out.






I plan on the design using lots of big images, and we have a large collection of high-res renders made with Leadwerks that will look great.


Website Updates

I've successfully pulled every website page out of the Invision Power Board CMS that I can:


















These pages load independently from any of the community software files, so the website and community can be updated separately.


I've taken the web design as far as I can, which is better than most designers would do, but not as good as I want. The website really needs to sell the software. Now I am looking for a high-quality redesign, which I expect to cost a fair amount of money. I'm primarily looking at design firms in the SF bay area who have experience making AAA game websites.


The community software will be updated to the latest version, which breaks our skin and other customizations. A new skin will be designed that will be similar but not identical to our current look.


At one time, I tried to use IPB for everything, including commerce, a gallery, and downloads, but I don't think a CMS can be very good at all things. We're only using IPB at this point for the forum, blogs, and a few custom databases and pages. Steam is working well for screenshots, videos, and downloads (Workshop), and I use custom PHP scripts to retrieve and display that information.


The beta branch of the editor has the Workshop home page set to the new location and everything should work without a hitch.


The documentation is also being separated out into a different system that is better suited for that purpose, but that will take more time.


The upcoming changes to the Steam curation process may mean we experience greatly reduced visibility in the Steam store, and I am preparing for that possibility. The plan for quite a while has been to double down on the ease of use and learning that differentiates Leadwerks from every other game development system on the market.

To that end, I have begun translating the documentation into a format that is easier to view and search. The welcome page has been done away with and will be replaced by a start page similar to Visual Studio that displays recent news, allows project selection and creation, and encourages the user to become active in the community. By default, the documentation will probably open automatically in a CHM file the first time the program starts.

We're relying much less on IPB (our community software) nowadays, and most of the website is being pulled out of that system. The gallery page, for example, now runs with no connection to the forum installation. Eventually we will upgrade the community software to the latest major version, and this move will minimize any disruption to the website.

Meanwhile, the game templates are in the planning stage. The marble platformer template is actually generating a lot of cool ideas and it could be easily repurposed to make an engaging third-person platformer game. I think this will be a fantastic introduction to game development and inspire a lot of creative variations.

The social media accounts are now adjusted to be more selective with the content they repost.

The goal is to make new users the best possible experience learning to make games. It's not enough just to have certain features, I want new users to be religiously enthusiastic when they see what they can do with Leadwerks.


A full update for Windows and Linux is now available on the beta branch which addresses several small problems:





The version of the VC redistributable has also been updated in Steam and will fix this problem if you are having trouble running your game from the editor in debug mode:



Previously, I laid out a pretty complete design of the racing game template I want to build. There's definitely enough there to build out the concept with very little left unanswered.


We are going to have a marble game template, because of its simplicity and ease of learning. However, unless the template really looks like a game people would want to play, it doesn't offer enough "carrot" to inspire people. This idea is less well-defined than the racing game, so I am only in the idea stage right now. There's two big aspects of this I want to figure out: level design and game mechanics.

Level Design

If you look at a lot of this type of game on Steam, they pretty much all just use some random blocks or generic levels and place a ball in it. This is what I do not want:




A game of this type should have a highly ordered repeating geometry.






These examples are more orthogonal than I would like, but it's a start. I definitely want the base of it to be a checkered pattern. I do not want random blocks. See how the Sonic level design uses some trim along the edges to make it look nicer?


Here's an example of some more organic elements mixed into the design:




Here's a nice curve. Not exactly what I want, but it provides some ideas:




I like the curving plastic pieces here:




It should look like a toy kit you put together. The wooden elements are also pretty cool.


So here's my quick summary of what I want in the level design:

  • Mostly orthogonal and diagonal brushes with a checkboard pattern.
  • Lush vegetation to break up edges and make the world less boxy.
  • Curved pre-formed pieces that look like plastic and wooden toys.


Overall I want the world to feel like an old Nintendo fantasy world with an adventurous feel. The music might not be 8-bit, but should have some of that style:



The marble itself should have a distinctive look. Maybe a reflective silver ball-bearing, using the SSG effect to reflect the world around it?

Here are some concept textures.







I am pretty foggy on this because I don't play this type of game. Fans? Moving platforms? Loop-de-loops? Got any suggestions or examples from other games you would like to see me implement? If you have a video of gameplay, that's even better.

The idea is to implement a few reusable mechanics that can be recombined in interesting ways, so that someone can make a finished game just by recombining them and making additional levels. I also favor mechanics that are associated with a specific model so that they are easily recognizable, like fans, magnets, saws, etc.

Tell me your ideas in the comments below.


The path we are on


Previously, I have talked about my plans for Leadwerks and how to get there. In that blog I started with technical specs and went backwards with the path we would follow to achieve those goals. Now I have begun to put some of these ideas into practice and I want to review my plan with you.


I met with a very large academic institution a few months ago and talked about using Leadwerks to teach game programming. This is the whole reason I wrote this blog and did the research included therein. When I put the graph up showing job requirements, it was a very easy sale.




I then gave a short talk to a group of their students who had some web development background, but had zero game development experience. Perfect! These people are my bread and butter. The purpose of this was to gauge interest in a class in game development, and they were very interested.


As I was talking to these people I realized I could not meet their expectations. No one else could either, but I knew at the end of a two week course they would only have very rudimentary ugly games made, not the dreams they had in their head. These people did not know anything about mipmaps, debuggers, texture coordinates, and they did not care. They just wanted to make games.


I cancelled my plans to hold a class because I knew we weren't ready to give them what they really needed. Leadwerks is the easiest way to build your own 3D games, but we are not all the way there yet. No one out there is really giving complete beginners the means to learn to make their games quickly, but we can be the first to do it with a bit more work.


As I stated previously, the documentation is being revised, including an offline copy of the docs. This takes an enormous amount of time because I have to copy, paste, and edit hundreds of pages. I am also revising all the code examples to only use the main .lua and .cpp files and get rid of the App::Start() stuff, which is a holdover from mobile.


The next step is to create a broader selection of high quality game templates. This is the final step that is needed to bridge the gap between game development technology and a complete beginner. The templates have to be polished and feel like a game you would actually want to play. This must happen or everything I have done has been a waste of time.


We are in a race against time to connect with a large audience in a way where they can't imagine life without Leadwerks. If I fail to do that, we will go the way of every other abandoned open-source game engine out there.


So that is what I am working on.


An update to 4.3 is available on the beta branch. This fixes it so the editor is not DPI-aware and will be scaled correctly if scaling on Windows is used. This build is also built with a fresh install of Windows 10 and Ubuntu (but it shouldn't make any difference).


This is a full build for Windows and Linux, with C++ libraries included. Game Launcher is also updated on its beta branch.


If there are no problems with this, it will go onto the default branch in a couple days.


I am going to try something different this time and use the Thunderclap tool to promote the release of Leadwerks 4.4, which I have scheduled for April 3:



Please sign up to help with the launch if you would like to promote it.


Also, there is still time to help the launch of A Demon's Game:



An update is available on the beta branch for Windows, editor and Lua executables only. This fixes a problem in the new light update system:




The animation shaders are also modified and they will appear better: