Langband - a lispier Angband

Front page |  Screenshots |  Download |  FAQ |  Docs |  SF Project page |  Links | 

Frequently Asked Questions

  1. What is Langband?
    Langband is a rewrite of the traditional/vanilla version of Angband. It is based on version 2.9.3, but has parts found in version 3.0, e.g bigscreen and bigtile graphics. Langband is written in Common Lisp, which allows combination of dynamic and easy scripting with good compiler technology. This provides an environment that allows a very high level of customisation and the necessary speed.

  2. Where can I download it?
    A pre-release is available from the download page. It is also available in Debian.

  3. Does it run on [insert OS]?
    The main development-platform is my x86 Debian-system, using CMU Common Lisp. The status of various ports is as follows (things are still in development so the overall "product" is fairly incomplete):
    ImplementationArchitectureStatus
    CMUCL 3.xDebian x86Well-tested
    CMUCL 18dDebian x86Well-tested
    SBCL 0.7.xDebian x86Well-tested
    ACL 6.0 (Prof)Debian x86Well-tested
    LispWorks 4.2.xDebian x86Well-tested. not optimised
    LispWorks 4.2.xWin XPWell-tested. not optimised
    CLISP 2.30Debian x86Rarely tested. notoptimised
    OpenMCLMac OSXTested once with GCU. Only for avid lispers
    Corman Lisp 1.5bWin98Incomplete port. not finished
    For details on CLISP compile, see bottom of FAQ. Best results are obtained by using other implementations than CLISP. For OpenMCL/MacOSX compilation, contact me by mail.

  4. I found a bug, what do I do?
    Please check if the bug has been reported first in the Sourceforge bug-tracking. If it is not reported, please try to describe what caused the crash, include any messages printed before the crash, and if you were dumped into the lisp-debugger please include a backtrace. This is accomplished in CMUCL with the command 'backtrace' and in ACL with the command ':zo'. These commands work in the debugger.

  5. How can I see if a bug is fixed?
    A reported bug will be marked as FIXED when it is fixed and the updated code has been put in the CVS-tree. The priority of a FIXED bug is set to the minimum. It will be marked as CLOSED when a new release have been made where the bug is fixed. If you reported the bug, you will be mailed whenever there is an update on the bug.
    BTW: If you have extra information on a non-fixed bug, please add it.

  6. How can I get roguelike-keys?
    In the file ~/.angband/langband/prefs.lisp add a line:
    (use-key-table :rogue)

  7. How do I get sounds working?
    On a unix/linux-system configure with --enable-extsound to use the langband sound-daemon. Also link either OpenAL or SDL-mixer. If the libraries are found, this will work nicely.
    Windows will use SDL-mixer automagically and link it into the UI.
    If you use Linux it is recommended that you turn off ESound deamon and use OSS directly. Esound causes a half-second delay on all sounds which is ok with music, but unbearabale with sound-effects.

  8. My save-game from last version does not work in the newest version, why?
    As long as the game is not really playable the save/load code is not enhanced for backward-compatibility and is all-in-all one of the more fragile parts of Langband. But please report bugs and they will be fixed.

  9. During compile I get nasty warnings about missing SDL-files, what do I do?
    To compile Langband you need a lot of header-files and libraries so it's recommended that beginners use the pre-made packages (e.g for debian and soon for Windows). To compile langband for SDL on Unix you need the following libraries with header-files installed:
    • SDL library
    • sdl image library (and libpng, libjpeg, libz)
    Optional packages:
    • sdl ttf library (and freetype2) for truetype fonts
    • sdl mixer library (and underlying sound libraries)
    • openal mixer library (and underlying sound libraries)

  10. The game is sluggish once in awhile, why?
    Fixing performance is not a top-priority, but will be gradually adressed during development. Please report if it detracts from the playing experience.
    Note: Performance-problems are visible in the slower CLISP, changing to a better Lisp-system will usually help.

  11. The game holds for a few seconds when I change levels, why?
    There are two replies, choose the one that you feel comfortable with.
    • To prevent stair-scumming (a common exploit) a delay has been added to the use of stairs. This has been designed into the game.
    • To prevent the garbage-collector interfering with the game during normal game-play, full garbage-collects are run before and after level­generation. This slows down change between levels. This is very noticable in ACL.

  12. How do I get things working with LispWorks Windows?
    Currently it's not 100% streamlined, but it should be fairly easy if you have the latest cygwin version and Lispworks for Windows. In the source-archive most include-files and DLLs are included. Install langband e.g in c:/cygwin/home/username/langband/ and run ./configure in the langband dir, and then run 'make'. If all went ok, start lispworks from that directory with e.g c:/Program\ files/xanalys/lispworks/lispworks.exe (or something similar). In lispworks do the normal:
     > (load "vanilla")
     > (gfx-langband)
    		  

  13. How is the code structured?
    Currently the code is changed frequently and this answer may not be up-to-date. Please look at the Technical description for an hopefully updated description.

  14. You seem to favour classes with datamembers over bitfields, why?
    I tend to favour using clear and readable classes over bitfields for one reason: it's easier to understand, use and easier to extend. However, I know that it is sometimes beneficial to use bitfields but I'll try to hide that behind declarative structures, ie make it an implementation-detail. Resistance and immunity to elements are examples of bitfields that are generated from a specification.

  15. The code in CVS crashes/does not work, why?
    The code in CVS is development code, and might not even compile, and much less work. Please use releases if you want things to "work". The CVS-version is bleeding edge though and may have bug-fixes and features missing in releases. CVS is also where exciting things happen and where you can track day-to-day development.

  16. Regular Angband has several windows, where are the other windows in Langband?
    Langband uses a lot of small subwindows inside a single window, which can be easily customised in the theme-file config/theme.lisp.
    Support for multiple and separate windows (Unix-style) is not planned.

  17. When I quit the game, my whole lisp is terminated, why?
    Some parts of the UI-code is still structured as if it was still an app with main() that is started and then quitted when one is done playing. This is extremely annoying if you use a slow loader like CMUCL or a big graphical IDE like LispWorks. I hope to eventually make things more intelligent, but this will take time. [Note: This should work with Curses, but the new SDL-port quite abruptly.]

  18. The C-code seems to be filled with gcc-isms and C++-style comments, why?

    I don't think there should be many gcc-isms anymore, but please report those you find. C++-style comments have inserted because they don't break /*... */ comments. When things stabilise, they will be turned into regular C-comments.


  19. I am a lisper, but I find parts of the code a bit odd, why is it the way it is?

    The code is in development and changes relatively often and the interface for the engine that should be extensible and alterable by variants and user-code needs to gradually be worked out. This must be done gradually as I need to experiment with what is interesting to extend/alter, and what can be extended/altered and still get reasonable performance and decent-looking code.

    Some of the interface will be functions which variants may call, and sometimes with function-arguments as plug-ins. Other parts will be generic functions which are designed to be tailoured by a variant. Other parts are extensible classes which variants are allowed to extend. As this interface gets clearer it will be exported from the :org.langband.engine package and variants will reside in their own packages. But we're not there yet, so vanilla currently lives in the same package.

  20. How do I get things working with CLISP?
    [Not tested recently] It's a bit tricky still but can be done. You will need CLISP 2.30 or newer, older versions will not work. Assuming csh/tcsh and clisp installed in /usr/bin and /usr/lib you can do:
    $ make
    $ clisp -q -ansi
    > (load "vanilla")  ;; this stops at foreign loading, use ^D to quit
    $ setenv LD_LIBRARY_PATH `pwd`/linking
    $ make clisp-link
    $ linked/lisp.run -B /usr/lib/clisp -M linked/lispinit.mem -q -ansi
    > (load "vanilla") ;; this should work now
    		  
    This will be improved later, but it's an important step ahead. You might need to edit the paths in Makefile and linking/Makefile if e.g CLISP is not installed in /usr but in /usr/local. For other shells use the equivalent command of setenv which sets and environment value.


Last updated May 2003
by Stig E Sandø.
See also:
SourceForge project page
SourceForge Logo