LambdaHack- A roguelike game engine in early and active development

Safe HaskellNone




Operations on the Area type that involve random numbers.


Picking points inside areas

xyInArea :: Area -> Rnd PointXYSource

Pick a random point within an area.



:: (X, Y)

minimum size

-> (X, Y)

maximum size

-> Area

the containing area, not the room itself

-> Rnd Area 

Create a random room according to given parameters.

mkVoidRoom :: Area -> Rnd AreaSource

Create a void room, i.e., a single point area within the designated area.

Choosing connections

connectGrid :: (X, Y) -> Rnd [(PointXY, PointXY)]Source

Pick a subset of connections between adjacent areas within a grid until there is only one connected component in the graph of all areas.

randomConnection :: (X, Y) -> Rnd (PointXY, PointXY)Source

Pick a single random connection between adjacent areas within a grid.

Plotting corridors

type Corridor = [PointXY]Source

The coordinates of consecutive fields of a corridor.

connectPlaces :: (Area, Area) -> (Area, Area) -> Rnd CorridorSource

Try to connect two interiors of places with a corridor. Choose entrances at least 4 or 3 tiles distant from the edges, if the place is big enough. Note that with pfence == FNone, the area considered is the strict interior of the place, without the outermost tiles.