LambdaHack-0.7.1.0: A game engine library for roguelike dungeon crawlers

Safe HaskellNone
LanguageHaskell2010

Game.LambdaHack.Atomic

Contents

Description

Atomic game state transformations, their representation and semantics.

See https://github.com/LambdaHack/LambdaHack/wiki/Client-server-architecture.

Synopsis

Re-exported from Game.LambdaHack.Atomic.CmdAtomic

data CmdAtomic Source #

Abstract syntax of atomic commands, that is, atomic game state transformations.

Constructors

UpdAtomic UpdAtomic

atomic updates

SfxAtomic SfxAtomic

atomic special effects

Instances

data UpdAtomic Source #

Abstract syntax of atomic updates, that is, atomic commands that really change the State. Most of them are an encoding of a game state diff, though they also carry some intentional hints that help clients determine whether and how to communicate it to players.

Constructors

UpdCreateActor ActorId Actor [(ItemId, Item)] 
UpdDestroyActor ActorId Actor [(ItemId, Item)] 
UpdCreateItem ItemId Item ItemQuant Container 
UpdDestroyItem ItemId Item ItemQuant Container 
UpdSpotActor ActorId Actor [(ItemId, Item)] 
UpdLoseActor ActorId Actor [(ItemId, Item)] 
UpdSpotItem Bool ItemId Item ItemQuant Container 
UpdLoseItem Bool ItemId Item ItemQuant Container 
UpdSpotItemBag Container ItemBag [(ItemId, Item)] 
UpdLoseItemBag Container ItemBag [(ItemId, Item)] 
UpdMoveActor ActorId Point Point 
UpdWaitActor ActorId Bool 
UpdDisplaceActor ActorId ActorId 
UpdMoveItem ItemId Int ActorId CStore CStore 
UpdRefillHP ActorId Int64 
UpdRefillCalm ActorId Int64 
UpdTrajectory ActorId (Maybe ([Vector], Speed)) (Maybe ([Vector], Speed)) 
UpdQuitFaction FactionId (Maybe Status) (Maybe Status) 
UpdLeadFaction FactionId (Maybe ActorId) (Maybe ActorId) 
UpdDiplFaction FactionId FactionId Diplomacy Diplomacy 
UpdTacticFaction FactionId Tactic Tactic 
UpdAutoFaction FactionId Bool 
UpdRecordKill ActorId (Id ItemKind) Int 
UpdAlterTile LevelId Point (Id TileKind) (Id TileKind) 
UpdAlterExplorable LevelId Int 
UpdSearchTile ActorId Point (Id TileKind) 
UpdHideTile ActorId Point (Id TileKind) 
UpdSpotTile LevelId [(Point, Id TileKind)] 
UpdLoseTile LevelId [(Point, Id TileKind)] 
UpdAlterSmell LevelId Point Time Time 
UpdSpotSmell LevelId [(Point, Time)] 
UpdLoseSmell LevelId [(Point, Time)] 
UpdTimeItem ItemId Container ItemTimer ItemTimer 
UpdAgeGame [LevelId] 
UpdUnAgeGame [LevelId] 
UpdDiscover Container ItemId (Id ItemKind) ItemSeed 
UpdCover Container ItemId (Id ItemKind) ItemSeed 
UpdDiscoverKind Container ItemKindIx (Id ItemKind) 
UpdCoverKind Container ItemKindIx (Id ItemKind) 
UpdDiscoverSeed Container ItemId ItemSeed 
UpdCoverSeed Container ItemId ItemSeed 
UpdDiscoverServer ItemId AspectRecord 
UpdCoverServer ItemId AspectRecord 
UpdPerception LevelId Perception Perception 
UpdRestart FactionId PerLid State Challenge ClientOptions 
UpdRestartServer State 
UpdResume FactionId PerLid 
UpdResumeServer State 
UpdKillExit FactionId 
UpdWriteSave 

Instances

Eq UpdAtomic Source # 
Show UpdAtomic Source # 
Generic UpdAtomic Source # 

Associated Types

type Rep UpdAtomic :: * -> * #

