An engine to make 2D games would be my preference at first, with 3D support planned later.
I’d love for us to focus on the core fundamentals of a workflow to ship 2D games. Amethyst is not much use if you can’t ship something folks can download and run without any knowledge of Rust.
Fundamentals to Focus On
- Stable developer experience for Amethyst itself and inviting new contributors (the nicer life is for us, the nicer we can make it for others) – work on improving our own team communication (like this discussion!), better and faster CI (working on it!), faster compilation, finding ways to express design and decisions in a way that others can consume, agreeing on a good way to make fast decisions that balance considering all the input with moving forward without delay. Eventually I’d like to have a CI/CD pipeline that supports auto-deploying a new, installable binary version of Amethyst with every merged pull request.
- Stable 2D “features” - tons of ways to play with sprites and shapes and some primitive collision detection, moving towards physics support later on.
- Stable ability to package your project into some sort of installer/archive for easy consumption (I’m assuming that means Mac/Linux/Windows now-ish, and WASM soon-ish, with the rest of the platforms coming in the future) – start with instructions, move on to command-line tools, then cross-compiling/publishing, moving towards push-button publishing for all platforms from any supported dev platform.
- Stable Editor – to make life easier for folks using Amethyst. My guess is we’ll need to ditch the editor and start over 3 times before we discover the Best Way™ to make an editor, so stick to basics. This should focus on minimum viable things like loading and arranging assets and saving them back to something useful by the engine. It should not try to be the one-stop-shop for creating an Amethyst project, yet.
- Fun With Amethyst! - I’d like to have more fun with the game engine! How about hack days, game jams, demo competitions, etc.? Anything to get us and our community out and using Amethyst together in some way. I’d personally be interested in participating in a game jam held after the legion-integration release. Honestly, I look forward to a day when I occasionally tinker with Amethyst’s internals to help keep them working, but mostly I build things with Amethyst.
Things I don’t think we should focus on:
Scripting - Until we’ve got a decently-mature engine to hook into, this seems unnecessary and unhelpful to me (plus I’d rather we went straight to visual scripting–if I’m going to write code, I’d like to write it in Rust). Having said that, I do still believe some research here to pick a scripting language and how we would integrate it into the engine would help us avoid making design decisions that would make scripting harder in the future. In other words, I see this as a great candidate for a long-term, background, experimental feature, but not a focus of the project right now.
3D Anything - I’m willing to give 3D up for a year (or two) if it means we can have less to focus on to get into a good spot with the overall engine experience using 2D. Once you get into 3D, there seems to be no end of work required to really get it how you want. Importing all the asset types from every external tool in the world, models, materials, skinning, rigging, inverse kinematics, animation, physics, lighting, AI, navigation meshes, terrain, and on and on and on. I’d much rather be able to ship a simple 2D arcade game to a bunch of platforms and soon than be able to compete head-on with UE4, maybe, sorta, in 20 years.
I’m curious to hear other folks’ thoughts of even better approaches!