QuakeServer

The server side of the Quake engine in Elixir. It runs a QuakeC game's levels: spawning, entities, collision and linking, server physics, monster movement, the builtins, and the messages the program writes. It serves both id's Quake programs and FTE's extended programs (FreeHL's, for one).

server = QuakeServer.Server.start("e1m1", source: MyGame.Source, skill: 1)
server = QuakeServer.Server.connect(server)
server = QuakeServer.Server.frame(server, 1 / 60, command)
{events, server} = QuakeServer.Server.drain(server)

A game supplies its files through a QuakeServer.Source (program, maps, models, and optionally file reads, listings and package names).

Quake and FTE

Options set what differs between games: the builtins module, hull choice, spawn-flag filtering, coordinate encoding, statement budget, a data directory for written files, and a function trace.

Licence

GPL-2.0-or-later. The server physics, monster movement, the Quake builtins, the message encodings and the player movement (QuakeServer.Pmove, from QuakeWorld) follow id Software's GPL release of Quake, so this package is a derivative of it. The FTE extensions follow the behaviour FTE documents in its generated fteextensions.qc.