Binary UpdAtomic Source # 
type Rep UpdAtomic Source # 
type Rep UpdAtomic = D1 * (MetaData "UpdAtomic" "Game.LambdaHack.Atomic.CmdAtomic" "LambdaHack-0.7.1.0-DR3wvpzgdHnDOaheiQUYWW" False) ((:+:) * ((:+:) * ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "UpdCreateActor" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Actor)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(ItemId, Item)]))))) ((:+:) * (C1 * (MetaCons "UpdDestroyActor" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Actor)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(ItemId, Item)]))))) (C1 * (MetaCons "UpdCreateItem" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Item))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemQuant)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container))))))) ((:+:) * (C1 * (MetaCons "UpdDestroyItem" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Item))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemQuant)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container))))) ((:+:) * (C1 * (MetaCons "UpdSpotActor" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Actor)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(ItemId, Item)]))))) (C1 * (MetaCons "UpdLoseActor" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Actor)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(ItemId, Item)])))))))) ((:+:) * ((:+:) * (C1 * (MetaCons "UpdSpotItem" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Bool)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Item)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemQuant)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)))))) ((:+:) * (C1 * (MetaCons "UpdLoseItem" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Bool)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Item)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemQuant)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)))))) (C1 * (MetaCons "UpdSpotItemBag" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemBag)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(ItemId, Item)]))))))) ((:+:) * (C1 * (MetaCons "UpdLoseItemBag" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemBag)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(ItemId, Item)]))))) ((:+:) * (C1 * (MetaCons "UpdMoveActor" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point))))) (C1 * (MetaCons "UpdWaitActor" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Bool)))))))) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "UpdDisplaceActor" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)))) ((:+:) * (C1 * (MetaCons "UpdMoveItem" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore)))))) (C1 * (MetaCons "UpdRefillHP" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int64)))))) ((:+:) * (C1 * (MetaCons "UpdRefillCalm" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int64)))) ((:+:) * (C1 * (MetaCons "UpdTrajectory" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Maybe ([Vector], Speed)))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Maybe ([Vector], Speed))))))) (C1 * (MetaCons "UpdQuitFaction" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Maybe Status))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Maybe Status))))))))) ((:+:) * ((:+:) * (C1 * (MetaCons "UpdLeadFaction" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Maybe ActorId))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Maybe ActorId)))))) ((:+:) * (C1 * (MetaCons "UpdDiplFaction" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Diplomacy)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Diplomacy))))) (C1 * (MetaCons "UpdTacticFaction" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Tactic)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Tactic))))))) ((:+:) * ((:+:) * (C1 * (MetaCons "UpdAutoFaction" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Bool)))) (C1 * (MetaCons "UpdRecordKill" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id ItemKind))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int)))))) ((:+:) * (C1 * (MetaCons "UpdAlterTile" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id TileKind))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id TileKind)))))) (C1 * (MetaCons "UpdAlterExplorable" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int))))))))) ((:+:) * ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "UpdSearchTile" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id TileKind)))))) ((:+:) * (C1 * (MetaCons "UpdHideTile" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id TileKind)))))) (C1 * (MetaCons "UpdSpotTile" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(Point, Id TileKind)])))))) ((:+:) * (C1 * (MetaCons "UpdLoseTile" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(Point, Id TileKind)])))) ((:+:) * (C1 * (MetaCons "UpdAlterSmell" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Time)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Time))))) (C1 * (MetaCons "UpdSpotSmell" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(Point, Time)]))))))) ((:+:) * ((:+:) * (C1 * (MetaCons "UpdLoseSmell" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [(Point, Time)])))) ((:+:) * (C1 * (MetaCons "UpdTimeItem" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemTimer)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemTimer))))) (C1 * (MetaCons "UpdAgeGame" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [LevelId]))))) ((:+:) * (C1 * (MetaCons "UpdUnAgeGame" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * [LevelId]))) ((:+:) * (C1 * (MetaCons "UpdDiscover" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id ItemKind))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemSeed))))) (C1 * (MetaCons "UpdCover" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id ItemKind))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemSeed))))))))) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "UpdDiscoverKind" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemKindIx)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id ItemKind)))))) ((:+:) * (C1 * (MetaCons "UpdCoverKind" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemKindIx)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id ItemKind)))))) (C1 * (MetaCons "UpdDiscoverSeed" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemSeed))))))) ((:+:) * (C1 * (MetaCons "UpdCoverSeed" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Container)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemSeed))))) ((:+:) * (C1 * (MetaCons "UpdDiscoverServer" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * AspectRecord)))) (C1 * (MetaCons "UpdCoverServer" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * AspectRecord))))))) ((:+:) * ((:+:) * (C1 * (MetaCons "UpdPerception" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * LevelId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Perception)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Perception))))) ((:+:) * (C1 * (MetaCons "UpdRestart" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * PerLid))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * State)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Challenge)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ClientOptions)))))) (C1 * (MetaCons "UpdRestartServer" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * State))))) ((:+:) * ((:+:) * (C1 * (MetaCons "UpdResume" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * PerLid)))) (C1 * (MetaCons "UpdResumeServer" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * State)))) ((:+:) * (C1 * (MetaCons "UpdKillExit" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId))) (C1 * (MetaCons "UpdWriteSave" PrefixI False) (U1 *))))))))

