packages feed

Allure 0.6.1.0 → 0.6.2.0

raw patch · 14 files changed

+149/−115 lines, 14 filesdep ~LambdaHackdep ~base

Dependency ranges changed: LambdaHack, base

Files

Allure.cabal view
@@ -5,7 +5,7 @@ -- PVP summary:+-+------- breaking API changes --             | | +----- minor or non-breaking API additions --             | | | +--- code changes with no API change-version:       0.6.1.0+version:       0.6.2.0 synopsis:      Near-future Sci-Fi roguelike and tactical squad game description:   Allure of the Stars                is a near-future Sci-Fi roguelike and tactical squad game.@@ -29,7 +29,7 @@ bug-reports:   http://github.com/AllureOfTheStars/Allure/issues license:       AGPL-3 license-file:  LICENSE-tested-with:   GHC >= 7.10 && <= 8.2+tested-with:   GHC >= 8.0 && <= 8.2 data-files:    GameDefinition/config.ui.default,                GameDefinition/fonts/16x16x.fon,                GameDefinition/fonts/8x8xb.fon,@@ -72,11 +72,11 @@                       Content.TileKind,                       TieKnot,                       Paths_Allure-  build-depends:      LambdaHack >= 0.6.1.0 && < 0.6.2.0,+  build-depends:      LambdaHack >= 0.6.2.0 && < 0.6.3.0,                       template-haskell >= 2.6,                        async      >= 2,-                      base       >= 4 && < 99,+                      base       >= 4.9 && < 99,                       containers >= 0.5.3.0,                       enummapset-th >= 0.6.0.0,                       filepath   >= 1.2.0.1,@@ -85,10 +85,11 @@    default-language:   Haskell2010   default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings-                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf+                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,+                      StrictData   other-extensions:   TemplateHaskell-  ghc-options:        -Wall -fwarn-orphans -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates -fwarn-unrecognised-pragmas-  ghc-options:        -fno-warn-implicit-prelude -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively+  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities+  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively   ghc-options:        -threaded -rtsopts    if impl(ghcjs) {@@ -103,7 +104,7 @@     build-depends:    zlib >= 0.5.3.1 -- The -A options makes it slightly faster, especially with short sessions:     ghc-options:      "-with-rtsopts=-A99m -K1000K"--- TODO: get back to -K1K when I can use pretty-1.1.3.4 (TH depends on an old one)+-- TODO: get back to -K1K when I can use pretty-1.1.3.4 (TH depends on an old one), that is, when I can drop GHC 8.0.2 and older   }  test-suite test@@ -128,7 +129,7 @@   build-depends:      LambdaHack,                       template-haskell >= 2.6, -                      base       >= 4 && < 99,+                      base       >= 4.9 && < 99,                       containers >= 0.5.3.0,                       enummapset-th >= 0.6.0.0,                       filepath   >= 1.2.0.1,@@ -137,10 +138,11 @@    default-language:   Haskell2010   default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings-                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf+                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,+                      StrictData   other-extensions:   TemplateHaskell-  ghc-options:        -Wall -fwarn-orphans -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates -fwarn-unrecognised-pragmas-  ghc-options:        -fno-warn-implicit-prelude -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively+  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities+  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively   ghc-options:        -threaded -rtsopts    if impl(ghcjs) {@@ -151,5 +153,5 @@   } else {     build-depends:    zlib >= 0.5.3.1     ghc-options:      "-with-rtsopts=-A99m -K1000K"--- get back to -K1K when I can use pretty-1.1.3.4 (TH depends on an old one)+-- TODO: get back to -K1K when I can use pretty-1.1.3.4 (TH depends on an old one), that is, when I can drop GHC 8.0.2 and older   }
CHANGELOG.md view
@@ -1,3 +1,23 @@+## [v0.6.2.0, aka 'Zoom out'](https://github.com/LambdaHack/LambdaHack/compare/v0.6.1.0...v0.6.2.0)++- make fireworks slower and so easier to spot+- make rattlesnake deeper but more common+- announce no effect of activation+- describe original and current faction of an actor+- highlight dominated actors+- mark organs with comma instead of percent and gems with dollar+- make the healing cave dangerous to prevent camping+- slightly balance various content+- by default move item the same as last time+- often spawn between heroes and stairs going deeper+- fix totalUsefulness computation for negative effects+- fix abandoning distant enemy target despite no alternatives+- fix slow pushing of actors+- fix a crash when many actors run towards stairs+- hotfix: Pass zoom keys through to the browser+- help players find the info about changing the font size+- depend on GHC >= 8.0 and new vector+ ## [v0.6.1.0, aka 'Breaking one rule at a time'](https://github.com/LambdaHack/LambdaHack/compare/v0.6.0.0...v0.6.1.0)  - major engine bugfix: fix redrawing after window minimized and restored
GameDefinition/Content/CaveKind.hs view
@@ -52,8 +52,8 @@   , chidden       = 7   , cactorCoeff   = 130  -- the maze requires time to explore   , cactorFreq    = [("monster", 50), ("animal", 25), ("robot", 25)]-  , citemNum      = 5 * d 5-  , citemFreq     = [("useful", 50), ("treasure", 50)]+  , citemNum      = 6 * d 5+  , citemFreq     = [("useful", 40), ("treasure", 60)]   , cplaceFreq    = [("rogue", 100)]   , cpassable     = False   , cdefTile        = "fillerWall"@@ -90,11 +90,12 @@   , chidden       = 0   , cactorCoeff   = 100   , cactorFreq    = [("monster", 25), ("animal", 70), ("robot", 5)]-  , citemNum      = 4 * d 5  -- few rooms-  , citemFreq     = [("useful", 20), ("treasure", 30), ("any scroll", 50)]+  , citemNum      = 5 * d 5  -- few rooms+  , citemFreq     = [("useful", 20), ("treasure", 40), ("any scroll", 40)]   , cplaceFreq    = [("arena", 100)]   , cpassable     = True   , cdefTile      = "arenaSetLit"+  , cdarkCorTile  = "trailLit"  -- let trails give off light   , clitCorTile   = "trailLit"   } arena2 = arena@@ -103,10 +104,9 @@   , cdarkChance   = 41 + d 10  -- almost all rooms lit (1 in 10 dark)   -- Trails provide enough light for fun stealth.   , cnightChance  = 51  -- always night-  , citemNum      = 6 * d 5  -- rare, so make it exciting-  , citemFreq     = [("useful", 30), ("treasure", 70)] -- lives up to the name+  , citemNum      = 7 * d 5  -- rare, so make it exciting+  , citemFreq     = [("useful", 20), ("treasure", 80)] -- lives up to the name   , cdefTile      = "arenaSetDark"-  , cdarkCorTile  = "trailLit"  -- let trails give off light   } laboratory = arena2   { csymbol       = 'L'@@ -122,11 +122,12 @@   , cdoorChance   = 1   , copenChance   = 1%2   , chidden       = 7-  , citemNum      = 6 * d 5  -- reward difficulty-  , citemFreq     = [("useful", 20), ("treasure", 30), ("any vial", 50)]+  , citemNum      = 7 * d 5  -- reward difficulty+  , citemFreq     = [("useful", 20), ("treasure", 40), ("any vial", 40)]   , cplaceFreq    = [("laboratory", 100)]   , cpassable     = False   , cdefTile      = "fillerWall"+  , cdarkCorTile  = "labTrailLit"  -- let lab smoke give off light always   , clitCorTile   = "labTrailLit"   , cstairFreq    = [("staircase lift", 100)]   }@@ -148,7 +149,7 @@   , chidden       = 0   , cactorCoeff   = 80   , cactorFreq    = [("monster", 25), ("animal", 5), ("robot", 70)]-  , citemNum      = 4 * d 5  -- few rooms+  , citemNum      = 5 * d 5  -- few rooms   , cplaceFreq    = [("empty", 100)]   , cpassable     = True   , cdefTile      = "emptySet"@@ -174,7 +175,7 @@   , chidden       = 0   , cactorCoeff   = 160  -- the maze requires time to explore   , cactorFreq    = [("monster", 70), ("animal", 15), ("robot", 15)]-  , citemNum      = 6 * d 5  -- an incentive to explore the labyrinth+  , citemNum      = 7 * d 5  -- an incentive to explore the labyrinth   , cpassable     = True   , cplaceFreq    = [("noise", 100)]   , cdefTile      = "noiseSet"@@ -186,7 +187,7 @@   { cname         = "Power distribution hub"   , cfreq         = [("caveNoise2", 1)]   , cnightChance  = 51  -- easier variant, but looks sinister-  , citemNum      = 12 * d 5  -- an incentive to explore the final labyrinth+  , citemNum      = 13 * d 5  -- an incentive to explore the final labyrinth   , cplaceFreq    = [("noise", 1), ("mine", 99)]   , cstairFreq    = [("gated staircase", 100)]   }@@ -196,8 +197,9 @@   , cfreq         = [("caveBridge", 1)]   , cdarkChance   = 0  -- all rooms lit, for a gentle start   , cextraStairs  = 1-  , cactorFreq    = []  -- safe, nothing spawns-  , citemNum      = 8 * d 5  -- lure them in with loot+  , cactorCoeff   = 200  -- it's quite deep already, so spawn slowly+  , cactorFreq    = [("animal", 100)]+  , citemNum      = 9 * d 5  -- lure them in with loot   , citemFreq     = filter ((/= "treasure") . fst) $ citemFreq rogue   } shallow2rogue = rogue@@ -221,8 +223,8 @@ shallow1empty = shallow2empty  -- TODO: replace some rooms with oriels?   { cname         = "Outermost deck"   , cfreq         = [("outermost", 100)]-  , cactorCoeff   = 5  -- shallower than LH, so less immediate actors, so boost-  , cactorFreq    = [("animal", 4), ("robot", 1), ("immobile robot", 95)]+  , cactorCoeff   = 4  -- shallower than LH, so less immediate actors, so boost+  , cactorFreq    = [("animal", 5), ("robot", 5), ("immobile robot", 90)]       -- The medbot faucets on lvl 1 act like HP resets. Needed to avoid       -- cascading failure, if the particular starting conditions were       -- very hard. Items are not reset, even if they are bad, which provides@@ -244,7 +246,7 @@   , cfreq         = [("caveRaid", 1)]   , cdarkChance   = 0  -- all rooms lit, for a gentle start   , cmaxVoid      = 1%10-  , cactorCoeff   = 1000  -- deep level with no kit, so slow spawning+  , cactorCoeff   = 500  -- deep level with no kit, so slow spawning   , cactorFreq    = [("animal", 50), ("robot", 50)]   , citemNum      = 6 * d 8  -- just one level, hard enemies, treasure   , citemFreq     = [("useful", 33), ("gem", 33), ("currency", 33)]
GameDefinition/Content/ItemKind.hs view
@@ -52,14 +52,14 @@  -- * Item group symbols, from Angband and variants -symbolProjectile, _symbolLauncher, symbolLight, symbolTool, symbolGem, symbolGold, symbolNecklace, symbolRing, symbolPotion, symbolFlask, symbolScroll, symbolTorsoArmor, symbolMiscArmor, _symbolClothes, symbolShield, symbolPolearm, symbolEdged, symbolHafted, symbolWand, _symbolStaff, _symbolFood :: Char+symbolProjectile, _symbolLauncher, symbolLight, symbolTool, symbolSpecial, symbolGold, symbolNecklace, symbolRing, symbolPotion, symbolFlask, symbolScroll, symbolTorsoArmor, symbolMiscArmor, _symbolClothes, symbolShield, symbolPolearm, symbolEdged, symbolHafted, symbolWand, _symbolStaff, symbolFood :: Char  symbolProjectile = '{' _symbolLauncher  = '}' symbolLight      = '(' symbolTool       = ')'-symbolGem        = '*'-symbolGold       = '$'+symbolSpecial    = '*'  -- don't overuse, because it clashes with projectiles+symbolGold       = '$'  -- also gems symbolNecklace   = '"' symbolRing       = '=' symbolPotion     = '!'  -- concoction, bottle, jar, vial, canister@@ -74,7 +74,7 @@ symbolHafted     = '\\' symbolWand       = '-'  -- magical rod, transmitter, pistol, rifle _symbolStaff     = '_'  -- scanner-_symbolFood      = ','  -- distinct from floor, because middle dots used+symbolFood       = ','  -- also body part; distinct from floor: not middle dot  -- * Thrown weapons @@ -375,7 +375,7 @@   { irarity  = [(10, 2)]   , ieffects = [ ELabel "of smelly concoction"                , toOrganActorTurn "keen-smelling" (40 + d 10)-               , DetectActor 5+               , DetectActor 10                , OnSmash (Explode "smelly droplet") ]   } flask11 = flask@@ -486,8 +486,9 @@   , ieffects = [ RefillHP 10, DropItem 1 maxBound COrgan "poisoned"                , OnSmash (Explode "healing mist 2") ]   }-potion5 = potion-  { ieffects = [ OneOf [ RefillHP 10, RefillHP 5, Burn 5+potion5 = potion  -- needs to be common to show at least a portion of effects+  { irarity  = [(1, 30), (10, 15)]+  , ieffects = [ OneOf [ RefillHP 10, RefillHP 5, Burn 5                        , toOrganActorTurn "strengthened" (20 + d 5) ]                , OnSmash (OneOf [ Explode "dense shower"                                 , Explode "sparse shower"@@ -496,8 +497,8 @@                                 , Explode "red paint"                                 , Explode "blast 10" ]) ]   }-potion6 = potion-  { irarity  = [(3, 2), (10, 5)]+potion6 = potion  -- needs to be common to show at least a portion of effects+  { irarity  = [(1, 5), (10, 20)]   , ieffects = [ Impress                , OneOf [ RefillCalm (-60)                        , RefillHP 20, RefillHP 10, Burn 10@@ -561,23 +562,24 @@   } scroll2 = scroll   { irarity  = [(1, 2)]-  , ieffects = [ ELabel "of greed", Teleport 20, DetectItem 10+  , ieffects = [ ELabel "of greed", Teleport 20, DetectItem 20                , RefillCalm (-100) ]   } scroll3 = scroll   { irarity  = [(1, 4), (10, 2)]   , ieffects = [Ascend True]   }-scroll4 = scroll-  { ieffects = [OneOf [ Teleport 5, RefillCalm 5, InsertMove 5-                      , DetectActor 10, DetectItem 10 ]]+scroll4 = scroll  -- needs to be common to show at least a portion of effects+  { irarity  = [(1, 40), (10, 20)]+  , ieffects = [OneOf [ Teleport 5, RefillCalm 5, InsertMove 5+                      , DetectActor 20, DetectItem 20 ]]   }-scroll5 = scroll-  { irarity  = [(10, 14)]+scroll5 = scroll  -- needs to be common to show at least a portion of effects+  { irarity  = [(10, 30)]   , ieffects = [ Impress                , OneOf [ Teleport 20, Ascend False, Ascend True                        , Summon "hero" 1, Summon "mobile animal" 2-                       , Detect 20, RefillCalm (-100)+                       , Detect 40, RefillCalm (-100)                        , CreateItem CGround "useful" TimerNone ] ]   } scroll6 = scroll@@ -591,7 +593,8 @@   , ieffects = [InsertMove $ 1 + d 2 + dl 2]   } scroll9 = scroll-  { ieffects = [ELabel "of scientific explanation", Identify]+  { irarity  = [(1, 30)]+  , ieffects = [ELabel "of scientific explanation", Identify]   } scroll10 = scroll   { irarity  = [(10, 20)]@@ -605,10 +608,10 @@   } scroll12 = scroll   { irarity  = [(1, 9), (10, 4)]-  , ieffects = [DetectHidden 10]+  , ieffects = [DetectHidden 20]   } scroll13 = scroll-  { ieffects = [ELabel "of acute hearing", DetectActor 7]+  { ieffects = [ELabel "of acute hearing", DetectActor 20]   }  -- * Assorted tools@@ -646,7 +649,7 @@   , ikit     = []   } seeingItem = ItemKind-  { isymbol  = '%'+  { isymbol  = symbolFood   , iname    = "visual sensor"   , ifreq    = [("useful", 100)]   , iflavour = zipPlain [Red]@@ -742,7 +745,7 @@ necklace3 = necklace   { iaspects = [Timeout $ d 3 + 4 - dl 3 |*| 5]   , ieffects = [ ELabel "of fearful listening"-               , Recharging (DetectActor 10)+               , Recharging (DetectActor 20)                , Recharging (RefillCalm (-20)) ]                ++ ieffects necklace   }@@ -1036,7 +1039,7 @@   , ifreq    = [("useful", 100), ("starting weapon", 100)]   , iflavour = zipPlain [BrCyan]   , icount   = 1-  , irarity  = [(1, 40), (5, 1)]+  , irarity  = [(3 * 10/12, 50), (4 * 10/12, 1)]   , iverbHit = "stab"   , iweight  = 1000   , idamage  = toDmg $ 6 * d 1@@ -1124,7 +1127,7 @@   , irarity  = [(5, 1), (10, 6)]   , iaspects = [Timeout $ d 4 + 5 - dl 4 |*| 2]   , ieffects = ieffects sword-               ++ [Unique, Recharging Impress, Recharging (DetectActor 3)]+               ++ [Unique, Recharging Impress, Recharging (DetectActor 5)]   } swordNullify = sword   { isymbol  = symbolEdged@@ -1196,7 +1199,7 @@ -- * Treasure  gem = ItemKind-  { isymbol  = symbolGem+  { isymbol  = symbolGold   , iname    = "gem"   , ifreq    = [("treasure", 100), ("gem", 100)]   , iflavour = zipPlain $ delete BrYellow brightCol  -- natural, so not fancy@@ -1214,19 +1217,20 @@   , ikit     = []   } gem1 = gem-  { irarity  = [(3, 0), (10, 12)]+  { irarity  = [(3, 0), (10, 24)]   } gem2 = gem-  { irarity  = [(5, 0), (10, 14)]+  { irarity  = [(5, 0), (10, 28)]   } gem3 = gem-  { irarity  = [(7, 0), (10, 16)]+  { irarity  = [(7, 0), (10, 32)]   } gem4 = gem-  { irarity  = [(9, 0), (10, 50)]+  { irarity  = [(9, 0), (10, 100)]   } gem5 = gem-  { iname    = "stimpack"+  { isymbol  = symbolSpecial+  , iname    = "stimpack"   , iflavour = zipPlain [BrYellow]   , irarity  = [(1, 40), (10, 40)]   , iaspects = []
GameDefinition/Content/ItemKindActor.hs view
@@ -339,7 +339,7 @@   , ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]   , iflavour = zipPlain [Brown]   , icount   = 1-  , irarity  = [(4, 1), (10, 7)]+  , irarity  = [(5, 1), (10, 12)]   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0@@ -472,10 +472,10 @@ thornbush = ItemKind   { isymbol  = 't'   , iname    = "thornbush"-  , ifreq    = [("animal", 50), ("immobile animal", 100)]+  , ifreq    = [("animal", 20), ("immobile animal", 30)]   , iflavour = zipPlain [Brown]   , icount   = 1-  , irarity  = [(1, 2)]+  , irarity  = [(1, 10)]   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0@@ -495,10 +495,10 @@ razorwireFence = ItemKind   { isymbol  = 'f'   , iname    = "razorwire fence"-  , ifreq    = [("robot", 50), ("immobile robot", 50)]+  , ifreq    = [("robot", 10), ("immobile robot", 10)]   , iflavour = zipPlain [Cyan]   , icount   = 1-  , irarity  = [(3 * 10/12, 0), (4 * 10/12, 2)]+  , irarity  = [(3 * 10/12, 0), (4 * 10/12, 10)]  -- quickly vanishes at depth   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0@@ -513,10 +513,10 @@ electricFence = ItemKind   { isymbol  = 'f'   , iname    = "electric fence"-  , ifreq    = [("robot", 50), ("immobile robot", 50)]+  , ifreq    = [("robot", 10), ("immobile robot", 10)]   , iflavour = zipPlain [Blue]   , icount   = 1-  , irarity  = [(3 * 10/12, 0), (4 * 10/12, 2)]+  , irarity  = [(3 * 10/12, 0), (4 * 10/12, 10)]   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0@@ -531,10 +531,10 @@ activeFence = ItemKind   { isymbol  = 'f'   , iname    = "active fence"-  , ifreq    = [("robot", 50), ("immobile robot", 50)]+  , ifreq    = [("robot", 30), ("immobile robot", 30)]   , iflavour = zipPlain [Red]   , icount   = 1-  , irarity  = [(5 * 10/12, 0), (6 * 10/12, 2)]+  , irarity  = [(5 * 10/12, 0), (6 * 10/12, 3)]   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0@@ -550,10 +550,10 @@ steamFaucet = ItemKind   { isymbol  = 'f'   , iname    = "steam faucet"-  , ifreq    = [("robot", 50), ("immobile robot", 90)]+  , ifreq    = [("robot", 30), ("immobile robot", 50)]   , iflavour = zipPlain [BrBlue]   , icount   = 1-  , irarity  = [(5, 2)]+  , irarity  = [(1, 3), (5 * 10/12, 3)]   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0@@ -568,10 +568,10 @@ biogasFaucet = ItemKind   { isymbol  = 'f'   , iname    = "biogas faucet"-  , ifreq    = [("robot", 50), ("immobile robot", 120)]+  , ifreq    = [("robot", 10), ("immobile robot", 30)]   , iflavour = zipPlain [BrGreen]   , icount   = 1-  , irarity  = [(5, 2)]+  , irarity  = [(1, 10), (5 * 10/12, 10)]   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0@@ -586,10 +586,10 @@ medbotFaucet = ItemKind   { isymbol  = 'f'   , iname    = "nano medbot faucet"-  , ifreq    = [("robot", 50), ("immobile robot", 270)]+  , ifreq    = [("robot", 10), ("immobile robot", 90)]   , iflavour = zipPlain [BrYellow]   , icount   = 1-  , irarity  = [(5, 2)]+  , irarity  = [(1, 10), (5 * 10/12, 10)]   , iverbHit = "thud"   , iweight  = 80000   , idamage  = toDmg 0
GameDefinition/Content/ItemKindBlast.hs view
@@ -88,11 +88,10 @@   , iaspects = [AddShine $ intToDice $ n `div` 2]   , ieffects = [ RefillCalm (-1) | n >= 5 ]                ++ [ DropBestWeapon | n >= 5]-               ++ [ OnSmash (Explode $ toGroupName-                             $ "firecracker" <+> tshow (n - 1))+               ++ [ OnSmash $ Explode+                    $ toGroupName $ "firecracker" <+> tshow (n - 1)                   | n > 2 ]-  , ifeature = [ ToThrow $ ThrowMod (5 + 3 * n) (10 + 100 `div` n)-               , Fragile, Identified ]+  , ifeature = [toVelocity 5, Fragile, Identified]   , idesc    = ""   , ikit     = []   }@@ -143,7 +142,7 @@   { isymbol  = '`'   , iname    = "mist"   , ifreq    = [("calming mist", 1)]-  , iflavour = zipFancy [White]+  , iflavour = zipFancy [BrGreen]   , icount   = 8   , irarity  = [(1, 1)]   , iverbHit = "sooth"@@ -175,7 +174,7 @@   { isymbol  = '`'   , iname    = "mist"  -- powerful, so slow and narrow   , ifreq    = [("healing mist", 1)]-  , iflavour = zipFancy [White]+  , iflavour = zipFancy [BrGreen]   , icount   = 8   , irarity  = [(1, 1)]   , iverbHit = "revitalize"@@ -191,7 +190,7 @@   { isymbol  = '`'   , iname    = "mist"   , ifreq    = [("healing mist 2", 1)]-  , iflavour = zipFancy [White]+  , iflavour = zipFancy [BrGreen]   , icount   = 8   , irarity  = [(1, 1)]   , iverbHit = "revitalize"@@ -207,7 +206,7 @@   { isymbol  = '`'   , iname    = "mist"   , ifreq    = [("wounding mist", 1)]-  , iflavour = zipFancy [White]+  , iflavour = zipFancy [BrRed]   , icount   = 8   , irarity  = [(1, 1)]   , iverbHit = "devitalize"@@ -287,7 +286,7 @@   { isymbol  = '*'   , iname    = "hoof glue"   , ifreq    = [("glue", 1)]-  , iflavour = zipPlain [BrYellow]+  , iflavour = zipPlain [Cyan]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "glue"@@ -303,7 +302,7 @@   { isymbol  = '`'   , iname    = "single spark"   , ifreq    = [("single spark", 1)]-  , iflavour = zipPlain [BrYellow]+  , iflavour = zipPlain [BrWhite]   , icount   = 1   , irarity  = [(1, 1)]   , iverbHit = "spark"@@ -319,7 +318,7 @@   { isymbol  = '`'   , iname    = "spark"   , ifreq    = [("spark", 1)]-  , iflavour = zipPlain [BrYellow]+  , iflavour = zipPlain [BrWhite]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "scorch"@@ -342,7 +341,7 @@   { isymbol  = '`'   , iname    = "dense shower"   , ifreq    = [("dense shower", 1)]-  , iflavour = zipFancy [Red]+  , iflavour = zipFancy [Green]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "strengthen"@@ -358,7 +357,7 @@   { isymbol  = '`'   , iname    = "sparse shower"   , ifreq    = [("sparse shower", 1)]-  , iflavour = zipFancy [Blue]+  , iflavour = zipFancy [Red]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "weaken"@@ -439,7 +438,7 @@   { isymbol  = '`'   , iname    = "haste spray"   , ifreq    = [("haste spray", 1)]-  , iflavour = zipPlain [BrRed]+  , iflavour = zipPlain [BrYellow]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "haste"@@ -471,7 +470,7 @@   { isymbol  = '`'   , iname    = "eye drop"   , ifreq    = [("eye drop", 1)]-  , iflavour = zipPlain [BrGreen]+  , iflavour = zipPlain [BrCyan]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "cleanse"@@ -519,7 +518,7 @@   { isymbol  = '`'   , iname    = "eye shine"   , ifreq    = [("eye shine", 1)]-  , iflavour = zipPlain [BrRed]+  , iflavour = zipPlain [Cyan]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "smear"@@ -586,7 +585,7 @@   { isymbol  = '`'   , iname    = "poison cloud"   , ifreq    = [("poison cloud", 1)]-  , iflavour = zipPlain [Green]+  , iflavour = zipPlain [BrMagenta]   , icount   = 16   , irarity  = [(1, 1)]   , iverbHit = "poison"@@ -602,7 +601,7 @@   { isymbol  = '`'   , iname    = "mist"   , ifreq    = [("anti-slow mist", 1)]-  , iflavour = zipPlain [BrRed]+  , iflavour = zipPlain [BrYellow]   , icount   = 8   , irarity  = [(1, 1)]   , iverbHit = "propel"
GameDefinition/Content/ItemKindOrgan.hs view
@@ -34,7 +34,7 @@ -- * Human weapon organs  fist = ItemKind-  { isymbol  = '%'+  { isymbol  = ','   , iname    = "fist"   , ifreq    = [("fist", 100)]   , iflavour = zipPlain [Red]@@ -133,8 +133,7 @@   , ifreq    = [("thorn", 100)]   , icount   = 2 + d 3   , iverbHit = "impale"-  , idamage  = toDmg $ 1 * d 1-  , ieffects = [RefillHP (-2)]+  , idamage  = toDmg $ 1 * d 3   , ifeature = [Identified, Meleeable]  -- not Durable   , idesc    = ""   }@@ -230,7 +229,7 @@ -- * Armor organs  armoredSkin = ItemKind-  { isymbol  = '%'+  { isymbol  = ','   , iname    = "armored skin"   , ifreq    = [("armored skin", 100)]   , iflavour = zipPlain [Red]
GameDefinition/Content/ModeKind.hs view
@@ -335,10 +335,8 @@                  , ( playerMonster                    , [] )                  , ( playerAnimal-                   , -- Fun from the start to avoid empty initial level:-                     [ (3, 5 + d 2, "animal")  -- many, because no spawning-                     -- Optional huge battle at the end:-                     , (12, 100, "mobile animal") ] )+                   , -- Optional huge battle at the end:+                     [(12, 100, "mobile animal")] )                  , ( playerRobot                    , [] ) ]  -- gentle introduction   , rosterEnemy = [ ("Spacefarer", "Alien Hierarchy")
GameDefinition/Content/PlaceKind.hs view
@@ -727,8 +727,8 @@ cells = PlaceKind   { psymbol  = '#'   , pname    = "cells"-  , pfreq    = [ ("rogue", 50), ("arena", 50), (" laboratory", 50)-               , ("empty", 50), ("noise", 50) ]+  , pfreq    = [ ("rogue", 20), ("arena", 20), (" laboratory", 20)+               , ("empty", 20), ("noise", 20), ("zoo", 200) ]   , prarity  = [(1, 10), (10, 10)]   , pcover   = CReflect   , pfence   = FWall@@ -738,8 +738,9 @@                ]   , poverride = []   }-cells2 = cells-  { pfreq = ("zoo", 400) : pfreq cells+cells2 = cells  -- this one is distinct enough from others+  { pfreq    = [ ("rogue", 50), ("arena", 50), (" laboratory", 50)+               , ("empty", 50), ("noise", 50), ("zoo", 500) ]   , ptopLeft = [ "··#"                , "··#"                , "##·"@@ -752,15 +753,13 @@                ]   } cells4 = cells-  { pfreq = ("zoo", 400) : pfreq cells-  , ptopLeft = [ "··#"+  { ptopLeft = [ "··#"                , "·##"                , "#··"                ]   } cells5 = cells-  { pfreq = ("zoo", 400) : pfreq cells-  , ptopLeft = [ "··#"+  { ptopLeft = [ "··#"                , "·#·"                , "##·"                ]
GameDefinition/Content/RuleKind.hs view
@@ -68,6 +68,6 @@   , rfirstDeathEnds = False   , rwriteSaveClips = 1000   , rleadLevelClips = 50-  , rscoresFile = "scores"+  , rscoresFile = "Allure.scores"   , rnearby = 20   }
GameDefinition/PLAYING.md view
@@ -17,7 +17,12 @@ at this stage of game development, but the game is already playable and winnable. Contributions are welcome. +If the game window is too large for your screen or you experience+other technical issues, please consult+[README.md](https://github.com/AllureOfTheStars/Allure/blob/master/README.md)+or describe your problem on gitter or the issue tracker. + Heroes ------ @@ -190,8 +195,8 @@ as explained in section [Heroes](#heroes) above.  Commands for saving and exiting the current game, starting a new game,-setting options for the current game and challenges for the next game, etc.,-are listed in the Main Menu, brought up by the `ESC` key.+configuring convenience settings for the current game and challenges+for the next game are listed in the Main Menu, brought up by the `ESC` key. Game difficulty, from the challenges menu, determines hitpoints at birth for any actor of any UI-using faction. The "lone wolf" challenge mode reduces player's starting actors to exactly@@ -212,7 +217,6 @@ along a single staircase and also of guarding staircases against enemies from other levels or, inversely, avoiding the staircases. - Monsters -------- @@ -261,8 +265,11 @@ The displayed figures are rounded, but the game internally keeps track of minute fractions of HP. +The stress of combat drains Calm, gradually limiting the use of items and,+if Calm reaches zero and the actor is sufficiently impressed by his foes,+making him defect and surrender to their domination. Whenever the monster's or hero's hit points reach zero, the combatant dies.-When the last hero dies, the scenario ends in defeat.+When the last hero dies or is dominated, the scenario ends in defeat.   On Winning and Dying
GameDefinition/TieKnot.hs view
@@ -67,7 +67,7 @@         let (r, _) = R.randomR (0, length l - 1) initialGen         in case splitAt r l of           (pre, i : post) -> pre ++ boostItem i : post-          _ -> assert `failure` l+          _ -> error $  "" `showFailure` l       boostedItems = boostList Content.ItemKind.items       cdefsItem =         Content.ItemKind.cdefs
Makefile view
@@ -142,7 +142,7 @@ 	dist/build/Allure/Allure --dbgMsgSer --boostRandomItem --newGame 7 --noAnim --maxFps 100000 --frontendTeletype --benchmark --stopAfterSeconds 60 --dumpInitRngs --automateAll --keepAutomated --gameMode "battle survival" 2> /tmp/teletypetest.log  testDefense-medium:-	dist/build/Allure/Allure --dbgMsgSer --boostRandomItem --newGame 9 --noAnim --maxFps 100000 --frontendTeletype --benchmark --stopAfterSeconds 500 --dumpInitRngs --automateAll --keepAutomated --gameMode defense 2> /tmp/teletypetest.log+	dist/build/Allure/Allure --dbgMsgSer --boostRandomItem --newGame 9 --noAnim --maxFps 100000 --frontendTeletype --benchmark --stopAfterSeconds 300 --dumpInitRngs --automateAll --keepAutomated --gameMode defense 2> /tmp/teletypetest.log  test-short-new: 	dist/build/Allure/Allure --dbgMsgSer --boostRandomItem --newGame 5 --savePrefix raid --dumpInitRngs --automateAll --keepAutomated --gameMode raid --frontendTeletype --stopAfterSeconds 2 2> /tmp/teletypetest.log
test/test.hs view
@@ -1,3 +1,7 @@+import Prelude ()++import Game.LambdaHack.Common.Prelude+ import TieKnot  main :: IO ()