-- | Actor (or rather actor body trunk) definitions.
module Content.ItemKindActor
  ( actors
  ) where

import Prelude ()

import Game.LambdaHack.Core.Prelude

import Game.LambdaHack.Content.ItemKind
import Game.LambdaHack.Definition.Ability
import Game.LambdaHack.Definition.Color
import Game.LambdaHack.Definition.Defs
import Game.LambdaHack.Definition.Flavour

actors :: [ItemKind]
actors :: [ItemKind]
actors =
  [ItemKind
warrior, ItemKind
warrior2, ItemKind
warrior3, ItemKind
warrior4, ItemKind
warrior5, ItemKind
scout, ItemKind
ranger, ItemKind
escapist, ItemKind
ambusher, ItemKind
soldier, ItemKind
civilian, ItemKind
civilian2, ItemKind
civilian3, ItemKind
civilian4, ItemKind
civilian5, ItemKind
eye, ItemKind
fastEye, ItemKind
nose, ItemKind
elbow, ItemKind
torsor, ItemKind
goldenJackal, ItemKind
griffonVulture, ItemKind
skunk, ItemKind
armadillo, ItemKind
gilaMonster, ItemKind
rattlesnake, ItemKind
hyena, ItemKind
komodoDragon, ItemKind
alligator, ItemKind
rhinoceros, ItemKind
beeSwarm, ItemKind
hornetSwarm, ItemKind
thornbush]
  -- LH-specific
  [ItemKind] -> [ItemKind] -> [ItemKind]
forall a. [a] -> [a] -> [a]
++ [ItemKind
geyserBoiling, ItemKind
geyserArsenic, ItemKind
geyserSulfur]

warrior,    warrior2, warrior3, warrior4, warrior5, scout, ranger, escapist, ambusher, soldier, civilian, civilian2, civilian3, civilian4, civilian5, eye, fastEye, nose, elbow, torsor, goldenJackal, griffonVulture, skunk, armadillo, gilaMonster, rattlesnake, hyena, komodoDragon, alligator, rhinoceros, beeSwarm, hornetSwarm, thornbush :: ItemKind
-- LH-specific
geyserBoiling, geyserArsenic, geyserSulfur :: ItemKind

-- Note that the actors that appear in the crawl scenario should
-- be generated with at most ordinary ammo. Otherwise, farming them
-- may be rational though boring endeavour. Any exceptions to that
-- should be well thought of. E.g., unique guaranteed items on bosses
-- are safe, just as restricted kinds of weak items.

-- * Hunams

warrior :: ItemKind
warrior = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = '@'
  , iname :: Text
iname    = "warrior"  -- modified if initial actors in hero faction
  , ifreq :: Freqs ItemKind
ifreq    = [("hero", 100), ("mobile", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrWhite]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 5)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 80  -- partially from clothes and first aid
               , Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 70
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 20
               , Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkWait 1  -- can lurk
               , Skill -> Dice -> Aspect
AddSkill Skill
SkProject 2  -- can lob
               , Skill -> Dice -> Aspect
AddSkill Skill
SkApply 2  -- can even apply periodic items
               , Skill -> Dice -> Aspect
AddSkill Skill
SkOdor 1
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = ""  -- "A hardened veteran of combat."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("fist", CStore
COrgan), ("foot", CStore
COrgan)
               , ("eye 6", CStore
COrgan), ("ear 3", CStore
COrgan)
               , ("sapient brain", CStore
COrgan) ]
  }
warrior2 :: ItemKind
warrior2 = ItemKind
warrior
  { iname :: Text
iname    = "adventurer"
  -- , idesc    = ""
  }
warrior3 :: ItemKind
warrior3 = ItemKind
warrior
  { iname :: Text
iname    = "blacksmith"
  -- , idesc    = ""
  }
warrior4 :: ItemKind
warrior4 = ItemKind
warrior
  { iname :: Text
iname    = "forester"
  -- , idesc    = ""
  }
warrior5 :: ItemKind
warrior5 = ItemKind
warrior
  { iname :: Text
iname    = "scientist"
  -- , idesc    = ""
  }

