LambdaHack-0.11.0.0: A game engine library for tactical squad ASCII roguelike dungeon crawlers
Safe HaskellNone
LanguageHaskell2010

Game.LambdaHack.Server.ItemRev

Description

Creation of items on the server. Types and operations that don't involve server state nor our custom monads.

Synopsis

Documentation

data ItemKnown 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 meaningful properties can be derived from them. Note: item seed instead of AspectRecord is not enough, becaused different seeds may result in the same AspectRecord and we don't want such items to be distinct in UI and elsewhere.

Instances

Instances details
Eq ItemKnown Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

Show ItemKnown Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

Generic ItemKnown Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

Associated Types

type Rep ItemKnown :: Type -> Type #

Binary ItemKnown Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

Hashable ItemKnown Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

type Rep ItemKnown Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

type ItemRev = HashMap ItemKnown ItemId Source #

Reverse item map, for item creation, to keep items and item identifiers in bijection.

newItemKind :: COps -> UniqueSet -> Freqs ItemKind -> AbsDepth -> AbsDepth -> Int -> Frequency (GroupName ItemKind, ContentId ItemKind, ItemKind) Source #

Roll an item kind based on given Freqs and kind rarities

newItem :: COps -> Frequency (GroupName ItemKind, ContentId ItemKind, ItemKind) -> FlavourMap -> DiscoveryKindRev -> AbsDepth -> AbsDepth -> Rnd NewItem Source #

Given item kind frequency, roll item kind, generate item aspects based on level and put together the full item data set.

Item discovery types

data DiscoveryKindRev Source #

The reverse map to DiscoveryKind, needed for item creation. This is total and never changes, hence implemented as vector. Morally, it's indexed by ContentId ItemKind and elements are ItemKindIx.

The FlavourMap type

data FlavourMap Source #

Flavours assigned by the server to item kinds, in this particular game. This is total and never changes, hence implemented as vector. Morally, it's indexed by ContentId ItemKind and elements are Flavour.

Instances

Instances details
Show FlavourMap Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

Binary FlavourMap Source # 
Instance details

Defined in Game.LambdaHack.Server.ItemRev

dungeonFlavourMap :: COps -> FlavourMap -> Rnd FlavourMap Source #

Randomly chooses flavour for all item kinds for this game.

Important implementation parts, exposed for tests

rollFlavourMap :: Vector Word16 -> Rnd (EnumMap (ContentId ItemKind) Flavour, EnumMap (ContentSymbol ItemKind) (EnumSet Flavour)) -> ContentId ItemKind -> ItemKind -> Rnd (EnumMap (ContentId ItemKind) Flavour, EnumMap (ContentSymbol ItemKind) (EnumSet Flavour)) Source #

Assigns flavours to item kinds. Assures no flavor is repeated for the same symbol, except for items with only one permitted flavour.

Internal operations

buildItem :: COps -> AspectRecord -> FlavourMap -> DiscoveryKindRev -> ContentId ItemKind -> Item Source #

Build an item with the given kind and aspects.

keepMetaGameInformation :: ContentData ItemKind -> Vector Word16 -> Vector Word16 Source #

Keep in a vector the information that is retained from playthrough to playthrough. The information being, e.g., ItemKindIx or Flavour. The information is morally indexed by ContentId ItemKind and its Enum instance fits in Word16.