You are here

Status update

Primary tabs

It's been some time and I decided to write down what actually happened during past few months.

We're finally nearing a new release

Yep, that's right. Things are finally shaping up properly and work continues smoothly. I can't give you an exact date, but there isn't much to do - pretty much some module stuff, finish the UI, finish the FFI migration and pack it all together.


We've fully migrated to the Tesseract engine, which provides OctaForge with a fully dynamic lighting system and a modern, deferred rendering pipeline. Thanks to eihrul and his awesome work, I can now say Tesseract is pretty much ready for use.

A new core scripting library

While this is still a work in progress, I've almost finished a revamped core scripting library. It's much cleaner now, as well as faster and more intuitive. It includes basic things such as Lua extensions, entity system, event system and so on.


Because regular Lua wasn't enough when it comes to performance, OctaForge has been migrated to LuaJIT. That means you no longer have to worry about the performance of your scripts, as LuaJIT features a state of the art JIT compiler with great optimization capabilities, making it a direct competitor of native language implementations.


As a part of the new core library, I introduced a brand new UI system. Same as the library, it's still a work in progress. Unlike the previous one, it's now fully written in Lua! The LuaJIT FFI provides efficient interaction with OpenGL for rendering. The UI itself features a conventional widget set that is flexible and easy to use. Signals are used for events, in a way unified with the rest of the engine. It's also responsible for more things than it was - such as mouse pointer/crosshair drawing and text editing. It provides support for resizable and movable windows, MDI windows, flexible layouting and so on.

Efficient logging

The scripting system now supports the "#log(LEVEL, message)" construct (notice the #). Unlike when you use the regular log function, this only evaluates the arguments when the logging level is actually used. That means you can log debug messages and perform heavy operations in their arguments (such as serializations) without having to worry about performance.

A new console scripting language

The regular scripting API is good for large things, but for console adjustments it's a bit too verbose. Because of that, I added a new console scripting language which is somewhat inspired by Scheme (one of the main languages in the Lisp family). It works by translating the input to Lua. It's implemented in the core library and used automatically with the regular "/command". You can still access full Lua from the console, using "//command".

That's it for now.

There is still quite some work to do, but this is it for now. Stay tuned for more updates. I hope you like the new changes - if you want to try things out, you can check out my Github. If you don't want bleeding edge code, there will be a release for you soon.