Logo

The Amethyst Engine

Presentation

Howdy! This book will teach you everything you need to know about building video games and interactive simulations with the Amethyst game engine. This engine is written entirely in Rust, a safe and fast systems programming language, and sports a clean and modern design. More correctly, though, Amethyst is actually a collection of separate libraries and tools that collectively make up a game engine.

Amethyst is free and open source software, distributed under a dual license of MIT and Apache. This means that the engine is given to you at no cost and its source code is completely yours to tinker with. The code is available on GitHub. Contributions and feature requests will always be welcomed!

Getting started

This book is split into four sections (more coming). This page is the first. The others are:

  • Getting Started – Prepare your computer for Amethyst development.
  • Concepts - An overview of the concepts used in Amethyst. Recommended.
  • Pong Tutorial – Build a basic pong game in Rust.
  • Animation – Explains the architecture of the amethyst_animation crate.
  • Custom GameData - Shows you how to structure more complex games that need to change the system graph.
  • Glossary - Defines special terms used throughout the book.
  • Appendix A: Config Files - Shows you how to define your data in RON files.

Read the crate-level API documentation for more details.

Please note that the default github branch is develop, while the documentation in this document is based on the master/release branch. The documentation for the develop branch is located here.

Motivation

Most of us have worked with quite a few game engines over the years, namely Unity, Unreal Engine, JMonkeyEngine and many more. While they all are pretty solid solutions if you want to build a quality game, each have their own pros and cons that you have to weigh before using them, especially in regards to performance and scalability.

We think that basing the Amethyst engine on good and modern principles will allow us to make an open source game engine that can actually be more performant than those engines. Those principles are:

  1. Modularity.

    Modularity is at the core of the Unix philosophy, which proved itself to be an excellent way of developing software over the years. You will always be free to use the built-in modules, or to write your own and integrate them easily into the engine. Since modules are small and well integrated, it is easier to reason about what they do and how they relate to other modules.

  2. Parallelism.

    Modern computers, even cheap ones, all have multithread / multicores CPU. With the years, there will be more and more opportunities for parallelism to improve performance. With a proper parallel engine, we are convinced that your game will be more and more performant over the years without even needing you to update it.

  3. Data-oriented/Data-driven.

    Building your game around the data makes it really easy to prototype and quickly build a game. Complex behaviours like swapping assets during gameplay become a breeze, making testing and balancing a lot faster.

Contributing

We are always happy to welcome new contributors!

If you want to contribute, or have questions, let us know either on GitHub, on Gitter or on Discord.