Safe Haskell | None |
---|---|
Language | Haskell2010 |
Creation of items on the server. Types and operations that don't involve server state nor our custom monads.
Synopsis
- type ItemKnown = (ItemIdentity, AspectRecord, Maybe FactionId)
- type ItemRev = HashMap ItemKnown ItemId
- type UniqueSet = EnumSet (ContentId ItemKind)
- buildItem :: COps -> FlavourMap -> DiscoveryKindRev -> ContentId ItemKind -> ItemKind -> LevelId -> Item
- newItem :: COps -> FlavourMap -> DiscoveryKindRev -> UniqueSet -> Freqs ItemKind -> Int -> LevelId -> AbsDepth -> AbsDepth -> Rnd (Maybe (ItemKnown, ItemFullKit, ItemSeed, GroupName ItemKind))
- data DiscoveryKindRev
- type ItemSeedDict = EnumMap ItemId ItemSeed
- emptyDiscoveryKindRev :: DiscoveryKindRev
- serverDiscos :: COps -> Rnd (DiscoveryKind, DiscoveryKindRev)
- data FlavourMap
- emptyFlavourMap :: FlavourMap
- dungeonFlavourMap :: COps -> Rnd FlavourMap
Documentation
type ItemKnown = (ItemIdentity, AspectRecord, Maybe FactionId) 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 them.
Note 1: jlid
is not meaningful; it gets forgotten if items from
different levels roll the same random properties and so are merged.
However, the first item generated by the server wins, which in case
of normal items (not organs), is most of the time the lower absolute
jlid
(shallower depth) item, which makes sense for the client.
Note 2: ItemSeed
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.
type ItemRev = HashMap ItemKnown ItemId Source #
Reverse item map, for item creation, to keep items and item identifiers in bijection.
buildItem :: COps -> FlavourMap -> DiscoveryKindRev -> ContentId ItemKind -> ItemKind -> LevelId -> Item Source #
Build an item with the given stats.
newItem :: COps -> FlavourMap -> DiscoveryKindRev -> UniqueSet -> Freqs ItemKind -> Int -> LevelId -> AbsDepth -> AbsDepth -> Rnd (Maybe (ItemKnown, ItemFullKit, ItemSeed, GroupName ItemKind)) Source #
Generate an item based on level.
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
.
Instances
Show DiscoveryKindRev Source # | |
Defined in Game.LambdaHack.Server.ItemRev showsPrec :: Int -> DiscoveryKindRev -> ShowS # show :: DiscoveryKindRev -> String # showList :: [DiscoveryKindRev] -> ShowS # | |
Binary DiscoveryKindRev Source # | |
Defined in Game.LambdaHack.Server.ItemRev |
type ItemSeedDict = EnumMap ItemId ItemSeed Source #
The map of item ids to item seeds, needed for item creation.
serverDiscos :: COps -> Rnd (DiscoveryKind, DiscoveryKindRev) Source #
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
Show FlavourMap Source # | |
Defined in Game.LambdaHack.Server.ItemRev showsPrec :: Int -> FlavourMap -> ShowS # show :: FlavourMap -> String # showList :: [FlavourMap] -> ShowS # | |
Binary FlavourMap Source # | |
Defined in Game.LambdaHack.Server.ItemRev |
dungeonFlavourMap :: COps -> Rnd FlavourMap Source #
Randomly chooses flavour for all item kinds for this game.