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.)
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.
$ docker run -p 8080:8080 -v mygame.ulx:/story.ulx ghcr.io/statico/glulxe-httpd
- Get Node.js v12 or so
- Install Yarn
yarn install
yarn start mygame.ulx
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
.
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