explorations in 2D game engines
Mar. 19th, 2025 09:03 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Howdy, it's been a minute!
I've been screwing around with development on a personal project visual novel (VN) with a tactics 2D game component (the latter is still in paper prototyping). I have a list of resources at the project site, although half of it is "links to investigate later."
Note that I'm a deeply mediocre low-intermediate coder, but I'm also not starting from zero on coding.
What I've found so far:
- Defold: Free, open source. Comparatively obscure although the devs and the community are active; not as many learning resources, free or otherwise. Specialized for performant 2D output, including for web (HTML5). Uses Lua, can be extended with C++ or C#. I'm investigating a VN engine for Defold, Matchanovel. This is the one I like right now but it's not a mainstream choice.
- Godot: Free, open source, increasingly popular although not quite as many resources as an older engine like Ren'Py or Unity. Uses GDScript (Python-like) or visual scripting (I have not used this because I suck at visual anything). Extremely good interactive tutorial that does start you from zero if you're unfamiliar with coding. That said, there are a fair number of free tutorials for this. For narrative scripting, you're likely to end up with Ink integration (see below) via Inkgd or GodotInk, or a plugin like Dialogic or Dialogue Manager. Apparently has good FMOD integration (audio middleware).
- Ink (Inkle Studios): technically narrative scripting middleware. Free. If you can code basic HTML, you'll find this comfortable. If you only want hypertext web output, this will work as well; it's more usually used in conjunction with Some Other Game Engine. Used for games like 80 Days and Steve Jackson's Sorcery!. On its own, this has some support for audio for web output (not sure about video or graphics); compiles to JSON by itself. For anything fancier, you'll have to implement in your game engine of choice (e.g. Unity, Unreal).
- LÖVE 2D: I haven't played with this yet. Scripting in Lua. IIRC Balatro was made with this?
- Ren'Py: If you want a "pure" VN or close to it, this is likely your best option because there are a ton of VN-specific defaults. Will require more work the further you get out of the VN box. Free, open source, extremely mature community with a ton of resources and tutorials. You can extend this with Python, but the scripting is IMO pretty straightforward. I think it's technically possible to use a Python API for Wwise integration (audio middleware), but for a typical VN, it has built-in audio support likely sufficient to your needs unless you're doing something exotic.
- Unity: Overkill for "pure" VN, but this is a professional game engine, also with a ton of resources. Uses C#. For serious work, you probably want to read up on the whole licensing term controversy (they rolled back a deeply unpopular pricing plan but at a threshold in sales that is unlikely to ever affect me). For a VN, you can combine this with Ink or assets like Naninovel (paid, terrific capabilities but sometimes spotty documentation). Integrates with FMOD and Wwise (audio middleware).
- Unreal: lol, the other big professional game engine. Specialized for 3D (?), but wildly overkill for 2D, let alone a glorified slideshow (VN, affectionate) so I have barely touched this. Kind of like swatting a fly with a Death Star.
Notes:
I have a "lite" background in coding but am deeply mediocre at it:
- essentially the first two years of a prospective CS major at Cornell before switching to math, which is what I got my B.A. in, because I hated debugging /o\ (joke's on me?)
- I'm unintimidated by math preliminaries/prerequisites for general coding, although discrete math (which shows up a lot in CS) was not my focus as a math major.
I have passable low-level hobbyist acquaintance with
- BASIC (lol)
- Inform 6/7
- Java
- LISP/Scheme (technically, Dylan with LISP-like syntax as a dialect of Scheme)
- Pascal (lol)
- Python
- Twine
which is to say, I am not great at any of these languages and have to look up a lot, but I'm familiar with common syntax conventions, concepts like basic control structures, data structures, object oriented programming and inheritance, etc. so not starting from zero either. I'm still sitting here pining after higher-order functions!
I've been screwing around with development on a personal project visual novel (VN) with a tactics 2D game component (the latter is still in paper prototyping). I have a list of resources at the project site, although half of it is "links to investigate later."
Note that I'm a deeply mediocre low-intermediate coder, but I'm also not starting from zero on coding.
What I've found so far:
- Defold: Free, open source. Comparatively obscure although the devs and the community are active; not as many learning resources, free or otherwise. Specialized for performant 2D output, including for web (HTML5). Uses Lua, can be extended with C++ or C#. I'm investigating a VN engine for Defold, Matchanovel. This is the one I like right now but it's not a mainstream choice.
- Godot: Free, open source, increasingly popular although not quite as many resources as an older engine like Ren'Py or Unity. Uses GDScript (Python-like) or visual scripting (I have not used this because I suck at visual anything). Extremely good interactive tutorial that does start you from zero if you're unfamiliar with coding. That said, there are a fair number of free tutorials for this. For narrative scripting, you're likely to end up with Ink integration (see below) via Inkgd or GodotInk, or a plugin like Dialogic or Dialogue Manager. Apparently has good FMOD integration (audio middleware).
- Ink (Inkle Studios): technically narrative scripting middleware. Free. If you can code basic HTML, you'll find this comfortable. If you only want hypertext web output, this will work as well; it's more usually used in conjunction with Some Other Game Engine. Used for games like 80 Days and Steve Jackson's Sorcery!. On its own, this has some support for audio for web output (not sure about video or graphics); compiles to JSON by itself. For anything fancier, you'll have to implement in your game engine of choice (e.g. Unity, Unreal).
- LÖVE 2D: I haven't played with this yet. Scripting in Lua. IIRC Balatro was made with this?
- Ren'Py: If you want a "pure" VN or close to it, this is likely your best option because there are a ton of VN-specific defaults. Will require more work the further you get out of the VN box. Free, open source, extremely mature community with a ton of resources and tutorials. You can extend this with Python, but the scripting is IMO pretty straightforward. I think it's technically possible to use a Python API for Wwise integration (audio middleware), but for a typical VN, it has built-in audio support likely sufficient to your needs unless you're doing something exotic.
- Unity: Overkill for "pure" VN, but this is a professional game engine, also with a ton of resources. Uses C#. For serious work, you probably want to read up on the whole licensing term controversy (they rolled back a deeply unpopular pricing plan but at a threshold in sales that is unlikely to ever affect me). For a VN, you can combine this with Ink or assets like Naninovel (paid, terrific capabilities but sometimes spotty documentation). Integrates with FMOD and Wwise (audio middleware).
- Unreal: lol, the other big professional game engine. Specialized for 3D (?), but wildly overkill for 2D, let alone a glorified slideshow (VN, affectionate) so I have barely touched this. Kind of like swatting a fly with a Death Star.
Notes:
I have a "lite" background in coding but am deeply mediocre at it:
- essentially the first two years of a prospective CS major at Cornell before switching to math, which is what I got my B.A. in, because I hated debugging /o\ (joke's on me?)
- I'm unintimidated by math preliminaries/prerequisites for general coding, although discrete math (which shows up a lot in CS) was not my focus as a math major.
I have passable low-level hobbyist acquaintance with
- BASIC (lol)
- Inform 6/7
- Java
- LISP/Scheme (technically, Dylan with LISP-like syntax as a dialect of Scheme)
- Pascal (lol)
- Python
- Twine
which is to say, I am not great at any of these languages and have to look up a lot, but I'm familiar with common syntax conventions, concepts like basic control structures, data structures, object oriented programming and inheritance, etc. so not starting from zero either. I'm still sitting here pining after higher-order functions!