scout :: ItemKind
scout = ItemKind
warrior
  { iname :: Text
iname    = "scout"
  , ifreq :: Freqs ItemKind
ifreq    = [("scout hero", 100), ("mobile", 1)]
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = ItemKind -> [(GroupName ItemKind, CStore)]
ikit ItemKind
warrior
               [(GroupName ItemKind, CStore)]
-> [(GroupName ItemKind, CStore)] -> [(GroupName ItemKind, CStore)]
forall a. [a] -> [a] -> [a]
++ [ ("add sight", CStore
CEqp)
                  , ("armor ranged", CStore
CEqp)
                  , ("add nocto 1", CStore
CInv) ]
  -- , idesc    = ""
  }
ranger :: ItemKind
ranger = ItemKind
warrior
  { iname :: Text
iname    = "ranger"
  , ifreq :: Freqs ItemKind
ifreq    = [("ranger hero", 100), ("mobile", 1)]
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = ItemKind -> [(GroupName ItemKind, CStore)]
ikit ItemKind
warrior
               [(GroupName ItemKind, CStore)]
-> [(GroupName ItemKind, CStore)] -> [(GroupName ItemKind, CStore)]
forall a. [a] -> [a] -> [a]
++ [ ("armor ranged", CStore
CEqp)
                  , ("weak arrow", CStore
CInv) ]
  -- , idesc    = ""
  }
escapist :: ItemKind
escapist = ItemKind
warrior
  { iname :: Text
iname    = "escapist"
  , ifreq :: Freqs ItemKind
ifreq    = [("escapist hero", 100), ("mobile", 1)]
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = ItemKind -> [(GroupName ItemKind, CStore)]
ikit ItemKind
warrior
               [(GroupName ItemKind, CStore)]
-> [(GroupName ItemKind, CStore)] -> [(GroupName ItemKind, CStore)]
forall a. [a] -> [a] -> [a]
++ [ ("add sight", CStore
CEqp)
                  , ("armor ranged", CStore
CEqp)
                  , ("weak arrow", CStore
CInv)  -- mostly for probing
                  , ("light source", CStore
CInv)
                  , ("wooden torch", CStore
CInv)
                  , ("blanket", CStore
CInv) ]
  -- , idesc    = ""
  }
ambusher :: ItemKind
ambusher = ItemKind
warrior
  { iname :: Text
iname    = "ambusher"
  , ifreq :: Freqs ItemKind
ifreq    = [("ambusher hero", 100), ("mobile", 1)]
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = ItemKind -> [(GroupName ItemKind, CStore)]
ikit ItemKind
warrior  -- dark and numerous, so more kit without exploring
               [(GroupName ItemKind, CStore)]
-> [(GroupName ItemKind, CStore)] -> [(GroupName ItemKind, CStore)]
forall a. [a] -> [a] -> [a]
++ [ ("ring of opportunity sniper", CStore
CEqp)
                  , ("any arrow", CStore
CSha)
                  , ("weak arrow", CStore
CInv)
                  , ("explosive", CStore
CSha)
                  , ("light source", CStore
CEqp)
                  , ("wooden torch", CStore
CInv) ]
  -- , idesc    = ""
  }
soldier :: ItemKind
soldier = ItemKind
warrior
  { iname :: Text
iname    = "soldier"
  , ifreq :: Freqs ItemKind
ifreq    = [("soldier hero", 100), ("mobile", 1)]
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = ItemKind -> [(GroupName ItemKind, CStore)]
ikit ItemKind
warrior
               [(GroupName ItemKind, CStore)]
-> [(GroupName ItemKind, CStore)] -> [(GroupName ItemKind, CStore)]
forall a. [a] -> [a] -> [a]
++ [ ("starting weapon", CStore
CEqp)
                  , ("explosive", CStore
CSha) ]
  -- , idesc    = ""
  }

