So I have probably spent about 200 - 250 hours in the past 4-5 months prototyping a top down 2D roguelike / survival game (something along the lines of CDDA) in Unity. While everything has been going ok, I am starting to think that most of the tile map managers (assets store ones or the newly built-in one) is just overcomplicating things for my needs. I am also starting to think that Unity itself is overkill.
My needs for a tile map manager is really just placing layered tiles on the map of x / y coords and maybe having a few basic brushes and that is about it. With the game being turned based, having actual colliders seems like overkill where just getting the tile and checking manually would work just as well with less overhead.
The Unity IDE also seems like overkill since I am hardly in it. I am only in it when building the UI, playing the game, and debugging. Everything game development wise outside of UI creation is done in code since pretty much everything is generated procedurally from data files.
If I decide to continue with Unity, I feel like I am going to have to:
- Setup my own tile map data structure and manager just so I can make things as simple as possible even though that would probably require working with Unity 2D at a lower level which from what I hear is not that great (even with the tile map manager I had, I still had a number of issues with pixel snapping / artifacts and such at the beginning)
- While I have 80% of the systems prototyped and working at a very basic level, the code would need moderate / major refactoring before I would be comfortable trying to start to build additional features on top of it
With this in mind, I figured now would be as good as any time to look at spending a couple of months prototyping the game in another engine or high-level toolset. Again my idea is that since I am not really going to be using a lot of the power than Unity has, there might be something to gain by going with some smaller and simpler engine / high-level toolset but still has the limited features that I need.
Instead of trying to figure out what the best game engine is (since that is subjective and does not really exist), I want to get some advice of what game engines / high-level toolsets might fit the requirements that I have. The must haves with no exceptions are:
- The code that I have to write needs to be managed (and by that I mean I don't want to have to deal with memory management because this is no doubt I will shoot myself in the foot, leg, hand, arm, etc. if I have to deal with that).
- I want all the lower level APIs (like calling OpenGL, DirectX, OpenAL, etc. directly) to be dealt with under the covers so that I can easily draw stuff, load sprites, play sounds, etc. using the engine's / high-level toolset's API.
- Need to be able to develop on Mac
- Need to be able to deploy to Windows / Mac
-
Needs to have the following features:
- A true 2D engine that is designed to work ix X / Y and pixels (not a 2D game in a 3D engine like Unity)
- A Sound API
- An Assets Loading Pipeline (it should be relatively easy to load up a sprite sheet, slice it into is sprites, etc. through code)
- An Input Management System
Now at the very top of my really nice to haves would be:
- Has easy support for ECS (I have recently looked into this since I know Unity is moving towards that and from what I have researched, it looks like a very interesting way to structure code for reusability that fits more with me than traditional OOP)
- Has an active community and helpful community
-
Has a decent UI system, stuff like:
- Being able to display a list of UI "elements" of any number
- Being able to have flexible container boxes (kinda like css flexboxes)
- Being able to display images / sprites / icons in the UI
- Being able to overlay the UI anywhere on the screen
And then at the bottom of the nice to have list would be:
- Is being actively developed / maintained (it does not need multiple commits every day and releases every month but it should not have nothing for months on end)
- Built-in / external module for 2D AStar Path Finding
- Additional engine features like Lighting, Physics, etc. (again, I have no need for this stuff however if available, I would probably be able to make some small use of it)
- Game logic is written in a lighter weight language or functional language (like Lua, JavaScript, etc.)
- Has no custom Editor / IDE (this is because I prefer code and I don't want the "why are you trying to use code instead of the editor" response like I have often gotten with Unity when I asking questions).
For the specific points of my game that I would want to take into account when deciding on another engine / high-level toolset to prototype in, they would be:
- With the game being turned based, it is going to work off of a global game action units system that increase when they player perform actions and all other entities would listen on and perform actions based on the game action units that changed since they last update (which will probably being at least in the 100's of entities, I can even see if maybe reaching 1000+)
- I want to have a near infinite world that is procedurally generated (which I would imagine would be able to be done by storing the map is small chunks of like 16x16, 32x32, etc and then just loading / unload those chunks that are in a certain range of the player as they move).
- I want to have a relatively large area of simulated world. Obviously I can't simulation the 10s of 1000s of entities that would be in the entire game world but I would like to try for what CDDA does with it reality bubble which is 132 x 132 (which is also 17424 tiles that would be rendered at any given time) and simulate the entities in there (and simulate I mean stuff like npcs / enemies moving, items decaying / rotting, building tiles burning, etc.).
Outside of these points, everything else in my game (like quests, npcs, enemies, items, skills, stats, AStar pathing finding, crafting building, etc.) I think should be able to work in any game engine.
Right now Love2D is at the top of my list of engines / high-level toolsets to try. It uses Lua as the scripting language which also has a number of ECS libraries that I could try out. While I would like to use a lighter weight language like Lua, my top concern with that is performance (especially related to point #1 + #3 with what how much I am going to want to simulate in the game) but from what I hear, LuaJIT, which Love2D uses, can provide near c performance so...
I would like to get people opinions on Love2D related to all the points above as well as any other engines / high-level toolsets that at least fits the must haves from an engine / toolset perspective and will support the performance based features of the game that I mentioned.
I plan on trying to get a character to move on a map in each engine / high-level toolset that should be able to support what I need and they make a decision of which to take further into the prototype.