-
Notifications
You must be signed in to change notification settings - Fork 1
Engine Design
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.
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.
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.
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 |