You may or may not know (if you’re here, maybe you even care), but I’ve been working on an open source 2D game engine since April 23, 2016. It’s called Macabre2D and it’s built on top of the wonderful MonoGame Framework. I just thought I’d collect some thoughts on Macabre2D, so here we go!
What’s in a name?
Macabre2D’s name came from a project that I wanted to work on at the time. I was prototyping a game called Cosmic Macabre in Unity, but there were certain features of Unity that kept really bothering. More on that later, but I named the engine after Cosmic Macabre, which I had planned to make as my first game in the engine. I’m not so sure it will be the first game I make anymore, but it’s still an idea that’s floating out there and evolving in my head and on my Trello boards.
Why even make your own game engine?
Wow, that’s a great question! Glad I asked myself this. It’s a question I’ve struggled with for a long time. I really want to make games. Like, I really really want to make games. But making this game engine means I’ve spent the last 3+ years not making games and that’s pretty damned counterintuitive; however, I wrote earlier that I had been working in Unity and kept encountering things that bothered me. Mostly tiny things like physics jittering and animation issues. At the time, 2D really felt like a second-class citizen in the Unity environment and I only had an interest in making 2D games. More than anything, though, I was annoyed by how little control I had. If something in Unity’s core systems didn’t work exactly the way I wanted, there was no way to open it up and adjust it.
So I went out into the world and researched other game engines. I looked at Unreal Engine 4 (I have previous experience with UDK), but it felt like overkill for the small games I intended to make. Search-engined my way past a ton of frameworks and engines. A lot of the 2D ones seemed focused on mobile. That’s great! But also I don’t want to make mobile games.
Ultimately, I landed on MonoGame. As a software engineer, I have a ton of experience in C# and I’m a big fan of the language as a whole. Syntax and organization in MonoGame didn’t seem so far removed from Unity that I couldn’t transition. On top of all of that, it was also open source. Any time I wanted, I could dig into the source and see what was happening. Match made in heaven. Nearly perfect. The only kicker was MonoGame is only a framework, it isn’t a full-fledged engine. It does a lot of work for you, but it doesn’t have a editor, it doesn’t handle physics, and it’s not concerned about serializing scenes/levels for you.
I guess that’s when I got to work. I would build an engine on top of MonoGame. Macabre2D would have an editor, handle physics, and it would certainly serialize my scenes/levels for me.
Absolutely. This is three long years of my life dedicated to a side project that no one’s using yet (myself included). If I could go back to April 23, 2016, I’d probably still pick MonoGame, but I’d start developing a game before an engine. I’d let the engine evolve naturally out of my needs for the game. I’ve spent so much time working on features that aim to be generic enough for anyone to use, when I should have been working on features that I would use. It’s a constant debate that goes on in my head every time I’m struggling against getting something working. IS this useful for me, or do I feel obligated simply because other engines can do this?
It’s a complicated feeling. If I can get this engine to be successful and working, I plan to use it for more than just one game, so I could be helping future-me by making it generic. Or I could be adding features that will never be used. Hard to know, but I’m sure time will tell.
So what does it do right now?
Right now, Macabre2D is in super-ultra-mega-pre-alpha. You can download the source code on GitHub and mess around with it, but I wouldn’t recommend making a game with it. The editor only runs on Windows (sorry, I didn’t want to spend time learning a new GUI framework and I know WPF from my day job) and it currently only builds for Windows, but it can theoretically build for any platform that MonoGame is cool with. The coolest thing I added was a simple physics engine. IF you download the source code, there’s an example physics project that lets you bounce around two circles.
Asset loading with metadata is in. You can put in sprites, fonts, and audio. There’s a really simple sprite animation system. Pretty soon, it will have something I’m calling “binary tile maps”, which is a tile map with only one sprite. Once that’s working, I’ll probably move on to a tile map with full tile sets.
There might be an actual alpha release in the near future if I can get enough features in to start using it for personal projects.
But that’s all I’ve got for this post. Honestly just a scattershot of thoughts. Hit me up on twitter if you’ve got any questions or comments on Macabre2D.