civilian :: ItemKind
civilian = ItemKind
warrior
  { iname :: Text
iname    = "clerk"
  , ifreq :: Freqs ItemKind
ifreq    = [("civilian", 100), ("mobile", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrBlack]
  -- , idesc    = ""
  }
civilian2 :: ItemKind
civilian2 = ItemKind
civilian
  { iname :: Text
iname    = "hairdresser"
  -- , idesc    = ""
  }
civilian3 :: ItemKind
civilian3 = ItemKind
civilian
  { iname :: Text
iname    = "lawyer"
  -- , idesc    = ""
  }
civilian4 :: ItemKind
civilian4 = ItemKind
civilian
  { iname :: Text
iname    = "peddler"
  -- , idesc    = ""
  }
civilian5 :: ItemKind
civilian5 = ItemKind
civilian
  { iname :: Text
iname    = "tax collector"
  -- , idesc    = ""
  }

-- * Monsters

-- They have bright colours, because they are not natural.

eye :: ItemKind
eye = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'e'
  , iname :: Text
iname    = "reducible eye"
  , ifreq :: Freqs ItemKind
ifreq    = [ ("monster", 100), ("mobile", 1)
               , ("mobile monster", 100), ("scout monster", 10) ]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipFancy [Color
BrRed]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(3, 0), (4, 10), (10, 8)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 16, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 70
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 20, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAggression 1
               , Skill -> Dice -> Aspect
AddSkill Skill
SkProject 2  -- can lob
               , Skill -> Dice -> Aspect
AddSkill Skill
SkApply 1  -- can even use cultural artifacts
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Under your stare, it reduces to the bits that define its essence. Under introspection, the bits slow down and solidify into an arbitrary form again. It must be huge inside, for holographic principle to manifest so overtly."  -- holographic principle is an anachronism for XIX or most of XX century, but "the cosmological scale effects" is too weak
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("lash", CStore
COrgan), ("pupil", CStore
COrgan)  -- at least one non-timed
               , ("sapient brain", CStore
COrgan) ]  -- no hearing, it's all eyes
  }
fastEye :: ItemKind
fastEye = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'j'
  , iname :: Text
iname    = "injective jaw"
  , ifreq :: Freqs ItemKind
ifreq    = [ ("monster", 100), ("mobile", 1)
               , ("mobile monster", 100), ("scout monster", 60) ]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipFancy [Color
BrBlue]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(3, 0), (4, 6), (10, 12)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 5, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 70
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 30, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAggression 1
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Hungers but never eats. Bites but never swallows. Burrows its own image through, but never carries anything back."  -- rather weak: not about injective objects, but puny, concrete, injective functions  --- where's the madness in that?
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("tooth", CStore
COrgan), ("lip", CStore
COrgan)
               , ("speed gland 10", CStore
COrgan)
               , ("vision 6", CStore
COrgan), ("ear 3", CStore
COrgan)
               , ("sapient brain", CStore
COrgan) ]
  }
nose :: ItemKind
nose = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind  -- depends solely on smell
  { isymbol :: Char
isymbol  = 'n'
  , iname :: Text
iname    = "point-free nose"
  , ifreq :: Freqs ItemKind
ifreq    = [("monster", 100), ("mobile", 1), ("mobile monster", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipFancy [Color
BrGreen]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(3, 0), (4, 5), (10, 7)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 30, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 30
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 18, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAggression 1
               , Skill -> Dice -> Aspect
AddSkill Skill
SkProject (-1)  -- can't project
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "No mouth, yet it devours everything around, constantly sniffing itself inward; pure movement structure, no constant point to focus one's maddened gaze on."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("nose tip", CStore
COrgan), ("lip", CStore
COrgan)
               , ("nostril", CStore
COrgan)
               , ("sapient brain", CStore
COrgan) ]  -- no sight nor hearing
  }
elbow :: ItemKind
elbow = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'e'
  , iname :: Text
iname    = "commutative elbow"
  , ifreq :: Freqs ItemKind
ifreq    = [ ("monster", 100), ("mobile", 1)
               , ("mobile monster", 100), ("scout monster", 30) ]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipFancy [Color
BrMagenta]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(3, 0), (4, 1), (10, 12)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 8, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 80
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 20, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkProject 2  -- can lob
               , Skill -> Dice -> Aspect
AddSkill Skill
SkApply 1  -- can even use cultural artifacts
               , Skill -> Dice -> Aspect
AddSkill Skill
SkMelee (-1)
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "An arm strung like a bow. A few edges, but none keen enough. A few points, but none piercing. Deadly objects zip out of the void."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("speed gland 5", CStore
COrgan), ("bark", CStore
COrgan)
               , ("vision 12", CStore
COrgan), ("ear 8", CStore
COrgan)
                   -- too powerful to get stronger sight
               , ("sapient brain", CStore
COrgan)
               , ("any arrow", CStore
CSha), ("any arrow", CStore
CInv)
               , ("weak arrow", CStore
CInv), ("weak arrow", CStore
CInv) ]
  }
