cl-liballegro

2021-08-07

Allegro 5 game programming library bindings for Common Lisp

Upstream URL

github.com/resttime/cl-liballegro

Author

resttime

License

zlib
README
Provided Systems
http://liballeg.org/images/logo.png

1cl-liballegro

Interface and bindings to the Allegro 5 game programming library

Check out how the bindings' source code is organized and compare it to the API reference.

2Requires

libffi

3Usage

  1. al_* becomes al:*
  2. (al:rest secs) is (al:rest-time secs) because of symbol interference with #'cl:rest.
  3. Enums/constants are shortened, check constants if you need help finding them.
  4. Type names have changed too, check types if you need help finding them.
  5. To access slots from a C struct, you can use CFFI:MEM-REF create a plist
       (defcstruct display-mode
         (width :int)
         (height :int)
         (format :int)
         (refresh-rate :int))
    
       (with-foreign-object (test '(:struct display-mode))
         (let ((plist (mem-ref test '(:struct display-mode))))
           (print plist)
           (print (getf plist 'width))))
    
  6. I've got a neat OPTIONAL lispy interface here which provides an entire fixed timestep game loop
  7. Everything else is pretty much 1-to-1
  8. If you're getting crashes on MacOS, put all your code into callback and pass it to al:run-main.
  9. Examples exist if you get lost

Feel free to raise an issue to request a feature or for me to work on something

4Functionality

Pretty much complete except:

I won't work on the following sections because Common Lisp has more suitable implementations unless there's a usecase or I'm bored.

  • Memory
  • Threads

5FAQ

5.1(More found under gh-pages branch)

https://resttime.github.io/cl-liballegro/

5.2Why can't my program find the DLL in Windows?

There are path problems in Windows because the DLL files (which contain all the functions the CFFI calls upon) doesn't have a default location unlike in Unix environments. When the library loads in Windows, it will look for the DLL in the current folder of the FILE.LISP that evaluates (ql:quickload "cl-liballegro") This means you must have a copy of the DLL file in the directory of FILE.LISP, not in the cl-liballegro directory unless the FILE.LISP is in there. SLIME however, likes to change the default search folder to the one Emacs is in when it starts.

5.2.1With SBCL

;; Open command prompt in the folder that contains both the DLL and game.lisp`
> sbcl
> (load "game.lisp") ; File contains (ql:quickload "cl-liballegro")

5.2.2With Emacs + SLIME

game.lisp contains (ql:quickload :cl-liballegro)
;; Looks for the DLL at /path/to/Desktop/allegro.dll
C-x C-f /path/to/Desktop/file9.lisp
M-x slime
C-x C-f /path/to/Desktop/game/game.lisp
C-c C-l
;; Looks for the DLL at /path/to/Desktop/game/allegro.dll
C-x C-f /path/to/Desktop/file9.lisp
C-x C-f /path/to/Desktop/game/game.lisp
M-x slime
C-c C-l
;; Looks for the DLL at /whatever/default/emacs/directory/allegro.dll
M-x slime
C-x C-f /path/to/Desktop/game/game.lisp
C-c C-l

6License

Project under zlib license

Dependencies (4)

  • cffi
  • float-features
  • trivial-garbage
  • trivial-main-thread

Dependents (0)

    • GitHub
    • Quicklisp