LambdaHack-0.8.1.1: LambdaHack.cabal
name: LambdaHack
-- The package version. See the Haskell package versioning policy (PVP)
-- for standards guiding when and how versions should be incremented.
-- http://www.haskell.org/haskellwiki/Package_versioning_policy
-- PVP summary:+-+------- breaking API changes
-- | | +----- minor or non-breaking API additions
-- | | | +--- code changes with no API change
version: 0.8.1.1
synopsis: A game engine library for tactical squad ASCII roguelike dungeon crawlers
description: LambdaHack is a Haskell game engine library for ASCII roguelike
games of arbitrary theme, size and complexity, with optional
tactical squad combat. It's packaged together with a sample
dungeon crawler in fantasy setting that can be tried out
in the browser: <http://lambdahack.github.io>
(It runs fastest on Chrome. Keyboard commands and savefiles
are supported only on recent enough versions of browsers.
Mouse should work everywhere.)
.
Please see the changelog file for recent improvements
and the issue tracker for short-term plans. Long term goals
include multiplayer tactical squad combat, in-game content
creation, auto-balancing and persistent content modification
based on player behaviour. Contributions are welcome.
.
Games known to use the LambdaHack library:
.
* Allure of the Stars, a near-future Sci-Fi game,
<http://hackage.haskell.org/package/Allure>
.
* Space Privateers, an adventure game set in far future,
<http://hackage.haskell.org/package/SpacePrivateers>
.
Note: All modules in this library are kept visible,
to let games override and reuse them.
OTOH, to reflect that some modules are implementation details
relative to others, the source code adheres to the following
convention. If a module has the same name as a directory,
the module is the exclusive interface to the directory.
No references to the modules in the directory are allowed
except from the interface module. This policy is only binding
when developing the library --- library users are free
to access any modules, since the library authors are in
no position to guess their particular needs.
homepage: https://lambdahack.github.io
bug-reports: http://github.com/LambdaHack/LambdaHack/issues
license: BSD3
license-file: COPYLEFT
tested-with: GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
data-files: GameDefinition/config.ui.default,
GameDefinition/fonts/16x16x.fon,
GameDefinition/fonts/8x8xb.fon,
GameDefinition/fonts/8x8x.fon,
GameDefinition/fonts/LICENSE.16x16x,
GameDefinition/fonts/Fix15Mono-Bold.woff,
GameDefinition/fonts/LICENSE.Fix15Mono-Bold,
GameDefinition/InGameHelp.txt,
README.md,
CHANGELOG.md,
LICENSE,
COPYLEFT,
CREDITS
extra-source-files: GameDefinition/MainMenu.ascii,
GameDefinition/PLAYING.md,
Makefile
author: Andres Loeh, Mikolaj Konarski
maintainer: Mikolaj Konarski <mikolaj.konarski@funktory.com>
category: Game Engine, Game
build-type: Simple
cabal-version: >= 1.10
source-repository head
type: git
location: git://github.com/LambdaHack/LambdaHack.git
flag vty
description: switch to the vty frontend
default: False
manual: True
flag curses
description: switch to the curses frontend (not fully supported)
default: False
manual: True
flag gtk
description: switch to the GTK frontend
default: False
manual: True
flag sdl
description: switch to the SDL2 frontend
default: False
manual: True
flag jsaddle
description: switch to the JSaddle frontend
default: False
manual: True
flag with_expensive_assertions
description: turn on expensive assertions of well-tested code
default: False
manual: True
flag release
description: prepare for a release (expose internal functions and types, etc.)
default: True
manual: True
library
exposed-modules: Game.LambdaHack.Atomic
Game.LambdaHack.Atomic.CmdAtomic
Game.LambdaHack.Atomic.HandleAtomicWrite
Game.LambdaHack.Atomic.MonadStateWrite
Game.LambdaHack.Atomic.PosAtomicRead
Game.LambdaHack.Client
Game.LambdaHack.Client.AI
Game.LambdaHack.Client.AI.ConditionM
Game.LambdaHack.Client.AI.HandleAbilityM
Game.LambdaHack.Client.AI.PickActorM
Game.LambdaHack.Client.AI.PickTargetM
Game.LambdaHack.Client.AI.Strategy
Game.LambdaHack.Client.Bfs
Game.LambdaHack.Client.BfsM
Game.LambdaHack.Client.ClientOptions
Game.LambdaHack.Client.CommonM
Game.LambdaHack.Client.HandleAtomicM
Game.LambdaHack.Client.HandleResponseM
Game.LambdaHack.Client.LoopM
Game.LambdaHack.Client.MonadClient
Game.LambdaHack.Client.Preferences
Game.LambdaHack.Client.Request
Game.LambdaHack.Client.Response
Game.LambdaHack.Client.State
Game.LambdaHack.Client.UI
Game.LambdaHack.Client.UI.ActorUI
Game.LambdaHack.Client.UI.Animation
Game.LambdaHack.Client.UI.Content.KeyKind
Game.LambdaHack.Client.UI.DrawM
Game.LambdaHack.Client.UI.DisplayAtomicM
Game.LambdaHack.Client.UI.EffectDescription
Game.LambdaHack.Client.UI.Frame
Game.LambdaHack.Client.UI.FrameM
Game.LambdaHack.Client.UI.Frontend
Game.LambdaHack.Client.UI.Frontend.Chosen
Game.LambdaHack.Client.UI.Frontend.Common
Game.LambdaHack.Client.UI.Frontend.Teletype
Game.LambdaHack.Client.UI.HandleHelperM
Game.LambdaHack.Client.UI.HandleHumanGlobalM
Game.LambdaHack.Client.UI.HandleHumanLocalM
Game.LambdaHack.Client.UI.HandleHumanM
Game.LambdaHack.Client.UI.HumanCmd
Game.LambdaHack.Client.UI.InventoryM
Game.LambdaHack.Client.UI.ItemDescription
Game.LambdaHack.Client.UI.ItemSlot
Game.LambdaHack.Client.UI.Key
Game.LambdaHack.Client.UI.KeyBindings
Game.LambdaHack.Client.UI.MonadClientUI
Game.LambdaHack.Client.UI.Msg
Game.LambdaHack.Client.UI.MsgM
Game.LambdaHack.Client.UI.Overlay
Game.LambdaHack.Client.UI.RunM
Game.LambdaHack.Client.UI.SessionUI
Game.LambdaHack.Client.UI.Slideshow
Game.LambdaHack.Client.UI.SlideshowM
Game.LambdaHack.Client.UI.UIOptions
Game.LambdaHack.Common.Ability
Game.LambdaHack.Common.Actor
Game.LambdaHack.Common.ActorState
Game.LambdaHack.Common.Color
Game.LambdaHack.Common.ContentData
Game.LambdaHack.Common.Dice
Game.LambdaHack.Common.Faction
Game.LambdaHack.Common.File
Game.LambdaHack.Common.Flavour
Game.LambdaHack.Common.Frequency
Game.LambdaHack.Common.HighScore
Game.LambdaHack.Common.Item
Game.LambdaHack.Common.ItemAspect
Game.LambdaHack.Common.Kind
Game.LambdaHack.Common.Level
Game.LambdaHack.Common.Misc
Game.LambdaHack.Common.MonadStateRead
Game.LambdaHack.Common.Perception
Game.LambdaHack.Common.PointArray
Game.LambdaHack.Common.Point
Game.LambdaHack.Common.Prelude
Game.LambdaHack.Common.Random
Game.LambdaHack.Common.ReqFailure
Game.LambdaHack.Common.RingBuffer
Game.LambdaHack.Common.Save
Game.LambdaHack.Common.State
Game.LambdaHack.Common.Thread
Game.LambdaHack.Common.Tile
Game.LambdaHack.Common.Time
Game.LambdaHack.Common.Vector
Game.LambdaHack.Content.CaveKind
Game.LambdaHack.Content.ItemKind
Game.LambdaHack.Content.ModeKind
Game.LambdaHack.Content.PlaceKind
Game.LambdaHack.Content.RuleKind
Game.LambdaHack.Content.TileKind
Game.LambdaHack.Server
Game.LambdaHack.Server.BroadcastAtomic
Game.LambdaHack.Server.Commandline
Game.LambdaHack.Server.CommonM
Game.LambdaHack.Server.DebugM
Game.LambdaHack.Server.DungeonGen
Game.LambdaHack.Server.DungeonGen.Area
Game.LambdaHack.Server.DungeonGen.AreaRnd
Game.LambdaHack.Server.DungeonGen.Cave
Game.LambdaHack.Server.DungeonGen.Place
Game.LambdaHack.Server.EndM
Game.LambdaHack.Server.Fov
Game.LambdaHack.Server.FovDigital
Game.LambdaHack.Server.HandleAtomicM
Game.LambdaHack.Server.HandleEffectM
Game.LambdaHack.Server.HandleRequestM
Game.LambdaHack.Server.ItemRev
Game.LambdaHack.Server.ItemM
Game.LambdaHack.Server.LoopM
Game.LambdaHack.Server.MonadServer
Game.LambdaHack.Server.PeriodicM
Game.LambdaHack.Server.ProtocolM
Game.LambdaHack.Server.ServerOptions
Game.LambdaHack.Server.StartM
Game.LambdaHack.Server.State
other-modules: Paths_LambdaHack
build-depends:
assert-failure >= 0.1.2 && < 0.2,
async >= 2,
base >= 4.9 && < 99,
base-compat >= 0.8.0,
binary >= 0.8,
bytestring >= 0.9.2 ,
containers >= 0.5.3.0,
deepseq >= 1.3,
directory >= 1.1.0.1,
enummapset >= 0.5.2.2,
filepath >= 1.2.0.1,
ghc-prim,
hashable >= 1.1.2.5,
hsini >= 0.2,
keys >= 3,
miniutter >= 0.4.5.0,
optparse-applicative >= 0.13,
pretty-show >= 1.6,
random >= 1.1,
stm >= 2.4,
time >= 1.4,
text >= 0.11.2.3,
transformers >= 0.4,
unordered-containers >= 0.2.3,
vector >= 0.11,
vector-binary-instances >= 0.2.3.1
default-language: Haskell2010
default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
LambdaCase, StrictData, CPP
other-extensions: TemplateHaskell, MultiParamTypeClasses, RankNTypes,
TypeFamilies, FlexibleContexts, FlexibleInstances,
DeriveFunctor, FunctionalDependencies,
GeneralizedNewtypeDeriving, TupleSections,
DeriveFoldable, DeriveTraversable,
ExistentialQuantification, GADTs, StandaloneDeriving,
DataKinds, KindSignatures, DeriveGeneric
ghc-options: -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
ghc-options: -Wall-missed-specialisations
ghc-options: -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively -fsimpl-tick-factor=200
if impl(ghcjs) || flag(jsaddle) {
exposed-modules: Game.LambdaHack.Client.UI.Frontend.Dom
build-depends: ghcjs-dom >= 0.9.1.1
cpp-options: -DUSE_BROWSER
} else { if flag(vty) {
exposed-modules: Game.LambdaHack.Client.UI.Frontend.Vty
build-depends: vty >= 5
cpp-options: -DUSE_VTY
} else { if flag(curses) {
exposed-modules: Game.LambdaHack.Client.UI.Frontend.Curses
build-depends: hscurses >= 1.4.1
cpp-options: -DUSE_CURSES
} else { if flag(gtk) {
exposed-modules: Game.LambdaHack.Client.UI.Frontend.Gtk
build-depends: gtk3 >= 0.12.1
cpp-options: -DUSE_GTK
} else {
exposed-modules: Game.LambdaHack.Client.UI.Frontend.Sdl
build-depends: sdl2 >= 2, sdl2-ttf >= 2
cpp-options: -DUSE_SDL
} } } }
if impl(ghcjs) {
exposed-modules: Game.LambdaHack.Common.JSFile
cpp-options: -DUSE_JSFILE
} else {
exposed-modules: Game.LambdaHack.Common.HSFile
build-depends: zlib >= 0.5.3.1
}
if flag(with_expensive_assertions)
cpp-options: -DWITH_EXPENSIVE_ASSERTIONS
if flag(release)
cpp-options: -DEXPOSE_INTERNAL
executable LambdaHack
hs-source-dirs: GameDefinition
main-is: Main.hs
other-modules: Client.UI.Content.KeyKind,
Content.CaveKind,
Content.ItemKind,
Content.ItemKindEmbed,
Content.ItemKindActor,
Content.ItemKindOrgan,
Content.ItemKindBlast,
Content.ItemKindTemporary,
Content.ModeKind,
Content.ModeKindPlayer,
Content.PlaceKind,
Content.RuleKind,
Content.TileKind,
Implementation.MonadClientImplementation,
Implementation.MonadServerImplementation,
Implementation.TieKnot,
Paths_LambdaHack
build-depends: LambdaHack,
template-haskell >= 2.6,
assert-failure >= 0.1.2 && < 0.2,
async >= 2,
base >= 4.9 && < 99,
base-compat >= 0.8.0,
binary >= 0.8,
bytestring >= 0.9.2 ,
containers >= 0.5.3.0,
deepseq >= 1.3,
directory >= 1.1.0.1,
enummapset >= 0.5.2.2,
filepath >= 1.2.0.1,
ghc-prim,
hashable >= 1.1.2.5,
hsini >= 0.2,
keys >= 3,
miniutter >= 0.4.5.0,
optparse-applicative >= 0.13,
pretty-show >= 1.6,
random >= 1.1,
stm >= 2.4,
text >= 0.11.2.3,
time >= 1.4,
transformers >= 0.4,
unordered-containers >= 0.2.3,
vector >= 0.11,
vector-binary-instances >= 0.2.3.1
default-language: Haskell2010
default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
LambdaCase, StrictData, CPP
other-extensions: TemplateHaskell
ghc-options: -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
ghc-options: -Wall-missed-specialisations
ghc-options: -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively
ghc-options: -threaded -rtsopts
-- Minimize median lag at the cost of occasional bigger GC lag,
-- which fortunately sometimes fits into idle time between turns):
ghc-options: -with-rtsopts=-A99m
if impl(ghcjs) {
-- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames
-- on my machine with default --maxFps.
cpp-options: -DGHCJS_BUSY_YIELD=50
cpp-options: -DUSE_JSFILE
} else {
build-depends: zlib >= 0.5.3.1
}
test-suite test
type: exitcode-stdio-1.0
hs-source-dirs: GameDefinition, test
main-is: test.hs
other-modules: Client.UI.Content.KeyKind,
Content.CaveKind,
Content.ItemKind,
Content.ItemKindEmbed,
Content.ItemKindActor,
Content.ItemKindOrgan,
Content.ItemKindBlast,
Content.ItemKindTemporary,
Content.ModeKind,
Content.ModeKindPlayer,
Content.PlaceKind,
Content.RuleKind,
Content.TileKind,
Implementation.MonadClientImplementation,
Implementation.MonadServerImplementation,
Implementation.TieKnot,
Paths_LambdaHack
build-depends: LambdaHack,
template-haskell >= 2.6,
assert-failure >= 0.1.2 && < 0.2,
async >= 2,
base >= 4.9 && < 99,
base-compat >= 0.8.0,
binary >= 0.8,
bytestring >= 0.9.2 ,
containers >= 0.5.3.0,
deepseq >= 1.3,
directory >= 1.1.0.1,
enummapset >= 0.5.2.2,
filepath >= 1.2.0.1,
ghc-prim,
hashable >= 1.1.2.5,
hsini >= 0.2,
keys >= 3,
miniutter >= 0.4.5.0,
optparse-applicative >= 0.13,
pretty-show >= 1.6,
random >= 1.1,
stm >= 2.4,
text >= 0.11.2.3,
time >= 1.4,
transformers >= 0.4,
unordered-containers >= 0.2.3,
vector >= 0.11,
vector-binary-instances >= 0.2.3.1
default-language: Haskell2010
default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
LambdaCase, StrictData, CPP
other-extensions: TemplateHaskell
ghc-options: -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
ghc-options: -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively
ghc-options: -threaded -rtsopts
-- Minimize median lag at the cost of occasional bigger GC lag,
-- which fortunately sometimes fits into idle time between turns):
ghc-options: -with-rtsopts=-A99m
if impl(ghcjs) {
-- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames
-- on my machine with default --maxFps.
cpp-options: -DGHCJS_BUSY_YIELD=50
} else {
build-depends: zlib >= 0.5.3.1
}