File: LambdaHack.cabal

package info (click to toggle)
haskell-lambdahack 0.8.3.0-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 2,264 kB
  • sloc: haskell: 32,360; makefile: 174
file content (450 lines) | stat: -rw-r--r-- 21,039 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
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.3.0
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 at <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 (may be bit-rotted)
  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
  }