This project is not monolithic, it's composed of a bunch of smaller subprojects.
As mentioned in the introduction, at the core of the project lies the simulation engine itself. It handles functionality related to parsing and running simulations, exposing a simple interface for interacting with the simulation data to the programmer.
Then there are the tools that provide an environment for working with the simulations. Tools
also provide new layers of functionality and interoperability, for example offering a network interface (see
Finally there are games and other applications.
The engine is not an executable application. It's a library that can be used by other applications to create and run simulations.
Simulation engine handles:
- parsing input data
- creating simulation instances
- processing simulation instances
- reading and writing simulation instance data
Implementation details aside, these tasks enable applications to make use of
outcome simulations, including .
The engine takes care of all the details of creating and processing simulations, using the library doesn't require complete knowledge of how it works. To learn about how the engine works check out the next chapter.
To be able to run simulations we need some kind of application that makes use of the simulation engine.
The most basic tool is the command-line based
endgame. Some of it's functionality is also exported
as a library so it can be used within other applications. One useful example is the networking layer functionality.
Command-line is not for everyone, that's why there's also
furnace, which is a GUI app with a window-based interface. It works on all popular operating systems (Linux, Windows, Mac).
furnace is not exactly a replacement or alternative for
endgame, rather it builds on it's features to be even more useful to the user.
One good example of incorporating outcome simulations in different kinds of projects are games.
Anthropocene is a modern-day global strategy game. It doesn't use the simulation engine
library directly, instead it uses the networking layer provided by
endgame. It serves as a demonstration of how all kinds of projects, including games, can make use of outcome simulations no matter the framework or the programming language used - the only requirement here is the ability to send and receive data using a tcp connection.