Aaron Dalton


Games::DungeonMaker - Perl front-end to the DungeonMaker library (v2.03), which generates random dungeons for use in isometric games


  use Games::DungeonMaker qw( :SquareData );
  my $dm = Games::DungeonMaker->new($designText) || die;
  foreach my $x (0..$dm->maxX()) {
          foreach my $y (0..$dm->maxY()) {
                  my $cell = $dm->getMap($x, $y);
                  print "$x, $y = $cell\n";


The default Makefile.PL assumes you have DungeonMaker v2.03 installed as a shared library (libdungeonmaker). A Makefile.PL.static is also included if you wish to statically link with the DungeonMaker object file. Simply copy the DungeonMaker.h and .cpp files into the top directory and use Makefile.PL.static instead.


This module is in an alpha state! I promise you the API will change at some point in the future!

This module acts as a Perl front-end to the Sourceforge DungeonMaker project (v2.03). DungeonMaker is a C++ shared library that uses artificial life algorithms to randomly generate dungeons for use in games. The entire public interface is wrapped, but only some of the functionality is currently abstracted and made readily available.


new( $designText, [$seed] )

This is the constructor. It requires that you pass it a scalar which contains a well-formed design specification (see the DungeonMaker specs). An optional random number seed (an unsigned integer) can also be passed. If omitted, the current system time() is used. This method generates an empty dungeon and returns a blessed Games::DungeonMaker object which can then be queried.


This method wraps the PlonkDownStuff() and PutPlonkOnMap() methods which populate the dungeon with MOBs and Treasures as specified in the design document. All the caveats of these methods explained in the DungeonMaker documentation still exist. The current Perl front-end is not conducive to creating your own plonking routines, but will be soon. The default routines do do a fine job though.

maxX() and maxY()

These methods return the index of the furthest X or Y coordinate on the map. Being a zero-based index, these numbers should always be one less than the actual height and width of the map.

getMap( $x, $y )

Given an (x,y) coordinate, this method returns the type of cell found there. All valid SquareData types are supported. Normally you would have to reference them as $Games::DungeonMaker::OPEN, but you can export these types using the SquareData export tag. use Games::DungeonMaker qw(:SquareData); OPEN CLOSED G_OPEN G_CLOSED NJ_OPEN NJ_CLOSED NJ_G_OPEN NJ_G_CLOSED IR_OPEN IT_OPEN IA_OPEN H_DOOR V_DOOR MOB1 MOB2 MOB3 TREAS1 TREAS2 TREAS3 COLUMN

Future Development

Eventually this interface will be greatly enhanced to include proper wrapping of all internal data thereby giving Perl access to room data among other things. This is being hampered somewhat by some problems with Swig. If anyone out there has Swig experience and is willing to help, please let me know. The Swig interface file used to create this module is included in the distribution.




Aaron Dalton - aaron@daltons.ca This is my first Perl interface to a C module. Any feedback will be warmly welcomed.


Copyright (c) 2005 Aaron Dalton. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.