Attempts to add some scripting capability to the client came naturally, but the C++ source code is not very amenable to that. The build system (autotools+ftjam with heavy crystalspace layer on top) deserves dishonorable mention, too. So there were several failed attempts, at last I arrived at ECLisp via this sexy example. Eulora with embedded Lisp stub

Where?

Code is in branch embeddedlisp :

git clone http://minigame.bz/jurov/Eulora-client.git

I like to leak early and often, so at the time of writing it's only a skeleton with 4 functions from Foxybot available. Lisp is ran from 3 places:

  • eulora_init.lisp
  • every frame event evaluates (frame) function with loadstate parameter. I'ts only actually usable on :LS_DONE.
  • by ^C from console
  • (update 2016-03-04) From chat window with /l command.

Either one stops game loop and if not resumed in few seconds, causes kick out from the server.

If I (or anyone) succeeds to add passable asynchronous SWANK support (update 2016-03-04: see eulora_init.lisp) and more functions, we can talk about Release with big R.

Installation (for experts and the impatient)

1. Install ECL, including headers and libraries, it's in most linux repos (in gentoo as dev-lisp/ecls). I have used newest version 16.0.0, but older is likely to work too.

2. Patch the Eulora source and compile eulora as usual. the last link step will fail, that's OK.

3. Run ecl in topmost directory and evaluate:

(load "src/common/lisp/compile.lsp")

If it won't compile, examine CFLAGS and LDFLAGS in compile.lsp, should be that same as ftjam uses. Someday someone will teach ftjam to do this step automatically.

4. Exit ecl and copy the failed link command from step 2 to editor, edit it to add ./liblispinterface.a to list of static libs and -lecl to list of dynamic libs and rerun it. Someday someone... aplies here, too.

5. Run euclient and notice the output:

;;; Loading "/data/juro/eulora/swig-Eulora-client/eulora_init.lisp"

and hit Ctrl-C to get at lisp prompt.