torsor :: ItemKind
torsor = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'T'
  , iname :: Text
iname    = "Forgetful Torsor"
  , ifreq :: Freqs ItemKind
ifreq    = [("monster", 100), ("mobile", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipFancy [Color
BrCyan]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(9, 0), (10, 1000)]  -- unique
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Flag -> Aspect
SetFlag Flag
Unique
               , Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 300, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 100
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 15, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAggression 3
               , Skill -> Dice -> Aspect
AddSkill Skill
SkProject 2  -- can lob
               , Skill -> Dice -> Aspect
AddSkill Skill
SkApply 1  -- can even use cultural artifacts
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-1)  -- can't exit the gated level; a boss,
                                        -- but can dig rubble, ice
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "A principal homogeneous manifold, that acts freely and with enormous force, but whose stabilizers are trivial, making it rather helpless without a support group."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("right torsion", CStore
COrgan), ("left torsion", CStore
COrgan)
               , ("pupil", CStore
COrgan), ("tentacle", CStore
COrgan)
               , ("ear 8", CStore
COrgan)
               , ("sapient brain", CStore
COrgan)
               , ("gem", CStore
CInv), ("gem", CStore
CInv), ("gem", CStore
CInv), ("gem", CStore
CInv) ]
  }
-- "ground x" --- for immovable monster that can only tele or prob travel
-- pullback
-- skeletal

-- * Animals

-- They need rather strong melee, because they don't use items.
-- They have dull colors, except for yellow, because there is no dull variant.

goldenJackal :: ItemKind
goldenJackal = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind  -- basically a much smaller and slower hyena
  { isymbol :: Char
isymbol  = 'j'
  , iname :: Text
iname    = "golden jackal"
  , ifreq :: Freqs ItemKind
ifreq    = [ ("animal", 100), ("mobile", 1), ("mobile animal", 100)
               , ("scavenger", 50) ]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrYellow]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 4), (10, 2)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 13000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 15, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 70
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 24, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "An opportunistic predator, feeding on carrion and the weak."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("small jaw", CStore
COrgan)
               , ("eye 6", CStore
COrgan), ("nostril", CStore
COrgan), ("ear 8", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
griffonVulture :: ItemKind
griffonVulture = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'v'
  , iname :: Text
iname    = "griffon vulture"
  , ifreq :: Freqs ItemKind
ifreq    = [ ("animal", 100), ("mobile", 1), ("mobile animal", 100)
               , ("scavenger", 30) ]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrYellow]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 3), (10, 3)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 13000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 15, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 80
                   -- enough Calm to summon twice only if not attacked at all;
                   -- loses a lot of sight after summoning
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 22, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-2)  -- can't use normal stairs nor doors
               , Skill -> Dice -> Aspect
AddSkill Skill
SkFlying 10  -- flies slowly, but far
               , Flag -> Aspect
SetFlag Flag
Durable ]
      -- Animals don't have leader, usually, so even if only one on level,
      -- it pays the communication overhead, so the speed is higher to get
      -- them on par with human leaders moving solo. Common random double moves,
      -- on either side, are just too bothersome.
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "It soars high above, searching for vulnerable prey."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("screeching beak", CStore
COrgan)  -- in reality it grunts and hisses
               , ("small claw", CStore
COrgan)
               , ("eye 8", CStore
COrgan), ("ear 8", CStore
COrgan)
                   -- can't shoot, so strong sight is OK
               , ("animal brain", CStore
COrgan) ]
  }
skunk :: ItemKind
skunk = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 's'
  , iname :: Text
iname    = "hog-nosed skunk"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
White]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 8), (5, 1)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 4000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 13, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 30
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 22, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-2)  -- can't use stairs nor doors
               , Skill -> Dice -> Aspect