data SfxAtomic Source #

Abstract syntax of atomic special effects, that is, atomic commands that only display special effects and don't change State.

Instances

Eq SfxAtomic Source # 
Show SfxAtomic Source # 
Generic SfxAtomic Source # 

Associated Types

type Rep SfxAtomic :: * -> * #

Binary SfxAtomic Source # 
type Rep SfxAtomic Source # 
type Rep SfxAtomic = D1 * (MetaData "SfxAtomic" "Game.LambdaHack.Atomic.CmdAtomic" "LambdaHack-0.7.1.0-DR3wvpzgdHnDOaheiQUYWW" False) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "SfxStrike" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))) ((:+:) * (C1 * (MetaCons "SfxRecoil" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))) (C1 * (MetaCons "SfxSteal" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))))) ((:+:) * (C1 * (MetaCons "SfxRelease" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))) ((:+:) * (C1 * (MetaCons "SfxProject" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))) (C1 * (MetaCons "SfxReceive" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore)))))))) ((:+:) * ((:+:) * (C1 * (MetaCons "SfxApply" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))) ((:+:) * (C1 * (MetaCons "SfxCheck" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))) (C1 * (MetaCons "SfxTrigger" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point)))))) ((:+:) * ((:+:) * (C1 * (MetaCons "SfxShun" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Point)))) (C1 * (MetaCons "SfxEffect" PrefixI False) ((:*:) * ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId))) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Effect)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int64)))))) ((:+:) * (C1 * (MetaCons "SfxMsgFid" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * FactionId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * SfxMsg)))) (C1 * (MetaCons "SfxSortSlots" PrefixI False) (U1 *))))))

data SfxMsg Source #

Symbolic representation of text messages sent by server to clients and shown to players.

Instances

Eq SfxMsg Source # 

Methods

(==) :: SfxMsg -> SfxMsg -> Bool #

(/=) :: SfxMsg -> SfxMsg -> Bool #

Show SfxMsg Source # 
Generic SfxMsg Source # 

Associated Types

type Rep SfxMsg :: * -> * #

Methods

from :: SfxMsg -> Rep SfxMsg x #

to :: Rep SfxMsg x -> SfxMsg #

Binary SfxMsg Source # 

Methods

put :: SfxMsg -> Put #

get :: Get SfxMsg #

putList :: [SfxMsg] -> Put #

type Rep SfxMsg Source # 
type Rep SfxMsg = D1 * (MetaData "SfxMsg" "Game.LambdaHack.Atomic.CmdAtomic" "LambdaHack-0.7.1.0-DR3wvpzgdHnDOaheiQUYWW" False) ((:+:) * ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "SfxUnexpected" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ReqFailure))) (C1 * (MetaCons "SfxLoudUpd" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Bool)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * UpdAtomic))))) ((:+:) * (C1 * (MetaCons "SfxLoudStrike" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Bool)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (Id ItemKind))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int))))) (C1 * (MetaCons "SfxLoudSummon" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Bool)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * (GroupName ItemKind))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Dice))))))) ((:+:) * ((:+:) * (C1 * (MetaCons "SfxFizzles" PrefixI False) (U1 *)) (C1 * (MetaCons "SfxNothingHappens" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "SfxVoidDetection" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "SfxSummonLackCalm" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId))) (C1 * (MetaCons "SfxLevelNoMore" PrefixI False) (U1 *)))))) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "SfxLevelPushed" PrefixI False) (U1 *)) (C1 * (MetaCons "SfxBracedImmune" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)))) ((:+:) * (C1 * (MetaCons "SfxEscapeImpossible" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "SfxTransImpossible" PrefixI False) (U1 *)) (C1 * (MetaCons "SfxIdentifyNothing" PrefixI False) (U1 *))))) ((:+:) * ((:+:) * (C1 * (MetaCons "SfxPurposeNothing" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))) (C1 * (MetaCons "SfxPurposeTooFew" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * Int))))) ((:+:) * (C1 * (MetaCons "SfxPurposeUnique" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "SfxColdFish" PrefixI False) (U1 *)) (C1 * (MetaCons "SfxTimerExtended" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ActorId)) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * ItemId)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 * CStore))))))))))

