packages feed

Allure 0.6.0.0 → 0.6.1.0

raw patch · 15 files changed

+113/−65 lines, 15 filesdep ~LambdaHack

Dependency ranges changed: LambdaHack

Files

Allure.cabal view
@@ -3,9 +3,9 @@ -- for standards guiding when and how versions should be incremented. -- http://www.haskell.org/haskellwiki/Package_versioning_policy -- PVP summary:+-+------- breaking API changes---             | | +----- non-breaking API additions+--             | | +----- minor or non-breaking API additions --             | | | +--- code changes with no API change-version:       0.6.0.0+version:       0.6.1.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.@@ -72,7 +72,7 @@                       Content.TileKind,                       TieKnot,                       Paths_Allure-  build-depends:      LambdaHack >= 0.6.0.0 && < 0.6.1.0,+  build-depends:      LambdaHack >= 0.6.1.0 && < 0.6.2.0,                       template-haskell >= 2.6,                        async      >= 2,@@ -110,6 +110,21 @@   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,+                      TieKnot,+                      Paths_Allure   build-depends:      LambdaHack,                       template-haskell >= 2.6, 
CHANGELOG.md view
@@ -1,3 +1,17 @@+## [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+- major engine bugfix: hack around vanishing texture on Windows+- major engine bugfix: hack around SDL backends not thread-safe on Windows+- update wrt the only breaking API change: specify font dir in game rules content+- let the game use its own fonts, not fonts from the sample game in library+- tweak some item creation to occur in character's pack, not on the ground+- slightly balance various content+- make sure the 'resolution' effect is not a drawback+- make artifact weapon rarities more regular+- avoid creating lit, open dungeon at the bottom, where foes have ranged weapons+- number scenarios in user descriptions+ ## [v0.6.0.0, aka 'Too much to tell'](https://github.com/AllureOfTheStars/Allure/compare/v0.5.0.0...v0.6.0.0)  - add and modify a lot of content: items, tiles, embedded items, scenarios
GameDefinition/Content/CaveKind.hs view
@@ -75,14 +75,14 @@ arena = rogue   { csymbol       = 'A'   , cname         = "Recreational deck"-  , cfreq         = [ ("default random", 40), ("deep random", 30)-                    , ("caveArena", 1) ]+  , cfreq         = [("default random", 40), ("caveArena", 1)]   , cgrid         = DiceXY (2 + d 2) (d 3)   , cminPlaceSize = DiceXY (2 * d 2 + 4) 6   , cmaxPlaceSize = DiceXY 16 12   , cdarkChance   = 49 + d 10  -- almost all rooms dark (1 in 10 lit)   -- Light is not too deadly, because not many obstructions and so-  -- foes visible from far away and few foes have ranged combat.+  -- foes visible from far away and few foes have ranged combat+  -- at shallow depth.   , cnightChance  = 0  -- always day   , cauxConnects  = 1   , cmaxVoid      = 1%8@@ -99,7 +99,7 @@   } arena2 = arena   { cname         = "Casino"-  , cfreq         = [("deep random", 10)]+  , cfreq         = [("deep random", 30)]   , cdarkChance   = 41 + d 10  -- almost all rooms lit (1 in 10 dark)   -- Trails provide enough light for fun stealth.   , cnightChance  = 51  -- always night@@ -133,7 +133,7 @@ empty = rogue   { csymbol       = 'E'   , cname         = "Construction site"-  , cfreq         = [("deep random", 10), ("caveEmpty", 1)]+  , cfreq         = [("caveEmpty", 1)]   , cgrid         = DiceXY 1 1   , cminPlaceSize = DiceXY 12 12   , cmaxPlaceSize = DiceXY 48 32  -- favour large rooms@@ -186,6 +186,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   , cplaceFreq    = [("noise", 1), ("mine", 99)]   , cstairFreq    = [("gated staircase", 100)]   }
GameDefinition/Content/ItemKind.hs view
@@ -40,11 +40,11 @@  items :: [ItemKind] items =-  [sandstoneRock, dart, spike, slingStone, slingBullet, paralizingProj, harpoon, net, light1, light2, light3, blanket, flask1, flask2, flask3, flask4, flask5, flask6, flask7, flask8, flask9, flask10, flask11, flask12, flask13, flask14, flask15, flask16, flask17, flask18, flask19, flask20, potion1, potion2, potion3, potion4, potion5, potion6, potion7, potion8, potion9, potion10, scroll1, scroll2, scroll3, scroll4, scroll5, scroll6, scroll7, scroll8, scroll9, scroll10, scroll11, scroll12, scroll13, jumpingPole, sharpeningTool, seeingItem, motionScanner, gorget, necklace1, necklace2, necklace3, necklace4, necklace5, necklace6, necklace7, necklace8, necklace9, imageItensifier, sightSharpening, ring1, ring2, ring3, ring4, ring5, ring6, ring7, ring8, armorLeather, armorMail, gloveFencing, gloveGauntlet, gloveJousting, buckler, shield, dagger, daggerDropBestWeapon, hammer, hammerParalyze, hammerSpark, sword, swordImpress, swordNullify, halberd, halberdPushActor, wand1, wand2, gem1, gem2, gem3, gem4, currency]+  [sandstoneRock, dart, spike, slingStone, slingBullet, paralizingProj, harpoon, net, light1, light2, light3, blanket, flask1, flask2, flask3, flask4, flask5, flask6, flask7, flask8, flask9, flask10, flask11, flask12, flask13, flask14, flask15, flask16, flask17, flask18, flask19, flask20, potion1, potion2, potion3, potion4, potion5, potion6, potion7, potion8, potion9, potion10, scroll1, scroll2, scroll3, scroll4, scroll5, scroll6, scroll7, scroll8, scroll9, scroll10, scroll11, scroll12, scroll13, jumpingPole, sharpeningTool, seeingItem, motionScanner, gorget, necklace1, necklace2, necklace3, necklace4, necklace5, necklace6, necklace7, necklace8, necklace9, imageItensifier, sightSharpening, ring1, ring2, ring3, ring4, ring5, ring6, ring7, ring8, armorLeather, armorMail, gloveFencing, gloveGauntlet, gloveJousting, buckler, shield, dagger, daggerDropBestWeapon, hammer, hammerParalyze, hammerSpark, sword, swordImpress, swordNullify, halberd, halberdPushActor, wand1, wand2, gem1, gem2, gem3, gem4, gem5, currency]   -- Allure-specific   ++ [needle, constructionHooter] -sandstoneRock,    dart, spike, slingStone, slingBullet, paralizingProj, harpoon, net, light1, light2, light3, blanket, flask1, flask2, flask3, flask4, flask5, flask6, flask7, flask8, flask9, flask10, flask11, flask12, flask13, flask14, flask15, flask16, flask17, flask18, flask19, flask20, potion1, potion2, potion3, potion4, potion5, potion6, potion7, potion8, potion9, potion10, scroll1, scroll2, scroll3, scroll4, scroll5, scroll6, scroll7, scroll8, scroll9, scroll10, scroll11, scroll12, scroll13, jumpingPole, sharpeningTool, seeingItem, motionScanner, gorget, necklace1, necklace2, necklace3, necklace4, necklace5, necklace6, necklace7, necklace8, necklace9, imageItensifier, sightSharpening, ring1, ring2, ring3, ring4, ring5, ring6, ring7, ring8, armorLeather, armorMail, gloveFencing, gloveGauntlet, gloveJousting, buckler, shield, dagger, daggerDropBestWeapon, hammer, hammerParalyze, hammerSpark, sword, swordImpress, swordNullify, halberd, halberdPushActor, wand1, wand2, gem1, gem2, gem3, gem4, currency :: ItemKind+sandstoneRock,    dart, spike, slingStone, slingBullet, paralizingProj, harpoon, net, light1, light2, light3, blanket, flask1, flask2, flask3, flask4, flask5, flask6, flask7, flask8, flask9, flask10, flask11, flask12, flask13, flask14, flask15, flask16, flask17, flask18, flask19, flask20, potion1, potion2, potion3, potion4, potion5, potion6, potion7, potion8, potion9, potion10, scroll1, scroll2, scroll3, scroll4, scroll5, scroll6, scroll7, scroll8, scroll9, scroll10, scroll11, scroll12, scroll13, jumpingPole, sharpeningTool, seeingItem, motionScanner, gorget, necklace1, necklace2, necklace3, necklace4, necklace5, necklace6, necklace7, necklace8, necklace9, imageItensifier, sightSharpening, ring1, ring2, ring3, ring4, ring5, ring6, ring7, ring8, armorLeather, armorMail, gloveFencing, gloveGauntlet, gloveJousting, buckler, shield, dagger, daggerDropBestWeapon, hammer, hammerParalyze, hammerSpark, sword, swordImpress, swordNullify, halberd, halberdPushActor, wand1, wand2, gem1, gem2, gem3, gem4, gem5, currency :: ItemKind -- Allure-specific needle, constructionHooter :: ItemKind @@ -223,7 +223,7 @@   , ifreq    = [("useful", 100), ("light source", 100), ("wooden torch", 1)]   , iflavour = zipPlain [Brown]   , icount   = d 2-  , irarity  = [(1, 10)]+  , irarity  = [(1, 15)]   , iverbHit = "scorch"   , iweight  = 1000   , idamage  = toDmg 0@@ -347,6 +347,7 @@   , ieffects = [ ELabel "of resolution"                , toOrganActorTurn "resolute" (200 + d 50)                    -- long, for scouting and has to recharge+               , RefillCalm 60  -- not to make it a drawback, via @calmEnough@                , OnSmash (Explode "resolution dust") ]   } flask7 = flask@@ -974,8 +975,8 @@   , ifreq    = [("useful", 100)]   , iflavour = zipFancy [BrRed]   , irarity  = [(1, 3), (10, 3)]-  , iweight  = 500-  , idamage  = toDmg $ 4 * d 1+  , iweight  = 1000+  , idamage  = toDmg $ 3 * d 1   , iaspects = [ AddHurtMelee $ dl 4 - 6 |*| 3                , AddArmorMelee $ 2 + d 2 + dl 2 |*| 5                , AddArmorRanged $ dl 2 |*| 3 ]@@ -1050,7 +1051,7 @@ daggerDropBestWeapon = dagger   { iname    = "Double Dagger"   , ifreq    = [("treasure", 20)]-  , irarity  = [(1, 2), (10, 4)]+  , irarity  = [(1, 1), (10, 4)]   -- The timeout has to be small, so that the player can count on the effect   -- occuring consistently in any longer fight. Otherwise, the effect will be   -- absent in some important fights, leading to the feeling of bad luck,@@ -1086,7 +1087,7 @@ hammerParalyze = hammer   { iname    = "Concussion Hammer"   , ifreq    = [("treasure", 20)]-  , irarity  = [(5, 2), (10, 4)]+  , irarity  = [(5, 1), (10, 6)]   , idamage  = toDmg $ 8 * d 1   , iaspects = iaspects hammer ++ [Timeout $ d 2 + 3 - dl 2 |*| 2]   , ieffects = ieffects hammer ++ [Unique, Recharging $ Paralyze 10]@@ -1094,9 +1095,9 @@ hammerSpark = hammer   { iname    = "Grand Smithhammer"   , ifreq    = [("treasure", 20)]-  , irarity  = [(5, 2), (10, 4)]+  , irarity  = [(5, 1), (10, 6)]   , idamage  = toDmg $ 8 * d 1-  , iaspects = iaspects hammer ++ [Timeout $ d 4 + 4 - dl 4 |*| 2]+  , iaspects = iaspects hammer ++ [AddShine 3, Timeout $ d 4 + 4 - dl 4 |*| 2]   , ieffects = ieffects hammer ++ [Unique, Recharging $ Explode "spark"]   } sword = ItemKind@@ -1120,7 +1121,7 @@   { isymbol  = symbolEdged   , iname    = "Master's Sword"   , ifreq    = [("treasure", 20)]-  , irarity  = [(5, 1), (10, 4)]+  , irarity  = [(5, 1), (10, 6)]   , iaspects = [Timeout $ d 4 + 5 - dl 4 |*| 2]   , ieffects = ieffects sword                ++ [Unique, Recharging Impress, Recharging (DetectActor 3)]@@ -1129,7 +1130,7 @@   { isymbol  = symbolEdged   , iname    = "Gutting Sword"   , ifreq    = [("treasure", 20)]-  , irarity  = [(5, 1), (10, 4)]+  , irarity  = [(5, 1), (10, 6)]   , iaspects = [Timeout $ d 4 + 5 - dl 4 |*| 2]   , ieffects = ieffects sword                ++ [ Unique@@ -1213,15 +1214,18 @@   , ikit     = []   } gem1 = gem-  { irarity  = [(3 * 10/12, 0), (10, 12)]+  { irarity  = [(3, 0), (10, 12)]   } gem2 = gem-  { irarity  = [(5 * 10/12, 0), (10, 14)]+  { irarity  = [(5, 0), (10, 14)]   } gem3 = gem-  { irarity  = [(7 * 10/12, 0), (10, 16)]+  { irarity  = [(7, 0), (10, 16)]   } gem4 = gem+  { irarity  = [(9, 0), (10, 50)]+  }+gem5 = gem   { iname    = "stimpack"   , iflavour = zipPlain [BrYellow]   , irarity  = [(1, 40), (10, 40)]
GameDefinition/Content/ItemKindActor.hs view
@@ -550,7 +550,7 @@ steamFaucet = ItemKind   { isymbol  = 'f'   , iname    = "steam faucet"-  , ifreq    = [("robot", 50), ("immobile robot", 60)]+  , ifreq    = [("robot", 50), ("immobile robot", 90)]   , iflavour = zipPlain [BrBlue]   , icount   = 1   , irarity  = [(5, 2)]@@ -586,7 +586,7 @@ medbotFaucet = ItemKind   { isymbol  = 'f'   , iname    = "nano medbot faucet"-  , ifreq    = [("robot", 50), ("immobile robot", 300)]+  , ifreq    = [("robot", 50), ("immobile robot", 270)]   , iflavour = zipPlain [BrYellow]   , icount   = 1   , irarity  = [(5, 2)]
GameDefinition/Content/ItemKindBlast.hs view
@@ -430,6 +430,7 @@   , idamage  = toDmg 0   , iaspects = []   , ieffects = [toOrganActorTurn "resolute" (3 + d 3)]+                 -- short enough duration that @calmEnough@ not a big problem   , ifeature = [toLinger 10, Fragile, Identified]   , idesc    = ""   , ikit     = []
GameDefinition/Content/ItemKindEmbed.hs view
@@ -120,7 +120,7 @@   , iname    = "big fire"   , ifreq    = [("big fire", 1)]   , ieffects = [ Burn 2, Explode "spark"-               , CreateItem CGround "wooden torch" TimerNone ]+               , CreateItem CInv "wooden torch" TimerNone ]   , ifeature = [Identified, Durable]   , idesc    = ""   , ikit     = []@@ -174,7 +174,7 @@   , iweight  = 10000   , idamage  = toDmg 0   , iaspects = []-  , ieffects = [Temporary "be caught in an updraft", Teleport 20]+  , ieffects = [Temporary "be caught in an updraft", Teleport 5]   , ifeature = [Identified]  -- not Durable, springs at most once   , idesc    = ""   , ikit     = []@@ -271,7 +271,7 @@   , iweight  = 10000   , idamage  = toDmg 0   , iaspects = []-  , ieffects = [ CreateItem CGround "any scroll" TimerNone+  , ieffects = [ CreateItem CInv "any scroll" TimerNone                , Detect 20                , Paralyze 20                , toOrganActorTurn "drunk" (20 + d 5) ]
GameDefinition/Content/ItemKindOrgan.hs view
@@ -144,7 +144,7 @@   , icount   = 5 + d 5   , iverbHit = "hiss at"   , idamage  = toDmg $ 1 * d 1-  , iaspects = [AddHurtMelee 20]+  , iaspects = [AddHurtMelee 20]  -- decreasing as count decreases   , ieffects = [InsertMove $ 1 * d 3]   , ifeature = [Identified, Meleeable]  -- not Durable   , idesc    = ""@@ -160,16 +160,17 @@   { iname    = "fissure"   , ifreq    = [("medbot fissure", 100)]   , icount   = 2 + d 2-  , ieffects = [RefillHP 6]+  , idamage  = toDmg 0+  , ieffects = [RefillHP 5]   } beeSting = fist   { iname    = "bee sting"   , ifreq    = [("bee sting", 100)]   , icount   = 1   , iverbHit = "sting"-  , idamage  = toDmg $ 1 * d 1+  , idamage  = toDmg 0   , iaspects = [AddArmorMelee 90, AddArmorRanged 45]-  , ieffects = [Paralyze 6, RefillHP 5]+  , ieffects = [Paralyze 6, RefillHP 4]   , ifeature = [Identified, Meleeable]  -- not Durable   , idesc    = "Painful, but beneficial."   }
GameDefinition/Content/ModeKind.hs view
@@ -46,7 +46,7 @@  raid = ModeKind  -- mini-crawl   { msymbol = 'r'-  , mname   = "raid"+  , mname   = "raid (1)"   , mfreq   = [("raid", 1), ("campaign scenario", 1)]   , mroster = rosterRaid   , mcaves  = cavesRaid@@ -55,7 +55,7 @@  brawl = ModeKind  -- sparse melee in daylight, with shade for melee ambush   { msymbol = 'k'-  , mname   = "brawl"+  , mname   = "brawl (2)"   , mfreq   = [("brawl", 1), ("campaign scenario", 1)]   , mroster = rosterBrawl   , mcaves  = cavesBrawl@@ -72,7 +72,7 @@ -- and that's their only role, so a small party makes sense. shootout = ModeKind  -- sparse ranged in daylight   { msymbol = 's'-  , mname   = "shootout"+  , mname   = "shootout (3)"   , mfreq   = [("shootout", 1), ("campaign scenario", 1)]   , mroster = rosterShootout   , mcaves  = cavesShootout@@ -81,16 +81,16 @@  escape = ModeKind  -- asymmetric ranged and stealth race at night   { msymbol = 'e'-  , mname   = "escape"+  , mname   = "escape (4)"   , mfreq   = [("escape", 1), ("campaign scenario", 1)]   , mroster = rosterEscape   , mcaves  = cavesEscape-  , mdesc   = "Bloodied spaceship deed in hand notwithstanding, you can reach the derelict spaceliner only via a shuttle from the Triton Spaceport across the city. After hours of being chased in the opposite direction towards the border wall, you sneak back and make a desperate dash through the very territory of the pursuing gang. Any valuables you come upon in this public park turned miscreant lair will be fair compensation for your personal losses, but you need to find the exit before the foes find you."+  , mdesc   = "Bloodied spaceship deed in hand notwithstanding, you can reach the derelict spaceliner only via a shuttle from the Triton Spaceport across the city. After hours of being chased in the opposite direction towards the border wall, you sneak back and make a desperate dash through the very territory of the pursuing gang. Any valuables you come upon in this public park turned miscreant lair will be fair compensation for your losses, but you need to find the exit before the foes find you."   }  zoo = ModeKind  -- asymmetric crowd melee at night   { msymbol = 'b'-  , mname   = "zoo"+  , mname   = "zoo (5)"   , mfreq   = [("zoo", 1), ("campaign scenario", 1)]   , mroster = rosterZoo   , mcaves  = cavesZoo@@ -107,7 +107,7 @@ -- shoots (and often also scouts) and others just gather ammo. ambush = ModeKind  -- dense ranged with reaction fire at night   { msymbol = 'm'-  , mname   = "ambush"+  , mname   = "ambush (6)"   , mfreq   = [("ambush", 1), ("campaign scenario", 1)]   , mroster = rosterAmbush   , mcaves  = cavesAmbush@@ -117,8 +117,7 @@ exploration = ModeKind   { msymbol = 'c'   , mname   = "crawl (long)"-  , mfreq   = [ ("crawl (long)", 1), ("exploration", 1)-              , ("campaign scenario", 1) ]+  , mfreq   = [("crawl", 1), ("exploration", 1), ("campaign scenario", 1)]   , mroster = rosterExploration   , mcaves  = cavesExploration   , mdesc   = "You get stranded while looting, with utmost satisfaction, the blasted bridge of an old and extravagantly luxurious cruise liner. The inert spaceship, supposedly long deserted and barely able to sustain life support, suddenly releases the shuttle you came in, lights up its ion engines, manoeuvres deftly off Triton orbit and heads purposefully away from Neptune. Your plan of battle is to break through the dilapidated decks to the auxiliary engineering and docking hub somewhere among the giant spaceship's uppermost levels. You are ready to fight and determined not to leave the ship without taking of its wealth what is rightfully yours. There are animal cries down below and ominous silence up above."@@ -190,43 +189,43 @@   in r {rosterList = f $ rosterList r}  screensaverRaid = raid-  { mname   = "auto-raid"+  { mname   = "auto-raid (1)"   , mfreq   = [("starting", 1), ("starting JS", 1), ("no confirms", 1)]   , mroster = screensave (AutoLeader False False) rosterRaid   }  screensaverBrawl = brawl-  { mname   = "auto-brawl"+  { mname   = "auto-brawl (2)"   , mfreq   = [("no confirms", 1)]   , mroster = screensave (AutoLeader False False) rosterBrawl   }  screensaverShootout = shootout-  { mname   = "auto-shootout"+  { mname   = "auto-shootout (3)"   , mfreq   = [("starting", 1), ("starting JS", 1), ("no confirms", 1)]   , mroster = screensave (AutoLeader False False) rosterShootout   }  screensaverEscape = escape-  { mname   = "auto-escape"+  { mname   = "auto-escape (4)"   , mfreq   = [("starting", 1), ("starting JS", 1), ("no confirms", 1)]   , mroster = screensave (AutoLeader False False) rosterEscape   }  screensaverZoo = zoo-  { mname   = "auto-zoo"+  { mname   = "auto-zoo (5)"   , mfreq   = [("no confirms", 1)]   , mroster = screensave (AutoLeader False False) rosterZoo   }  screensaverAmbush = ambush-  { mname   = "auto-ambush"+  { mname   = "auto-ambush (6)"   , mfreq   = [("no confirms", 1)]   , mroster = screensave (AutoLeader False False) rosterAmbush   }  screensaverExploration = exploration-  { mname   = "auto-crawl"+  { mname   = "auto-crawl (long)"   , mfreq   = [("no confirms", 1)]   , mroster = screensave (AutoLeader False False) rosterExploration   }
GameDefinition/Content/RuleKind.hs view
@@ -18,7 +18,7 @@ import System.IO (readFile)  -- Cabal-import qualified Paths_Allure as Self (version)+import qualified Paths_Allure as Self (getDataFileName, version)  import Game.LambdaHack.Common.ContentDef import Game.LambdaHack.Content.RuleKind@@ -40,6 +40,9 @@   , rname = "standard Allure of the Stars ruleset"   , rfreq = [("standard", 100)]   , rtitle = "Allure of the Stars"+  , rfontDir = $(do+      x <- qRunIO (Self.getDataFileName "GameDefinition/fonts")+      lift x)   , rexeVersion = Self.version   -- The strings containing the default configuration file   -- included from config.ui.default.@@ -49,8 +52,8 @@       qAddDependentFile path       x <- qRunIO (readFile path)       lift x)-  -- ASCII art for the Main Menu. Only pure 7-bit ASCII characters are-  -- allowed. The picture should be exactly 24 rows by 80 columns.+  -- ASCII art for the Main Menu. Only pure 7-bit ASCII characters are allowed+  -- for the art part. The picture should be exactly 24 rows by 80 columns.   -- For a different screen size, the picture is centered and padded.   -- with spaces. When displayed in the Main Menu screen, the picture   -- is overwritten with game and engine version strings and keybindings.
GameDefinition/Content/TileKind.hs view
@@ -394,7 +394,7 @@   { tsymbol  = ';'   , tname    = "faint fog"   , tfreq    = [ ("lit fog", 1), ("emptySet", 5), ("shootoutSetLit", 20)-               , ("noiseSet", 10), ("fogClumpOver_f_Lit", 60) ]+               , ("fogClumpOver_f_Lit", 60) ]       -- lit fog is OK for shootout, because LOS is mutual, as opposed       -- to dark fog, and so camper has little advantage, especially       -- on big maps, where he doesn't know on which side of fog patch to hide
GameDefinition/Main.hs view
@@ -14,7 +14,9 @@ import Game.LambdaHack.Common.Prelude  import Control.Concurrent.Async+import qualified Control.Exception as Ex import System.Environment (getArgs)+import System.Exit  import TieKnot @@ -25,4 +27,10 @@   args <- getArgs   -- Avoid the bound thread that would slow down the communication.   a <- async $ tieKnot args-  wait a+  ex <- waitCatch a+  case ex of+    Right () -> return ()+    Left e -> case Ex.fromException e of+      Just ExitSuccess ->+        exitSuccess  -- we are in the main thread, so it really exits+      _ -> Ex.throwIO e
GameDefinition/PLAYING.md view
@@ -201,8 +201,16 @@ restriction in the final 'crawl' scenario).  For a person new to roguelikes, the 'raid' scenario offers a gentle-introduction. The subsequent game scenarios gradually introduce squad combat,-stealth, opportunity fire, asymmetric battles and more.+introduction. The subsequent game scenarios gradually introduce+squad combat, stealth, opportunity fire, asymmetric battles and more.+Starting from the second scenario, the player controls a whole team+of characters and will develop his repertoire of squad formations,+varying, depending on environment, the bound length, the preferred+rendezvous locations and the use of light sources. The last scenario+takes place in a multi-floor setting, giving player the choice+of exploration of a single level at a time or portions of many levels+along a single staircase and also of guarding staircases against+enemies from other levels or, inversely, avoiding the staircases.   Monsters
Makefile view
@@ -174,10 +174,7 @@   build-binary-common:-# LH should be installed with that:-#	cabal configure --disable-library-profiling --disable-profiling -f-release --datadir=. --datasubdir=.-#	cabal build-#	cabal register --inplace+	cabal install --disable-library-profiling --disable-profiling --disable-documentation -f-release --only-dependencies 	cabal configure --disable-library-profiling --disable-profiling -f-release --prefix=/ --datadir=. --datasubdir=. 	cabal build exe:Allure 	mkdir -p AllureOfTheStars/GameDefinition/fonts
README.md view
@@ -40,12 +40,10 @@ you may prefer to use a native binary for your architecture, if it exists.  Pre-compiled game binaries for some platforms are available through-the release page[11] and from the Nix Packages Collection[12] (Linux)-and AppVeyor (Windows 32bit[17] and Windows 64bit[18]; note that these-no longer work on Windows XP, since Cygwin and MSYS2 dropped support for XP;-they may also be broken in other ways; feedback and help appreciated).-To use a pre-compiled binary archive, unpack it and run the executable-in the unpacked directory.+the release page[11] and from AppVeyor (Windows 32bit[17] and Windows 64bit[18];+note that these no longer work on Windows XP, since Cygwin and MSYS2+dropped support for XP). To use a pre-compiled binary archive,+unpack it and run the executable in the unpacked directory.  On Linux, make sure you have the SDL2 libraries suite installed on your system (e.g., libsdl2, libsdl2-ttf). For Windows, the SDL2 and all other needed@@ -185,7 +183,6 @@  [10]: http://github.com/LambdaHack/LambdaHack [11]: https://github.com/AllureOfTheStars/Allure/releases/latest-[12]: http://hydra.nixos.org/search?query=Allure [13]: http://www.haskell.org/haskellwiki/GHC_under_Wine#Code_that_uses_gtk2hs [14]: http://www.edsko.net/2014/04/27/haskell-including-gtk-on-mavericks [15]: https://github.com/ghcjs/ghcjs