AddSkill Skill
SkOdor 5  -- and no smell skill, to let it leave smell
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Its only defence is the terrible stench."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("scent gland", CStore
COrgan)
               , ("small claw", CStore
COrgan), ("snout", CStore
COrgan)
               , ("eye 3", CStore
COrgan), ("ear 6", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
armadillo :: ItemKind
armadillo = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'a'
  , iname :: Text
iname    = "giant armadillo"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Brown]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 7)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 13, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 30
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 20, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-2)  -- can't use normal stairs nor doors
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "When threatened, it rolls into a ball."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("hooked claw", CStore
COrgan), ("snout", CStore
COrgan)
               , ("armored skin", CStore
COrgan), ("armored skin", CStore
COrgan)
               , ("eye 3", CStore
COrgan), ("nostril", CStore
COrgan), ("ear 6", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
gilaMonster :: ItemKind
gilaMonster = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'g'
  , iname :: Text
iname    = "Gila monster"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Magenta]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(2, 5), (10, 2)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 15, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 50
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 18, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-2)  -- can't use normal stairs nor doors
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Numbing venom ensures that even the fastest prey has no escape."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("venom tooth", CStore
COrgan), ("small claw", CStore
COrgan)
               , ("eye 3", CStore
COrgan), ("nostril", CStore
COrgan), ("ear 6", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
rattlesnake :: ItemKind
rattlesnake = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 's'
  , iname :: Text
iname    = "rattlesnake"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Brown]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(5, 1), (10, 7)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 28, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 60
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 16, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-2)  -- can't use normal stairs nor doors
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Beware its rattle - it serves as a warning of an agonising death."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("venom fang", CStore
COrgan)  -- when on cooldown, it's weaponless
               , ("rattle", CStore
COrgan)
               , ("eye 3", CStore
COrgan), ("nostril", CStore
COrgan), ("ear 6", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
hyena :: ItemKind
hyena = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'h'
  , iname :: Text
iname    = "spotted hyena"
  , ifreq :: Freqs ItemKind
ifreq    = [ ("animal", 100), ("mobile", 1), ("mobile animal", 100)
               , ("scavenger", 20) ]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrYellow]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(4, 1), (10, 5)]  -- gets summoned often, so low base rarity
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 60000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 23, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 70
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 32, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Skulking in the shadows, waiting for easy prey."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("jaw", CStore
COrgan)
               , ("eye 6", CStore
COrgan), ("nostril", CStore
COrgan), ("ear 8", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
komodoDragon :: ItemKind
komodoDragon = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'k'
  , iname :: Text
iname    = "Komodo dragon"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrRed]  -- speedy, so bright red
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(9, 0), (10, 11)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 40, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 60
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 17, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAggression 1  -- match the description
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Larger and more aggressive than any other lizard, but as easily recovering from wounds as its lesser cousins."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("large tail", CStore
COrgan), ("jaw", CStore
COrgan)
               , ("hooked claw", CStore
COrgan)
               , ("speed gland 5", CStore
COrgan), ("armored skin", CStore
COrgan)
               , ("eye 3", CStore
COrgan), ("nostril", CStore
COrgan), ("ear 3", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
alligator :: ItemKind
alligator = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'a'
  , iname :: Text
iname    = "alligator"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Blue]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(9, 0), (10, 12)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 55, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 70
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 18, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSwimming 100  -- swims better than walks
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "An armored predator from the dawn of time. You better not get within its reach."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("huge tail", CStore
COrgan), ("large jaw", CStore
COrgan)
               , ("small claw", CStore
COrgan)
               , ("armored skin", CStore
COrgan)
               , ("eye 6", CStore
COrgan), ("ear 8", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }
rhinoceros :: ItemKind
rhinoceros = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'R'
  , iname :: Text
iname    = "Maddened Rhinoceros"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Brown]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(2, 0), (3, 1000), (4, 0)]  -- unique
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Flag -> Aspect
SetFlag Flag
Unique
               , Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 90, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 60
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 27, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAggression 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-1)  -- can't use normal stairs nor dig;
                                        -- a weak miniboss
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "The last of its kind. Blind with rage. Charges at deadly speed."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("rhino horn", CStore
COrgan), ("snout", CStore
COrgan)
               , ("armored skin", CStore
COrgan)
               , ("eye 3", CStore
COrgan), ("ear 8", CStore
COrgan)
               , ("animal brain", CStore
COrgan) ]
  }

-- * Non-animal animals

beeSwarm :: ItemKind
beeSwarm = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'b'
  , iname :: Text
iname    = "bee swarm"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Brown]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 3), (10, 4)]
  , iverbHit :: Text
iverbHit = "buzz"
  , iweight :: Int
iweight  = 1000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 8, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 60
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 30, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2  -- armor in sting
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-2)  -- can't use normal stairs nor doors
               , Skill -> Dice -> Aspect