Re-exported from Game.LambdaHack.Atomic.HandleAtomicWrite

handleUpdAtomic :: MonadStateWrite m => UpdAtomic -> m () Source #

The game-state semantics of atomic game commands. There is no corresponding definition for special effects (SfxAtomic), because they don't modify State.

For each of the commands, we are guaranteed that the client, the command is addressed to, perceives all the positions the command affects (as computed by posUpdAtomic). In the code for each semantic function we additonally verify the client is aware of any relevant items and/or actors and we throw the AtomicFail exception if it's not. The server keeps copies of all clients' states and, before sending a command to a client, applies it to the client's state copy. If AtomicFail is signalled, the command is ignored for that client. This enables simpler server code that addresses commands to all clients that can see it, even though not all are able to process it.

Re-exported from Game.LambdaHack.Atomic.PosAtomicRead

data PosAtomic Source #

The type representing visibility of atomic commands to factions, based on the position of the command, etc. Note that the server sees and smells all positions.

Constructors

PosSight LevelId [Point]

whomever sees all the positions, notices

PosFidAndSight [FactionId] LevelId [Point]

observers and the faction notice

PosSmell LevelId [Point]

whomever smells all the positions, notices

PosFid FactionId

only the faction notices, server doesn't

PosFidAndSer (Maybe LevelId) FactionId

faction and server notices

PosSer

only the server notices

PosAll

everybody notices

PosNone

never broadcasted, but sent manually

posUpdAtomic :: MonadStateRead m => UpdAtomic -> m PosAtomic Source #

Produce the positions where the atomic update takes place or, more generally, the conditions under which the update can be noticed by a client.

The goal of this mechanics is to ensure that atomic commands involving some positions visible by a client convey similar information as the client would get by directly observing the changes of the portion of server state limited to the visible positions. Consequently, when the visible commands are later applied to the client's state, the state stays consistent --- in sync with the server state and correctly limited by visiblity. There is some wiggle room both in what "in sync" and "visible" means and how they propagate through time.

E.g., UpdDisplaceActor in a black room between two enemy actors, with only one actor carrying a 0-radius light would not be distinguishable by looking at the state (or the screen) from UpdMoveActor of the illuminated actor, hence such UpdDisplaceActor should not be observable, but UpdMoveActor in similar cotext would be (or the former should be perceived as the latter). However, to simplify, we assign as strict visibility requirements to UpdMoveActor as to UpdDisplaceActor and fall back to UpdSpotActor (which provides minimal information that does not contradict state) if the visibility is lower.

posSfxAtomic :: MonadStateRead m => SfxAtomic -> m PosAtomic Source #

Produce the positions where the atomic special effect takes place.

breakUpdAtomic :: MonadStateRead m => UpdAtomic -> m [UpdAtomic] Source #

Decompose an atomic action that is outside a client's visiblity. The decomposed actions give less information that the original command, but some of them may fall within the visibility range of the client. The original action may give more information than even the total sum of all actions it's broken into. E.g., UpdMoveActor informs about the continued existence of the actor between moves vs popping out of existence and then back in.

This is computed in server's State from before performing the command.

seenAtomicCli :: Bool -> FactionId -> Perception -> PosAtomic -> Bool Source #

Given the client, its perception and an atomic command, determine if the client notices the command.

seenAtomicSer :: PosAtomic -> Bool Source #

Determine whether the server would see a command that has the given visibilty conditions.

Re-exported from Game.LambdaHack.Atomic.MonadStateWrite

class MonadStateRead m => MonadStateWrite m where Source #

The monad for writing to the main game state. Atomic updates (UpdAtomic) are given semantics in this monad.

Minimal complete definition

modifyState

Methods

modifyState :: (State -> State) -> m () Source #

newtype AtomicFail Source #

Exception signifying that atomic action failed because the information it carries is inconsistent with the client's state, (e.g., because the client knows too little to understand the command or already deduced the state change from earlier commands or is confused, amnesiac or sees illusory actors or tiles). Whenever we know the failure is logically impossible, we don't throw the AtomicFail exception, but insert a normal assertion or error call, which are never caught nor handled.

Constructors

AtomicFail String