Given the Unity news and Quake coming up a few times as a good engine to use to make games I decided to post this draft I’ve had sitting around.
I have been messing with RPG Maker MZ these past few days and it has really underlined how great the concept of easy map making combined with having a library of pre-built entities and events is. It's obviously very different from making Quake maps/mods but there is a similarity in spirit I want to compare.
A comparison:
- Mapping tools (easy and fast to build a map with many purpose-built tools)
- Quake: Makes it really easy to build geometry and then apply textures that are aligned and sized properly across multiple sizes of geometries.
- RPG Maker: Makes it really easy to build maps from tilesets, providing built-in handling for passability and layering. Auto-tiles let you do things like draw an entire roof by just creating a rectangle and letting it pick the right tiles for the top, left, right and bottom edges, and the right tiles for the middle.
- Built-in Entities (lots of built-in characters and other objects for your game)
- Quake: All of the built-in monsters and weapons from Quake are usable in your maps/mods!
- RPG Maker: Every RPG Maker has included a default set of tilesets, characters, classes, monsters, spells, etc. You can use them, modify them, replace them.
- Built-in Events (lots of built in functionality that's easy to configure)
- Quake: In Quake, these are still Entities but their purpose is different so I wanted to separate them. An example here is the func_plat Entity. You attach it to a piece of geometry that you want to turn into a moving platform/elevator. You just set how high it should go and how fast it should move and when you jump on it it will rise. ezpz.
- RPG Maker: RPG Maker has an absurd number of Events. Events for changing stats, HP, MP, screen effects, player location, music, and so on. There are also Common Events that are attached to the world/game as a whole and Events you place in a map that can optionally move around using built-in or custom movement routines.
- UI (simple, more akin to regular data entry focused software)
- Quake: Configuring an Entity involves adding properties to the Entity and setting values in a table. For example, setting the height property for the func_plat Entity.
- RPG Maker: RPG Maker's UI is similar to Quake in terms of having you configure Events or Entities using a variety of ordinary looking drop down menus and tables. Its Event system also lets you build some simple if/else and looping structures that are organized much like this post is, with lines of Events/Commands listed and indented to indicate relations.
- Extensions (lots of additional entities/textures/etc made by other people that you can add and take advantage of)
- Quake: These take the form of mods like Copper and Rubicon which provide more functionality via new Entities.
- RPG Maker: These take the form of new tilesets, characters, music, and also plugins that add more Events such as creating weather, dynamic lighting, new battle systems and more.
So having said all that, why do I think so highly of this? One of the main problems with a general purpose game engine is that it's general purpose. That is not to say that general purpose game engines shouldn't exist or are universally bad. We need these types of engines to enable developers to create anything when a developer wants to go off the beaten trail a bit. But being general purpose means you have to support a huge variety of needs with as few assumptions made as possible so that you don't prevent people from making the game they want to make in the engine.
This means that a general purpose game engine can't just provide things like a "Change a character's Magic Points" function. Not everyone's game will have Magic Points! Additionally, if it took this approach it would have to add a huge number of these types of functions for all kinds of genres and it would quickly become a mess that still didn't meet everyone's needs.
So instead these game engines provide flexible APIs that allow you to build these things yourself. You can still skip a lot of drudgery (no need to write code that decides how a 3D model is displayed in a viewport) but much of your game specific features must be built yourself using these abstract APIs and other features provided by the engine.
This can suck! In my opinion learning a general purpose game engine is super boring. There are so many concepts to learn that have nothing to do with the actual gameplay of your game. The time between picking a game engine and putting a character down with some monsters they can fight in a little map can be huge and it's hard to look at things like collision boxes and rigging a model for animation and see the actual game past them. It feels like looking at a stream of Matrix code and trying to see a hot woman.
Purpose-built game engines side step this by narrowing the scope and expectations of what the game engine can do. RPG Maker, Quake modding, Bitsy, Twine, RenPy and so on are all built to make very specific kinds of games (though there is always room to push on those limits and people do that plenty with these engines).
So now, with these kinds of engines, instead of trying to set up something like a Magic system with MP from these abstract building blocks you just use the built-in system and tweak it with dropdown menus and tables. You can often screw around and just try things, poking at the drop downs and then running the game and seeing what happens. It’s all in front of you and more discoverable.
I really like this. It is no coincidence that both Quake and RPG Maker have allowed me to go further in making a playable experience than any other game engine. There is less of a reliance on external tools (tho Quake has its own tool chain you have to set up to compile the maps) so there’s less context switching or having to learn a different tool that works differently.
But not everyone wants to make a first person shooter or an RPG so general purpose engines are needed in many cases. And these engines often have a rich ecosystem of third party plugins to add more concrete functionality, but you still need to learn the engine itself to use these plugins and that still involves a lot of abstract learning.
For what it’s worth I think Godot strikes a decent balance between general purpose and purpose built engines. It’s general purpose but it’s simpler to understand, and resources like GDQuest teach things from the perspective of making a variety of games. GDQuest also has interactive demos of many of Godot’s Nodes so it’s really easy to figure out how you’d actually use them in a game with less abstract thinking.
But it is still a general purpose game engine and intentionally doesn’t provide everything you need. You can build 2D levels in it but not 3D ones. If I was gonna try Godot again I’d probably try the Qodot plugin which lets you import maps created in Trenchbroom. It even supports defining custom entities in Godot that you can use in Trenchbroom just like Quake! So you wouldn’t have func_plat to move a platform around but you could recreate it in Godot and use it the same way in Trenchbroom.
(Unreal Engine also has an equivalent plugin called HammUEr which lets you import maps created in Valve’s Hammer, Trenchbroom and other compatible map editors)
Anyway, that’s it. Presumably before I die in ~40 years I’ll eventually figure out general purpose game engines cuz I like to come back to things and try again but in the mean time Quake and RPG Maker and Twine are doing a good job for me! This post is not meant to convince anyone to do anything and is more meant to say hey, there are these cool tools that make it easier to do certain things, maybe you’d be interested in some of them.
Also I fucking miss Flash.
Edit: thinking about this more, Unreal Engine has some of this with Blueprints, but there are SO MANY different blueprints you can’t just browse through them easily. Many of the blueprints are pretty abstract too and it’s not always obvious how to use them. I usually have to Google “how to do X in UE” and then hope there’s an answer and that answer is good. Something I’ve searched for in the past and didn’t find was like a listing of all the most important blueprints that you’d use the most. UE has a general noise problem where it can do so much that it’s hard to even find the specific things you care about or what they are even called. If I have to Google something I somewhat feel that is a failure even tho it’s a bit unfair. Search engines suck now and not everyone is good at explaining how to do things. Having to curate resources just to get started is exhausting.