AddSkill Skill
SkWait (-2)  -- can't brace, sleep and lurk
               , Skill -> Dice -> Aspect
AddSkill Skill
SkFlying 10  -- flies slowly, but far
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Every bee would die for the queen."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("bee sting", CStore
COrgan)  -- weaponless when it's used up
               , ("vision 6", CStore
COrgan), ("ear 6", CStore
COrgan)
               , ("insect mortality", CStore
COrgan), ("animal brain", CStore
COrgan) ]
  }
hornetSwarm :: ItemKind
hornetSwarm = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'h'
  , iname :: Text
iname    = "hornet swarm"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 100), ("mobile", 1), ("mobile animal", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Magenta]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(5, 1), (10, 4)]  -- should be many, because die after a time
  , iverbHit :: Text
iverbHit = "buzz"
  , iweight :: Int
iweight  = 1000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkArmorMelee 80, Skill -> Dice -> Aspect
AddSkill Skill
SkArmorRanged 40
               , Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 8, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 70
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 30, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkAlter (-2)  -- can't use normal stairs nor doors
               , Skill -> Dice -> Aspect
AddSkill Skill
SkWait (-2)  -- can't brace, sleep and lurk
               , Skill -> Dice -> Aspect
AddSkill Skill
SkFlying 10  -- flies slowly, but far
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "A vicious cloud of stings and hate."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("sting", CStore
COrgan)  -- when on cooldown, it's weaponless
               , ("vision 6", CStore
COrgan), ("ear 6", CStore
COrgan)
               , ("insect mortality", CStore
COrgan), ("animal brain", CStore
COrgan) ]
  }
thornbush :: ItemKind
thornbush = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 't'
  , iname :: Text
iname    = "thornbush"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 20), ("immobile animal", 20)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Brown]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 13)]
  , iverbHit :: Text
iverbHit = "scrape"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 20, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 999
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 22, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkWait 1, Skill -> Dice -> Aspect
AddSkill Skill
SkMelee 1  -- no brain
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Each branch bears long, curved thorns."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [ ("thorn", CStore
COrgan)  -- after all run out, it's weaponless
               , ("bark", CStore
COrgan) ]
  }
geyserBoiling :: ItemKind
geyserBoiling = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'g'
  , iname :: Text
iname    = "geyser"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 8), ("immobile animal", 30)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Blue]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 10), (10, 6)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 10, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 999
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 11, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2
               , Skill -> Dice -> Aspect
AddSkill Skill
SkWait 1, Skill -> Dice -> Aspect
AddSkill Skill
SkMelee 1  -- no brain
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "A jet of acidic water, hot enough to melt flesh."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [("boiling vent", CStore
COrgan), ("boiling fissure", CStore
COrgan)]
  }
geyserArsenic :: ItemKind
geyserArsenic = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'g'
  , iname :: Text
iname    = "arsenic geyser"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 8), ("immobile animal", 40)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Cyan]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 10), (10, 6)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 20, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 999
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 22, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2, Skill -> Dice -> Aspect
AddSkill Skill
SkShine 3
               , Skill -> Dice -> Aspect
AddSkill Skill
SkWait 1, Skill -> Dice -> Aspect
AddSkill Skill
SkMelee 1  -- no brain
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "The sharp scent betrays the poison within the spray."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [("arsenic vent", CStore
COrgan), ("arsenic fissure", CStore
COrgan)]
  }
geyserSulfur :: ItemKind
geyserSulfur = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = 'g'
  , iname :: Text
iname    = "sulfur geyser"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal", 8), ("immobile animal", 120)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrYellow]  -- exception, animal with bright color
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 10), (10, 6)]
  , iverbHit :: Text
iverbHit = "thud"
  , iweight :: Int
iweight  = 80000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 20, Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm 999
               , Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed 22, Skill -> Dice -> Aspect
AddSkill Skill
SkNocto 2, Skill -> Dice -> Aspect
AddSkill Skill
SkShine 3
               , Skill -> Dice -> Aspect
AddSkill Skill
SkWait 1, Skill -> Dice -> Aspect
AddSkill Skill
SkMelee 1  -- no brain
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "The pool boils and bubbles, stinking of rotten eggs. Despite the smell, these waters purify and strengthen."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = [("sulfur vent", CStore
COrgan), ("sulfur fissure", CStore
COrgan)]
  }