goluwa icon indicating copy to clipboard operation
goluwa copied to clipboard

game engine and framework written in luajit

Goluwa · GitHub license pipeline status PRs Welcome

Goluwa is a game engine, framework, a collection of utilities and experiments written in LuaJIT leveraging FFI.

ScreenShot

Features

  • FFI build system to automatically build LuaJIT FFI bindings.
  • gui with focus on automatic layout and GWEN skin support
  • font effects to create outlined, shadowed, etc text.
  • markup language
  • löve wrapper that lets you run Löve games in Goluwa
  • glua wrapper that lets you run GarrysMod Lua in Goluwa
  • entity editor similar to PAC3's editor
  • filesystem with the ability to mount and treat many archive formats as directories
  • source engine formats are supported
Prototyping
  • all resources can be loaded from the internet with urls
  • fonts can be loaded directly from google webfont, dafont and other places
  • many model, image and sound formats are supported
  • most code can be reloaded without the need to restart
  • integration with zerobrane

Structure

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.

-1. goluwa|.cmd

The shell and powershell script that will only download and launch luajit|.exe with core/lua/boot.lua

0. core/lua/boot.lua

Responsible for downloading other binaries, the zerobrane ide, updating goluwa with or without git and launching goluwa. It's mostly lua but some of its helper functions use shell and powershell.

1. Core

Contains the barebone framework that has no explicit dependencies on any external shared libraries.

2. Framework

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.

3. Engine

The engine contains a 3d renderer, source engine asset compatibility, steam integration, zerobrane integration, networking, entities, gui, markup language, etc.

4. Game

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.

Caveats

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.

Credits

  • Garry Newman - I learned programming in garrysmod and many of the ideas and libraries in goluwa were developed in garrysmod initially.
  • Crytek - Playing around with the Crysis Wars SDK was how I started to learn C++. I made oohh which was a garrysmod-like mod attempt. The C++ Lua binder I made there included a standard game oriented lua library which eventualy evolved into goluwa.
  • Ronny - Helped me making the gui when it was made for oohh.
  • Malkia - the source inspiration for doing this entirely in luajit was ufo
  • Morten Erlandsen - Provided help and code with BSP (especially the displacement bit) and supporting linux early on.
  • Leandro Fonseca - Started working on the löve wrapper early on and has helped with explaining how löve works.
  • Somepotato - Started proper font support using a font atlas.
  • ZeqMacaw - The source engine MDL decoding code was based on the CrowbarTool