Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 

README.org

http://liballeg.org/images/logo.png

cl-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.

Requires

libffi

Usage

  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

Functionality

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
  • UTF-8

FAQ

Why 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.

With 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")

With 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

License

Allegro 5 - https://liballeg.org/license.html

About

Common Lisp bindings and interface to the Allegro 5 game programming library

Topics

Resources

Releases

No releases published

Sponsor this project

  •  
Learn more about GitHub Sponsors

Packages

No packages published
You can’t perform that action at this time.