Frequently Asked Questions
- 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.
- Where can I download it?
A pre-release is available from the download page. It is also
available in Debian.
- 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):
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.
|CMUCL 3.x||Debian x86||Well-tested|
|CMUCL 18d||Debian x86||Well-tested|
|SBCL 0.7.x||Debian x86||Well-tested|
|ACL 6.0 (Prof)||Debian x86||Well-tested|
|LispWorks 4.2.x||Debian x86||Well-tested. not optimised|
|LispWorks 4.2.x||Win XP||Well-tested. not optimised|
|CLISP 2.30||Debian x86||Rarely tested. notoptimised|
|OpenMCL||Mac OSX||Tested once with GCU. Only for avid lispers|
|Corman Lisp 1.5b||Win98||Incomplete port. not finished|
- 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
- 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.
- How can I get roguelike-keys?
In the file ~/.angband/langband/prefs.lisp
add a line:
- 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
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
- 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.
- 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
- SDL library
- sdl image library (and libpng, libjpeg, libz)
- sdl ttf library (and freetype2) for truetype fonts
- sdl mixer library (and underlying sound libraries)
- openal mixer library (and underlying sound libraries)
- 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
- The game holds for a few seconds when I change levels, why?
There are two replies, choose the one that you feel
- 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.
- 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
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\
something similar). In lispworks do the normal:
> (load "vanilla")
- 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
- You seem to favour classes with datamembers over
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
- 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
- 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
Support for multiple and separate windows
(Unix-style) is not planned.
- 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.]
- 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
- 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.
- 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
you can do:
$ 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
For other shells use the equivalent command
of setenv which sets and environment value.