/glulxe-httpd

👾 HTTP+JSON Glulx (.ulx) interactive fiction server with session support

Primary LanguageJavaScriptMIT LicenseMIT

glulxe-httpd

license build status

glulxe-httpd provides an HTTP REST interface for interacting with interactive fiction (IF) stories in the Glulx (.ulx) format using glulxe. Clients (like my website) can connect to the service to start a game and then send commands to it.

Sessions are deleted after a while in a feeble attempt to save memory. This service is definitely DoS-able.

With the --csv option, transcripts of commands are saved to a CSV file. (I read what players type on my game to occasionally improve it.)

Get Started

If you haven't spent many laborous hours writing an interactive fiction game with Inform, you can download one from the Interactive Fiction Database or grab the classic Adventure game as a .ulx file from the Glulx page.

With Docker

$ docker run -p 8080:8080 -v mygame.ulx:/story.ulx ghcr.io/statico/glulxe-httpd

With Node.js

  1. Get Node.js v12 or so
  2. Install Yarn
  3. yarn install
  4. yarn start mygame.ulx

Sending Commands

First get a session ID:

$ curl -X POST http://localhost:8080/new
{
   "session": "xxxxxxx",
   "output": "Welcome to Adventure!\n\nADVENTURE..."
}

Then send commands:

$ curl -X POST http://localhost:8080/send \
-H 'Content-type: application/json' \
-d '{ "message": "look", "session": "xxxxxxx" }'
{
   "output": "At End Of Road\nYou are standing at the end..."
}

Pro tip: Run the server with --debug to always make the session ID test.

See Also

I thought about running Quixe -- a Glulx interpreter written in JavaScript -- from within Node like I did with my original Z8 server. However, Quixe seems designed for the browser, not Node, and this just seemed a lot simpler.

These projects are good but don't support sessions and/or don't save transcripts:

My original version of this used a Z-machine emulator for .z8 games: https://github.com/statico/ifhttp