I know what you mean. I would add BabylonJS and ThreeJS for the web platform. They give you a lot of control and freedom as well
Delayed Realisations
Did you realize something regarding programming that you should have realized years ago? Then post it here, we don't judge
Rules
- Don't be the reason I need to expand this list
Monogame was always really good. It's what Stardew valley is written using.
I was writing my first game in XNA .NET framework, and I'm really glad I had that experience. It forced me to understand (and figure out) the insides of a game engine, such as collisions, GameObject model or game loop really well, and since by that time I had no idea something like game engines exist, I learned to not take those features for granted and actually had to research and write them.
When Unity went free, I appreciated the features so much more, and now I also see that some of the newer developers have no idea what's actually happening in the background, which is a shame.
I'd recommend that anyone interested in gamedev starts more low-level, and only after that gets to more heavyweight engines. Sure, you probably won't make a 3D game, but making a simple platformer from scratch is an amazing learning experience.
- ImpactJS - Javascript/HTML5 used to be paid for, has been open sourced.
- LOVE2D for Lua
- DragonRuby for Ruby - You can get a standard license for free if you qualify for any of the listed items, Amir tends to reply within the same day.
- Ebitengine for Go
All of the above are mainly for 2D graphics, but some folks made versions of LOVE3D, too. There's also libgdx, which builds on top of lwjgl, and mini2Dx, which builds on top of libgdx
For 3D, the first one that comes to mind is Ogre3D
--
I have some experience with Godot, it certainly speeds up a lot of the creation, but it also has some asinine decisions that I seriously don't understand, like keybindings being a protected array: you can't alter an item on a specific position; so, if you have a default + alternative key for an action, and you want to let players customize their keybinds, you essentially have to copy the whole array, make the alteration, delete the keybinds then add the items from the altered copy.
If you add a gamepad to the mix, making each action have 3 inputs, you also have to keep track of positions, otherwise your option to change a specific key might accidentally change from a different position of the array.
Also, never tie your platformer's jump logic to the game's framerate (delta), unless you want players running on less capable machines suffering.