I Am Making a Game Engine

Why am I creating a game engine? Because, I am creating a game, of course! Specifically I am creating a multiplayer, casual, web game engine to implement the hit game Noace. What is Noace? Well if you are in the Chicago area, hit me up and we can play a game with a standard poker set of cards. However, I will be using the engine to implement the complete version of the game with 60 cards instead of 52. Noace will be the flagship title for the engine, driving development, new features, and direction.

Why make a new engine?

When you make a game of any large enough scope with any overarching design principals, you usually end up with a game engine, actually this is how many early game engine’s were made. The goal is to create systems that facilitate my development of Noace as a seperate application: the game engine. I am not using other engines because I am trying to make a particular game, not all the games an engine was made to support, I want all the features of my engine to facilitate that singular game rather than being bogged down in irrelevant systems. Also making a game engine isn’t that hard when you actually are making a game, I find most failure in the indie engine space has to due with failure of the game, and if you have no game, then it is even worse. Luckily, Noace is a physical game that already exists, so I don’t really have to worry about scope creep in the gameplay(there is engine scope creep though, so I need to watch out).

How will the engine work?

The engine is a Zig application that will use a Lisp as the project / game config and scripting language, the engine will compile you project into a Golang webserver that serves your game over the web. You may be asking “Doesn’t this seem overly complex to have Zig code that reads Lisp to generate Golang/HTML/CSS/JS?” Actually, I don’t think it is. Lisp is there because it is a really easy programming language to parse, which simplifies a lot. Golang is a probably one of the best languages for a web server and because of it’s simple design, it is really easy to code-gen for. No matter what I wrote the engine in, I would need to generate HTML/CSS/JS code, unless I hand rolled everything, but the whole point of making the engine is so I don’t have to do this. Yes there is a lot of complexity here, but multiplayer web game engines that don’t just render the whole game in the canvas(I want to take advantage of the DOM) are pretty complex, generally game engines are really complex in general. I fairly against this idea of having one language for your entire codebase(I am leaving my JS days lol), I generally think it is much better to segment things based on how they are actually used.

Licensing

If you didn’t know I am a big fan of the AGPLv3. So therefore the entire engine will be licensed under the AGPL. Also all generated files from the engine will be licensed under AGPL, basically making any game made with the engine copyleft. Of course I can’t control how the Lisp project code is licensed(or any other project files in general). However, Noace will be fully AGPLv3 as well(or Creative Commons Attribution-ShareAlike 4.0 International License for non code assets). I find this really exciting!