Lumi Game Creator - A Game Editor Proposal


At the end of June I made a native interface with a custom embedded graphical widget where the goal was to make a level editor for Lava.

"For now, I'll keep looking for simple (preferably not raw OpenGL) solutions with hardware acceleration." - and I found one! Turns out QT and SFML work very well together.

I'm not a fan of SFML's very object-y approach (and a few nit-picks t. sprites), but I'm a big fan of how simple the API is as a whole. Getting started was very easy.

I created a generic graphical widget (a SFML window which inherits from - and adapts to - a generic QT widget) to inherit from and add specific behaviour per widget, which allows me to do things like this:

A video of my QT/SFML interface showing a user selecting tiles from a set and placing them onto a canvas to create a level.

This was coming along very well, but I knew this project wouldn't be fruitful even when it's completed:

Lava is something I'm not a fan of in any pillar. It's written in D (by far my favourite language ever, but nobody uses it) and it's just a thick abstraction layer around SDL with a few game-domain logical systems thrown in.

You can find hundreds of thousands of projects exactly like this (better or worse) on GitHub in any language you can think of, all created to fit the author's intuition. At the fear of making another project that is just my own personal engine bespoke to fit my own intuition, working on this level editor for Lava (alongside turmoil while making my own game) has inspired me to make one last stab at a simple game engine.

The Engine Plan

Something like GameMaker. GameMaker is brilliant, but there are a good handful of changes I'd make to it. First of all, I'd-

"GameMaker, but with Lua"

Well, yeah! GameMaker, but with the utility of Lua would solve 90% of the problems I have with GameMaker.

My goal is to make a 0.0.1 prototype of "GameMaker but with Lua" by the end of the month. Pretty much recreating GameMaker gives me a great reference to work from and the result will give me a great starting point. We can refine from there.

Tweeting that I'll have a usable 0.0.1 by the end of the month.
I've read the hundreds of 'don't share your goals' articles, I've found sharing goals is fantastic for getting
things done. Peer pressure is a hell of a drug.

I'm not sure how possible this is, but deadlines and accountability are great motivators.

There are two pillars in mind for this engine:

  1. The enemy of art is the absence of limitations. People are really, really good at making a lot with a little. Small sets of tools or concepts force people to be creative. (t. Minecraft, Scratch, Pico-8, every game jam ever, the human era since the stone age, etc.)

  2. Iteration time is everything. This is much truer with creative hobbies, especially something as intangible as experiences. When beginners make programs, they'll run it for every new line they add to make sure it still works. When artists are planning out a painting, they make thumbnails.

There's a couple of ways to make game prototypes (like paper prototyping) but nothing really beats playing a demo. Which is why seeing results quickly is everything. Slow results kill projects, killed projects kill souls.

This engine and editor will accomodate quick prototypes as well as it can.

(I've produced a small PDF to act as a semi-formal plan.)

Why Lua?

  1. Lua is a game-hacker's first language. It's primary adopted purpose is to be the embedded scripting language in games (Tabletop Simulator, Garry's Mod, Roblox). Folks that want to get into this field has probably heard of Lua.

  2. It's famous for being nearly (looking at you, metatables) fully learnable in less than 2 hours for anyone familiar with beginner-basic coding concepts.

  3. Lua is a programmatic "small toolkit". All languages share the primative concepts that make it a language (functions, arrays, etc). Lua is that, and only that. There are no (or very very few) fancy gimmicks or flourishes. It is a minimal language like no other.

Final Words

That's all I have for you now! This post is getting pretty long, I could talk all day about this. The best thing I can do for now is get to work. I'll catch you later with a product in my hands.

Thanks for reading!

Go back home