LambdaHack- A game engine library for roguelike dungeon crawlers

Safe HaskellNone




Weapons, treasure and all the other items in the game. No operation in this module involves the state or any of our custom monads.


The Item type

data ItemId Source

A unique identifier of an item in the dungeon.

data Item Source

Game items in actor possesion or strewn around the dungeon. The fields jsymbol, jname and jflavour make it possible to refer to and draw an unidentified item. Full information about item is available through the jkindIx index as soon as the item is identified.




jkindIx :: !ItemKindIx

index pointing to the kind of the item

jlid :: !LevelId

the level on which item was created

jsymbol :: !Char

map symbol

jname :: !Text

generic name

jflavour :: !Flavour


jfeature :: ![Feature]

public properties

jweight :: !Int

weight in grams, obvious enough

Item discovery types

data ItemKindIx Source

An index of the kind id of an item. Clients have partial knowledge how these idexes map to kind ids. They gain knowledge by identifying items.

type DiscoveryKind = EnumMap ItemKindIx (Id ItemKind)Source

The map of item kind indexes to item kind ids. The full map, as known by the server, is a bijection.

data ItemSeed Source

A seed for rolling aspects and effects of an item Clients have partial knowledge of how item ids map to the seeds. They gain knowledge by identifying items.

type DiscoveryEffect = EnumMap ItemId ItemAspectEffectSource

The map of item ids to item aspects and effects. The full map is known by the server.

data ItemFull Source




itemBase :: !Item
itemK :: !Int
itemDisco :: !(Maybe ItemDisco)


Inventory management types

type ItemDict = EnumMap ItemId ItemSource

All items in the dungeon (including in actor inventories), indexed by item identifier.

type ItemKnown = (ItemKindIx, ItemAspectEffect)Source

The essential item properties, used for the ItemRev hash table from items to their ids, needed to assign ids to newly generated items. All the other meaningul properties can be derived from the two. Note that jlid is not meaningful; it gets forgotten if items from different levels roll the same random properties and so are merged.