Skip to content
Martin McDonough edited this page Dec 20, 2015 · 2 revisions

The Athena engine is designed to be client/server based, even in single-player mode. It is message based, and uses JSON (even locally).

Future ports to embedded architectures may bypass the JSON message system to either pass the messages already parsed or use some kind of bytecode. We're not there just yet.

See Athena Message Format for our network protocol.

Assets

All assets for Athena is stored in an ordinary format (png, tga, opus, etc) and specified using JSON files. We currently support the following formats for data:

  • rfn
  • png
  • tga
  • opus
  • json

Ideally we would have an uncompressed format for audio, like AU, and a simpler CSV format for simple lists as an alternative to some of our JSON files, but both those goals are not that vital.

We use Sphere-format fonts. I have no desire to use freetype or TTF fonts. If you want to add support, it should be loaded totally at runtime.

Architecture

Athena is strictly split between a client and server at runtime, although both the canonical client and server are contained in libathena and are built at the same time, since they share many components.

The main reason for the split is that we want it to be possible to play a game with a command-line-only client, an HTML5 client, or even pen-and-paper writing responses by hand. This goal seems fairly easy to keep, so we're going with it.

Platform Libraries

Athena should generally not depend on any middleware such as SDL or OpenAL. We are slacking a bit on this right now with regards to Windows. OpenAL is fine on OS X, since it's a canonical audio API there.

The following table shows our current architecture support:

Coponent Windows Haiku Linux OpenBSD FreeBSD OS X
Window SDL2 Native or SDL2 SDL2 or X11 SDL2 or X11 SDL2 or X11 SDL2 or X11
Audio OpenAL OpenAL OpenAL or sndio sndio OpenAL OpenAL
Thread Native Native or pthread pthread pthread pthread Native or pthread
Time Native Native or usleep or nanosleep nanosleep or usleep nanosleep or usleep nanosleep or usleep Native or usleep or nanosleep

Clone this wiki locally