Goluwa is a game engine, framework, a collection of utilities and experiments written in LuaJIT leveraging FFI.
Goluwa is split into 4 directories.
core > framework > engine > game. Going backwards, each directory depends on the previous directory, so if you delete the engine directory the game directory wont load.
The shell and powershell script that will only download and launch luajit|.exe with core/lua/boot.lua
Responsible for downloading other binaries, updating goluwa and launching goluwa. It's mostly lua but some of its helper functions use shell and powershell.
Contains the barebone framework that has no explicit dependencies on any external shared libraries. However to use SSL LibreSSL.
The basic framework utilizing sdl, opengl, openal, etc but does not implement anything. It has a renderer which is neither 2d or 3d, game math library, high level socket library, 2d rendering library, etc.
The engine contains a 3d renderer, source engine asset compatibility, steam integration, zerobrane integration, networking, entities, gui, markup language, etc.
The game folder contains very high level scripts such as Löve2D implemented in goluwa, GarrysMod Lua implemented in goluwa, chatsounds, chatbox, scoreboard, player movement, etc.
While I write all code in LuaJIT, I use some thirdparty C libraries. My goal is to only write glue code in LuaJIT with FFI instead of C or C++.
core is not strictly dependent on anything but LibreSSL for https requests.
framework depends on some media centric libraries like assimp, libarchive, SDL, etc.
docker installed you can run this build everything:
./goluwa build "*"
Then the binaries built will be copied into the
But I have not yet figured out a good way to build these on Windows and Mac.. In theory you could use prebuilt binaries which has worked in the past.
While I want to support OSX and Windows they become low priority due to lack of windows and osx machines. I try to test goluwa in a VM and ask friends but that's about as much as I can do.
Writing everything in LuaJIT also comes with some challenges. I try to write JIT compilable code, especially in areas that are intensive but this is not always easy without resorting to ugly code which I try to avoid.